返回列表 上一主題 發帖

[發問] 資料轉置求助前輩

感謝各方前輩指點,收下慢慢學習.
杜小平

TOP

回復 7# 准提部林


    謝謝論壇,謝謝前輩
後學藉此帖學習前輩的方案,方案學習心得註解如下,請前輩再指導

執行前:


執行結果:



Sub 轉置()
Dim Arr, Brr, C%(2), r%, j%, i&
'↑宣告變數:(Arr,Brr)是通用型變數,C是短整數值的一維陣列(0~2)
'(r,j)是短整數,i是長整數
ActiveSheet.UsedRange.Offset(, 7).EntireColumn.Delete
'↑令使用的儲存格往右偏移7欄範圍儲存格所在的欄位刪除
Arr = Range([a3], [c65536].End(3))
'↑令Arr變數是 二維陣列,以[A3]到C欄最後一個有內容儲存格值帶入
ReDim Brr(1 To 8, 1 To 200)
'↑令Brr變數是 二維空陣列,縱向範圍1~8,橫向範圍1~200
For i = 2 To UBound(Arr)
'↑設順迴圈
    r = IIf(Arr(i, 1) > 6, 1, 0):  C(r) = C(r) + 1
    '↑令r變數是IIf()回傳值,如果第1欄Arr陣列值 大於6,回傳1,否則0
    '↑令r索引號的C陣列值累加1

    For j = 1 To 3
    '↑設順迴圈
        Brr(r * 4 + j, C(r)) = Arr(i, j)
        '↑令Arr陣列值寫入Brr陣列指定位置裡
    Next j
    If C(r) > C(2) Then C(2) = C(r)
    '↑如果r變數索引號C陣列值大於 2索引號C陣列值,
    '就令2索引號C陣列值是 r變數索引號C陣列值
    'C(2)是為了計算陣列最大需求欄數

Next i
With [h2].Resize(UBound(Brr), C(2))
     .Value = Brr
     '↑令儲存格值以Brr陣列帶入
     .Borders.LineStyle = 1
     '↑令儲存格框線是細實線
     .ColumnWidth = 4
     '↑令儲存格欄寬是 4
     .Font.Size = 14
     '↑令儲存格字大小是 4
End With
End Sub
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

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


Option Explicit
Sub TEST()
Dim Brr, Crr, Y, R%, i&, j%, T%
'↑宣告變數
Set Y = CreateObject("Scripting.Dictionary")
'↑令Y變數是 字典
Range([H1], Cells(1, Columns.Count)).EntireColumn.Delete
'↑令H欄到最後欄刪除
Brr = Range([C3], [A65536].End(3))
'↑令Brr變數是 二維陣列,以[A3]到C欄最後一個有內容儲存格值帶入
ReDim Crr(1 To 8, 1 To 200)
'↑令Crr變數是 二維空陣列,縱向範圍1~8,橫向範圍1~200
Y("上區") = 0: Y("下區") = 4
'↑令"上區"字串當key,item是 0;令"下區"字串當key,item是 4:納入Y字典裡
For i = 1 To UBound(Brr)
'↑設順迴圈
   T = Brr(i, 1)
   '↑令T變數是第1欄Brr陣列值
   R = IIf(T > 6, Y("下區"), Y("上區")): Y(R) = Y(R) + 1
   '↑令R變數是IIf()回傳值,如果T變數 大於6,回傳4,否則0
   '↑令在Y字典裡0或4的key,其item值累加1(紀錄欄最後索引號)

   For j = 1 To 3
   '↑設順迴圈
        Crr(R + j, Y(R)) = Brr(i, j)
        '↑令Brr陣列值寫入Crr陣列指定位置裡
   Next j
   If Y(R) > Y("欄數") Then Y("欄數") = Y(R)
   '↑如果上下區的欄號大於 以"欄數"查Y字典的item值,
    '就令Y字典的"欄數"key對應的item值是 上下區的欄號
    'Y("欄數")是為了計算陣列最大需求欄數

Next
With [h2].Resize(UBound(Crr), Y("欄數"))
     .Value = Crr
     '↑令儲存格值以Crr陣列帶入
     .Borders.LineStyle = 1
     '↑令儲存格框線是細實線
     .ColumnWidth = 4
     '↑令儲存格欄寬是 4
     .Font.Size = 14
     '↑令儲存格字大小是 4
End With
Set Y = Nothing: Erase Brr, Crr
'↑令釋放變數
End Sub
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

        靜思自在 : 一個人的快樂.不是因為他擁有得多,而是因為他計較得少。
返回列表 上一主題