- 締切済み
エクセルVBAで正規表現の使い方に関して
VBA初心者です。 エクセルで会社名の曖昧な検索をしたくて調べていたら正規表現というものがあることを知りました。 けど難しくてうまく動いてくれません。。 以下のようなリストを曖昧に検索するにはどのような正規表現のプログラムを組めばいいのでしょうか? ・数あるリストの中から重複している会社があるか検索したいです。 ・前株だったり後株だったり、中には株式会社が省略されているものもあります。 また株式会社と入力されていたり、(株)と省略されていたりします。 (有限会社も同様) ・"株式会社"と会社名の間にスペースがあったりなかったりします。 ・会社名の後にスペースをあけて~工場などとついているものもあります。 ・カタカナは大文字だったり小文字だったりします。 このようなリストの中から、会社の正式名称で検索すると重複している会社がヒットするようにしたいのですが・・・ 例)株式会社 ××× →検索→ (株)××× ~工場 ↑検索したい会社 ↑検索結果 ちょっとわかりにくいですが、書き方のヒントだけでも教えていただけると助かります。 よろしくお願いしますm(_ _)m
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- nda23
- ベストアンサー率54% (777/1415)
VBAの機能ではありませんが正規表現という オブジェクトがあります。 使い方は以下の通りです。 Dim 正規表現 As Object Set 正規表現 = CreateObject("VBScript.RegExp") 正規表現.IgnoreCase = True 正規表現.Global = True 正規表現.Pattern = "×××" For 行 = 1 To 30 If 正規表現.Test(Cells(行, 1)) Then Cells(行, 2) = "一致" End If Next プロパティやメソッドは下記を参照してください。 http://msdn.microsoft.com/ja-jp/library/cc392487.aspx 構文は慣れるまで分かり難いかもしれないですが、 とても便利です。 例えば(株)を株式会社に変換するには 正規表現.Pattern = "\(株\)" 正規表現.Replace(文字列, "株式会社") カッコは特殊な意味があるので、単に文字として 扱う時はエスケープ文字の\を付けます。
- keithin
- ベストアンサー率66% (5278/7941)
A列からXXXを検索したいのだとすると 作成例: sub いちいち総ナメ() dim s as string dim i as long s = "XXX" for i = 1 to range("A65536").end(xlup).row if cells(i, "A") like "*" & s & "*" then cells(i, "A").select msgbox cells(i, "A").value end if next i end sub 作成例: sub エクセルの機能を使う() dim s as string dim c as range dim c0 as string s = "XXX" with range("A:A") set c = .find(what:=s, lookin:=xlvalues, lookat:=xlpart) if c is nothing then msgbox "NOT FOUND" exit sub end if c0 = c.address do c.select msgbox c.value set c = .findnext(c) loop until c.address = c0 end sub アナタのイメージしている具体的にやりたいことに照らして,適宜応用してください。
お礼
お礼遅くなってすみませんでした。 まだVBA初心者なので読めない部分がちらほらありますが、 実際に動かしながらやってみます。 ありがとうございました。
お礼
なるほど。。まだかなり勉強が必要そうですね。 ありがとう御座いましたm(_ _)m