我有兩個 excel 檔案,我需要通過 VBA 使用 vlookup 功能將資料從一個 excel 檔案拉到另一個檔案中。我放置了以下代碼并嘗試使其動態化
第一段代碼如下,
Sub Lookup()
' Identifying first and last row
Const wsName As String = "TB"
Const hTitle As String = "India"
Dim wb As Workbook: Set wb = ThisWorkbook
Dim ws As Worksheet: Set ws = wb.Worksheets(wsName)
Dim hCell As Range
Set hCell = ws.Cells.Find(hTitle, , xlFormulas, xlWhole, xlByRows)
If hCell Is Nothing Then Exit Sub ' header not found
Dim Col As Long: Col = hCell.Column
Dim fRow As Long: fRow = hCell.Row
Dim lRow As Long: lRow = ws.Cells(ws.Rows.Count, Col).End(xlUp).Row
Debug.Print (fRow)
Debug.Print (lRow)
上面的代碼幫助我在 A 列中找到“印度”,并確定了它的第一行和最后一行。因為我可以在下一步中放置 vlookup。
要從不同的 excel 檔案放置 vlookup,我使用了以下代碼
'Placing vlookup
Dim rw As Long, x As Range
Dim extwbk As Workbook, twb As Workbook
Set twb = ThisWorkbook
Set extwbk = Workbooks.Open("D:\TB_1.xlsx")
Set x = extwbk.Worksheets("SAP TB").Range("B6:I1048576")
With twb.Sheets("TBs - Macros")
For rw = fRow To lRow
.Cells(rw, 10) = Application.Vlookup(.Cells(fRow, 2).Value2, x, 7, 0)
Next rw
End With
extwbk.Close savechanges:=False
End Sub
上面的代碼準確地選擇了第一個 Vlookup 值并將其粘貼到整個列范圍,我想我在放置回圈時犯了錯誤,因為只有第一個值被復制并粘貼到整個范圍。(如下圖所示)

可以看出,公式中正確選擇了 155,但是在整個列中都粘貼了相同的值。
示例資料在以下鏈接中共享。 https://drive.google.com/drive/folders/1inrofeT6v9P0ISEcmbswvpxMMCq5TaV0?usp=sharing 幫助將不勝感激!!!
uj5u.com熱心網友回復:
您不需要在該代碼區域進行任何迭代。VLookup如果函式的引數是具有更多行的范圍,則函式能夠回傳一個陣列。請更換這部分:
With twb.Sheets("TBs - Macros")
For rw = fRow To lRow
.Cells(rw, 10) = Application.Vlookup(.Cells(fRow, 2).Value2, x, 7, 0)
Next rw
End With
有了這個:
Dim wsM As Worksheet, rngVLk As Range, rngB As Range
Set wsM = Twb.Sheets("TBs - Macros")
Set rngVLk = wsM.Range("J" & fRow, "J" & lRow)
Set rngB = wsM.Range("B" & fRow, "B" & lRow)
rngVLk.value = Application.VLookup(rngB, x, 7, False)
為避免您遇到的此類問題,請Option Explicit在模塊頂部書寫。如果使用的變數之前沒有宣告過并且會顯示/選擇它,這不會讓你運行一段代碼。
uj5u.com熱心網友回復:
問題出在回圈中:
With twb.Sheets("TBs - Macros")
For rw = fRow To lRow
.Cells(rw, 10) = Application.Vlookup(.Cells(fRow, 2).Value2, x, 7, 0)
Next rw
End With
您正在將變數“rw”從“fRow”移動到“lRow”,但您從未使用 rw。
我認為你的代碼應該是:
With twb.Sheets("TBs - Macros")
For rw = fRow To lRow
.Cells(rw, 10) = Application.Vlookup(.Cells(rw, 2).Value2, x, 7, 0)
Next rw
End With
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/458954.html
上一篇:ExcelVBA重新格式化資料
下一篇:需要幫助在VBA中撰寫回圈
