我是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)我的方法是否正确。我已经观察到这种字符串方法只在另一个地方设计vba中的VLOOKUPS
。它似乎最适合。
答案 0 :(得分:3)
修复代码
您应该使用Wend
而不是End While
作为循环。
清洁替代
但是你可以在一次拍摄中填写整个范围,如下所示
End(xlup)
从底部“循环”一个范围,而不是向下看End(xlDown)
(它不依赖于空格)Select
进一步说明
rng1
设置工作范围,从工作表 datasheet 中A列中最后一个使用过的单元格到A3 rng1.Offset(0, Range("N1").Column - 1)
将偏移量rng1(列A)的13列用于使用列N(即OFFSET A乘以14-1)进行公式插入"=VLOOKUP(RC[-1],'GICS Sub-industry codes'!R2C1:R155C2,2,FALSE)"
的N列所需的代码。 R1C1
发言,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