
動作環境:
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を探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
正負を反転させて出力するプロ...
-
プログラミング初心者です。 Py...
-
java初心者です。入力されたの...
-
漢字のソートについて
-
コマンドプロンプトからのEOFの...
-
scanfの後のfgetsについて
-
C言語 入力した値から0までの数...
-
Excel VBAで、Application.Inpu...
-
Linuxプログラミングで、キーボ...
-
"gets"は危険なのでしょうか?
-
getc 等の違い
-
UWSCで変数をキー入力
-
scanfが2回使えない・・・?;
-
Eclipseコンソール表示を、リセ...
-
入力候補を表示させるには・・・?
-
プログラミングの問題です 「金...
-
文字のリアルタイム検索がした...
-
getchar()について 教えてくだ...
-
scanf("%s", buf);でスペースを...
-
数字以外が入力されたらエラー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラミング初心者です。 Py...
-
正負を反転させて出力するプロ...
-
*をユーザーが入力した数字の数...
-
java初心者です。入力されたの...
-
数字以外が入力されたらエラー...
-
Eclipseコンソール表示を、リセ...
-
Excel VBAで、Application.Inpu...
-
scanfが2回使えない・・・?;
-
EDITコントロールで入力できる...
-
cout関数を使っているのですが...
-
小数か整数かを判定する方法
-
至急教えてください!プログラ...
-
入力候補を表示させるには・・・?
-
C言語 逆ピラミッドの作り方
-
VisualStudio2019のコードアナ...
-
コマンドプロンプトからのEOFの...
-
Date関数で書いた日付がおかしい
-
WindowsでEOF
-
実行結果の順番がおかしいんで...
-
Linuxで入力待ちなしkeyread関...
おすすめ情報