2012-10-22 216 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