
動作環境:
Windows10
EXCEL 2016 VBA
Microsoft VBScript regular Expressions 5.5 参照設定
===============
上記環境で
正規表現で文字列の存在を確認する場合
文字列 myStr = "{(a+b+c),d}"
の中に、文字パターン myPtn = ",d}"の存在を確認する例として、
===
Sub 正規EXP_tst()
Dim myStr As String
Dim myPtn As String
myStr = "{(a+b+c),d}" ’対象文字列
myPtn = ",d}" '存在を確認したい文字パターン
Debug.Print RegExpExists(myPtn, myStr)
End Sub
Function RegExpExists(myPtn As String, myStr As String)
'Microsoft VBScript Regular Expressions 5.5 参照設定
Dim myRegExp As VBScript_RegExp_55.RegExp
Dim myMatchClc As VBScript_RegExp_55.MatchCollection
Dim myMatch As VBScript_RegExp_55.Match
Set myRegExp = New VBScript_RegExp_55.RegExp
With myRegExp
.Pattern = myPtn 'パターンの設定
.IgnoreCase = True '大文字と小文字を区別しない
.Global = True '文字列全体を検索
RegExpExists = .Test(myStr)
End With
Set myMatchClc = Nothing 'オブジェクトの解放
Set myMatch = Nothing
Set myRegExp = Nothing
End Function
===
を実行すれば、イミディエイト画面にはTrueを表示し、対象文字列に",d}”の文字パターンが記されていることを確認できます。
文字パターン種類がいくつかありまた、未次自体もd以外のA1セルに入力した文字を確認したい時、
w1 = Range("A1")
Range("A2")に "," & w1 & "}"と入力し
myPtn = Range("A2")
と変数に入力して実行すれば良いはずです。
Range("A1")にdを入力すれば、myPtn = ",d}"
となるので、d以外の文字列記載の確認も可能なはずです。ところが、
===
Sub 正規EXP_tst()
'Microsoft VBScript Regular Expressions 5.5 参照設定
Dim myStr As String
Dim myPtn As String
Dim w1 As String
Dim p1 As String
w1 = Range("A1").Value ’ dを入力
p1 = Range("A2").Value ’ "," & w1 & "}"を入力
myStr = "{(a+b+c),d}"
myPtn = p1 'パターンを指定する
Debug.Print RegExpExists(myPtn, myStr)
End Sub
===
を実行するとイミディエイト画面にはFalseを表示して存在しないことになります。すなわちタターンを検出しません。
ウオッチウインドウで確認すると、
w1は、入力した文字dを表示します。
p1は、入力したパターン "," & w1 & "}"をそのまま表示します。",d}"が表示されると思っていましたが、w1のままでした。
実行時にw1として入力したdに置き換わと思っていたのですが、
実行結果がFalseであることから置換処理は実行されていないようです。
正規表現のパターン表現を変数を含んだパターンとして実行する方法があれば教えて下さい。
No.1ベストアンサー
- 回答日時:
>p1 = Range("A2").Value
p1が『セルの値』を代入されるから
>p1は、入力したパターン "," & w1 & "}"をそのまま表示します
になりますよ。
少なくともセルA2に ="," & A1 & "}" と『数式』を入れておき
'w1 = Range("A1").Value ’ dを入力 ・・・不要
p1 = Range("A2").Value ’ 数式の結果を代入
なら出来ると思いますけど?(検証はしてません)
セルA2に必要性がわからないですが
w1 = Range("A1").Value ’ dを入力
p1 = "," & w1 & "}"
Range("A2").Value = p1
でも良いのかもしれません。
多量の文字列を対象として、特定の文字(w1)を、
複数の表示パターン(p1)で表示した文字列を識別するプログラムを組んでいます。
w1、p1はともに表にしているので質問時はRange("A1")、Range("A2")としています。
全ての文字w1が各々p1のパターンで表現されていることを判定するためにFor Each w1 In Range("A"),
For Each p1 In Range("A2")で全組み合わせのチェックを実行します。
例えば、パターンは
"," & w1 & "}"
"," & w1 & "\)"
"\*" & w1 & "}"
"\*" & w1 & "\)"
"," & w1 & "\/"
"\*" & w1 & "/"
"," & w1 & "\*"
"\+" & w1 & "/"
"\+" & w1 & "\*"
の形式で、
w1は専門用語リストです。
多量の文字列は専門書(技術論文)です。
質問のため簡略にしたつもりですが、イメージを伝えないままの質問は失礼になると思い追加記述としました。
VBAを勉強して3か月です。これが初めてのプログラムなのですが、何とか使えそうになっています。
最後の機能実装で前に進まなくなったので質問しました。
即、回答いただきイメージが出来ましたので早速作業を進めることが出来そうです。この休日で解決できそうです。
ありがとうございました。深謝です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
数字以外が入力されたらエラー...
-
プログラミングの問題です 「金...
-
C言語・YesNo入力のループで解...
-
Eclipseコンソール表示を、リセ...
-
Linuxで入力待ちなしkeyread関...
-
*をユーザーが入力した数字の数...
-
"scanf"でエンターで改行させな...
-
コマンドプロンプトからのEOFの...
-
正負を反転させて出力するプロ...
-
getchar使用時の入力文字消去方法
-
プログラミング初心者です。 Py...
-
入力候補を表示させるには・・・?
-
EDITコントロールで入力できる...
-
C言語 アロー演算子
-
C++:cinが上手く使えない
-
Excel VBAで、Application.Inpu...
-
Userformの入力順序をタブオー...
-
4桁の数字以外を入力したらエラ...
-
プログラミング
-
入力されたとき,何も入力しな...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
*をユーザーが入力した数字の数...
-
数字以外が入力されたらエラー...
-
java初心者です。入力されたの...
-
Eclipseコンソール表示を、リセ...
-
正負を反転させて出力するプロ...
-
プログラミング初心者です。 Py...
-
scanfが2回使えない・・・?;
-
Excel VBAで、Application.Inpu...
-
"scanf"でエンターで改行させな...
-
scanf が無視されます
-
C言語 逆ピラミッドの作り方
-
プログラミングの問題です 「金...
-
if文の条件にscanf関数を使うと…?
-
C言語でgetchar();が上手く使え...
-
UWSCで変数をキー入力
-
4桁の数字以外を入力したらエラ...
-
EDITコントロールで入力できる...
-
C言語でつるかめ算をするにはど...
-
Userformの入力順序をタブオー...
-
C言語scanf_sで何故か2回入力に...
おすすめ情報