- 帖子
- 1447
- 主題
- 40
- 精華
- 0
- 積分
- 1471
- 點名
- 0
- 作業系統
- Windows 7
- 軟體版本
- Excel 2010 & 2016
- 閱讀權限
- 50
- 性別
- 男
- 來自
- 台灣
- 註冊時間
- 2020-7-15
- 最後登錄
- 2025-5-5
|
謝謝論壇,謝謝各位前輩
後學藉此帖練習VBA陣列,學習方案如下,請各位前輩指教
執行前:
執行結果:
Option Explicit
Sub TEST()
Dim Brr, Crr, V, Z$, Q, i&, T$
'↑宣告變數
Brr = Range([E6], [E65536].End(3))
'↑令Brr變數是 二維陣列,以E欄儲存格值帶入陣列中
Z = "Invoice [#] ###### #*/#*/####"
'↑令Z變數是字串
ReDim Crr(1 To UBound(Brr) - 1, 1 To 4)
'↑令Crr變數是 二維空陣列,縱向範圍1~Brr陣列縱向最大索引列號-1,橫向範圍1~4
For i = 1 To UBound(Brr)
'↑設順迴圈!
T = Brr(i, 1)
'↑令T變數是 迴圈Brr陣列值(字串)
If T Like Z Then V = Split(T, " "): GoTo i01
'↑如果以 Like 運算子 判別(T變數與Z變數)回傳 True?
'是就令V是(以空白字元分割T變數的一維陣列),令程序跳到i01位置繼續執行
If Val(T) = 0 Then GoTo i01 Else T = T & " "
'↑如果T變數轉數值後是 0?是就令程序跳到i01位置繼續執行,
'否則就令T變數連接" "組成為新字串
Crr(i - 1, 1) = V(2): Crr(i - 1, 2) = V(4)
'↑令Crr陣列第1欄寫入(2索引號V陣列值),
'令Crr陣列第2欄寫入(4索引號V陣列值)
Q = InStr(T, " ")
'↑令Q變數是判定T變數第1個空白字元的位置
Crr(i - 1, 3) = Left(T, Q - 1)
'↑令Crr陣列第3欄寫入T變數的左側(Q - 1)個字元
Crr(i - 1, 4) = Trim(Mid(T, Q + 1))
'↑令Crr陣列第4欄寫入T變數從(Q + 1)個字以後的字串
i01: Next
[A7].Resize(UBound(Crr), 4) = Crr
'↑令從[A7]開始擴展的範圍儲存格值是Crr陣列值
Erase Brr, Crr, V
'↑令釋放變數
End Sub |
|