- 帖子
- 1447
- 主題
- 40
- 精華
- 0
- 積分
- 1471
- 點名
- 0
- 作業系統
- Windows 7
- 軟體版本
- Excel 2010 & 2016
- 閱讀權限
- 50
- 性別
- 男
- 來自
- 台灣
- 註冊時間
- 2020-7-15
- 最後登錄
- 2025-5-5
|
10#
發表於 2022-12-12 11:10
| 只看該作者
本帖最後由 Andy2483 於 2022-12-12 11:23 編輯
回復 8# Andy2483
回復自己的粗心大意
Sub TEST()
Dim Brr, C&, R&, T, V$(6), Y, N&
'↑宣告變數(Brr,T,Y)是通用型變數,(C,R,N)是長整數,V是一維陣列V(0)~V(6)
Set Y = CreateObject("Scripting.Dictionary")
'↑令Y是字典
Brr = 工作表1.UsedRange.Offset(1)
'↑令Brr是陣列!倒入 工作表1有使用儲存格的最小方正區域往下偏移 1列儲存格 值
T = Split("ABC,QWE,AA,BB", ",")
'↑令T是以","符號拆解雙引號內的字串一維陣列
'索引號0:"ABC" ;1:"QWE" ;2:"AA" ;3:"BB"
For R = 1 To UBound(Brr)
'↑設外順迴圈!R從1到Brr陣列縱向最大列號
If (Brr(R, 2) = T(0) Or Brr(R, 2) = T(1)) And (Brr(R, 3) = T(2) Or Brr(R, 3) = T(3)) Then
'↑如果(迴圈列第2欄Brr陣列值是"ABC 或 迴圈列第2欄Brr陣列值是"QWE"),
'而且(迴圈列第3欄Brr陣列值是"AA 或 迴圈列第3欄Brr陣列值是"BB")
If Trim(Brr(R, 5)) <> "" Then
'↑再如果迴圈列第5欄Brr陣列值是空字元
N = N + 1
'↑N數字變數累加 1
For C = 1 To UBound(Brr, 2)
'↑設內順迴圈!C從1到 Brr陣列橫向最大欄號
V(C - 1) = Brr(R, C)
'↑令Brr陣列的R迴圈列C迴圈欄值帶入V一維陣列相對位置裡
Next
Y(Brr(R, 1) & "|" & R) = V
'↑令以R迴圈列第1欄Brr陣列值連接 "|" 符號,再連接R迴圈數 為key,
'item是V一維陣列
End If
End If
Next
工作表2.UsedRange.Offset(3).Clear
'↑令 工作表2有使用儲存格的最小方正區域往下偏移 3列儲存格清除
With 工作表2.[A4].Resize(N, UBound(V) + 1)
'↑再次複習才檢查到欄數應該要加 1,因為UBound(V)指的不是陣列最大元素數!是最大索引號
'以下有關於 工作表2.[A4]向下擴展N列,向右擴展V一維陣列最大索引號數+1 的範圍儲存格
.Value = Application.Transpose(Application.Transpose(Y.ITEMS))
'↑擴展範圍儲存格的值以Y字典的item轉置後倒入
.Sort key1:=.Item(1), Header:=xlNo
'做排序!縱向,基準欄位是擴展區域的第 1欄,沒有標題列
End With
Set Brr = Nothing
Set Y = Nothing
Erase T, V
'↑釋放變數
End Sub
資料表:
With 工作表2.[A4].Resize(N, UBound(V))
With 工作表2.[A4].Resize(N, UBound(V) + 1)
|
|