Board logo

標題: 大量資料比對與合併 [打印本頁]

作者: uf023630    時間: 2011-6-8 13:15     標題: 大量資料比對與合併

各位前輩好!
小弟我有一個問題要請求大家幫忙
我需要將許多Sheet(大約有60個) 的資料合併在Sum的這個Sheet內
每個Sheet 大約有1萬筆資料,而SUM 大約有5萬筆
一開始用 VLOOKUP去做......只有一個慘
之後改用迴圈...還是一樣等到天荒地老
後來用 Find 但是遇到空白無值會錯誤...
想用 陣列 & Dictionary 但是一直卡關..
想請求大家幫忙想一想,但是又要有執行速度,因為資料真的太多了
謝謝

[attach]6530[/attach]
作者: Hsieh    時間: 2011-6-8 14:16

  1. Sub ex()
  2. Dim ar()
  3. Set D = CreateObject("Scripting.Dictionary")
  4. Application.ScreenUpdating = False
  5. With Sheets.Add
  6. For Each sh In Sheets(Array("01", "02", "03", "04"))
  7.     ReDim Preserve ar(s)
  8.     ar(s) = sh.[A1].CurrentRegion.Address(, , xlR1C1, 1)
  9.     s = s + 1
  10. Next
  11. .Range("A1").Consolidate Sources:=ar, Function:=xlSum, TopRow:=True, LeftColumn:=True, CreateLinks:=False
  12. For Each a In .Range(.[B1], .[IV1].End(xlToLeft))
  13.   If IsEmpty(D(Split(a, "-")(0))) Then
  14.      Set D(Split(a, "-")(0)) = a.Resize(.UsedRange.Rows.Count, 1)
  15.      Else
  16.      Set D(Split(a, "-")(0)) = Union(a.Resize(.UsedRange.Rows.Count, 1), D(Split(a, "-")(0)))
  17.   End If
  18. Next
  19. Set Rng = .Range(.[A1], .[A65536].End(xlUp))
  20. For Each ky In D.keys
  21.    With Sheets("SUM-" & ky)
  22.      Rng.Copy .[A1]
  23.      D(ky).Copy .[B1]
  24.    End With
  25. Next
  26. Application.DisplayAlerts = False
  27. .Delete
  28. Application.DisplayAlerts = True
  29. End With
  30. Application.ScreenUpdating = True
  31. End Sub
複製代碼

作者: uf023630    時間: 2011-6-8 15:01

感謝提供方法,雖然與我實際上執行會有困難因為我每個Sheet 用掉208個欄位,每個.xls 又有52個Sheet,感謝Hsieh板大幫忙!我已經知道邏輯方法與原理剩下的就讓我自己去探索吧!!




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)