- 帖子
- 1447
- 主題
- 40
- 精華
- 0
- 積分
- 1471
- 點名
- 0
- 作業系統
- Windows 7
- 軟體版本
- Excel 2010 & 2016
- 閱讀權限
- 50
- 性別
- 男
- 來自
- 台灣
- 註冊時間
- 2020-7-15
- 最後登錄
- 2025-5-5
|
7#
發表於 2023-6-1 08:45
| 只看該作者
本帖最後由 Andy2483 於 2023-6-1 08:53 編輯
謝謝論壇,謝謝各位前輩
後學藉此帖練習VBA陣列,學習方案如下,請各位前輩指教
執行前:
執行結果:
Option Explicit
Sub TEST()
Dim Brr, Crr, A, i&, j%, M%
'↑宣告變數
Brr = Range([A2], [A65536].End(3))
'↑令Brr變數是 二維陣列,以A欄儲存格值帶入
ReDim Crr(1 To UBound(Brr), 1 To 100)
'↑令Crr變數是 二維空陣列,縱向範圍同Brr陣列,橫向1~100
For i = 1 To UBound(Brr)
'↑設順迴圈!逐列執行
If InStr(Brr(i, 1), "fee$") = 0 Then GoTo i01 Else: A = Split(Brr(i, 1), "fee$")
'↑如果Brr陣列值不包含 "fee$"就跳到標示i01位置繼續執行,
'否則就令A變數是 一維陣列,以"fee$" 分割Brr陣列值帶入A陣列裡
If M < UBound(A) Then M = UBound(A)
'↑如果M變數小於A陣列的最大索引號,就令M變數是 A陣列的最大索引號
For j = 1 To UBound(A): Crr(i, j) = Val(A(j)): Next
'↑設順迴圈!將A陣列值轉化為數值後寫入Crr陣列裡
i01: Next
[B2].Resize(UBound(Brr), M) = Crr
'↑令Crr陣列值從[B2]開始寫入匡列的儲存格中,超過範圍的陣列值忽略
Erase Brr, Crr, A
'↑令釋放變數
End Sub
'==================================================
'補充:以下另一種情況
Sub TEST_1()
Dim Brr, Crr, A, i&, j%, M%
Brr = Range([A2], [A65536].End(3))
ReDim Crr(1 To UBound(Brr), 1 To 100)
For i = 1 To UBound(Brr)
If InStr(Brr(i, 1), "fee") = 0 Then GoTo i01 Else: A = Split(Brr(i, 1), "fee")
If M < UBound(A) Then M = UBound(A)
For j = 1 To UBound(A): Crr(i, j) = Val(Replace(A(j), "$", "")): Next
i01: Next
[B2].Resize(UBound(Brr), M) = Crr
Erase Brr, Crr, A
End Sub |
|