如何确保VLOOKUP公式填满整个列?

时间:2016-05-19 13:14:11

标签: excel vba excel-vba vlookup

Sheets("MoM").Select

Range("H2").Select
ActiveCell.FormulaR1C1 = "=VLOOKUP(C[-7],'Table Array'!C[-7]:C[2],8,FALSE)"
Range("H2").Select
Selection.AutoFill Destination:=Range("H2:H" & Range("G" & Rows.Count).End  (xlUp).Row), Type:=xlFillSeries

公式中途停止,并且不会继续整个列的持续时间。请帮助!

1 个答案:

答案 0 :(得分:0)

看起来您使用Macro Recorder来获取此代码。您提供的代码是当您选择名为" MoM",然后是单元格H2,然后在Excel中键入=VLOOKUP()函数时所发生的代码。从那里,我认为你试图将VLOOKUP公式拖到右边并获取值。您的代码无法工作的原因是因为VLOOKUP正在尝试获取表数组的相对引用。但是,您需要绝对引用才能使代码正常工作。实际上,在" MoM"中,唯一值应该从一个单元转换到另一个单元。 sheet将是VLOOKUP函数的列引用。一种解决方案是使用以下循环来更改VLOOKUP函数的列索引:

Sub mcrFillRow()
'   Declare your variables
    Dim i As Integer
    Dim name As String
    Dim myTable As Range
'   Set some variables to make VLookup code easier to read
    name = Range("G2")
    Set myTable = Worksheets("Table Array").Range("F1:K7")
'   Clear any previous values
    Sheets("MoM").Range("H2:L2").Clear
'   For loop to go through the columns of the Table Array
    For i = 2 To 6
      Select Case i
          Case 2 'VLookup the second column
             Sheets("MoM").Range("H2") = WorksheetFunction.VLookup(name, myTable, i, False)
          Case 3 'VLookup the third column
             Sheets("MoM").Range("I2") = WorksheetFunction.VLookup(name, myTable, i, False)
          Case 4 'VLookup the fourth column
             Sheets("MoM").Range("J2") = WorksheetFunction.VLookup(name, myTable, i, False)
          Case 5 'VLookup the fifth column
             Sheets("MoM").Range("K2") = WorksheetFunction.VLookup(name, myTable, i, False)
          Case 6 'VLookup the sixth column
             Sheets("MoM").Range("L2") = WorksheetFunction.VLookup(name, myTable, i, False)
        End Select
    Next i
End Sub

对于Table ArrayMoM表,我在Excel中使用了以下设置:

enter image description here