- 帖子
- 1447
- 主題
- 40
- 精華
- 0
- 積分
- 1471
- 點名
- 0
- 作業系統
- Windows 7
- 軟體版本
- Excel 2010 & 2016
- 閱讀權限
- 50
- 性別
- 男
- 來自
- 台灣
- 註冊時間
- 2020-7-15
- 最後登錄
- 2025-3-24
|
12#
發表於 2022-12-28 15:16
| 只看該作者
本帖最後由 Andy2483 於 2022-12-28 15:30 編輯
回復 1# olisun
謝謝前輩發表此主題與範例,謝謝各位前輩指導
後學藉此帖習得很多知識與經驗,用布林變數整合迴圈,認識Rept()運算式.....
以下執行過程與心得註解請各位前輩指導
執行前:
執行結果:
Option Explicit
Sub TEST_20221228_2()
Dim Arr, i&, j&, S&, A&(3), B$(3), T As Boolean
'↑宣告變數:Arr是通用型變數,(i,j,S)是長整數變數,(A,B)是一維陣列,T是布林變數
Arr = Range([C2], [A65536].End(3))
'↑令Arr是二維陣列!以[C2]到A欄最後有內容儲存格值倒入
Head:
S = IIf(T, 1, 3)
'↑令S這長整數變數依 IIf()判斷T變數是Ture:S=1,T變數是False:S=3
For i = 1 To S
'↑設順迴圈!i從1到S變數
For j = 1 To UBound(Arr)
'↑設順迴圈!j從1到Arr陣列縱向最大列索引號
If T Then
'↑如果T變數是 Ture PS:T是 布林變數,其初始值是False
B(1) = Arr(j, 1) & Application.Rept(" ", A(1) - Len(Arr(j, 1)))
'↑令索引號1的B陣列值是 j迴圈列第1欄Arr陣列值連接 數個" "空白字元,
'數個?:以Rept()運算式複製(索引號1的A陣列值- j迴圈列第1欄Arr陣列值的字數)個" "空白字元
'https://learn.microsoft.com/zh-tw/office/vba/api/excel.worksheetfunction.rept
B(2) = Arr(j, 2) & Application.Rept(" ", A(2) - Len(Arr(j, 2)))
'↑類推
Arr(j, i) = B(1) & "+" & B(2) & " " & Arr(j, 3)
'↑令j迴圈列i迴圈欄Arr陣列值是 三個B陣列值連接"+"和" "符號的字串
ElseIf A(i) < Len(Arr(j, i)) Then
'↑否則如果i迴圈A陣列值 < j迴圈列i迴圈欄Arr陣列值裡的字數??
A(i) = Len(Arr(j, i))
'↑令i迴圈A陣列值是 j迴圈列i迴圈欄Arr陣列值裡的字數
'(求最大字數)
End If
Next
Next
If T = False Then T = True: GoTo Head
'↑如果T變數是 False,就讓T變數是 True,程序跳到 Head標示處繼續執行
[H2].Resize(UBound(Arr), 1) = Arr
'↑令[H2]擴展向下Arr陣列縱向最大列索引號數,向右不擴展,這欄儲存格值以Arr陣列值倒入
Set Arr = Nothing
Erase A, B
End Sub |
|