1

我是 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

我在说“预期如果或选择或子...”时收到错误@end

1)我犯了语法错误吗?
2)我的方法是否正确。我只在另一个地方观察到了这种VLOOKUPS它似乎最适合。

4

1 回答 1

3

修复你的代码你不
应该使用你的循环。WendEnd While

更清洁的替代方案
但您可以一次填充整个范围,如下所示

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

进一步说明

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

建议代码

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
于 2012-10-22T11:16:44.317 回答