如何使用二维数组作为查询(VBA)填充列

时间:2019-01-18 13:18:24

标签: excel vba

我在电子表格中有一列具有一些值的列。我创建了一个数组,将这些值分配给一个组。我想使用从数组到最后一行的查找来填充第二列。

当前视图:

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

谢谢!

1 个答案:

答案 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