簡體   English   中英

Excel宏在多列中查找

[英]Excel Macro Find in multiple columns

我有兩個工作表“帳戶”和“模擬”。 在第一張紙上,我有A到L列和1409行。 在第二頁中,用戶在單元格B4上輸入一個值。 我必須在第一張紙的A1:A1409范圍內搜索該值。 如果在A100中找到該值,則將A100到L100分配給第二張工作表中的單元格B8:B11,B16:B19和B22:B25。

如果在范圍A1:A1409中找不到它,那么我必須在范圍E1:E1409中進行搜索,然后將A100再次返回L100到第二張紙中的B8:B11,B16:B19和B22:B25。

嘗試創建一個excel 2010 vba宏來完成此操作。 任何幫助表示贊賞。

第一張

在此處輸入圖片說明

第二張

第二張

問候,拉加夫。

這段代碼會發生什么:

  • 從“模擬!B4”中獲取搜索值
  • 在“帳戶”上的A列中搜索
  • 如果找到匹配項,則將數據從“模擬”復制到“帳戶”(行),以匹配提供的圖片。
  • 如果在“ A”中找不到匹配項,請通過“ E”再次搜索
  • 如果在“ E”上找到匹配項,則將數據從“帳戶”(行)復制到“模擬”

碼:

Sub MockUpTranfer()
Dim lastRow As Long, lRow As Long
Dim source As String, target As String, tempVal As String
Dim match As Boolean

    match = False
    source = "Mock up"
    target = "Accounts"

    'Get last Row of target Sheet and temp value to search.
    lastRow = Sheets(target).Range("A" & Rows.count).End(xlUp).row
    tempVal = Sheets(source).Range("B4")

    'Check the search value against Column A on "Accounts"
    For lRow = 1 To lastRow
        'Copy from MockUp to Accounts
        If Sheets(target).Cells(lRow, "A") = tempVal Then
            Sheets(target).Cells(lRow, "B") = Sheets(source).Range("B10")
            Sheets(target).Cells(lRow, "C") = Sheets(source).Range("B8")
            Sheets(target).Cells(lRow, "D") = Sheets(source).Range("B9")
            Sheets(target).Cells(lRow, "E") = Sheets(source).Range("B19")
            Sheets(target).Cells(lRow, "F") = Sheets(source).Range("B18")
            Sheets(target).Cells(lRow, "G") = Sheets(source).Range("B17")
            Sheets(target).Cells(lRow, "H") = Sheets(source).Range("B16")
            Sheets(target).Cells(lRow, "I") = Sheets(source).Range("B22")
            Sheets(target).Cells(lRow, "J") = Sheets(source).Range("B23")
            Sheets(target).Cells(lRow, "K") = Sheets(source).Range("B24")
            Sheets(target).Cells(lRow, "L") = Sheets(source).Range("B25")
            match = True
        End If
    Next lRow

    'No match found in "A", now searching "E"
    If match = False Then
        For lRow = 1 To lastRow
            'Copy from Accounts to MockUp
            If Sheets(target).Cells(lRow, "E") = tempVal Then
                Sheets(source).Range("B10") = Sheets(target).Cells(lRow, "B")
                Sheets(source).Range("B8") = Sheets(target).Cells(lRow, "C")
                Sheets(source).Range("B9") = Sheets(target).Cells(lRow, "D")
                Sheets(source).Range("B19") = Sheets(target).Cells(lRow, "E")
                Sheets(source).Range("B18") = Sheets(target).Cells(lRow, "F")
                Sheets(source).Range("B17") = Sheets(target).Cells(lRow, "G")
                Sheets(source).Range("B16") = Sheets(target).Cells(lRow, "H")
                Sheets(source).Range("B22") = Sheets(target).Cells(lRow, "I")
                Sheets(source).Range("B23") = Sheets(target).Cells(lRow, "J")
                Sheets(source).Range("B24") = Sheets(target).Cells(lRow, "K")
                Sheets(source).Range("B25") = Sheets(target).Cells(lRow, "L")
            End If
        Next lRow
    End If
End Sub

注意:如果存在多個匹配項,則最后一個將覆蓋第一個。 這將遍歷整個帳戶表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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