Board logo

標題: [發問] 把資料整理及排列 [打印本頁]

作者: kan109    時間: 2011-4-1 18:05     標題: 把資料整理及排列

[attach]5201[/attach]把A1:B11 中A1的資料排列及整合
完成示範14列般
因為要完成的文件較大,提當中一小部抽出未向大家請教..
感謝幫忙~
作者: chin15    時間: 2011-4-1 21:22

本帖最後由 chin15 於 2011-4-1 21:23 編輯

這個應該用vba吧?
excel沒有適合的工具做此操作

[attach]5205[/attach]
作者: kan109    時間: 2011-4-1 22:42

小弟不才~請問如何擴大使用範圍??現在只能把A1-A20 內的資料整理~我需要擴大到1-25000...
感謝
作者: chin15    時間: 2011-4-1 22:53

現在只能把A1-A20 內的資料整理~
確定嗎?
作者: kan109    時間: 2011-4-2 08:56

你好~我把要用的資料複制到A,B,啟用VBA,執行,
出現
執行階段錯誤 '13':
形態不符合
怎樣辦??
作者: Hsieh    時間: 2011-4-2 10:46

回復 5# kan109
寫成自定義函數來使用


    [attach]5214[/attach]
作者: Andy2483    時間: 2023-5-12 15:26

謝謝論壇,謝謝各位前輩
後學藉此帖練習陣列與字典,學習方案如下,請各位前輩指教

執行前:
[attach]36350[/attach]

執行結果:
[attach]36351[/attach]


Option Explicit
Sub TEST()
Dim Brr, Crr, Y, R&, C%, i&, N&, TT$, T1$, T2$, Mc%
'↑宣告變數
Set Y = CreateObject("Scripting.Dictionary")
'↑令Y變數是 字典
Brr = Range([B1], [A65536].End(xlUp))
'↑令Brr變數是 二維陣列,以A~B欄儲存格值帶入陣列裡
ReDim Crr(1 To UBound(Brr), 1 To 100)
'↑宣告Crr是 二維空陣列,縱向範圍同Brr陣列,橫向範圍從1~100
For i = 1 To UBound(Brr)
'↑設順迴圈
   T1 = Brr(i, 1): T2 = Brr(i, 2): TT = T1 & "|" & T2
   '↑令變數盛裝陣列值,令TT變數是濾重複的組合字串
   If Y(TT) <> "" Then GoTo i01
   '↑如果TT變數在Y字典裡已經有這key!就跳到i01標示位置繼續執行
   If Y(T1) = "" Then
   '↑如果是A欄初次出現的項目?
      N = N + 1
      '↑令N變數累加1 (指定此A欄項目在Crr陣列裡的索引列號)
      Y(T1) = N
      '↑將索引列號以 A欄項目當key,納入Y字典裡
      Crr(N, 1) = Brr(i, 1)
      '↑先將A欄項目寫入Crr陣列裡
      Y(T1 & "/c") = 1
      '↑這是要記錄橫向欄位的key,item是1 (因為第1欄已經被 A欄項目用掉了)
   End If
   R = Y(T1)
   '↑不管A欄項目是不是首次出現!
   '令R變數裝A欄項目所帶的item值

   C = Y(T1 & "/c")
   '↑令C變數是 A欄項目所帶的欄數
   C = C + 1
   '↑令C變數累加1
   Y(T1 & "/c") = C
   '↑令A欄項目所帶的欄數裝新的欄數C
   Y(TT) = 1
   '↑令在Y字典裡的TT變數key,item值改為1(讓後迴圈濾重複)
   Crr(R, C) = T2
   '↑令B欄項目寫入Crr陣列中
   If C > Mc Then Mc = C
   '↑這Mc變數是為了要偵測Crr陣列所需要的欄數
i01: Next
[I1].Resize(N, Mc) = Crr
'↑令Crr陣列值從[I1]開始寫入儲存格裡
Set Y = Nothing: Erase Brr, Crr
'↑令釋放變數
End Sub




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