• ベストアンサー

VBAで文字列を部分的に抽出・置換する方法

例えば x = "xyz: 123 [kg]" という文字列を変数xに代入した後に "123"の部分だけ数値として抽出し、 更に123を567に置換して x = "xyz: 567 [kg]" にという文字列に変換したいのですがどのようにすれば良いでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.2

#1です。 Set myReg = CreateObject("VBScript.Regexp") は正規表現というもので、抜き出したいものを パターンとして与えます。 ⇒今回は myReg.Pattern = "\d+" で、 \d が数字を意味し + は1文字以上の集まりを 意味しています。 すなわち何文字かで構成された数字部分をヒットさせます。 変数:xから数字部分:123を該当させ x = myReg.Replace(x, "567") これで該当した箇所の置換を行なってます。 正規表現自体はVBAではなく、VBSと言う別の プログラム言語を呼び出して使ってます。 http://www.mnet.ne.jp/~nakama/ 直接ではないですが(厳密には言語が違いますが) パターンを憶えるのに参考になるのは http://books.ivory.ne.jp/regexp/ もし抜き出したい位置と文字数が固定されているなら Mid関数などを駆使しても出来ますし、 そうでなければ1文字ずつ数字か否かをIsNumeric 関数で 調べる方法もあるでしょう。

その他の回答 (1)

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

本来の目的が、どう言った置換条件になるのかでも 違ってくるかもしれませんが、 今回の質問なら Dim myReg As Object Dim x As String Set myReg = CreateObject("VBScript.Regexp") myReg.Pattern = "\d+" x = "xyz: 123 [kg]" MsgBox x x = myReg.Replace(x, "567") MsgBox x Set myReg = Nothing こうゆう事なのでしょうかね?

QVALUE
質問者

お礼

ありがとうございます。 確かにこのプログラムを実行したところ、思ったとおりのことができることが分かりました。 でも、やりたいことは、 文字列が格納された変数xがあって、この中の何文字目から何文字目までを抽出する、 そして何文字目から何文字目まで置換するということなのです。 教えてくださったプログラムですが、どういうことをしているのか理解できないのですが・・・ CreateObject("VBScript.Regexp")、"\d+"、myReg.Replace を検索ワードとしてgoogleで調べたみたのですが、 こうしたものを使ったプログラムは確かに見つかるのですが どのようにして使うのか書かれたページが見つかりませんでした。 できれば、このプログラムの構文に関して教えていただけないでしょうか?

関連するQ&A