- ベストアンサー
VBAの正規表現
VBAで正規表現による置換をしたいです。 以下のような行が複数あります。 1 aaa bbb ccc ddd 2 aaa bbb ccc ddd 3 aaa bbb ccce ddd 4 aaa bbb eccc ddd ccc の部分のみ置換したいです。 dim hensuu as string dim replace as string replace = eee hensuu = ccc (省略) strPattern = "(\s*)" & hensuu & "(\s+)" rep = RegExpObj.Replace(buf, "\1" & replace & "\2") 行数1,2 のみを置換したのですが、4も置換されてしまいます。 (\s*) の "*" が良くないのは理解していますが、"+" にしてもうまくいきません。 どなたかどのようにしたら1,2のみ置換できるようになるかをご教授お願いできませんでしょうか よろしくお願いいたします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
>ファイル全体に複数行が存在しており、全てのcccになります 複数回マッチさせたいのなら .Global プロパティをTrueにします そして検索パターンは簡単にしてもいいかもしれません RegExpObj.Pattern = "\b" & hensuu & "\b" RegExpObj.Global = True rep = RegExpObj.Replace(buf, replace) でどうでしょうね。
その他の回答 (5)
- kkkkkm
- ベストアンサー率66% (1719/2589)
> この場合でも正規表現での検索は可能でしょうか? 試して可能でなければ私の回答では不可能と考えてください。 不可能の場合、解決方法はわかりません。
お礼
それでもこんな素人の私に優しくアドバイスを頂きありがとうございました♪
- kkkkkm
- ベストアンサー率66% (1719/2589)
> 1 は一行に2個の cccが存在しております > その為苦戦しております ひとつのセル内にという事でしょうか strPattern = "\b" & hensuu & "\b|" & "^" & hensuu & "$" で試してみてください。
補足
回答ありがとうございます! 正確にはテキストファイルですが、問題なのは 一行にcccが何個あるかは固定されておりません 基本的には1つですが、2つだったり3つだったりします この場合でも正規表現での検索は可能でしょうか? すみませんがよろしくお願いいたします
- asciiz
- ベストアンサー率70% (6803/9674)
>1 は一行に2個の cccが存在しております >その為苦戦しております ええとそれで? 3列目のみを置換したいと言う意味でしょうか? ちなみに区切り文字は何なのでしょうか? タブ・スペース、それが1個なのか複数の場合もあるのか、あるいは桁位置固定データなのでしょうか? それが決まってる方がもう少し簡潔に書けると思うのですが。 とりあえず現状のまま「区切り文字は空白類で、複数続く場合もある」だとすると、 "^(\S+\s+\S+\s+)" & hensuu & "(\s)" と言うパターンが考えられます。
補足
返信ありがとうございます ファイル全体に複数行が存在しており、全てのcccになります 完全一致で、区切りは空白のスペースで何文字かは決まっていません なので苦戦しているところです。
- kkkkkm
- ベストアンサー率66% (1719/2589)
strPattern = "^" & hensuu & "$" で試してみて下さい。
補足
返信ありがとうございます。 一部漏れがありました 1 aaa bbb ccc ccc 2 aaa bbb ccc ddd 3 aaa bbb ccce ddd 4 aaa bbb eccc ddd 1 は一行に2個の cccが存在しております その為苦戦しております その場合どのような書き方にしたら良いかをご教授お願いできますでしょうか どうぞよろしくお願いいたします。
- asciiz
- ベストアンサー率70% (6803/9674)
* は 「直前文字0文字以上」 + は 「直前文字1文字以上」 従って、前後共に (\s+) にするか、いっそのこと何もつけない (\s) にすれば良いのではないでしょうか。 あと >strPattern = "(\s*)" & hensuu & "(\s+)" は検索用パターンを変数に格納しているだけですので、実際に正規表現オブジェクトでの検索・置換に使うには RegExpObj.Pattern = strPattern が必要ですが…。 (あるいは直接 RegExpObj.Pattern = "(\s)" & hensuu & "(\s)" ってやった方が? )
補足
返信ありがとうございます 一部漏れがありました 1 aaa bbb ccc ccc 2 aaa bbb ccc ddd 3 aaa bbb ccce ddd 4 aaa bbb eccc ddd 1 は一行に2個の cccが存在しております その為苦戦しております その場合どのような書き方にしたら良いかをご教授お願いできますでしょうか どうぞよろしくお願いいたします。
お礼
教えて頂いた内容で出来ました!!! 本当に本当に感謝です!! どうやら難しく考え過ぎていたようです しかし、¥b のみで良かったとは、、、 VBAは初めて半年もないですが、もっと勉強が必要だと痛感しました ありがとうございました!!