• ベストアンサー

元々はエクセルの検索置換の問題なんですが、ワード

でやったほうがいいと言う回答者がおられて、以下に問題と正解答と回答者の回答を載せます。その後、回答者の回答の中で解らないところがあるので質問させて戴きます。 また別のもっと簡単な方法があれば教えて下さっても結構です。 問題  町村合併で「香川郡」「香川市」「香川村」が「高松市」に合併されました。 表の「香川郡」「香川市」「香川村」の自治体名が「高松市」になるよう変更しなさい。 香川市松原町123 大井産婦人科 三木市江原町猿山981-1 村瀬歯科医院 香川郡香河町大河663番地 香河総合病院 香川村十日市12-3 十日市診療所 高松市志度町葵葉354番地 再生快医療法人香川県支部 大川市香川郡山町亀井330 中川病院 吉野市大川町125番地1 明日香吉野心療内科 香川郡香川町赤石54-1 明日香川島心療内科 琴平市屋島町字栗林1234-5 香川歯科大学付属病院 正解答 高松市松原町123 大井産婦人科 三木市江原町猿山981-1 村瀬歯科医院 高松市香河町大河663番地 香河総合病院 高松市十日市12-3 十日市診療所 高松市志度町葵葉354番地 再生快医療法人香川県支部 大川市香川郡山町亀井330 中川病院 吉野市大川町125番地1 明日香吉野心療内科 高松市香川町赤石54-1 明日香川島心療内科 琴平市屋島町字栗林1234-5 香川歯科大学付属病院 回答者の回答 エクセルの住所範囲を選択して「コピー」して、ワードに貼り付けます。 Ctrl+Hで置換ダイアログを出して「オプション」ボタンをクリックし「ワイルドカードを使用する」にチェックを入れ、検索する文字列に「香川[郡村市]([!山])」、置換後の文字列に「高松市\1」と入力して「すべて置換」します。 最後にこのデータ範囲をコピーしてエクセルに貼り付ければ完成です。 ちなみに、上記の検索条件は、「香川郡」「香川市」または「香川村」でその後に「山」が付かない文字列(香川郡山町を除外するため)を検索し、「山」以外の文字はそのまま表示するようにしています。 私の質問ですが、 回答者の説明に・・・置換後の文字列に「高松市\1」・・・とあるのですが、\1はどういう意味ですか? 実際には4文字が検索されているようで、\1を省くと、4文字が置換されてしまって上手くいきません。 長くなりましたが宜しくお願い致します。

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

  • ベストアンサー
  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.3

以前の質問でワードでの検索置換をお勧めした回答者です。 >また別のもっと簡単な方法があれば教えて下さっても結構です。 基本的に、複雑な検索置換はエクセルではできませんので、ワードの機能を利用されるのが最も簡単な方法です。 >\1はどういう意味ですか? 「\1」の説明についてはすでに皆さんからの回答で意味がわかったかもしれませんが、ワイルドカードを利用する場合の検索置換については検索置換例がいくつか例示されている以下のページが参考になると思います。 http://www.office-qa.com/Word/wd211.htm 上記のページの中の、()と¥数字の項目を見てください。

その他の回答 (5)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.6

>別のもっと簡単な方法があれば教えて下さっても結構です。 人によって、簡単か難しいというりは、感覚的なものはあるとは思うものの、今回は、基本的にはExcelの中で処理したほうがよいと思います。できれば、中でも、関数で解決が一番よいような気がします。私は、関数はあまり得意とはしていませんが、こんな方法が出来るかと思います。 「香川郡」「香川市」「香川村」→「高松市」 =IF(A1="","",IF(ISERROR(FIND(LEFT(A1,3), "香川郡香川市香川村")),A1,REPLACE(A1,1,3,"高松市"))) 以下は、あえて、正規表現を使うほどではありませんが、正規表現を使うユーザー定義関数を作ってみました。ある程度の汎用性はあります。(VBAはパスだそうですが、興味がわいたら試してもよいかと思います) ワークシートのへの使い方は、一般関数と同じです。 =ReReplace(A1,"^香川[郡市村]","高松市") こちらは、香川県が先頭に含まれる場合です。 =ReReplace(A1,"^(香川県)*(香川[郡市村])","$1高松市") :VBAの貼りつけかた Alt +  F11 (Altを押しながらF11)を押すと、Visual Basic Editor 画面が出てきます。 次に、メニューの[挿入]-[標準モジュール]と開けて、クリックすると、画面が現れますので、以下のコードを貼り付けて、Alt + Q で、画面を閉じます。 '// Public Function ReReplace(srcTxt As Variant, Pat As String, rplTxt As Variant, _      Optional Glb As Boolean = False)  Dim Matches As Object  Dim Match As Object  Dim Ret As String, repl As String, buf As String  If Pat <> "" Then   With CreateObject("VBScript.RegExp")    .Pattern = Pat    .Global = Glb    On Error GoTo ErrHandler    Set Matches = .Execute(srcTxt)    If Matches.Count > 0 Then    buf = srcTxt    For Each Match In Matches     repl = .Replace(Match, rplTxt)     buf = Replace(srcTxt, Match, repl)    Next    Ret = buf    Else     Ret = srcTxt    End If   End With   Else    Ret = srcTxt   End If ErrHandler:    If Err.Number > 0 Then     ReReplace = CVErr(xlErrValue)    Else     ReReplace = Ret    End If End Function 私は、VBAを7年も8年も掛かって、この程度しか出来きません。人によっては、半年やそこらで、すぐに出来るようになって、ここのサイトで人にも教えたりする人もいるようです。見方によっては今回のようなコードは、一目みて分かるような初歩レベルだと思います。VBAで解決する場合は、このような方法も可能です。それでも、これは、他人のものと似ているものはあっても、誰のものも参考にしない私のオリジナルです。本格的に作るなら、Basp21を使いますが、ユーザーさんへの負担を考えると、この程度でよいかと思います。

  • wisemac21
  • ベストアンサー率39% (171/429)
