Excel宏查找多列

问题描述:

我有两个工作表“账户”和“模拟”。在第一张表中,我有列A到L和1409行。在第二张纸上,用户在单元格B4上输入一个值。我必须在第一个表单的A1:A1409范围内搜索这个值。如果在A100中找到该值,则将A100至L100分配给第二张单元格B8:B11,B16:B19和B22:B25。Excel宏查找多列

如果未在A1:A1409范围内找到,则必须在范围E1:E1409中搜索,并将A100再次返回到L100,再次返回到B8:B11,B16:B19和B22:B25。

试图创建一个excel 2010 vba宏来实现这一点。任何帮助表示赞赏。

第一表

enter image description here

第二片

Second Sheet

问候, Ragav。

+1

发布迄今为止的代码并准确指出您遇到问题的位置会很有用。 –

+0

我同意蒂姆。但是你可能想要检查[* Range Object ** Find ** Method *](http://msdn.microsoft.com/en-us/library/office/ff839746(v = office.15).aspx)来完成这个。或者你也可以尝试古典循环。 – L42

在此代码会发生什么:如果发现匹配

  • 从 “!小样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 

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

+0

谢谢。我试过这个代码。它给我错误“下标超出范围”错误在这行tempVal =表(源)。范围(“B4”) – user1492218

+0

@ user1492218, 您的源表“模拟”?我现在明白了。这是“模拟”而不是“模拟”。 – peege

+1

谢谢。它工作正常。在条件第一,我不得不交换源和目标。 – user1492218