最新閲覧日:

ウィンドウズ98、エクセル2000で作業中です。

駅名を数字に置換するマクロを作っています。

▽こんな感じです。(マクロの記録でエクセルが勝手に書いてくれました)
Selection.Replace What:="西日暮里", Replacement:="5", LookAt:=xlWhole, _
SearchOrder:=xlByRows, MatchCase:=False

1つのセルに1つの駅名を書いればうまく機能するのですが、複数の
駅名を入れると置換されなくなってしまいました。

|西日暮里| → |5|

|西日暮里:新宿| → |西日暮里:新宿|

置換に全文一致を使っていたのでそれを外すと新たな問題が,,,

|西日暮里:新宿| → |西4:1|

西日暮里は5に置換されるはずが、4に置換され、更に西が残りました。
西日暮里の前に、日暮里を4に置換(全文一致ではない)する行があったことが問題でした。

これをうまいこと回避する手はありますでしょうか?
説明に明確でない所があれば、指摘して下さい。
ちなみにマクロは素人で、今回初めて使います。

宜しくお願い致します。

A 回答 (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
    • good
    • 0
この回答へのお礼

丁寧なご回答、
ありがとうございます。

また、お礼が遅くなってすいません。
ご回答頂いたのもお忘れかと思うほど時間が経ってしまいました。

>多分、駅名を変換するデータがあると思って作っています。
あります。
難しそうですが、チャレンジしてみます。

「転ばぬ先の杖」とはいいつつも自分の必要な知識から虫食いのように
勉強しています。

来年2月からは本格的に・・・。と密かに考えてはいるのですが・・・。

本当にありがとうございました。

お礼日時:2001/10/13 15:48

|西日暮里:新宿| → |西日暮里:新宿|


の回避は、LookAt:=xlWhole → LookAt:=xlPart にして下さい。

|西日暮里:新宿| → |西4:1|
の回避は、文字列の長いものから、置換すればOKです。

この回答への補足

なるほどです。

(西日暮里が日暮里を置換することはないのでしょうか?試してみます)

(ちょと欲を出しまして)他の方法はないでしょうか?

と申しますのも、
駅名はじつはたくさんあります。ざっと1200駅はあります。
(何に使うかは長い話になりますので割愛)

西日暮里と日暮里、幕張と京成幕張、蒲田と京急蒲田、新宿と西新宿と新宿三丁目、武蔵野と,,,
といった感じなんです。

これにすべて別々の数字を割り当てています。
手間ついでにもう3手間くらいかければmiya_777さんのアドバイスで解決するのですが,,,

スマートな方法(やってることがスマートではないのですが,,,)はありますでしょうか?

宜しくお願い致します。

補足日時:2001/08/14 19:28
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード


人気Q&Aランキング

おすすめ情報

カテゴリ