エクセル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
No.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
丁寧な回答ありがとうございます。
パターンを調べたところ、ご指摘の通り間違いがありました。
その上、至らない部分を修正までして頂き大変助かります。
何が、至らなかったのか?なぜ、カンマは後につけるのか?などその意味についてじっくりと考えていきたいと思います。本当にありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excel VBA メール作成について 本文の中にExcel でコピーした図を上下に2つ 貼り付けを 2 2023/06/14 01:48
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Visual Basic(VBA) Excel vbaについての質問 3 2023/04/18 16:14
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- Visual Basic(VBA) エクセルVBAで以下のようなコードを書いたらエラーになりました。何処が間違っているの教えて? 1 2023/02/10 18:30
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) エクセルVBAのコードで質問です。 下のコードはJ16の文字列をB3を起点とする範囲から探して、見つ 5 2023/04/07 11:07
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) 実行時エラー´5854´ 文字列型パラメーターが長すぎます。 3 2023/06/08 21:17
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
エクセルでエラーが出て困っています。
Excel(エクセル)
-
VBAのRegExpで後方一致/不一致は機能するが前方一致/不一致は機能しない件(仕様ですか?)
Microsoft ASP
-
-
4
エクセルのエラーメッセージ「400」って?
Visual Basic(VBA)
-
5
VBA ユーザーフォームのChangeイベントを停止したい
Access(アクセス)
-
6
EXCEL/VBAで、自分のPCだけエラーが出ます
Visual Basic(VBA)
-
7
VBA プロシージャの名前の取得
その他(Microsoft Office)
-
8
括弧があるとHYPERLINKで飛べない?
Excel(エクセル)
-
9
【VBA】ExcelマクロでCSVファイルに保存したデータが"で囲まれてしまう
Visual Basic(VBA)
-
10
VBAで改行の入ったデータの正規表現について
Excel(エクセル)
-
11
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
12
VBAでの Replace関数で、ワイルドカードは使えないのでしょうか?
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
マッチングアプリで再マッチし...
-
初デートのあと返信が極端に遅...
-
マッチングアプリで再マッチし...
-
タバコの味ってライターで変わ...
-
マッチとライター。どちらがコ...
-
創価学会などの新興宗教信者の...
-
マッチングアプリでマッチした...
-
気になる人と初デートで嘔吐し...
-
太った女性に好かれる男の容姿...
-
わたしにはB型の彼氏がいます
-
なよなよした男性に嫌悪感
-
こいつやお前と呼ぶ男性心理は?
-
年上の女性と付き合いたいです...
-
マッチングアプリで知り合った...
-
重曹とクエン酸との見分け方
-
32歳で美人、独身
-
彼女が好きでもマッチングアプ...
-
マッチングアプリについてです...
-
Tinderでアカウントを変えたら...
-
恋愛感情がない相手にも自宅住...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
こいつやお前と呼ぶ男性心理は?
-
タバコの味ってライターで変わ...
-
マッチングアプリでマッチした...
-
なよなよした男性に嫌悪感
-
創価学会などの新興宗教信者の...
-
太った女性に好かれる男の容姿...
-
恋愛感情がない相手にも自宅住...
-
周りから
-
ログファイルを後ろから検索し...
-
マッチとライター。どちらがコ...
-
マッチングアプリで再マッチし...
-
マッチングアプリで再マッチし...
-
気になる人と初デートで嘔吐し...
-
年上の女性と付き合いたいです...
-
結婚相談所のお見合いで一回で...
-
初デートのあと返信が極端に遅...
-
マッチングアプリについてです...
-
サッカーでのTRMとは何の略
-
【至急】エクセルで複数のファ...
-
未成年はzippo購入不可ですか?
おすすめ情報