Board logo

標題: [發問] 欄位轉換 [打印本頁]

作者: dragonbx    時間: 2020-7-13 09:15     標題: 欄位轉換

請教各位大大
小弟我有一資料轉換格是如下A 將 COST 跟 DATE轉換格式,不知道該怎麼寫比較好呢
格式A
ID        NAME        COST        DATE
AXXX        JACK        50        1月1日
AXXX        JACK        60        1月2日
BXXX        MARY        30        1月3日
BXXX        MARY        40        1月4日

想轉換成格式B

ID        NAME        COST1        COST2        DATE1        DATE2
AXXX        JACK        50        60        1月1日        1月2日
BXXX        MARY        30        40        1月3日        1月4日
作者: ikboy    時間: 2020-7-13 10:13

假設你的資料 "ID" 就在 [A1] 開始, 代碼如下:
  1. Sub zz()
  2. Dim d As Object, dd As Object, k, t, n&, m&, HL$, b()
  3. Set d = CreateObject("scripting.dictionary")
  4. Set dd = CreateObject("scripting.dictionary")
  5. a = [a1].CurrentRegion
  6. For i = 2 To UBound(a)
  7.     k = a(i, 1)
  8.     d(k) = d(k) + 1
  9.     dd(k) = dd(k) & "|" & i
  10. Next
  11. n = Application.Max(d.items)
  12. HL = a(1, 1) & "|" & a(1, 2)
  13. For j = 3 To UBound(a, 2)
  14.     For jj = 1 To n
  15.         HL = HL & "|" & a(1, j) & jj
  16.     Next
  17. Next
  18. t = Split(HL, "|")
  19. ReDim b(1 To d.Count + 1, 1 To UBound(t) + 1)
  20. Workbooks.Add 1
  21. [a1].Resize(1, UBound(b, 2)) = t
  22. k = dd.keys: n = 0
  23. For i = 0 To UBound(k)
  24.     t = Split(dd(k(i)), "|")
  25.     n = n + 1
  26.     b(n, 1) = a(t(1), 1)
  27.     b(n, 2) = a(t(1), 2)
  28.     m = 2
  29.     For j = 3 To UBound(a, 2)
  30.         For jj = 1 To UBound(t)
  31.             m = m + 1
  32.             b(n, m) = a(t(jj), j)
  33.         Next
  34.     Next
  35. Next
  36. [a2].Resize(n, UBound(b, 2)) = b
  37. End Sub
複製代碼

作者: hcm19522    時間: 2020-7-13 11:33

https://blog.xuite.net/hcm19522/twblog/589226148




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