簡體   English   中英

VBA - 從另一個工作表中查找多行,粘貼為值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM