首页 > 解决方案 > 如何使用二维数组作为查找填充列(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

谢谢!

标签: excelvba

解决方案


我建议将代码和数据分开(硬编码数据是一种非常糟糕的做法)。因此,硬编码数组中的分组是一个坏主意Arr=(Array("A", 1), Array("B",2), Array("C",3))。相反,您可能希望将此数据保存在(可能是隐藏的)工作表中。

所以你的GroupLookup工作表看起来像这样

column A    column B
A            1
B            2
C            3

然后您可以在数据表中使用简单的VLOOKUP 函数

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 方法查找该工作表中的组

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

推荐阅读