• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VB.NETの正規表現をVBAで記述するには)

VB.NETの正規表現をVBAで記述するには

このQ&Aのポイント
  • VB2010.NETのコードをExcel2010のVBAのコードに置き換える作業をしています。List1のようにVB.NETのコードには、Inports System.Text.RegularExpressionsで.NET正規表現パッケージが使われて、この部分をVBAではどのように記述すればよいのでしょうか。
  • VBAのコードにおけるVB.NETの正規表現の置き換え方法を教えてください。List2のコードではエラーが発生します。
  • 参照設定にはSystem.Text.RegularExpressionsが見当たらないため、エラーが発生しています。Microsoft VBScript Regular Expressions 5.5のRegExpオブジェクトでは後読みができないことにより困っています。Windows7を使用しています。

質問者が選んだベストアンサー

  • ベストアンサー
  • sora1515
  • ベストアンサー率58% (54/92)
回答No.3

いい補足質問だと思います。 VBAのSubMatchesコレクションとはマッチ部分の分割利用です。 西暦も検索するがその後ろの数値のみ利用したい、という場合西暦と数値をSubMatchesコレクションし2つ目の部分を取り出し利用します。なので2つ目を取り出した時点で.NET正規表現の後方一致という位置付けになります。 .(後ろを取り出して初めてNETでいう(?<= )のこと) -sample- Sub aaa() Dim re As New RegExp Dim mc As MatchCollection Dim m As Match Dim i As Long re.Pattern = "(西暦)(\d+)" re.Global = True Set mc = re.Execute("今日は西暦2014年6月20日です") For Each m In mc MsgBox m.SubMatches(1) Next End Sub メッセージボックス → 2014

yam2012
質問者

お礼

Microsoft VBScript Regular Expressions 5.5のRegExpオブジェクトでも後読みのようなことができるようになっただけでなく、SubMatchesコレクションを使ってマッチ部分の分割利用ができるようになり、とても参考になりました。ありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • sora1515
  • ベストアンサー率58% (54/92)
回答No.4

補足 先読みも後読みも、どう分割しどう利用するかで決まってきますね。

すると、全ての回答が全文表示されます。
回答No.2

後読みと後方参照を混同していないでしょうか。 質問者は後読みができることを期待していますが 回答者は後方参照ができると回答しています。 後読み(前方一致ともいいます)と後方参照は違います。

参考URL:
http://www4.ocn.ne.jp/~kaerume/k2e/regex_3.html
yam2012
質問者

補足

0KWave_IDさん ご指摘ありがとうございます。 ご指摘の通り「後読み」を期待しています。 なお、sora1515さんの回答に対する補足説明(投稿日時 - 2014-06-22 10:40:26)の中で、誤って「後方参照」という表現を使ってしまったのですが、すべて「後読み」の誤りです。sora1515さんのところで補足説明を修正・追加ができなかったので、ここで訂正させていただきました。 よろしくお願いします。

すると、全ての回答が全文表示されます。
  • sora1515
  • ベストアンサー率58% (54/92)
回答No.1

そのエラーは参照設定されてないだけだと思われます。 VisualBasicEditorのツール → 参照設定 → Microsoft VBScript Regular Expressions 5.5 にチェックを入れて下さい。 あと後方参照はできますよね? SubMatchesコレクションを調べてみて下さい。 -sample- Sub aaa() Dim re As New RegExp Dim mc As MatchCollection Dim m As Match Dim i As Long re.Pattern = "([A-Z,a-z]+)([0-9]+)" re.Global = True Set mc = re.Execute("Abc123DEFGH4567ijkl890") For Each m In mc For i = 0 To m.SubMatches.Count - 1 MsgBox m.SubMatches(i) Next Next End Sub

yam2012
質問者

補足

sora1515さん 回答ありがとうございます。 いろいろ調べていたのですがよくわからないので教えてください。 SubMatchesコレクションを調べてみましたが、RegExp オブジェクトの Pattern プロパティで検索できる正規表現のパターンは http://msdn.microsoft.com/ja-jp/library/cc392437.aspx となっていて、後方参照はできないように思うのですが、私の見ているところが間違っていますでしょうか。 もしよろしければ、今回教えていただきました-sample-の re.Pattern = "([A-Z,a-z]+)([0-9]+)" Set mc = re.Execute("Abc123DEFGH4567ijkl890") の部分を、私がご質問しているList2の例で示していただけないでしょうか。 具体的には、この部分を Set mc = re.Execute("今日は西暦2014年6月20日です") re.Pattern = "(?<=西暦)\d+" のように書き直すと実行時にエラーになりますが、後方参照の正規表現を記述している "(?<=西暦)\d+" の部分を、どのように記述すればよろしいのでしょうか。 よろしくお願いします。

すると、全ての回答が全文表示されます。

専門家に質問してみよう