【问题标题】:Excel Macro Find in multiple columnsExcel宏在多列中查找
【发布时间】:2015-01-06 00:42:34
【问题描述】:

我有两个工作表“帐户”和“模拟”。在第一张纸中,我有 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 宏来完成此操作。任何帮助表示赞赏。

第一张

第二张

问候, 拉加夫。

【问题讨论】:

  • 发布您目前拥有的代码会很有用,并准确指出您遇到问题的位置。
  • 我同意蒂姆的观点。但您可能需要检查Range Object Find Method 来完成此操作。或者您也可以尝试使用经典循环。

标签: excel vba


【解决方案1】:

这段代码发生了什么:

  • 从“Mock Up!B4”中获取搜索值
  • 在“帐户”的 A 列中搜索
  • 如果找到匹配项,请将数据从“Mock Up”复制到“Accounts”(行),匹配提供的图片。
  • 如果在“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

注意:如果存在多个匹配项,则最后一个将覆盖第一个。这将遍历整个帐户表。

【讨论】:

  • 谢谢。我试过这段代码。它在这一行中给出了错误“下标超出范围”错误 tempVal = Sheets(source).Range("B4")
  • @user1492218,您的源表是“模拟”吗?我现在明白了。这是“模拟”而不是“模拟”。
  • 谢谢。它工作正常。在第一个 for 条件下,我不得不交换源和目标。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多