• ベストアンサー

エクセルで特定のパターンの文字列を置換

大量の文字列が入力されたスプレッドシートがあります。 この文字列の中に、特定のパターンの文字列が散在しています。 ここでは例として、 #○○▲××$ とします。 「○○」と「××」は任意の文字列で、「#」「▲」「$」が特定文字列です(エスケープみたいなものですね)。 ここで以下のような置換を行いたいと思っています。 #○○▲××$ ↓ ××(○○) 「○○」と「××」は多種多様なので、単なる置換機能では対応できません(一個一個やっていけば別ですが、現実的ではないので……)。 こういった置換を一気に行うよい方法があればご教示頂きたく思います。 よろしくお願い申し上げます。

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

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

まぁ,ちなみにエクセルだけで一気にやるなら,簡単ですが例えば次のようなマクロにします。 手順: ALT+F11を押す 現れた画面で挿入メニューから標準モジュールを挿入する 現れたシートに下記をコピー貼り付ける sub macro1()  dim s1 as string, s2 as string, s3 as string  dim p1 as long, p2 as long, p3 as long  dim w1 as string, w2 as string, w3 as string  dim a as variant, h as range  s1 = "#"  ’適宜記入する  s2 = "▲"  ’1文字じゃなくてもモチロン構わない  s3 = "$"  set h = cells.find(what:=s1 & "*" & s3, lookin:=xlvalues, lookat:=xlpart)  do until h is nothing   p1 = instr(h.value, s1)   p3 = instr(h.value, s3)   w1 = left(h.value, p1 - 1)   w2 = mid(h.value, p1 + len(s1), p3 - p1 - len(s1))   w3 = mid(h.value, p3 + len(s3))   a = split(w2, s2)   h.value = w1 & a(1) & "(" & a(0) & ")" & w3   set h = cells.findnext(h)  loop end sub ファイルメニューから終了してエクセルに戻る ALT+F8を押してマクロを実行する。 もちろん一つのセルの中に,いくつ「#○○▲××$」が含まれていても構いません。

wine38
質問者

お礼

再びのアドバイス誠にありがとうございます。 こちらの方法が最善ですね、次回より利用させて頂きたいと存じます。 ありがとうございました。

その他の回答 (7)

  • saburo0
  • ベストアンサー率35% (76/216)
回答No.7

度々失礼して、申し訳ございません。 No.2の回答者様の回答を参考にした結果、 次のように変換するものと解釈させて頂きます。 あいうえおあいうえ#12▲34$かきくけ#56▲78$さしす。 ↓ あいうえおあいうえ34(12)かきくけ78(56)さしす。 変換前の文字列はA1セルに入力されているものとします。 B1セルには、次の式を入力します。 =IF(NOT(OR(ISERROR(FIND("#",A1)),ISERROR(FIND("▲",A1)),ISERROR(FIND("$",A1)))),CONCATENATE(MID(A1,1,FIND("#",A1)-1),MID(A1,FIND("▲",A1)+1,FIND("$",A1)-FIND("▲",A1)-1),"(",MID(A1,FIND("#",A1)+1,FIND("▲",A1)-FIND("#",A1)-1),")",MID(A1,FIND("$",A1)+1,LEN(A1))),A1) B1セルの式を、結果に特定文字列が無くなるまで右にコピー(C1セル,D1セル,E1セル…)を し続けて、最後の結果が変換後となります。 これでは如何でしょうか。ご確認のほど、宜しくお願い致します。

wine38
質問者

お礼

度々のアドバイス、誠にありがとうございます。 仰るように動作致しました。 こちらの方法も簡便さがありますので、何かの折に利用したく存じます。

  • saburo0
  • ベストアンサー率35% (76/216)
回答No.6

再度失礼します。 No.2のお礼欄で解決されたような記述がありますが、 まだ対応する必要はありますでしょうか。 宜しくお願い致します。

  • saburo0
  • ベストアンサー率35% (76/216)
