2012-11-23 34 views
0

我需要以一種非常特定的方式整理來自3個Excel電子表格的數據,但我絕對沒有找到我需要使用的功能或命令的機會,甚至谷歌今天也沒有幫助我。Select All For Each - Excel Macro或VB Equivalent

對於Sheet1的每一行,我想「在Sheet2上查找所有行WHERE Sheet1 ColumnA是LIKE Sheet 2 ColumnA AND Sheet1 ColumnB是LIKE Sheet2 ColumnB」。我想我可以使用EQUALS而不是LIKE和通配符。

然後,對於第一個查詢找到的每個結果,我想要在Sheet1中的當前行下面插入一個新行,並將Sheet2 ColumnC中的數據複製到新插入的行ColumnC中。我想我還需要計算第一個查詢返回的行數,以便我可以告訴它在重複循環之前跳過那麼多行,但即使它在這些新行上執行循環,也應該反正找不到任何結果。

很明顯,有人想爲我寫代碼,我會很高興! :) 但即使任何人都能讓我知道我需要的每一個位的最佳功能,我仍然會非常感激,並且只是研究它們並把我自己的東西放在一起。

由於提前,

編輯

添加以下的實施例,第一片材1,則片材2,然後片材1之後的宏已運行的期望的結果。上面還我說我會搜索「LIKE」的比賽,但是這將是更準確的說我要搜索哪兒細胞含有

Sheet 1 Before Macro

Sheet 2 Containing Info

Sheet 1 After Macro

+0

你計劃做多久這個匹配,複製粘貼?直到行完成?哪個版本的excel? – bonCodigo

+0

嗨,感謝您的回覆。是的,直到行完成後,Sheet1上有大約1500行,但是Sheet2上有大約60,000行,所以我一步一步做的宏並不理想。我正在使用Excel 2007 – JoeP

+0

你可以發佈你的三張牀單的屏幕截圖嗎? – bonCodigo

回答

1

好,以下是我的解決方案。順便說一句,如果您可以保證單元格已經排序,那麼可以優化代碼以減少比較時間。

//Code is not tested 
Sub Collate() 

    Dim row1 As Long 
    Dim row2 As Long 
    Dim match As Boolean 

    Dim lastRow1 As Long 
    Dim lastRow2 As Long 

    Dim valA1 As String 
    Dim valB1 As String 
    Dim valA2 As String 
    Dim valB2 As String 
    Dim valC2 As String 

    lastRow1 = Sheet1.Cells.SpecialCells(xlCellTypeLastCell).Row 
    lastRow2 = Sheet2.Cells.SpecialCells(xlCellTypeLastCell).Row 

    row1 = 2 
    While row1 <= lastRow1 
     valA1 = "*" & Sheet1.Cells.Range("A" & row1).Value & "*" 
     valB1 = "*" & Sheet1.Cells.Range("B" & row1).Value & "*" 
     For row2 = 2 To lastRow2 
      valA2 = Sheet2.Cells.Range("A" & row2).Value 
      valB2 = Sheet2.Cells.Range("B" & row2).Value 
      valC2 = Sheet2.Cells.Range("C" & row2).Value 
      If valA2 Like valA1 And valB2 Like valB1 Then 
       match = True 
       row1 = row1 + 1 
       lastRow1 = lastRow1 + 1 
       Sheet1.Cells.Range("A" & row1).EntireRow.Insert 
       Sheet1.Cells.Range("C" & row1).Value = valC2 
      End If 
     Next row2 

     row1 = row1 + 1 
    Wend 

End Sub 
+0

謝謝!它不能完美「開箱即用」,但我需要的是在此代碼中。再次,謝謝你 – JoeP