• 締切済み

マクロと複数文字列一括置換の(私には)複雑な話

ウィンドウズ98、エクセル2000で作業中です。 駅名を数字に置換するマクロを作っています。 ▽こんな感じです。(マクロの記録でエクセルが勝手に書いてくれました) Selection.Replace What:="西日暮里", Replacement:="5", LookAt:=xlWhole, _ SearchOrder:=xlByRows, MatchCase:=False 1つのセルに1つの駅名を書いればうまく機能するのですが、複数の 駅名を入れると置換されなくなってしまいました。 |西日暮里| → |5| |西日暮里:新宿| → |西日暮里:新宿| 置換に全文一致を使っていたのでそれを外すと新たな問題が,,, |西日暮里:新宿| → |西4:1| 西日暮里は5に置換されるはずが、4に置換され、更に西が残りました。 西日暮里の前に、日暮里を4に置換(全文一致ではない)する行があったことが問題でした。 これをうまいこと回避する手はありますでしょうか? 説明に明確でない所があれば、指摘して下さい。 ちなみにマクロは素人で、今回初めて使います。 宜しくお願い致します。

みんなの回答

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

かなり日にちも経って無意味ですかね。ユーザー定義関数を作ってみましたので参考に投稿します。 多分、駅名を変換するデータがあると思って作っています。前提は、シートのどこかに変換テーブル、例えば、  新宿    1  京成幕張  2  新宿三丁目 3  日暮里   4  西日暮里  5  蒲田    6  京急蒲田  7  幕張    8 のようなものがあるとして、これに範囲名『data』を付けます。 使い方は、A1に駅名があれば、別のセルで =EkimeiOkikae(A1) とします。 セルには『:』で分けられた駅名が何個あってもかまいません。 以下を標準モジュールに貼り付けます。 Public Function EkimeiOkikae(Ekimei As String)   Dim wkEkimei As String 'セルの内容(ワーク)   Dim wkEkiElm As String 'セルの駅名の1つ   Dim pot As Integer '2つの駅名を分ける位置   Application.Volatile '自動再計算関数にする   wkEkimei = Ekimei & ":" '駅名が1つ、2つ以上を同じ形式にする   pot = InStr(wkEkimei, ":")   While pot > 0     wkEkiElm = Left(wkEkimei, pot - 1) '1つの駅名     wkEkiElm = Application.VLookup(wkEkiElm, Range("data"), 2, False) 'dataから検索     EkimeiOkikae = EkimeiOkikae & wkEkiElm & ":" '検索結果     wkEkimei = Right(wkEkimei, Len(wkEkimei) - pot) '複数の場合の次の駅名     pot = InStr(wkEkimei, ":")   Wend   EkimeiOkikae = Left(EkimeiOkikae, Len(EkimeiOkikae) - 1) '最後の『:』を除く End Function

G-integal
質問者

お礼

丁寧なご回答、 ありがとうございます。 また、お礼が遅くなってすいません。 ご回答頂いたのもお忘れかと思うほど時間が経ってしまいました。 >多分、駅名を変換するデータがあると思って作っています。 あります。 難しそうですが、チャレンジしてみます。 「転ばぬ先の杖」とはいいつつも自分の必要な知識から虫食いのように 勉強しています。 来年2月からは本格的に・・・。と密かに考えてはいるのですが・・・。 本当にありがとうございました。

  • miya_777
  • ベストアンサー率31% (44/140)
回答No.1

|西日暮里:新宿| → |西日暮里:新宿| の回避は、LookAt:=xlWhole → LookAt:=xlPart にして下さい。 |西日暮里:新宿| → |西4:1| の回避は、文字列の長いものから、置換すればOKです。

G-integal
質問者

補足

なるほどです。 (西日暮里が日暮里を置換することはないのでしょうか?試してみます) (ちょと欲を出しまして)他の方法はないでしょうか? と申しますのも、 駅名はじつはたくさんあります。ざっと1200駅はあります。 (何に使うかは長い話になりますので割愛) 西日暮里と日暮里、幕張と京成幕張、蒲田と京急蒲田、新宿と西新宿と新宿三丁目、武蔵野と,,, といった感じなんです。 これにすべて別々の数字を割り当てています。 手間ついでにもう3手間くらいかければmiya_777さんのアドバイスで解決するのですが,,, スマートな方法(やってることがスマートではないのですが,,,)はありますでしょうか? 宜しくお願い致します。

関連するQ&A