回答No.5

補足欄確認しました。 その結果はどのような形になるのでしょうか。 宜しくお願い致します。

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.4

質問には >「#」「▲」「$」が特定文字列 とあります。 例なので1文字で表現されているのかなと考えました。 特定文字列が複数文字の場合も考慮しています。当然、1文字でも使えます。 A1に対象の文字があるとして、式は =IFERROR(MID(A1,FIND("▲",A1)+LEN("▲"),FIND("$",A1)-(FIND("▲",A1)+LEN("▲")))&"("&MID(A1,FIND("#",A1)+LEN("#"),FIND("▲",A1)-(FIND("#",A1)+LEN("#")))&")","") 式には「▲、$、#」の全角文字を使っています。使用時、「▲」に代わって文字列「▲△▲」を対象とする場合は、上記式の「▲」を「▲△▲」に置き換えてください。

wine38
質問者

お礼

ご回答ありがとうございます。 試させて頂きました。確かに動作致しました。 ですが、申し訳ありません。質問に不備がありました。 実際のテキストはこういった体です。 あいうえおあいうえ#○○▲××$かきくけ#○○▲××$さしす。 つまり文章の中に埋め込まれた形の該当文字列、それもケースによっては複数回出てきます。 こういった場合、どうすべきでしょうか? #もし回答があまりに複雑になって時間をお取りするようなら、ご放念くださって構いません。よろしくお願い申し上げます。

  • saburo0
  • ベストアンサー率35% (76/216)
回答No.3

ご提示の例のとおりの文字列変換をする関数を作成いたしました。 A1セルに「#○○▲××$」の文字列が入力されているものとします。 任意のセルへ =CONCATENATE(MID(A1,FIND("▲",A1)+1,FIND("$",A1)-FIND("▲",A1)-1),"(",MID(A1,FIND("#",A1)+1,FIND("▲",A1)-FIND("#",A1)-1),")") を入力すると、「××(○○)」へ変換されます。 不明点があれば補足願います。ご確認のほど宜しくお願い致します。

wine38
質問者

お礼

ご回答ありがとうございます。 試させて頂きました。確かに動作致しました。 ですが、申し訳ありません。質問に不備がありました。 実際のテキストはこういった体です。 あいうえおあいうえ#○○▲××$かきくけ#○○▲××$さしす。 つまり文章の中に埋め込まれた形の該当文字列、それもケースによっては複数回出てきます。 こういった場合、どうすべきでしょうか? #もし回答があまりに複雑になって時間をお取りするようなら、ご放念くださって構いません。よろしくお願い申し上げます。

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

エクセルの置換機能にはそういう器用なマネはできないので、たとえば表をワードにコピーして持っていき、ワードの置換機能を利用するような方法もあります。 手順: エクセルからワードにコピーする ワード画面でCtrl+Hで置換を開始 置換ダイアログのオプション>を開いてあいまい検索のチェックを外し、ワイルドカードのチェックを入れて #(*)▲(*)$ を \2(\1) にすべて置換 その後コピーしてエクセルに貼り戻す といった手順で出来ます。 まぁどーしてもエクセルだけでヤリたいなら、ごりごりとマクロをプログラムするような方法になります。一発仕事なら上述のワードでちゃちゃっとやってしまう方が簡単なので、説明は割愛します。

wine38
質問者

お礼

ご回答ありがとうございます。 この方法で、今回私の求めている結果は得られました。 とりあえずは今回急いでいたので、この方法で凌がせて頂きたく思います。 ありがとうございます。

  • aokii
  • ベストアンサー率23% (5210/22062)
回答No.1

「#」と「▲」と「$」をそれぞれ空白(ブランク)("")に置き換えれば、単なる置換機能で対応できるはずですが。

wine38
質問者

お礼

ご回答ありがとうございました。

関連するQ&A