返回列表 上一主題 發帖

[發問] (字典物件)單格多行儲存格分隔為多行單格儲存格問題

[發問] (字典物件)單格多行儲存格分隔為多行單格儲存格問題

各位前輩好,

小弟最近在練習時遇到一個問題,
附上檔案以供前輩參考:

20161115_(字典物件)單格多行儲存格分隔為多行單格儲存格問題.zip (9.86 KB)

將問題以文字簡述如下:

假設有兩直欄資料,
A欄為一般文字,B欄的每個儲存格均有多筆資料,每筆資料有換行,

示意如下:
B欄
111
222
333
以上三筆數字均在同一個儲存格中.

希望可以將B欄的每筆資料分隔至單一儲存格,貼至F欄,
並將A欄的資料依據B欄的資料去貼上,
承上例,
假設上例之B欄對應之A欄儲存格為"AAA",
則期望結果如下:
A欄    B欄
AAA   111
AAA   222
AAA   333

小弟冒昧借用論壇前輩以及網上其他朋友的程式碼進行修改,
修改之程式碼如下:
  1. Sub test()
  2. '此為參考論壇前輩及網上其他朋友所提供之程式碼進行修改,
  3. '非我原創
  4. '論壇網址;http://forum.twbts.com/thread-18600-1-1.html
  5. Dim Arr, Brr(1 To 65536, 1 To 1), myD, C, UC
  6. '關閉螢幕更新
  7. Application.ScreenUpdating = False

  8. Set myD = CreateObject("scripting.dictionary")
  9. Arr = Range("a2:c" & Cells(Rows.Count, "a").End(3).Row).Value

  10. '清除結果欄的資料
  11. Range("e2", Cells(Rows.Count, "f")).ClearContents

  12. For Each A In Range("b2:b" & Cells(Rows.Count, "b").End(3).Row).Value
  13.     For Each B In Split(A, Chr(10))
  14.    
  15.     '將B欄多行儲存格內的值分割並代入陣列,
  16.     '使用字典物件將重複值刪除
  17.     If myD(B) = 1 Then GoTo 101
  18.         N = N + 1
  19.         Brr(N, 1) = B
  20.         myD(B) = 1
  21. 101:    Next B
  22. Next A
  23. [f2].Resize(N, 1) = Brr


  24. '"---"虛線範圍內的程式碼在B欄多行儲存格有重複資料或空行時會出現問題
  25. '-------------------------------------------------------

  26. '計算B欄多行儲存格內的值的總數量並顯示於C欄
  27. For i = 1 To UBound(Arr)
  28.     C = Split(Arr(i, 2), Chr(10))
  29.     UC = UBound(C) + 1
  30.     Arr(i, 3) = UC
  31. Next i
  32. [a2].Resize(UBound(Arr), 3) = Arr



  33. '將A欄的資料依C欄的次數貼至E欄
  34. For j = 2 To UBound(Arr) + 1
  35.     Cells(j, 1).Copy _
  36.     Cells(Rows.Count, 5).End(xlUp).Offset(1, 0).Resize(Cells(j, 3), 1)
  37. Next j

  38. '-------------------------------------------------------

  39. 'C欄的數字使用者用不到,故在最後清除C欄
  40. Columns(3).ClearContents

  41. '開啟螢幕更新
  42. Application.ScreenUpdating = True

  43. End Sub
複製代碼
以上程式碼若遇到B欄資料有空行或是有重複之情形時則會出現問題,
問題情形煩請參考附檔所示.

小弟苦思許久,還是無法解決,斗膽上來求助,
還望前輩不吝指點迷津,十分感謝

回復 2# 葉國洲

十分感謝葉國洲前輩提供解答,小弟再研究一下.

TOP

回復 4# Kubi

十分感謝Kubi前輩無私提供解答,
跟葉國洲前輩所提供之程式碼均可有效解決問題,再次感謝.

可以的話,
是否允許小弟進一步詢問相關細節,

假設要讓B欄分割後的資料均不重覆,不知是否可行?

舉例而言,
假設現在B直欄只有兩筆資料,B2與B3,
其中B2儲存格資料為:
111
222
333,

B3儲存格資料為:
111
555
777,

因111有重複,是否有辦法將111此筆資料只顯示一次?
小弟斗膽,還請前輩不吝指點迷津,十分感謝.

TOP

回復 6# hcm19522

十分感謝hcm19522前輩以公式提供解答,小弟再研究一下.
前輩的網站小弟有加入最愛,主題能得到前輩關注,甚感榮幸.

TOP

回復 8# 葉國洲

十分感謝葉國洲前輩費心指點,
程式碼可確實解決問題,小弟獲益良多,再次感謝.

TOP

        靜思自在 : 吃苦了苦、苦盡廿來,享福了福、福盡悲來。
返回列表 上一主題