• 締切済み

エクセルVBAで正規表現の使い方に関して

VBA初心者です。 エクセルで会社名の曖昧な検索をしたくて調べていたら正規表現というものがあることを知りました。 けど難しくてうまく動いてくれません。。 以下のようなリストを曖昧に検索するにはどのような正規表現のプログラムを組めばいいのでしょうか? ・数あるリストの中から重複している会社があるか検索したいです。 ・前株だったり後株だったり、中には株式会社が省略されているものもあります。  また株式会社と入力されていたり、(株)と省略されていたりします。  (有限会社も同様) ・"株式会社"と会社名の間にスペースがあったりなかったりします。 ・会社名の後にスペースをあけて~工場などとついているものもあります。 ・カタカナは大文字だったり小文字だったりします。 このようなリストの中から、会社の正式名称で検索すると重複している会社がヒットするようにしたいのですが・・・ 例)株式会社 ×××   →検索→   (株)××× ~工場   ↑検索したい会社            ↑検索結果 ちょっとわかりにくいですが、書き方のヒントだけでも教えていただけると助かります。 よろしくお願いしますm(_ _)m

みんなの回答

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

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(文字列, "株式会社") カッコは特殊な意味があるので、単に文字として 扱う時はエスケープ文字の\を付けます。

kyo-maru
質問者

お礼

なるほど。。まだかなり勉強が必要そうですね。 ありがとう御座いましたm(_ _)m

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

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 アナタのイメージしている具体的にやりたいことに照らして,適宜応用してください。

kyo-maru
質問者

お礼

お礼遅くなってすみませんでした。 まだVBA初心者なので読めない部分がちらほらありますが、 実際に動かしながらやってみます。 ありがとうございました。

関連するQ&A