我在电子表格中有一列具有一些值的列。我创建了一个数组,将这些值分配给一个组。我想使用从数组到最后一行的查找来填充第二列。
当前视图:
column A
A
B
C
A
...
目标视图:
column A column B
A 1
B 2
C 3
A 1
...
这是我到目前为止所拥有的:
Dim Array as Variant
Dim lr as long
numlookup=(Array("A", 1), Array("B",2), Array("C",3))
lr = Cells(Rows.Count, 1).End(xlUp).Row
Range("A2:A" & lr).Formula = "=IF(application.match(ActiveCell.Value, numlookup,0)".cell(numlookup,1).value
谢谢!
答案 0 :(得分:1)
我建议将代码和数据分开(硬编码数据是非常糟糕的做法)。因此,很难对数组Arr=(Array("A", 1), Array("B",2), Array("C",3))
中的分组进行硬编码。取而代之的是,您希望将此数据保存在(可能是隐藏的)工作表中。
所以您的GroupLookup
工作表看起来像这样
column A column B
A 1
B 2
C 3
然后,您可以在数据表中使用简单的VLOOKUP function
column A column B
A =VLOOKUP(A:A,GroupLookup!A:B,2,FALSE)
B
C
A
...
由于评论而编辑:
如果您需要使用VBA进行操作,请仍然将GroupLookup
放在工作表中而不是代码中!例如,进入您的加载项或将宏放置到任何地方,如下表所示:
所以您的GroupLookup
工作表看起来像这样
column A column B
A 1
B 2
C 3
然后使用WorksheetFunction.VLookup method
查找该工作表中的组Option Explicit
Sub WriteGroups()
Dim GroupLookup As Worksheet 'define workbook/sheet where the group lookup table is
Set GroupLookup = ThisWorkbook.Worksheets("GroupLookup")
With Workbooks("YourWb").ActiveSheet 'this is the sheet where the group is written to
Dim LastRow As Long
LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
Dim iRow As Long
For iRow = 1 To LastRow
On Error Resume Next
.Cells(iRow, "B").Value = Application.WorksheetFunction.Vlookup(.Cells(iRow, "A").Value, GroupLookup.Range("A:B"), 2, False)
If Err.Number <> 0 Then .Cells(iRow, "B").Value = CVErr(xlErrNA) 'write #NA if group not found
On Error Goto 0
Next iRow
End With
End Sub