Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 11 Pro : Microsoft 365)
正規表現を使った文字検索
投稿日時: 24/02/02 14:39:23
投稿者: ストロベリー

正規表現を使って、半角スペースで囲われた大文字アルファベット1文字を検索したいです。
下記のようなプログラムを書きましたが、うまく引っかかりません。
 

Sub test()

  Dim match As Object, Matches As Object
  
  With CreateObject("VBScript.RegExp")
  
    .Pattern = " [A-Z] "
    .Global = True
    
    Set Matches = .Execute("a S T test.")
    Debug.Print Matches.Count
    For Each match In Matches
      Debug.Print match.Value
    Next
    
  End With
  
End Sub

 
この例の場合、" S "だけ引っかかて、" T "が引っかかりません。
パターンの書き方が間違っているでしょうか。
 
よろしくお願いします。

回答
投稿日時: 24/02/02 15:07:24
投稿者: Suzu

.Pattern = "\s*[A-Z]*\s"
 
デバッグウィンドに表示される結果を確認してみましょう。
 
なぜ先の結果になったのか理解できると思います。

投稿日時: 24/02/02 15:26:25
投稿者: ストロベリー

Suzu 様
 
回答していただき、ありがとうございます。
 
実行してみましたが、引っかかった結果として、" S "と"T "で、"T"の前の半角スペースがありません。
自分の理解できていないところだと思いますが、
" S "が見つかった後、"S"の後ろの半角スペースの次の文字、
つまり"T"の位置から次のパターンに合う文字を検索するため、
私が書いたパターンでは" [A-Z] "引っかからなかった、ということでしょうか。
 
よろしくお願いします。
 

回答
投稿日時: 24/02/02 15:37:47
投稿者: sk

引用:
.Pattern = " [A-Z] "
.Global = True
Set Matches = .Execute("a S T test.")

引用:
この例の場合、" S "だけ引っかかて、" T "が引っかかりません。

" S " が見つかった後の残りの文字列は "T test." であり
( "T" の前に半角スペースはない)、その文字列の中に
" T " という文字列は含まれていないからです。
 
引用:
正規表現を使って、半角スペースで囲われた大文字アルファベット1文字を検索したい

半角スペースを一種の区切り記号として扱われているのであれば、
例えば評価対象となる文字列を Split 関数によって 1 次元配列に変換し、
それぞれの要素ごとに正規表現によるパターンマッチングを実行する方が
より精度が安定するのではないかと思います。

投稿日時: 24/02/02 15:45:52
投稿者: ストロベリー

sk 様
 
回答していただき、ありがとうございます。
 
自分が書いたパターンで引っかからない理由がわかりました。
ありがとうございます。
 
半角スペースで囲われた大文字アルファベット1文字を検索するのが目的、
Split 関数を使うやり方を検討してみたいと思います。
 
ありがとうございました。