Excel VBA Vlookup问题

我是一个完整的Excel VBA初学者。

以下是我写的代码,它应该遍历表单中的一列,通过引用列值来填充值,并引用同一工作簿中的另一张表来查找正确的对应值。

我已经使用了一个While循环,所以我可以将这个VLOOKUPmacros应用到列中的每个单元格(只有查找值,更改,这应该是一个variables表示左侧的列):

 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 

我得到一个错误@结束时说“预期如果或select或分…”

1)我犯了一个语法错误?
2)我的方法是正确的吗? 我已经观察到这种string方法只能在另外一个地方用vbadeviseVLOOKUPS 。 这似乎是最合适的。

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

清洁select
但是你可以像下面那样用一个镜头填满整个范围

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

进一步解释

  1. rng1将工作表数据表中列A中最后使用的单元格的工作范围设置为A3
  2. rng1.Offset(0, Range("N1").Column - 1)表示偏移rng1(它是A列)13列,以便使用列N(即14-1的OFFSET A)
  3. 我使用macroslogging器来获取你需要在这个部分的第N列的代码"=VLOOKUP(RC[-1],'GICS Sub-industry codes'!R2C1:R155C2,2,FALSE)"
  4. R1C1RC[-1]表示引用同一行中的单元格,而左侧是一列。 所以在N3 ,公式将以=VLOOKUP(M4..) ,因此在N30 ,公式将以`= VLOOKUP(M30 ..)等开始

build议的代码

 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