- 帖子
- 1447
- 主題
- 40
- 精華
- 0
- 積分
- 1471
- 點名
- 0
- 作業系統
- Windows 7
- 軟體版本
- Excel 2010 & 2016
- 閱讀權限
- 50
- 性別
- 男
- 來自
- 台灣
- 註冊時間
- 2020-7-15
- 最後登錄
- 2025-2-11
|
回復 3# PJChen
再次謝謝前輩發表此主題,謝謝論壇
後學複習程式碼做心得註解,請前輩參考,請各位前輩指教
,Option Explicit
Sub TEST()
Dim Brr, i&, j&, T$, T1$, xR As Range, Sh As Worksheet
'↑宣告變數:Brr是通用型變數,(i,j)是長整數,(T,T1)是字串變數,
'xR是儲存格變數,Sh是工作表變數
Set Sh = Sheets("mark")
'↑令Sh這工作表變數是名為 "mark"的工作表
Set xR = Intersect(Sh.[J:AD], Sh.[J1].CurrentRegion.Offset(1, 0))
'↑令xR這儲存格變數是 兩個範圍儲存格交集的範圍儲存格
'範圍1:"mark"工作表的J欄到AD欄之間的所有儲存格
'範圍2:"mark"工作表的[J1]儲存格相鄰串接儲存格擴展最小方正範圍的儲存格
Intersect(xR.Offset(1, 0), [AD:AD]).ClearContents
'↑令兩個範圍儲存格交集的範圍儲存格清除其內容
'範圍1:xR變數向下偏移一列的範圍儲存格
'範圍2:AD欄全部的儲存格
Brr = xR
'↑令Brr這通用型變數是 二維陣列,令以xR變數值(儲存格值)帶入陣列
For i = 1 To UBound(Brr) - 1
'↑設順迴圈!i從 1到 Brr陣列縱向第2大索引列號
For j = 1 To UBound(Brr, 2) - 1
'↑設順迴圈!j從 1到 Brr陣列橫向第2大索引欄號
T = Brr(i, j)
'↑令T這字串變數是 i迴圈列第j迴圈欄的Brr陣列值
T1 = Replace(Replace(T1 & "," & T & ",", ",,", ","), ",,", ",")
'↑令T1這字串變數是 T1變數連接逗號,再連接T變數,
'再連接逗號組成的新字串,最後經過兩次字串置換後的全新字串
'第1次字串置換是將字串裡的",,"雙逗號置換成","1個逗號
'第2次字串置換也是將字串裡的",,"雙逗號置換成","1個逗號
Next
Brr(i, 1) = Mid(Left(T1, Len(T1) - 1), 2): T1 = ""
'↑令i迴圈列第1欄Brr陣列值是 斷捨離之後剩下的字串
'先T1變數字串取左側的字元,最右邊的字不取,
'之後再取右邊的字元,最左邊的字不取,
'PS:就是最左最右的這兩個字元不要,取中間的字串
Next
With Intersect(Intersect(xR, [AD:AD]), Sh.[J1].CurrentRegion)
'↑以下是關於兩次儲存格範圍交集後儲存格的程序
.Value = Brr: .Select
'↑令其儲存格值是 Brr陣列值,Brr陣列超過該儲存格範圍的值不用它
End With
Set xR = Nothing: Set Sh = Nothing: Erase Brr
'↑令釋放變數
End Sub |
|