2015-01-06 84 views
0

我有兩個工作表「賬戶」和「模擬」。在第一張表中,我有列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

回答

1

在此代碼會發生什麼:如果發現匹配

  • 從 「!小樣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