如何将vlookup应用于整列?

时间:2018-06-14 06:29:02

标签: excel vba

我想创建一个将vlookup公式应用于整个列的vlookup宏 我被困在这一行Range("K3").Formula = MyStringVar1,因为这只适用于单元格K3。非常感谢任何帮助:)

Sub vlookDemo()
    Dim MyStringVar1 As Variant
    Dim LastRow As Long

    LastRow = Range("C" & Rows.Count).End(xlUp).Row

    On Error Resume Next

     MyStringVar1 = Application.WorksheetFunction.VLookup(Range("D3:D" & LastRow), _
      Worksheets("ProductList").Range("A4:B294"), 2, False)

    On Error GoTo 0
    If IsEmpty(MyStringVar1) Then
        ""
    End If

    Range("K3").Formula = MyStringVar1

End Sub

1 个答案:

答案 0 :(得分:0)

我想你想要一个公式R1C1,如下所示:

.FormulaR1C1 = _
    "=IFERROR(VLOOKUP(RC4,ProductList!R4C1:R294C2, 2, FALSE),"""")"

应用于范围变为:

Option Explicit
Public Sub PopulateFormulas()
    Dim lastRow As Long
    With ActiveSheet
        lastRow = .Range("C" & Rows.Count).End(xlUp).row

        .Range("K3:K" & lastRow).FormulaR1C1 = _
                                             "=IFERROR(VLOOKUP(RC4,ProductList!R4C1:R294C2, 2, FALSE),"""")"
    End With
End Sub

这导致表格中的公式如:

Sheet

第一个,在K3中,是:

=IFERROR(VLOOKUP($D3,ProductList!$A$4:$B$294, 2, FALSE),"")

这些将列K填充到最后一行(基于C列)。

R1C1公式表示使用相对引用,因此相同的公式可以应用于所有单元格,并将在其自己的行中拾取列D.查找范围必须具有固定的单元格引用,因此它不会移位。整个事情被包装在IFERROR中,如果找不到值,则用“”替换错误文本。

此问题中提供了有关R1C1的一些信息:What is the function of FormulaR1C1?