2014-01-26 81 views
0

我有兩個我想合併的Excel表。有些但不是全部行可能在某種程度上相同,我想100%確定我不會丟失數據。有條件合併行?

這裏就是我的意思是:

Sheet 1 contains: 

FName, Lname, Street, HasDog, HasCat, HasHorse 
Joe, Carlson, 123 Street, 1, 1, 0 
Bill, Jones, 345 Street, 1, 0, 0 


Sheet 2 contains: 

FName, Lname, Street, HasFish, HasBird 
Joe, Carlson, 123 Street, 1, 0 
Bill, Jones, 345 Street, 0, 1 

最後,我想有這樣的:

Final Sheet Contains: 

FName, Lname, Street, HasDog, HasCat, HasHorse, HasFish, HasBird 
Joe, Carlson, 123 Street, 1, 1, 0, 1, 0 
Bill, Jones, 345 Street, 1, 0, 0, 0, 1 

注:所有參賽作品應放在最後一個薄片,不管他們是在表1,2或兩者中。

未設置的數據(如HasFish)將是空或「0」

+0

這兩組工作人員(由Fname,Lname和Street標識)是否相同?如果沒有,那麼所有的人都去最後一張紙上,還是隻出現在紙張1和紙張2上的人? – DMM

+0

@DMM一個人不一定在所有的牀單上。所有人都會進入最後的工作表,即使他們只出現在其中一箇中。空字段(例如HasFish)將爲0. – koljanep

回答

1

這個網站是爲程序員幫助其他程序員提高。這不是一個免費的編碼網站,儘管有時會提供大量的代碼,特別是如果回答者發現問題有趣。我不認爲在達到你的要求方面有什麼具有挑戰性,所以我懷疑有人會給你一個完整的宏。

您必須學習Excel VBA。即使有人爲你編寫了一個宏,它也不可能只是你想要的。沒有VBA的知識,你將無法做出最後的改變。

在因特網上搜索「Excel VBA教程」。有很多選擇。我認爲一些窮人,但其他人很好。嘗試一些,並選擇適合您的學習風格的。也許你更喜歡書。訪問一個好的圖書館或書店,查看精選的Excel VBA Primers。圖書館的優勢在於您可以在決定購買哪些產品之前先將幾個引物回家並嘗試使用。我喜歡在我的辦公桌上放一本參考書,這是我的方法。

我相信知識的關鍵領域,你需要解決這個問題是:從工作表

  • 將數據複製到陣列從一個數組
  • 將數據複製到工作表
  • 陣列處理
  • for循環
  • 的if-else-ENDIF

我假設您向我們展示的示例數據是假的。在真實的數據中,左邊的標識列還是分散的?在真實的數據中,兩個工作表的順序是否相同?我會根據需要移動列和排序工作表,以儘可能簡化編程。完成後,您可以重新排列行和列。

下面的宏:

  • 份數工作表 「SRC1」 到一個數組。您必須將「Src1」替換爲工作表的名稱。
  • 連接頂部和底部行的值。
  • 將連接值輸出到立即窗口。

此宏旨在演示從工作表訪問數據或操作該數據並不困難。

將您的問題分成小步驟。編寫一個執行步驟1的宏,並證明它已正確執行該步驟。擴展宏以執行步驟1和2,然後執行步驟1,2和3.等等。我爲你寫了第1步宏。嘗試擴展該宏。如果您的某個步驟的代碼無效,請返回此處;我相信有人會幫忙。

Option Explicit 
Sub LoadSrc1() 

    Dim ColSrc1Crnt As Long 
    Dim ColSrc1Last As Long 
    Dim RowSrc1Last As Long 
    Dim ValuesSrc1 As Variant 
    Dim StgBot As String 
    Dim StgTop As String 

    With Worksheets("Src1") 

    RowSrc1Last = .Cells(Rows.Count, "A").End(xlUp).Row 
    ColSrc1Last = .Cells(1, Columns.Count).End(xlToLeft).Column 

    ValuesSrc1 = .Range(.Cells(1, 1), .Cells(RowSrc1Last, ColSrc1Last)).Value 

    StgBot = "" 
    StgTop = "" 
    For ColSrc1Crnt = 1 To ColSrc1Last 
     StgTop = StgTop & ValuesSrc1(1, ColSrc1Crnt) & " " 
     StgBot = StgBot & ValuesSrc1(RowSrc1Last, ColSrc1Crnt) & " " 
    Next 

    End With 

    Debug.Print StgTop 
    Debug.Print StgBot 

End Sub 
+0

謝謝Tony。發佈後我意識到可能沒有「簡單」解決方案來解決我的問題。當我更深入PHP時,我編寫了一個腳本,它可以讀取我所有的文件,並按照我想要的方式將它們組合起來,然後將它們輸出。但我很感謝你的回答,並且你在開始時所說的話是正確的。我想我只是希望有一個簡單的方法。 :D – koljanep

+0

很高興你解決了你的問題。感謝您的接受。 –