• ベストアンサー

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

  • 文字列の中の特定部分とそうでない部分とで処理を分けたい

    文字列中で、<test>~</test>で囲まれた部分と、囲まれてない部分とで処理を分けたいです。 そして、分けて処理したあとに、くっつけたいです。 abcdEFG <test> ABCDEFG </test> hiJKLmn ↓ 例えば、<test>で囲まれた部分は小文字に変換、囲まれていない部分は大文字に変換という処理であれば以下のようにしたいのです。 ABCDEFG <test> abcdefg </test> HIJKLMN 扱う文字列は、UTF-8で複数行です。 自分でとりあえず動作するコードは作成してはみたものの、、、 あまりスマートとはいえないと感じていて、もっといい方法があればご教示お願いしたいです。。。 1.文字列Aの中から、<test>で囲まれた部分をpreg_match_all()で取得し、変数Aに格納。 2.変数Aに処理を加え、変数Bに代入。 3.preg_replace()で文字列Aの中の、変数A部分を変数Bに置換。 4.文字列Aを、<test>で囲まれた部分をキーとしてpreg_split()で分解し、変数Aに格納。 5.変数Aに処理を加え、変数Bに代入。 6.preg_replace()で文字列Aの中の、変数A部分を変数Bに置換。   $pre1 = array();   $pre2 = array();   preg_match_all("/<test>((.|\r\n|\n)*?)<\/test>/u", $p_string, $pre1);   for ( $x = 0; $x < count($pre1[0]); $x++ ) {     # $pre1[0]ではなく$pre1[1]としてるのは<test>タグを含めないため     $pre2[$x] = $pre1[1][$x];     # hoge*()は処理     $pre2[$x] = hoge2( $pre2[$x] );     $pre2[$x] = hoge4( $pre2[$x] );     # <test>タグを戻して、置換後の文字列完成・・・(1)     $pre2[$x] = '<test>'.$pre2[$x].'</test>';     # 置換パターン・・・(2)     $pre1[0][$x] = "/" . preg_quote($pre1[0][$x], "/") . "/u";   }   # 文字列から、(2)置換パターンを探して、(1)置換後文字列に置き換え   $p_string = preg_replace( $pre1[0], $pre2, $p_string );   $pre1 = array();   $pre2 = array();   $pre1 = preg_split("/<test>(.|\r\n|\n)*?<\/test>/u", $p_string, -1, PREG_SPLIT_NO_EMPTY);   for ( $x = 0; $x < count($pre1); $x++ ) {     $pre2[$x] = $pre1[$x];     # hoge*()は処理     $pre2[$x] = hoge1( $pre2[$x] );     $pre2[$x] = hoge2( $pre2[$x] );     $pre2[$x] = hoge3( $pre2[$x] );     # 置換後の文字列完成・・・(3)     $pre2[$x] = hoge4( $pre2[$x] );     # 置換パターン・・・(4)     $pre1[$x] = "/" . preg_quote($pre1[$x], "/") . "/u";   }   # 文字列から、(4)置換パターンを探して、(3)置換後文字列に置き換え   $p_string = preg_replace( $pre1, $pre2, $p_string );   # 最後に<test>タグを削除する   $p_string = preg_replace( "/<test>((.|\r\n|\n)*?)<\/test>/u", $1, $p_string );

    • ベストアンサー
    • PHP
  • [Linux] ubuntuでコマンド中の文字列を置換して実行する。

    bashを利用しております。 #mv /abc /abc0 && mv /abc2 /abc 上記コマンドを実行した後、abcという文字列をxyzに置換 (内容的には#mv /xyz /xyz0 && mv /xyz2 /xyzと同一)し、 コマンドを手動で実行する方法を探しています。 ヒストリ置換を用いて 「直前に実行したコマンドのabcという文字列をxyzという文字列に置換して実行する」 にはどのようにすればいいのでしょうか? また、もっといい方法がございましたら、 教えていただけますでしょうか? よろしくお願いいたします。

  • 数値を文字列に変換する方法

    int rssi_dec = Convert::ToInt32("0X" + test02, 16); -----------(中略)----------------------- 一度、文字列だったものを数値に変換して、中略部分で計算をして、もう一度数値をHEXの 文字列に変換して、 String^ test このtestの中に代入したいと思っているのですが、どのようにすればよいのでしょうか? どうぞ、ご教授よろしくお願い致します。

  • エクセルで特定文字列の抽出する方法を教えてください。

    エクセルで特定文字列の抽出する方法を教えてください。 たとえばG00X-483.931Y-412.2R5.0 と書かれてるセルからXの値「-483.931」だけを抽出したいのですが分からなくて困ってます。 またこの数値は8文字と決まってないのでX~Yの間の数値と言う感じで抽出したいです。 よろしくお願いします。

  • PHP:2つの置換文字列を一気に変換するには

    PHPで1つの文字列変数内に2つの置換文字列が存在する場合一気に変更可能でしょうか? $data = "a%CHANGE1%c%CHANGE2%"; 置換文字列1:%CHANGE1% ⇒ "b"に変換 置換文字列2:%CHANGE2% ⇒ "d"に変換 ↓すると print($data); 「abcd」 となる感じです。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • sedなどで、特定の文字列の後の文字列を抽出したい

    sedなどで、特定の文字列の後の文字列を抽出したい シェルスクリプト内で、sedなどを使って特定の文字列の後の文字列を抽出したいのですが、どうすればいいでしょうか? たとえば、abcXYZ123defghiのなかから、XYZの後の「123」を抜き出したいです。 echo abcXYZ123defghi | sed ... のようにして実行させたいです。

  • 文字列の置換で・・・

    Javaでの文字列の置換についてなんですが ある文字を任意の文字に置換し表示させるとともに 何個の文字を置換したかも同時に知らせたい場合は どのような処理をしたらよいでしょうか? ぜひご協力よろしくお願いします!! (例)入力した文字列に"a"が含まれる場合は"b"に置換し   その際に変換した文字数も表示してください。     basic→出力結果: "bbsic" 置換した文字数は1です。

    • ベストアンサー
    • Java
  • 文字列の置換についての質問です。

    ASPにて文字列変数で最後の文字がある文字だったら違う文字に変換したいのですが、 どのような記述をすればよろしいのでしょうか? 具体的には変数strSの最後の文字が「A」だったら「X」に したいと思っています。 どうぞよろしくお願い致します。

  • 文字列置換の方法

    下記の長い文字列をエディタで置換したいのですが、長くなると置換できません。このような長い文字列(?)は一般的なエディタでは置換できないものなのでしょうか。 【置換前】 <FORM ACTION="cargo.cgi" METHOD="POST" ENCTYPE="application/x-www-form-urlencoded"> 【置換後】 <FORM ACTION="cargo.cgi" METHOD="POST">

  • 文字列の置換

    変数に含まれる isbn:・・・・ asin:・・・・ という文字列を <a href="http://<略>/・・・・/">isbn:(asin:)・・・・</a> と置換したいのですがどのように処理すればいいかわかりません。 isbn,asinは半角で大小文字の区別は無し :の後はアルファベット・数字・_です。

マックから印刷ができない
このQ&Aのポイント
  • マックから印刷できない現象が発生しました。プリンターが反応せず、マックには「looking for printer」と表示されます。
  • 一度は印刷できたが、2度目に印刷しようとしたところ、マックからプリンターが見つからないというエラーが発生しました。
  • マックとプリンターの接続に問題があり、印刷ができない状態です。
回答を見る