我在 Excel 中有一個值串列,看起來像這樣:
J0-315 Sirkulasjonspumpe So2
J0-318 Sirkulasjonspumpe So2
Sirkulasjonspumpe J0-321
Sirkulasjonspumpe So2 J0-324
Sirkulasjonspumpe So2 J0-327
Sirkulasjonspumpe So2 J0-330
S1-179 Spjeld Ut Fra Pumpe
S1-187 Spjeld Ut Fra Pumpe
Spjeld Ut Fra Pumpe S1-195
Spjeld Ut Fra Pumpe S1-203
Spjeld Ut Fra Pumpe S1-211
Spjeld Ut Fra Pumpe S1-219
Ventil Inn Y227
S1-181 Spjeld Ut Fra Pumpe
S1-189 Spjeld Ut Fra Pumpe
Spjeld Ut Fra Pumpe S1-197
Spjeld Ut Fra Pumpe S1-205
Spjeld Ut Fra Pumpe S1-213
Spjeld Ut Fra Pumpe S1-221
Ventil Mot Tankfarm Y234
Ventil Ut Y225
現在,我想將每行除第一個以外的每個單詞更改為小寫,除非它是機器編號(例如 J0-315、Y225)。理想情況下,我也會將化合物 (SO2) 更改為大寫,但這種情況很少,我會在之后手動完成:-p
現在,我想出了一個宏,它列印出我想要更改的所有值,但我無法弄清楚如何將子匹配更改為小寫,并且一些粗略的谷歌搜索也無法給我任何見解。
這里有人可以給我一個關于如何解決這個問題的線索嗎?
到目前為止,我想出的代碼可以在下面找到:
Sub dlgho()
Dim c As Range
Dim regex As New RegExp
Dim matches As MatchCollection
Dim m As Match
Dim i As Long
With regex
.Global = True
.MultiLine = True
.IgnoreCase = False
.Pattern = "([A-Z???])[^0-9\-]"
End With
For Each c In Sheet8.Range("A1:A896")
If regex.Test(c) Then
Set matches = regex.Execute(c)
If matches.Count > 1 Then
For i = 1 To matches.Count - 1
Set m = matches(i)
Debug.Print m
Debug.Print m.SubMatches(0)
Next i
End If
End If
Next c
End Sub
明確地說,我希望將第二個列印陳述句中列印的字符更改為小寫,但我不確定如何進行此操作。
預期的輸出將是
J0-315 sirkulasjonspumpe so2
J0-318 sirkulasjonspumpe so2
Sirkulasjonspumpe J0-321
Sirkulasjonspumpe so2 J0-324
Sirkulasjonspumpe so2 J0-327
Sirkulasjonspumpe so2 J0-330
S1-179 spjeld ut fra pumpe
S1-187 spjeld ut fra pumpe
Spjeld ut fra pumpe S1-195
Spjeld ut fra pumpe S1-203
Spjeld ut fra pumpe S1-211
Spjeld ut fra pumpe S1-219
Ventil inn Y227
S1-181 spjeld ut fra pumpe
S1-189 spjeld ut fra pumpe
Spjeld ut fra pumpe S1-197
Spjeld ut fra pumpe S1-205
Spjeld ut fra pumpe S1-213
Spjeld ut fra pumpe S1-221
Ventil mot tankfarm Y234
Ventil ut Y225
uj5u.com熱心網友回復:
非正則運算式方法,按 1 編輯單元格也很慢且效率低下,因此更快的方法是將范圍的值傳輸到陣列并改為處理陣列。
這也將SO2作為大寫。
完整代碼如下:
Sub dlgho()
Const whiteList As String = "SO2"
Const inputRange As String = "A1:A896"
Dim inputArr As Variant
inputArr = Sheet1.Range(inputRange).Value
Dim wordArr() As String
Dim i As Long
Dim n As Long
For n = 1 To UBound(inputArr)
wordArr = Split(inputArr(n, 1), " ")
For i = 1 To UBound(wordArr)
If InStr(wordArr(i), "-") = 0 And _
Not IsNumeric(Mid$(wordArr(i), 2)) Then
wordArr(i) = LCase(wordArr(i))
End If
If UCase(wordArr(i)) = whiteList Then wordArr(i) = UCase(wordArr(i))
Next i
inputArr(n, 1) = Join(wordArr, " ")
Next n
Sheet1.Range(inputRange).Value = inputArr
End Sub
uj5u.com熱心網友回復:
如果機器號的通用識別符號是以三位數結尾,您也可以使用本機功能:

公式B1:
=LET(X,FILTERXML("<t><s>"&SUBSTITUTE(A1," ","</s><s>")&"</s></t>","//s"),Y,TEXTJOIN(" ",,IF(ISNUMBER(--RIGHT(X,3)),X,LOWER(X))),UPPER(LEFT(Y))&MID(Y,2,LEN(Y)))
或者:
=LET(X,FILTERXML("<t><s>"&SUBSTITUTE(A1," ","</s><s>")&"</s></t>","//s"),Y,SEQUENCE(COUNTA(X)),TEXTJOIN(" ",,IF(Y>1,IF(ISNUMBER(--RIGHT(X,3)),X,LOWER(X)),X)))
如果可以訪問REDUCE(),您可以嘗試:
=TRIM(REDUCE("",FILTERXML("<t><s>"&SUBSTITUTE(A1," ","</s><s>")&"</s></t>","//s"),LAMBDA(a,b,a&" "&IF(OR(a="",ISNUMBER(--RIGHT(b,3))),b,LOWER(b)))))
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/339736.html
上一篇:無法在本機反應中加載靜態影像
