- 帖子
- 1447
- 主題
- 40
- 精華
- 0
- 積分
- 1471
- 點名
- 0
- 作業系統
- Windows 7
- 軟體版本
- Excel 2010 & 2016
- 閱讀權限
- 50
- 性別
- 男
- 來自
- 台灣
- 註冊時間
- 2020-7-15
- 最後登錄
- 2025-5-5
|
15#
發表於 2022-12-2 09:50
| 只看該作者
本帖最後由 Andy2483 於 2022-12-2 10:04 編輯
回復 1# aer
回復 10# 准提部林
謝謝前輩指導
謝謝 aer前輩發表此主題與範例
以下心得註解請再指導!謝謝
Option Explicit
Sub TEST()
Dim Arr, Brr, T, i&, N&, j%
'↑宣告變數(Arr,Brr,T)是通用型變數,(i,N)是長整數,(j)是短整數,
請教 准提部林前輩:
1.這裡的j變數為什麼要宣告為短整數?
2.什麼時候該用長整數? 短整數?
With Sheets("Sheet1").UsedRange
'↑以下是關於 名為: "Sheet1" 工作表的使用儲存格的程序
'使用儲存格是指有被編輯過的儲存格
'工作表的使用儲存格是指:能涵蓋所有 使用儲存格 的最小方正區域
'例如:
'1.開個全新的工作表>[D3]輸入 "左上角",[F10]輸入 "右下角" ,.Address=$D$3:&F$10]
'2.再在[K2]輸入 "右上角" .Address=$D$2:$K$10
'3.再在[G12]輸入 "下邊邊" .Address=$D$2:$K$12
'4.再在[H1]輸入 "上邊邊" .Address=$D$1:$K$12]
'5.再在[S20]輸入 "新右下角" .Address=$D$1:$S$20]
'謝謝 准提部林前輩常用不同的陳述方式讓後輩學習!謝謝
Arr = .Value
'↑令Arr是二維陣列!陣列值就是 工作表的使用儲存格的值
ReDim Brr(1 To .Count, 1 To 3)
'↑宣告二維Brr陣列的範圍! 縱向從1 到工作表的使用儲存格格數 列,
'橫向從1 到3欄
End With
For i = 2 To UBound(Arr)
'↑設外順迴圈i變數從2 到Arr陣列的縱向最大列號數
For j = 2 To UBound(Arr, 2)
'↑設內順迴圈j變數從2 到Arr陣列的橫向向最大欄號數
If Arr(i, j) <> "" Then
'↑如果迴圈Arr陣列值 不是空字元??
N = N + 1
'↑N累加 1
'N變數在前面都沒出現過!
'只有宣告是 長整數,所以N的初始值是0 ,每次if條件成立就會加 1
T = Split(Trim(Arr(i, j)), "梯")
'↑令T變數是 迴圈Arr陣列值經過去頭尾空白字元後,
'以"梯"字元分割的一維陣列
'T變數在最前面是宣告為 通用型變數!此一動作會讓T變成一維陣列
'T變數變化舉例:T=5 (T是數字),T="5" (T是字串),T=5 & 5 (T是字串)
Brr(N, 1) = Arr(i, 1)
'↑將Arr陣列迴圈列第一欄的值倒入 Brr陣列N列第一欄裡
Brr(N, 2) = T(0) & "梯"
'↑將T這一維陣列的第一個值連接"梯"成為字串後,放進Brr陣列N列第二欄裡
'因為被Split()拆解的陣列都從(0)開始編號!
Brr(N, 3) = T(1)
'↑將T這一維陣列的第二個值,放進Brr陣列N列第三欄裡
End If
Next j
Next i
With Sheets("Sheet2")
'↑以下是關於 名為: "Sheet2" 工作表的程序
.UsedRange.Clear
'↑工作表的使用儲存格清除掉!
'這個動作會讓.UsedRange.Address=$A$1
If N = 0 Then Exit Sub
'↑如果N變數是0,就結束程式執行!
'N變數如果是0,是因為前面的程序IF條件都不成立!N都沒機會累加
.[A1:C1] = Array("姓名", "梯次", "日期")
'↑[A1],[B1],[C1]儲存格用一維陣列個別倒進去,[A1]="姓名",[B1]="梯次",[C1]="日期"
.[A2:C2].Resize(N) = Brr
'↑從[A2:C2]向下擴展N變數 列數的區域儲存格,以Brr陣列值倒進去
Application.Goto .[A1]
'↑儲存格游標跳到Sheets("Sheet2").[A1]
End With
End Sub |
|