OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
締切り
済み

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

  • 困ってます
  • 質問No.118638
  • 閲覧数354
  • ありがとう数3
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 75% (3/4)

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

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

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

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

|西日暮里| → |5|

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

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

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

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

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

宜しくお願い致します。
通報する
  • 回答数2
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

回答 (全2件)

  • 回答No.1
レベル10

ベストアンサー率 31% (44/140)

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

|西日暮里:新宿| → |西4:1|
の回避は、文字列の長いものから、置換すればOKです。
補足コメント
G-integal

お礼率 75% (3/4)

なるほどです。

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

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

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

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

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

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

宜しくお願い致します。
投稿日時 - 2001-08-14 19:28:54

  • 回答No.2
レベル13

ベストアンサー率 68% (791/1163)

かなり日にちも経って無意味ですかね。ユーザー定義関数を作ってみましたので参考に投稿します。 多分、駅名を変換するデータがあると思って作っています。前提は、シートのどこかに変換テーブル、例えば、  新宿    1  京成幕張  2  新宿三丁目 3  日暮里   4  西日暮里  5  蒲田    6  京急蒲田  7  幕張    8 のようなものがあるとして、これに範囲名『dat ...続きを読む
かなり日にちも経って無意味ですかね。ユーザー定義関数を作ってみましたので参考に投稿します。
多分、駅名を変換するデータがあると思って作っています。前提は、シートのどこかに変換テーブル、例えば、
 新宿    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

お礼率 75% (3/4)

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

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

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

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

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

本当にありがとうございました。
投稿日時 - 2001-10-13 15:48:07
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
このやり方知ってる!同じこと困ったことある。経験を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