我有一個非常復雜的(在我看來)問題。
我有 2 張紙。一個名為 AssetName Sheet,另一個名為 AMP Sheet。
我有適當的邏輯,基本上說 if col. AssetName 表中的 B 與 AMP 表中名為 Name 的列匹配,從 AMP 表中提取 AMP ID 并將其粘貼到 AssetName 表的 E 列中(我知道,它已經變得復雜了......)。
例如,AssetName 表的名稱為 col。B 作為 USTomato3wheels_Ing_TO_Mobile。該邏輯在名稱列下的 AMP 表中找到了相同的名稱,現在將從 AMP 表中將關聯的 AMP ID 拉到 AssetName 表的 E 列中。
這是我的作業邏輯:
With Sheets("AssetName Sheet")
Const F As String = "=IFERROR(INDEX(OFFSET('AMP Sheet'!$A:$A,,MATCH(""ID"",'AMP Sheet'!$1:$1,0)-1)," & _
"MATCH(B1,OFFSET('AMP Sheet'!$A:$A,,MATCH(""Name"",'AMP Sheet'!$1:$1,0)-1),0)),"""")"
.Range("E1:E" & .Cells(Rows.Count, "E").End(xlUp).Row).Formula = F
If Range("B2") <> "" Then
.Range("E1").AutoFill .Range("E1:E" & .Cells(.Rows.Count, "B").End(xlUp).Row)
End If
End With
這是我正在努力弄清楚的。
我目前正在用我的邏輯填寫我的公式。我想修改我的邏輯以執行以下操作:
- 僅填寫空單元格,或更新現有的 AMP ID。例如,如果已經復制了一個 AMP ID,則不應將其清除,而是應在 AMP 表中有更新的匹配項時更新 AMP ID。
謝謝大家的幫助!
更新; 這就是我目前正在嘗試做的事情。遍歷每個單元格 --> 如果單元格為空,請應用公式 --> 移動到下一個單元格:
Dim startingLine2 As Double
startingLine2 = 2
With Sheets("AssetName Sheet")
Do While .Cells(startingLine2, 5) = "" And .Cells(startingLine2, 2) <> ""
Const F As String = "=IFERROR(INDEX(OFFSET('AMP Sheet'!$A:$A,,MATCH(""ID"",'AMP Sheet'!$1:$1,0)-1)," & _
"MATCH(B1,OFFSET('AMP Sheet'!$A:$A,,MATCH(""Name"",'AMP Sheet'!$1:$1,0)-1),0)),"""")"
'.Range("E1:E" & .Cells(Rows.Count, "E").End(xlUp).Row).Formula = F'
.Cells(startingLine2, 5).Formula = F
startingLine2 = startingLine2 1
Loop
End With
uj5u.com熱心網友回復:
我會跳過公式方法并Application.Match()在 VBA 中使用來執行查找。
未經測驗,但這樣的事情應該很接近:
Sub Tester()
Dim wb As Workbook, wsAN As Worksheet, wsAMP As Worksheet, c As Range, m, v, vCurr
Dim idCol, nameCol
'set up workbook and sheets
Set wb = ThisWorkbook
Set wsAN = wb.Worksheets("AssetName Sheet")
Set wsAMP = wb.Worksheets("AMP Sheet")
'find the column headers on AMP sheet
idCol = Application.Match("ID", wsAMP.Rows(1), 0)
nameCol = Application.Match("Name", wsAMP.Rows(1), 0)
'check column headers were found: exit if not
If IsError(idCol) Or IsError(nameCol) Then 'check headers were found
MsgBox "Column headers 'ID' and 'Name' are both needed on sheet 'AMP Sheet'", vbExclamation
Exit Sub
End If
Application.ScreenUpdating = False
For Each c In wsAN.Range("B1:B" & wsAN.Cells(Rows.Count, "B").End(xlUp).Row).Cells
m = Application.Match(c.Value, wsAMP.Columns(idCol), 0) 'find match in ID column
If Not IsError(m) Then ' `m` will be an error value if no match was made...
v = wsAMP.Cells(m, nameCol).Value 'pull the corresponding name
With c.EntireRow.Columns("E")
If .Value <> v Then .Value = v 'update colE if different value on AMP sheet
End With
End If
Next c
End Sub
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/490346.html
上一篇:VBA洗掉更改單元格的行除錯錯誤
