- 帖子
- 1447
- 主題
- 40
- 精華
- 0
- 積分
- 1471
- 點名
- 0
- 作業系統
- Windows 7
- 軟體版本
- Excel 2010 & 2016
- 閱讀權限
- 50
- 性別
- 男
- 來自
- 台灣
- 註冊時間
- 2020-7-15
- 最後登錄
- 2025-5-5
|
6#
發表於 2023-5-25 09:51
| 只看該作者
回復 3# 准提部林
謝謝論壇,謝謝前輩
後學藉此帖學習前輩VBA方案,方案學習心得如下,請前輩再指導
執行前:
執行結果:
Sub TEST_A1()
Dim Arr, xD, T1$, T2$, i&
'↑宣告變數:(Arr,xD)是通用型變數,(T1,T2)是字串變數,i是長整數變數
Set xD = CreateObject("Scripting.Dictionary")
'↑令xD這通用型變數是 字典
Arr = Range(Sheet1.[c1], Sheet1.Cells(Rows.Count, 1).End(xlUp))
'↑令Arr這通用型變數是 二維陣列,以表1的A~C欄儲存格值帶入陣列中
For i = 2 To UBound(Arr)
'↑設順迴圈
T1 = Arr(i, 1): T2 = Arr(i, 3)
'↑令T1這字串變數是 i迴圈列第1欄Arr陣列值
xD(T1) = xD(T1) + 1
'↑令以T1變數當key,item累加1,納入xD字典裡
xD(T1 & "/" & T2) = Arr(i, 2)
'↑令T1變數連接"/",再連接T2變數 所組成的新字串當key,
'item是 i迴圈列第2欄Arr陣列值
Next i
Arr = Range(Sheet2.[c1], Sheet2.Cells(Rows.Count, 1).End(xlUp))
'↑令Arr陣列倒掉舊陣列值,換裝表2的A~C欄儲存格值
For i = 2 To UBound(Arr)
'↑設順迴圈
T1 = xD(Arr(i, 1) & "")
'↑令T1變數是 (以i迴圈列Arr陣列值)查 xD字典回傳item值
'Arr(i, 1) & "":陣列值加空字元,定義讓它是字串 查字典
T2 = xD(Arr(i, 1) & "/" & Arr(i, 2))
'↑令T2變數是 i迴圈列第1欄Arr陣列值連接"/",再連接i迴圈列第2欄Arr陣列值,
'所組成的新字串
Arr(i - 1, 1) = T2 & IIf(T2 = "", "", "/") & T1
'↑令T2變數連接"/"再連接T1變數所組成的新字串,
'寫到Arr陣列裡(覆蓋掉原陣列值)
Next i
With Sheet2.[e2].Resize(UBound(Arr) - 1)
'↑以下是關於[E2]儲存格擴展向下Arr陣列最大索引號-1格,
'因為有效結果值是從1索引號開始放,所以要-1
.NumberFormatLocal = "@"
'↑令這範圍儲存格格式是 文字
.Value = Arr
'↑令這範圍儲存格以Arr陣列值寫入儲存格裡,超過這範圍的陣列值忽略
End With
End Sub |
|