![](/img/trans.png)
[英]Vlookup/Xlookup (loop?) data from another sheet, then paste as values
[英]VBA - Vlookup multiple rows from another sheet, paste as values
我一直在試圖解決這個問題,但必須運氣好。
我有一個從工作表2上的 A5 開始的列表。 我需要從 A5 向下查找每個項目,直到 A 列中的最后一個單元格(列表的大小永遠不會相同)。 數據/信息將在工作表1上。 然后粘貼(作為值)從單元格 C5 開始的數據,直到 A 列中最后一個相應的單元格。
工作表1上的數據很可能總是在 A:L 列中,但這可能會改變,所以我希望讓它動態,代碼可以知道數據在哪一列結束。 數據將始終從 A1 開始。
我不知道如何循環這個。 為了通過 VBA 使用啟用宏的按鈕來實現這一點,我開始編程。
提前致謝!
sub lookup
dim x as long, lastrow as long
lastrow = Sheet2.cells(rows.count,1).end(xlup).row
for x = 5 to lastrow
Sheet2.Range("C" & x) = worksheetfunction.xlookup arg1:=sheet2.range("A" & x), _
arg2:= Sheet1.Range("A:A"), arg3:=Sheet1.range("B:B")
next x
end sub
我認為您需要確定要返回的列,以使 VBA 變得簡單。 根據我認為你可以循環遍歷的列,直到找到你正在尋找的 header,但如果它總是在同一個地方會更好。
此代碼表示,對於 sheet2 的工作表長度,從 c5 xlookup 開始,查找您的密鑰,在工作表 1 上找到它,然后返回包含您的數據的列。
您似乎正在 Worksheet1 中查找行號,然后打算從該行傳輸所有可用數據。 這將是MATCH工作表 function 或在 VBA 中Find
的工作。 請嘗試以下代碼。
Sub MatchAndCopy()
' 213
Dim Rng As Range ' source data
Dim Arr As Variant ' one row of data
Dim Crit As Variant ' match criterium
Dim Fnd As Range ' match found
Dim R As Long ' loop counter: rows
Dim Spike As String ' collecting failures
Set Rng = Worksheets("Sheet1").UsedRange
Application.ScreenUpdating = False ' speed up execution
With Worksheets("Sheet2")
For R = 5 To .Cells(.Rows.Count, "A").End(xlUp).Row
Crit = .Cells(R, "A").Value
Set Fnd = Rng.Columns(1).Find(Crit, LookIn:=xlValues, LookAt:=xlWhole)
If Fnd Is Nothing Then
If Len(Spike) Then Spike = Spike & vbCr
Spike = Spike & String(5, " ") & """" & Crit & """ in row " & R
Else
Arr = Fnd.Offset(0, 1).Resize(1, Rng.Columns.Count - 1).Value
.Cells(R, 2).Resize(1, UBound(Arr, 2)).Value = Arr
End If
Next R
End With
Application.ScreenUpdating = True
If Len(Spike) Then
Spike = "Transfer of the following items failed." & vbCr & Spike
Else
Spike = "Data were transferred successfully and without errors."
End If
MsgBox Spike, vbInformation, "Transfer report"
End Sub
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.