Excel VBA Vlookup问题
我是一个完整的Excel VBA初学者。
以下是我写的代码,它应该遍历表单中的一列,通过引用列值来填充值,并引用同一工作簿中的另一张表来查找正确的对应值。
我已经使用了一个While
循环,所以我可以将这个VLOOKUP
macros应用到列中的每个单元格(只有查找值,更改,这应该是一个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
但是你可以像下面那样用一个镜头填满整个范围
- 最好使用
End(xlup)
从底部“循环”一个范围,而End(xlup)
使用End(xlDown)
(它依赖于空格) - 几乎从不需要在VBA中使用
Select
进一步解释
-
rng1
将工作表数据表中列A中最后使用的单元格的工作范围设置为A3 -
rng1.Offset(0, Range("N1").Column - 1)
表示偏移rng1(它是A列)13列,以便使用列N(即14-1的OFFSET A) - 我使用macroslogging器来获取你需要在这个部分的第N列的代码
"=VLOOKUP(RC[-1],'GICS Sub-industry codes'!R2C1:R155C2,2,FALSE)"
。 - 在
R1C1
,RC[-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