[SeleniumVBA]vba-regexを使用した正規表現について
1 作成の経緯
以下、八寿様作成のQiita記事において、VBScriptを利用した正規表現が使用できなくなった場合の代替案として、GitHubで公開している「vba-regex」(@sihlfall)が紹介されていました。
上記の記事で目を引いたのが、近い将来vbscript.dllの提供廃止によりMicrosoft VBScript Regular Expressions 5.5を参照してNew RegExpとしたり、CreateObject("VBScript.RegExp")が使用できなくなるとの箇所です。
SeleniumVBAにおいては、WebDriver自動更新などのプログラムでバージョン情報の抜き出し等に正規表現が活用されているため、使用できなくなった場合の影響は大きいと思われます。
八寿様の記事において、SeleniumVBA作者(@GCuser99)がTwinBasic版として作成したコードを、VBAで使用できるようにモジュール化したもの(※)が提供されています。
(※)StaticRegex.twinがエンジン部分で標準モジュールとして提供、RegExp.twinがラッパー部分で4つのクラスモジュールに分割して提供されています。
そのため、SeleniumVBA.xlsmのプログラムに組み込んで本当に動作するのかどうか確認したい気持ちが強くなりました。
また、後述しますが、VBScriptでは対応していない「後読み」や正規表現を使用したSplitにも対応していますので、機能向上が期待できます。
なお、実験対象外ですが「vba-regex」はWorksheetFunctionを使用しておらずExcelに依存しないため、Accessでも動作することは確認済です。
2 実験用サンプルファイル
【2025/6/21 ファイル更新】
SeleniumVBAを利用されない方向けに、vba-regexの機能に限定したファイルを公開します。モジュールをインポートすればAccessでも動作します。
ダウンロード完了後は、アイコンを右クリックして「プロパティ」から、画面下部のセキュリティの項目「許可する」にチェックを入れます。
【注意点1】
VBA関数「Replace」を使用する場合は、名前の重複を避けるため「VBA.Replace」としてください。
【注意点2】
このラッパーは既存のvbscriptの文法に沿った記述ができるため便利ですが、動作速度を重視する場合は、このラッパーの使用は避けてオリジナルのものを使用してください。
【動作確認手順】
標準モジュール「A_Example」を開き、プロシージャ「Public Sub main()」を実行してください。
対象文字列 Abc123DEFGH4567ijkl890
正規表現 (\D+)(\d+)
実行した結果、イミディエイトウインドウに「Abc 123 DEFGH 4567 ijkl 890」が表示されれば、正常に動作しています。
3 移行作業について
ラッパーの効果により、既存のVBScriptの文法に合わせた運用ができます。
SeleniumVBAを例に挙げると、以下のとおり簡易なコード変更を施すのみで移行を完了させることができます。
【名前の重複を回避するための変更】
VBA関数「Replace」を使用している場合、置換により「VBA.Replace」に変更
【モジュールのインポート】
ファイル「vba-regex(正規表現実験中).xlsm」にある標準モジュール「StaticRegex」と4つのクラスモジュールを御利用中の
SelenimVBAのプログラムファイルにインポートします。
【参照設定を外したことによる変更1】
(変更前)Dim oRegExp As New VBScript_RegExp_55.RegExp
(変更後)Dim oRegExp As New RegExp
【参照設定を外したことによる変更2】
(変更前)Dim matches As VBScript_RegExp_55.MatchCollection
(変更後)Dim matches As MatchCollection
【参照設定を外したことによる変更3】
(変更前)Dim match As VBScript_RegExp_55.match
(変更後)Dim match As Match
【globalが予約語にあたることによる変更】
(変更前)oRegExp.Global = True
(変更後)oRegExp.GlobalMatch = True
4 おわりに
サンプルファイルで確認しますと、Exampleは正常に動作するかと思います。また、VBScriptでは対応していない「後読み」や正規表現を使ったSplitにも対応していますので、標準モジュール「A_Excemple」に追加しています。
SeleniumVBAの動作において必要な、WebDriver自動更新も正常に動作することは確認できています。
このことからVBScriptによる正規表現が使用できなくなっても、「vba-regex」が代替候補となりうることが確認できました。
なお、提供しているサンプルファイルの作成目的は実験用です。テストは完全に行っていませんので、このファイルでの運用はお控えください。正式運用はSeleniumVBAのアップデートを待ちましょう。
(2025/4/21更新)
Windows11 24H2 からvbscriptがオンデマンドとなり、vbscriptを無効にすると、VBScript.RegExp(正規表現)が参照不可となります。


コメント