アプリ版:「スタンプのみでお礼する」機能のリリースについて

エクセルVBAで、文字列と正規パターンを引数として渡すと、マッチした文字位置の羅列を","区切りの文字列で返すようなFunctionを作ろうと考えています。なかなかうまく作れなくて困っています。どなたか、詳しいかたいらっしゃいましたら教えて頂けないでしょうか?宜しくお願いいたします。
発生する実行時エラー
実行時エラー'5020':
'Execute'メソッドは失敗しました:'IRegExp2'オブジェクト
追伸:ネットで、自動作成してくれるサイトがありそのコードを参考にアレンジしました。つじつまが合わない部分は、私の改編によるものだと思います。
Function Get_Position_RegExp(MySource As String, MyPattern As String) As Variant
Dim MyReg As RegExp
Dim MyMatch As MatchCollection
Dim i As Match

Set MyReg = CreateObject("VBScript.RegExp")

With MyReg
.Pattern = MyPattern
.Global = True
Set MyMatch = .Execute(MySource)
End With
Get_Position_RegExp = ""

For Each i In MyMatch
Get_Position_RegExp = Get_Position_RegExp & "," & i.FirstIndex + 1
Next

Set MyMatch = Nothing
Set MyReg = Nothing

End Function

A 回答 (2件)

Function プロシージャに致命的なエラーはありません。

#1 ご回答のように
マッチパターン(MyPattern)の指定に誤りがあるようですね。

細かな部分を若干修正してみました。ご参考までに。

Sub TestProc()

  Dim s As String
  s = Get_Position_RegExp("RegExpテスト。RegExpでマッチ位置を調べる。", _
              "RegExp")
  MsgBox s

End Sub

' // MyPattern にマッチする位置をカンマ区切りの文字列で返す
Function Get_Position_RegExp( _
  ByVal MySource As String, _
  ByVal MyPattern As String _
) As String

  Dim MyReg  As RegExp
  Dim MyMatch As MatchCollection
  Dim i    As Match
  Dim s    As String

  Set MyReg = CreateObject("VBScript.RegExp")
  With MyReg
    .Pattern = MyPattern
    .IgnoreCase = False   ' 大文字・小文字を区別しない
    .Global = True
    Set MyMatch = .Execute(MySource)
  End With
  If MyMatch.Count > 0 Then
    For Each i In MyMatch
      ' // カンマは後ろにつける
      s = s & CStr(i.FirstIndex + 1) & ","
    Next
    ' // 末尾の余計なカンマを落とす
    Get_Position_RegExp = Left$(s, Len(s) - 1)
  End If
  Set MyMatch = Nothing
  Set MyReg = Nothing

End Function
    • good
    • 0
この回答へのお礼

丁寧な回答ありがとうございます。
パターンを調べたところ、ご指摘の通り間違いがありました。
その上、至らない部分を修正までして頂き大変助かります。
何が、至らなかったのか?なぜ、カンマは後につけるのか?などその意味についてじっくりと考えていきたいと思います。本当にありがとうございました。

お礼日時:2007/05/02 01:38

こんにちは。



>実行時エラー'5020':
>'Execute'メソッドは失敗しました:'IRegExp2'オブジェクト

それは、パターンの書き方を間違えているのですね。
    • good
    • 0
この回答へのお礼

ご指摘の通り、パターンを間違えていました。
Instr関数だけでは、効率よくヒットできないので、正規表現の併設としました。ありがとうございました。

お礼日時:2007/05/02 01:40

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています