![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
動作環境:
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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- Excel(エクセル) 指定文字列が該当するA列をアクティブセルにするには 3 2022/08/17 13:18
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) エクセルVBAのコードで質問です。 下のコードはJ16の文字列をB3を起点とする範囲から探して、見つ 5 2023/04/07 11:07
- Visual Basic(VBA) 稀に1円合いません? Sheet1から金額と個数を貼り付ける下記コードで、金額を切り上げるコードを何 3 2022/09/05 15:11
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
正負を反転させて出力するプロ...
-
プログラミング初心者です。 Py...
-
scanf が無視されます
-
数字以外が入力されたらエラー...
-
C言語でつるかめ算をするにはど...
-
キー入力制限について
-
enterでループ終了
-
無限ループを抜け出す方法を教...
-
if文の条件にscanf関数を使うと…?
-
ワードで文字を入力する時の変...
-
c言語応用で血液型判定プログ...
-
コンボボックスで日本語入力を...
-
コンソールアプリの入力時に改...
-
C++ scanfで止まらない
-
実行結果の順番がおかしいんで...
-
EXCEL VBA での、正規表現のパ...
-
コマンドプロンプトからのEOFの...
-
java初心者です。入力されたの...
-
C言語でgetchar();が上手く使え...
-
プログラミングC言語について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
*をユーザーが入力した数字の数...
-
正負を反転させて出力するプロ...
-
数字以外が入力されたらエラー...
-
プログラミング初心者です。 Py...
-
java初心者です。入力されたの...
-
プログラミングの問題です 「金...
-
Eclipseコンソール表示を、リセ...
-
C言語 逆ピラミッドの作り方
-
"scanf"でエンターで改行させな...
-
scanf が無視されます
-
if文の条件にscanf関数を使うと…?
-
C言語について
-
C言語scanf_sで何故か2回入力に...
-
Excel VBAで、Application.Inpu...
-
小数か整数かを判定する方法
-
cout関数を使っているのですが...
-
double型が正常に認識されてい...
-
scanfが2回使えない・・・?;
-
C言語でgetchar();が上手く使え...
-
WindowsでEOF
おすすめ情報