回答No.5

Excelでもできますよ。回答が早く閉じられたので回答してしてませんでしたが・・・ 1例ですが、B7に文字列があるとすると =IF(COUNTIF(B7,"香川市*"),SUBSTITUTE(B7,"香川市","高松市"),IF(COUNTIF(B7,"香川郡*"),SUBSTITUTE(B7,"香川郡","高松市"),IF(COUNTIF(B7,"香川村*"),SUBSTITUTE(B7,"香川村","高松市"),B7))) 式を下へコピー また検索・置換でも出来ますが、この場合は「香川*」で前方一致で検索して、該当セルをすべて選択してから、香川市、香川郡、香川村にそれぞれ置換する操作になります。(一気にに置換は一般機能では出来ません。) 前方一致を検索する方法は、検索タブで検索する文字列に「香川*」と入力、□セル内容が完全に同一であるものを検索するにチェックして「すべてを検索」ボタンをクリックする。

回答No.4

Wordの[検索と置換]において、[ワイルドカード]を使う置換の設定 での条件も含むと理解しにくいので、検索のみでの説明からすれば 置換の意味も理解できるかと思います。 ・条件1  検索する文字列:香川市   この場合は「香川市」のみが対象になり、リストの1番目のみだけが 行頭に「香川市」があるので検索されます。 ・条件2  検索する文字列:香川[市郡村]   この場合は「香川市、香川郡、香川村」が対象になり、リストでは 1番目・3番目・4番目と8番目の行頭の文字列と、6番目の大川市の 後ろにある「香川郡」が検索されます。 これは、[ ]で挟まれた一文字が、「香川」の単語と結合して検索 されるためです。 ・条件3  検索する文字列:香川[市郡村][山]   この場合は、6番目の大川市の後ろにある「香川郡」+「山」が検索 されます。香川[市郡村]+[ ]で挟まれた一文字「山」がある単語が 結合して検索されるためです。 ・条件4  検索する文字列:香川[市郡村][!山]   この場合は「香川市、香川郡、香川村」が対象になり、リストでは 1番目・3番目・4番目と8番目の行頭の文字列だけが検索されます。 これは、[!○]では!の後ろの一文字以外の文字がある単語と結合を しているものだけが検索されるためです。 この条件4を( )で囲むことでグループとしての式になり、その式 を置換の条件で\1のように、( )が置かれた順番を示す\#の数字で グループを残して置換対象にします。 つまり、「香川郡山」の文字列以外の「香川市松」などの文字列が 検索され、\1である( )で検索対象になった文字「松」などが置換の 対象文字列として高松市+( )である高松市\1で置換されます。 http://www.saglasie.com/tr/artl/pc/002.htm 今回のように行頭以外の文字列が対象になりやすい場合は、単語の 先頭を意味するワイルドカードのコードの「<」を香川の前につける ことで、スペースや句読点、改行などの区切り文字がない文字列 の先頭文字を検索することができる方法があります。 ・条件5  検索する文字列:<香川[市郡村] この場合は「香川市、香川郡、香川村」が対象になり、リストでは 1番目・3番目・4番目と8番目の行頭の文字列だけが検索されます。 「大川市香川郡山町」のように、区切り文字がない文字列の途中に ある「香川郡」は検索対象になりませんので、今回の場合は有効な 方法です。  条件5のような条件での検索も簡単ですので試してみてください。 この場合の置換以下の条件だけです。  置換後の文字列:高松市 ちなみにエクセルの形式を壊したくない場合に、エクセルの検索 を正規表現で対応するアドインがありますので、これで置換する 方法でも有効な手段だと思います。 Excel用正規表現検索ダイアログアドイン http://srcedit.pekori.jp/tool/excelre.html Excelで正規表現をつかう http://dreamy.boy.jp/tec3_37.htm ・条件6 検索:^香川[市郡村] 置換:高松市 正規表現については、別に調べるなり質問するなりしてください。

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

