- 帖子
- 1447
- 主題
- 40
- 精華
- 0
- 積分
- 1471
- 點名
- 0
- 作業系統
- Windows 7
- 軟體版本
- Excel 2010 & 2016
- 閱讀權限
- 50
- 性別
- 男
- 來自
- 台灣
- 註冊時間
- 2020-7-15
- 最後登錄
- 2025-5-5
|
3#
發表於 2023-3-24 09:14
| 只看該作者
回復 1# adam2010
謝謝前輩發表此主題與範例,謝謝論壇
後學藉此帖練習陣列與儲存格位址之間的對照,練習到很多心得,
後學練習的解決方案如下,請前輩參考
執行前:
執行結果:
Option Explicit
Sub TEST()
Dim Brr, Ra, Rs, Rn, j%, xU As Range, xA As Range
'↑宣告變數:(Brr,Ra,Rs,Rn)是通用型變數,j是短整數變數,(xU,xA)是儲存格變數
Set xA = Sheets("工作表1").UsedRange
'↑令xA這儲存格變數是 "工作表1" 工作表的有使用儲存格
For Each Ra In xA.SpecialCells(2)
'↑設逐項迴圈!令Ra這通用型變數是 xA儲存格集裡的非空格儲存格之一
Rn = IIf(Ra = "總計" And Rn = "" And Rs <> "", Ra.Address, Rn)
'↑令Rn這通用型變數是IIf()回傳值,
'IIf():如果Ra變數是 "總計"字串,而且Rn是空字元,並且Rs變數不是空字元?
'就令Rn變數是 Ra變數的儲存格位址,否則令Rn變數依然是 Rn變數
Rs = IIf(Ra = "總計" And Rs = "", Ra.Address, Rs)
'↑令Rs這通用型變數是IIf()回傳值,
'IIf():如果Ra變數是 "總計"字串,而且Rs是空字元,
'就令Rs變數是 Ra變數的儲存格位址,否則令Rs變數依然是 Rs變數
Next
If Rs = Empty Or Rn = Empty Then Exit Sub
'↑如果Rs變數是初始值 或 如果Rn變數是初始值!就結束程式執行
Set xA = Range(Rs, Rn)
'↑令xA這儲存格變數是 兩個(總計)儲存格擴展範圍的儲存格
Brr = xA
'↑令Brr這通用型變數是 二維陣列,以xA變數值帶入
Set xU = Cells(1, Columns.Count)
'↑令xU這儲存格變數是 第1列最後一欄儲存格
For j = 1 To UBound(Brr, 2)
'↑設順迴圈!j從1到 Brr陣列橫向最大索引欄號
If IsDate(Brr(1, j)) And Brr(UBound(Brr), j) = 0 Then
'↑如果第1列j變數欄Brr陣列值是日期,而且最後列j變數欄Brr陣列值是 0
Set xU = Union(xU, xA(j))
'↑令xA變數(儲存格)裡的 第j變數個儲存格,納入xU儲存格集裡
End If
Next
Application.Goto xU.EntireColumn
'↑令儲存格游標到 xU變數所在的欄位
Set xA = Nothing: Set xU = Nothing: Set Ra = Nothing: Erase Brr
'↑令釋放變數
End Sub |
|