
動作環境:
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を探す
今、見られている記事はコレ!
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
-
大麻の使用罪がなかった理由や法改正での変更点、他国との違いを弁護士が解説
ドイツで2024年4月に大麻が合法化され、その2ヶ月後にサッカーEURO2024が行われた。その際、ドイツ警察は大会運営における治安維持の一つの方針として「アルコールを飲んでいるグループと、大麻を吸っているグループ...
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
*をユーザーが入力した数字の数...
-
数字以外が入力されたらエラー...
-
正負を反転させて出力するプロ...
-
Eclipseコンソール表示を、リセ...
-
エクセル¥マクロで対話形式の...
-
if文の条件にscanf関数を使うと…?
-
プログラミング初心者です。 Py...
-
C言語でgetchar();が上手く使え...
-
C言語でscanfが認識されません
-
文字のリアルタイム検索がした...
-
scanf()の順番
-
文字列で条件分岐 if swtich
-
java初心者です。入力されたの...
-
コマンドプロンプトからのEOFの...
-
Userformの入力順序をタブオー...
-
ワードで文字を入力する時の変...
-
VB カウントダウンタイマーの作...
-
漢字のソートについて
-
あるキーを押したら強制終了さ...
-
scanfでの可変引数
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
数字以外が入力されたらエラー...
-
*をユーザーが入力した数字の数...
-
java初心者です。入力されたの...
-
正負を反転させて出力するプロ...
-
Eclipseコンソール表示を、リセ...
-
scanfが2回使えない・・・?;
-
プログラミング初心者です。 Py...
-
C言語でgetchar();が上手く使え...
-
Excel VBAで、Application.Inpu...
-
電卓の小数点
-
cout関数を使っているのですが...
-
"scanf"でエンターで改行させな...
-
小数か整数かを判定する方法
-
至急教えてください!プログラ...
-
getchar()について 教えてくだ...
-
scanf が無視されます
-
batプログラム上で文字列を入力...
-
コマンドプロンプトからのEOFの...
-
IF文で戻ることはできますか?...
-
プログラミングの問題です 「金...
おすすめ情報