Excel VBA Vlookup问题

时间:2012-10-22 11:01:00

标签: excel excel-vba ssis vba

我是Excel VBA的完全初学者。

以下是我编写的代码,它应该遍历工作表中的列,通过引用左边的列值来填充值,并引用同一工作簿中的另一个工作表来查找正确的相应值应该是什么

我使用了While循环,因此我可以将此VLOOKUP宏应用于列中的每个单元格(仅查找值,更改,这应该是表示左侧列的变量):

Dim result As String
Dim sheet As Worksheet
Dim rownum As Integer
Dim iterator As Integer
Dim lookup_value As String
Dim vlookupString1 As String

Set sheet = ActiveWorkbook.Sheets("datasheet")
rownum = sheet.Range("A1").End(xlDown).Row
Set iterator = 3

While iterator < rownum

lookup = "M" & iterator
vlookup1String = "=VLOOKUP(" & lookup & ",'GICS Sub-industry codes'!$A$2:$B$155,2,FALSE)"
With ActiveSheet.Cells
       Range("N" & iterator).Select
       Selection.Value = vlookup1String
End With
iterator = iterator + 1

End While

我在说“预期if或select或sub ...”

时收到错误@ end

1)我有语法错误吗?
2)我的方法是否正确。我已经观察到这种字符串方法只在另一个地方设计中的VLOOKUPS。它似乎最适合。

1 个答案:

答案 0 :(得分:3)

修复代码
您应该使用Wend而不是End While作为循环。

清洁替代
但是你可以在一次拍摄中填写整个范围,如下所示

  1. 最好使用End(xlup)从底部“循环”一个范围,而不是向下看End(xlDown)(它不依赖于空格)
  2. 您几乎不需要在VBA中使用Select
  3. 进一步说明

    1. rng1设置工作范围,从工作表 datasheet 中A列中最后一个使用过的单元格到A3
    2. rng1.Offset(0, Range("N1").Column - 1)将偏移量rng1(列A)的13列用于使用列N(即OFFSET A乘以14-1)进行公式插入
    3. 我使用宏录制器来获取此部分"=VLOOKUP(RC[-1],'GICS Sub-industry codes'!R2C1:R155C2,2,FALSE)"的N列所需的代码。
    4. IN R1C1发言,RC[-1]表示同一行中的单元格,但左侧是一列。因此,在N3中,公式将以=VLOOKUP(M4..)开头,因此在N30中,公式将以`= VLOOKUP(M30 ..)等
    5. 开头

      推荐代码

      Sub QuickFill()
      Dim ws As Worksheet
      Dim rng1 As Range
      Set ws = Sheets("datasheet")
      Set rng1 = ws.Range(ws.[a3], ws.Cells(Rows.Count, "A").End(xlUp))
      rng1.Offset(0, Range("N1").Column - 1).FormulaR1C1 = "=VLOOKUP(RC[-1],'GICS Sub-industry codes'!R2C1:R155C2,2,FALSE)"
      End Sub