返回列表 上一主題 發帖

[發問] 欄位轉換

[發問] 欄位轉換

請教各位大大
小弟我有一資料轉換格是如下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日
80 字節以內
不支持自定義 Discuz! 代碼

假設你的資料 "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
複製代碼

TOP

隨意窩 "EXCEL迷"  blog  或 http://blog.xuite.net/hcm19522/twblog
已收集7000篇 EXCEL函數

TOP

        靜思自在 : 有心就有福,有願就有力,自造福田,自得福緣。
返回列表 上一主題