Excel の VB マクロで、特定の文字列で始まる単語をすべて削除するにはどうすればよいですか?
例えば:
文字列は次のとおりです。xxxx $AUD543.43 yyyy
$AUD
次のスペースの前の単語全体を削除して、文字列内の何かを検索したい
したがって、上記の例は次のようになります。
xxxx yyyy
正規表現を使用します。VBA >> ツール >> オプションに Microsoft VBScript 正規表現への参照を追加します。
Dim txt As String
txt = "$Audthisfew is$Aud $Auda test $Aud"
Set regEx = New RegExp
With regEx
.Global = True
.Pattern = "((^, )\$Aud)"
Debug.Print .Replace(txt, "")
End With
正確にはあなたが求めているものではありませんが、Excelの数式を使用してこれを実現することもできます。テキストがA1にあるとすると、式は次のようになります。
=TRIM(LEFT(A1,FIND("$AUD",A1)-1))&RIGHT(A1,LEN(A1)-FIND(" ",A1,FIND("$AUD",A1))+1)
あなたが「あなたが(した)試したこと」を示すという期待を思い出させないのは私の怠慢です. (質問に答えたことで怒鳴られるのを避けるためです。)こうして私の義務は果たされたので、次に進みます。
実際には、これを行うために必ずしも VBA コードが必要というわけではありません。不器用ではありますが、Find() 関数を使用してそれを行うことができます。非常に大きなシートにはお勧めしません。それでも、あなたが指定した VBA コードは、あなたが持つべきものです。検索する範囲に合わせて範囲を変更します。また、例では x と y の間にスペースが 1 つしかないことに注意してください。これは、$AUD で始まり、次のスペースの前で終わる単語であるという要求とは異なります。スペースが 1 つだけ必要な場合は、それに応じて数式を調整してください。
Sub ReplaceText()
Dim rng As Excel.Range
Dim s_Contents As String
Dim l_FindAUD As Long, l_FindSpace As Long
For Each rng In ActiveSheet.UsedRange
s_Contents = rng.Value
'Does the $AUD expression exist in this cell?
l_FindAUD = InStr(1, s_Contents, "$AUD", vbTextCompare)
If l_FindAUD > 0 Then
'If so, is it followed by a space?
l_FindSpace = InStr(l_FindAUD, s_Contents, " ")
If l_FindSpace > 0 Then
'If so, take all of the content up to but not including the $
'and all of the contents from the space onwards, merge them
'together and write to the cell.
s_Contents = Left$(s_Contents, l_FindAUD - 1) & Mid$(s_Contents, l_FindSpace)
rng.Value = s_Contents
End If
End If
Next
End Sub
私の例は、セルの最後の数単語を削除するために使用されます
例えば:
セル A1: ABCDE[Acct:12345]
セル A2: FGHIJ[Acct:67890]
セル A3: KLMNO
「[Acct:」で始まるすべての単語を削除したい。すべてのセルに「[Acct:」が含まれているわけではないことに注意
列 B に以下の関数を挿入すると、左側の "[Acct:" =LEFT(A1,FIND("[Acct:",A1)-1) の単語が返されます。
結果: AB ABCDE[Acct:12345] ABCDE FGHIJ[Acct:67890] FGHIJ KLMNO #VALUE! 列 C で、関数の下に挿入します。列 B が #VALUE であるかどうかがチェックされます。そして、必要なものを返します =IF(ISERROR(C1)=TRUE,A1,B1))
結果:
A B C
ABCDE[Acct:12345] ABCDE ABCDE
FGHIJ[Acct:67890] FGHIJ FGHIJ
KLMNO #VALUE! KLMNO
次に、3つの列をコピーして値を貼り付け、列 A と B を削除すると、列 C が最終結果になります。