- 帖子
- 1447
- 主題
- 40
- 精華
- 0
- 積分
- 1471
- 點名
- 0
- 作業系統
- Windows 7
- 軟體版本
- Excel 2010 & 2016
- 閱讀權限
- 50
- 性別
- 男
- 來自
- 台灣
- 註冊時間
- 2020-7-15
- 最後登錄
- 2025-5-5
|
6#
發表於 2023-2-17 08:52
| 只看該作者
1.利用2個陣列加1輔助欄輔助索引號:
1.1.將符合刪除條件的列在輔助欄顯示空字元
2.2.不符合刪除條件的列在輔助欄顯示累加索引號
2.整個區域做輔助欄順排序,將符合刪除條件的列擠到後面去
3.將符合刪除條件的列一次清除掉
4.將輔助欄清除
Sub DelArray3()
Dim Arr, Brr(), xArea As Range, x&, Xm&, y&, Ym&, N&
'↑宣告變數:Arr是 通用型變數,Brr是陣列,xArea是儲存格變數,其他是長整數變數
ST = Timer
'↑令ST是 現在時間(秒)
With ActiveSheet.UsedRange
'↑以下是關於現表已使用儲存格擴展為最小方正範圍儲存格的程序
Arr = .Value
'↑令Arr這通用型變數是二維陣列,以這With程序儲存格值帶入
Ym = UBound(Arr, 1)
'↑令Ym這長整數變數是Arr陣列縱向最大索引列號數
'PS:可以省略為 Ym = UBound(Arr)
Xm = UBound(Arr, 2)
'↑令Xm這長整數變數是Arr陣列橫向最大索引欄號數
Set xArea = .Resize(Ym, Xm + 1)
'↑令xArea這儲存格變數是 以這With程序儲存格擴展向下Ym變數列,
'向右(Xm變數 + 1)欄
'(PS:增加1輔助欄)
ReDim Brr(1 To Ym, 0)
'↑宣告Brr這陣列變數是二維的,
'大小:縱向從1到Ym變數列,橫向1欄,索引號是0到0
For y = 1 To Ym
'↑設順迴圈!y從1到Ym變數
For x = 1 To Xm
'↑設順迴圈!x從1到Xm變數
If InStr(Arr(y, x), "EC1-") Then GoTo 101
'↑如果以InStr()判斷回傳值不是0,就跳到 101位置繼續執行
'PS:判斷:y變數列第x變數欄Arr陣列值裡從第幾個字開始包含 "EC1-"字串
'如果不包含就回傳 0
Next x
N = N + 1: Brr(y, 0) = N
'↑令N這長整數變數累加 1:令y變數列0索引號欄Brr陣列值是 N變數
101: Next y
If N = Ym Then Exit Sub
'↑如果N變數=Ym變數!就結束程式執行(代表沒有符合條件的列)
xArea.Columns(Xm + 1) = Brr
'↑令xArea變數的(Xm變數+1)欄範圍儲存格以Brr陣列值帶入(PS:輔助欄帶入輔助索引值)
End With
With xArea
'↑以下是關於 xArea變數的程序
.Sort Key1:=.Item(Xm + 1), Order1:=xlAscending, Header:=xlNo
'↑令xArea(儲存格)以(Xm變數+1)欄第1列儲存格所在的欄(AB欄)當基準,
'做沒有標題列的順排序排序
.Rows(N + 1 & ":" & Ym).Clear
'↑令xArea變數範圍裡的第 (N變數 + 1)列到 範圍裡的Ym變數列,
'這範圍儲存格清除
.Columns(Xm + 1).Clear
'↑令xArea變數的(Xm變數+1)欄範圍儲存格清除 (PS:輔助欄清除)
End With
MsgBox Format(Timer - ST, "0.0秒")
'↑跳出提示窗 以小數點1位的格式顯示執行的秒數
End Sub |
|