- 帖子
- 1447
- 主題
- 40
- 精華
- 0
- 積分
- 1471
- 點名
- 0
- 作業系統
- Windows 7
- 軟體版本
- Excel 2010 & 2016
- 閱讀權限
- 50
- 性別
- 男
- 來自
- 台灣
- 註冊時間
- 2020-7-15
- 最後登錄
- 2025-3-24
|
4#
發表於 2023-4-18 08:00
| 只看該作者
回復 3# PJChen
謝謝前輩回復,一起學習,謝謝論壇,謝各位前輩
後學藉這帖複習昨天的方案,方案心得註解如下,請前輩參考,請各位前輩指教
Option Explicit
Sub TEST()
Dim Brr, V, i, j&, Z&, xR As Range
'↑宣告變數:(Brr,V,i)是通用型變數,(j,Z)是長整數,xR是儲存格變數
Set xR = Range([A17], Cells(Rows.Count, "A").End(xlUp)): Brr = xR
'↑令xR這儲存格變數是 [A17]到 A欄最後一個有內容儲存格,
'令Brr這通用型變數是 二維陣列,以xR變數(儲存格)值帶入
With xR.Offset(0, 1)
'↑以下是關於xR變數向右偏移一欄的程序
.Value = Brr
'↑令其儲存格值是 Brr陣列值
For Each i In Array("*(", ")*", " "): .Replace i, "", 2: Next
'↑設逐項迴圈,令i這通用型變數是 一維陣列中的一個字串
'令該範圍儲存格做字元置換,先將左括弧"(" 左邊的字元都換成空字元
'再將右括弧")" 右邊的字元都換成空字元
'最後將空白字元都換成空字元
For i = 65 To 122: .Replace Chr(i), "", 2: Next
'↑設順迴圈!i從65 到122
'令該範圍儲存格做字元置換從A,B,C,D....做置換成空字元,Chr(65)="A"
', 2是指儲存格裡字串部分相同就做置換,不需要字串全部相同才置換
Brr = .Value
'↑令Brr這通用型變數換裝上述這些迴圈的儲存格結果值
End With
For i = 1 To UBound(Brr)
'↑設順迴圈!i從1 到Brr縱向最大索引列號
V = Split(Brr(i, 1), ",")
'↑令V這通用型變數是一維陣列,以i迴圈列1欄Brr陣列值被","分割後的值
For j = 0 To UBound(V)
'↑設順迴圈!j從0 到V陣列最大索引號數
If InStr(V(j), "-") Then
'↑如果j迴圈V陣列值包含"-"符號??
Z = Z + Abs(Evaluate("=" & V(j))) + 1
'↑就令Z這長整數變數是 自身 + 計算值
'計算值:j迴圈V陣列值在前面加個"="之後做運算
'例如:Evaluate("=2-14") =-12
'Abs(-12)=12 :是絕對值,讓值都變正數的意思,
'最後按照範例意義 +1
ElseIf V(j) <> "" Then
'↑否則如果j迴圈V陣列值不是空字元?
Z = Z + 1
'↑就令Z變數累加 1
End If
Next
Brr(i, 1) = Z: Z = 0
'↑令i迴圈列第1欄Brr陣列值是 變數Z,
'↑令Z變數是 0 (因為要跑i的下一個迴圈了,所以要讓Z歸零重算)
Next
xR.Offset(0, 1) = Brr
'↑令xR變數向右偏移一欄,這範圍儲存格值以Brr陣列值帶入
Set xR = Nothing: Erase Brr, V
'↑令釋放這些變數
End Sub |
|