2012-10-22 219 views
1

我是Excel VBA的完整初学者。Excel VBA Vlookup问题

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

我已经使用了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 

我得到一个错误@结束时说“期望如果或选择或子...”

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

+0

= Selection.Value vlookup1String应该可能Selection.Formula = vlookup1String – Dan

+0

另外我不认为你的ActiveSheet.Cells做任何事情,你可以把它拿出来。 – Dan

+0

首先,确保工作表名称不太长,并避免使用VBA代码时出现空格。另外,请尝试选择。公式 – Ahmad

回答

3

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

清洁的替代
但是你可以在一个单杆填充整个范围如下

  1. 这是更好地“循环起来”使用End(xlup)从底部处于比瞧不起与End(xlDown) (这依赖于无空格)
  2. 你几乎永远不需要VBA

使用Select进一步说明

  1. rng1在片数据表设置的工作范围从A列中最后使用的小区A3
  2. rng1.Offset(0, Range("N1").Column - 1)说偏移RNG1(其为A列)由13列,以使用N列(即OFFSET A 14-1)用于公式插入
  3. 我使用宏记录器获取您需要在第N列的代码"=VLOOKUP(RC[-1],'GICS Sub-industry codes'!R2C1:R155C2,2,FALSE)"
  4. IN R1C1 speak,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 
+0

你能解释你的代码吗?我不能完全理解它。尤其是Offset的功能。我有几个这样的vlookups,我需要为我的数据表上的4-5个其他列创建,所以我需要重现相同的。谢谢:) – Vivek

+0

“数据表”工作表的N列单元格的值是通过查找列M中的单元格的值,在“GICS ..”表单的A列中搜索它并获取该行在列B中的相应值......这是你的逻辑现在正在做什么? – Vivek

+0

@ user1638796我已经添加了更多细节。希望能够帮助 – brettdj