>\1はどういう意味ですか? ご自分で働きを理解されたとおり,「山」以外の文字を「(置換せず)そのまま表示する」機能です。 具体的には検索する文字列の中で()で囲われた範囲に相当する文字(今回のでは山以外の文字ならなんでも)を,置換する文字の中に差し戻すワイルドカードです。 丁寧に説明するなら,今回の命令は 「香川」と「郡または村または市」と「山ではない一文字何でも」の計4文字を 「高松市」と「山ではない一文字何でもを再利用」に 置換します。 \1を外してしまうと 「香川」と「郡または村または市」と「山ではない一文字何でも」の計4文字を 「高松市」に 置換してしまいます。

  • edomin7777
  • ベストアンサー率40% (711/1750)
回答No.1

通常こういう検索方法を「正規表現」と言います。 香川[郡村市]([!山]) で、正規表現で検索した文字列と検索した文字列の前後の文字列に分けます。 この場合の「\1」は、検索した文字列の後の文字列を表しています。 「香川市松原町123 大井産婦人科」 を検索するとき 「香川市」 が該当しますが、この「行」を 「高松市」 に変換するのではなく後ろの文字列もつけて 「高松市松原町123 大井産婦人科」 に変換しているのです。

関連するQ&A

  • Excel2000ですが検索置換の問題です。

    検索する文字列を「香川?」とすると、殆んどは上手くいくのですが 12行目が大川市高松市と市が2つ続いてしまいます。 また14行目が高松市高松市となってしまいます。 一発ですんなりと解答のようにするには、どのような文字列を検索文字列や置換後の文字列にすればいいのでしょう? 宜しくお願い致します。

  • エクセル 複数の検索文字列を削除したいのですが。

     あるセルに住所が入力されているのですが、郡と町と大字と番地が一つのセルに入っています。  郡と町は、手作業で別のセルに入力できたので、残っている作業は、元のセルから郡と町を消去することなのですが、簡単に関数で別のセルに書き出せないでしょうか。  ただし、あるセルには郡と町、あるセルには町からの住所になっています。 例 セルQ2   中頭郡嘉手納町字嘉手納588  というセルと セルQ3   嘉手納町字嘉手納588     というセルがあります。 SUBSTITUTE関数かと思いましたが、一つの検索文字列なら空白にできましたが、2つの検索文字列は一括処理ってできるんでしょうか。 私が考えたのは、最初に任意のセルに =SUBSTITUTE(Q2,"中頭郡","")として中頭郡を消し、さらに別の任意のセルに =SUBSTITUTE(Q2,"嘉手納町","")として完全に郡と町を消す方法です。ですが、ちょっと要領が悪いですよね。 SUBSTITUTE関数の効率の良い計算式、もしくは、もっと別の方法で一発OKの方法はあるでしょうか。 もしかして、編集の「検索と置換」を使えばできるんでしょうか? この機能は、使ったことが無いので、使い方が分かりません。元データは残さなくていいので、別のセルに書き出さなくてもいいのです。 どなたか、ご教授願います。

  • エクセルの1セル内の文字列操作。

    以下のことができるかどうかということをお聞きしたいのですが。 ○○-○○××町△△市□□□県  (○は数字) と、住所が、番地から逆に並んで、1つのセル内に書かれているものを、 普通の順番に並べ替えたいのですが。 この作業をしなければいけないものがかなりの数あって、 できることなら、作った数式をコピーして、番地と町、市、県などに分けることができれば、まとめて並び替えれるのに・・・と思ったのですが・・・。 多分、都道府県だけでなく、市、区、郡、町、村、それらの付かない地名、建物名など、法則の無いものを分ける方法など無いだろうなあとは思うのですが、 最後の頼みの綱で、もし、なにかほんの少しでも良いアイデアがあれば・・、 ということで質問させていただきます。 すべて入力しなおすよりも少しでも楽な方法があれば、アイデアをいただきたいと思います。

  • エクセルで住所を違うセルに分けたいのですが・・・

    エクセル2000で住所禄を作ってあるのですが、そこから市町村の前の部分で 分けたいのですが可能でしょうか? ○○郡 △△町 ・・・・・ □□郡 ××村 ・・・・・     ◆◆市 ・・・・・ この例で言うと現在一つのセルにすべて入っている内容を郡と町、村、市と・・・・の3つの部分をそれぞれセルに分けたいのです。 ◆◆市が郡の列に入っても構いません。 たくさんあるデータをソートをかけて拠出していきたい為、何とかして分けられないものかと思案しています。 可能であれば方法を教えて下さい。

  • エクセルで・・・。

        (1) A県B市D町2-15-3     (2) A県B郡1-2-3     (3) A県C市F町4-3-5 という住所のデータがあったとき(1)ならA県B市D町 と 2-15-3 (2)ならA県B郡 と 1-2-3 の間で分けたいんですけどどうすればいいでしょう? ※県郡市などに含まれる数字は漢数字、番地町名は必ず英数字になってます。 ※住所の長さはもちろんバラバラです。

  • カタカナ&数字だけを消したい

    エクセル2003で、お客様のデータを管理しています。 その作業の過程で、お客様の住所を【都道府県・市区郡・町村・町以下】にセルごとに分ける作業があります。その作業自体は、県を県/・区を区/などに置換し、区切り位置で各セルに分けるようにしております。(わかりづらくてすいません…) その作業の際に、番地(数字)とマンション名(主にカタカナ)を消したいのですが、 現在は置換を使い地道にやっているのですが、VBAを使えばすぐだと聞きました。 ただ、私は簡単なマクロを組んで使うことはあるのですが、本格的にVBAを扱ったことがない初心者です。 その辺を踏まえた上で、どなたかお力を貸して頂けませんでしょうか? よろしくお願いします。 m(_ _)m

  • 以前の大阪の地名

    現在私の住所は大阪市内で住居表示は「大阪市**区**○丁目○番○号」というふうになっています。 数年前までは「**区**町○丁目○番地」だったということは知っていたのですがその前かなり昔は、今でも他の所で一般的に使用されている「**郡(西成郡・東成郡?)**村」というふうになっていたということを最近知るようになりました。 そこでお願いなのですが大阪市内が市・区ではなく郡・村で呼ばれていた時の地名の一覧が分かるような本やサイトがあれば教えて下さい。

  • エクセル関数 住所から町村領域を取り出す。

    エクセルの関数で○○市○○町xxx番地などとなっている住所の 区、市、郡を除いたそれ以降の住所だけ取り出したいのですが =FIND("市",B2) =REPLACE(B2,D2,3,"") このFINDに複数の検索文字列を指定して、当てはまる数値を出すにはどうのようにすればよいでしょうか?

  • ○○市××村は存在しますか?

    ○○市△△町は見たことがありますが、 ○○市××村って実在しますか? 言い方を代えますと、郡ではない村はあるのでしょうか

  • エクセル関数で住所から丁目番地、建物名を抽出したい

    エクセルで関数を使って、住所から、都道府県、市区町村、丁目番地、建物名をそれぞれ抽出するにはどうしたらよいですか? いま、C列に住所が入っています。 D列に、=LEFT(C3,4-SUM((MID(C3,3,1)={"都","道","府","県"})*1))という関数で都道府県を抽出しました。 F列に、=IF(E2="東京都", IF(COUNT(FIND({"東村山","武蔵村","羽村市"},LEFT(I2,3))), LEFT(I2,FIND("市",I2)), LEFT(I2,MIN(FIND({"市","区","町","村"},I2&"市区町村",2))) ), IF(COUNT(FIND({"今市市","四日市","八日市","廿日市"},LEFT(I2,3))), LEFT(I2,FIND("市",I2,FIND("市",I2)+1)), IF(IF(COUNT(FIND({"蒲郡市","大和郡","小郡市"},LEFT(I2,3))),"市",IF(COUNT(FIND({"余市郡","高市郡"},LEFT(I2,3))),"郡",MID(I2,MIN(FIND({"市","郡"},I2&"市郡",2)),1)))="市", IF(COUNT(FIND({"札幌市","仙台市","千葉市","横浜市","川崎市","名古屋","京都市","大阪市","神戸市","広島市","北九州","福岡市"},LEFT(I2,3))), LEFT(I2,FIND("区",I2)), LEFT(I2,FIND("市",I2,2)) ), IF(COUNT(FIND({"佐波郡玉村","恵那郡岩村","東宇和郡野","杵島郡大町","北松浦郡鹿"},LEFT(I2,5))), LEFT(I2,FIND("郡",I2)+3), LEFT(I2,MIN(FIND({"町","村"},I2&"町村",FIND("郡",I2)+2))) ) ) ) ) という関数を使って市区町村を抽出しました。 あとは、丁目番地と建物名を別々のセルに抽出したいです。 よきアドバイスをお願いいたします。 区切りに半角空いてるとかいうことはありません。 膨大な住所録を処理したいので、例外が多いのは使えません。 なかなか厳しい質問だとは思いますが、どうぞご教授くださいませ。よろしくお願いいたします。

専門家に質問してみよう