- ベストアンサー
1つのシートで2つ目のマクロ
お世話になります。 今、あるシートに1つのマクロを登録してあります。 リストで選択した番号に従って指定したセルにカーソルを飛ばすというマクロです。 で、それとは別のセルに同じシートで郵便番号を入力したら隣のセルに住所を反映させるマクロを登録したいのですが ここで入手したコードをコピペして範囲を修正したのですが どうやら下記の文章が2つあるのがいけない(?)のでしょうか? 「コンパイルエラー名前が適切ではありません」と出てきます。 Private Sub Worksheet_Change(ByVal Target As Range) このコマンド(?)は1つのシートに2つ存在してはいけないものなのでしょうか? あと 出来れば L列に入力した郵便番号を参照してM列に都道府県名、N列に市町村名以降を反映させたいので その方法もご教示いただければ幸いです。 どちらかだけでも結構です。 ・エラーの原因、 ・住所を反映させるマクロ ご教示いただける方、宜しくお願い致します。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
Private Sub Worksheet_Change(ByVal Target As Range) (内容1) End Sub Private Sub Worksheet_Change(ByVal Target As Range) (内容2) End Sub という状態になっているのでしょうか? それでしたら、1つ目のマクロの最後に中身だけ貼り付けで大丈夫だと思います。 Private Sub Worksheet_Change(ByVal Target As Range) (内容1) (内容2) End Sub
その他の回答 (5)
- pkh4989
- ベストアンサー率62% (162/260)
No3です。 マクロを利用すれば出きます。 A列に半角郵便番号を入力するとB列に全角郵便番号が表示及び選択状態になるので、 そのまま、「変換」キーを押せば住所変換されます。 ※ B列は、入力規則→日本語入力→ひらがなに設定する Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 1 Then If Target.Value <> "" Then Cells(Target.Row, 2) = StrConv(Target.Value, vbWide) Cells(Target.Row, 2).Select SendKeys "{F2}" Else Cells(Target.Row, 2) = "" End If End If End Sub
お礼
ご回答ありがとう御座います。 郵便番号変換ウィザードを入れておけば ご教示いただいたマクロを 使わなくても この方法で出来るのでしょうか? なぜか 出来てしまったのですが。。。 何かよく分かりませんが 無事に郵便番号から住所が反映されましたので めでたしめでたしなのですが 何で出来たのかが分からず 少しばかりモヤモヤしています。 ありがとう御座いました。
- imogasi
- ベストアンサー率27% (4737/17069)
反応させるセルやセル範囲が(Targetを判別するステップ)違うと思うのですが同じですか。 例えば先頭に If Target.Column=1 Then A処理のコード群 End If If Target.Column=3 Then B処理のコード群 End If のようなことで、今までは済むと思ってましたが、すみわけは効きませんか。シートのセルに、コードのどちらの部分を処理するか処理FLAGを立ててそれを元にChangeイベントルーチンに飛んできたとき振り分けるとか。 >郵便番号を参照してM列に都道府県名、N列に市町村名以降を反映させたいので 郵便番号住所対応表は10数万行(レコード)があるようなので、アクセスのような利用を考えざるを得ないと思います。エクセルのMSクエリでどうですか。やったこと無いのですが。WEBにアクセスの例があったような。
お礼
ご回答ありがとう御座います。 他の回答者様の回答で解決できました。 お手数お掛けしました。 ちなみに >シートのセルに、コードのどちらの部分を処理するか処理FLAGを立ててそれを元にChangeイベントルーチンに飛んできたとき振り分けるとか。 とか >エクセルのMSクエリでどうですか この辺は ほとんど 意味が理解出来ませんでした。。。。
- qualheart
- ベストアンサー率41% (1451/3486)
>エラーの原因 おっしゃるとおり、同じ名前のプロシージャは同一シート内に存在できません。 この場合は、2つのマクロを1つのPrivate Sub Worksheet_Change(ByVal Target As Range)内に書いてしまえば良いと思います。 >住所を反映させるマクロ 郵便番号、都道府県名、市町村名を並べた一覧を別シートなどに作成しておけばできますね。関数を使うだけでも簡単にできます。 例えば、「住所」というシートにA列に郵便番号、B列に都道府県名、C列に市町村名を入力した一覧を作ったとします。 あとはM1に =VLOOKUP(L1,住所!$A:$C,2) N1に =VLOOKUP(L1,住所!$A:$C,3) を入力して、あとは必要な行数分コピーすればOKです。
お礼
ご回答ありがとう御座います。 >2つのマクロを1つのPrivate Sub Worksheet_Change(ByVal Target As Range)内に書いてしまえば良いと思います。 かしこまりました。ありがとう御座います。 >郵便番号、都道府県名、市町村名を並べた一覧を別シートなどに作成しておけばできますね。 なるほど!そういえばそうですね! でも その準備の方が面倒じゃないですか? ベクターか どこかに一覧みたいなのありますかね? (または郵便局のHPでしょうか?) 一応、Vlookupぐらいは出来るので >「住所」というシートにA列に郵便番号、B列に都道府県名、C列に市町村名を入力した一覧を作ったとします。 このシートが簡単に手に入れば その方が楽ですね。
- pkh4989
- ベストアンサー率62% (162/260)
こんにちは。 <エラーの原因> No2さんの通りです。 <住所を反映させるマクロ> 以下を参考にしてください。 郵便番号変換ウィザード http://www.morgan.co.jp/kiso/5excel-5.htm 郵便番号から住所を自動入力 http://dreamy.boy.jp/tec41.htm
お礼
ご回答ありがとう御座います。 一応、郵便番号変換ウィザードについては調べておりました。 すみません。書いておけば良かったですね。 (本当は書いておこうと思っていたのですが忘れてしまいました) ウィザードだと「まとめて変換」になりますよね。 最悪それでもいいのですが、そうやって諦める前に何とかならないかなぁ? と思いこちらで質問を立てました。 下のURLも一応 調べてはあったのですが 何か「両方に入力しないといけないのかなぁ?」 と思い、他の方法を探しておりました。 >郵便番号から住所を自動入力 の方法で郵便番号を1回しか入力しないで出来る方法が可能でしょうか? 出来れば再登場お願いします。
- marbin
- ベストアンサー率27% (636/2290)
>・エラーの原因 >どうやら下記の文章が2つあるのがいけない(?)のでしょうか? そのとおりだと思いますが、どんな記述の仕方をしてるのかコードの提示 がないので具体的な説明は出来ません。 説明できるのは、↓くらいかな。 TargetのAddressやRow、Columnなどのセル範囲か、TargetのValue、Formula、Textなどで 条件分岐してはいかがでしょう?
お礼
ご回答ありがとうございます。 >TargetのAddressやRow、Columnなどのセル範囲か、TargetのValue、Formula、Textなどで >条件分岐してはいかがでしょう? すみません。。。。 おっしゃる意味が丸でわかりません。。。。 >どんな記述の仕方をしてるのかコードの提示がないので これにつきましては「何が書いてあるか理解してない」ので、どこから どこまでを ここに貼ればいいのか分からないので。。
お礼
ご回答ありがとう御座います。 >という状態になっているのでしょうか? お察しの通り、多分そんな状態です。 2個目の >Private Sub Worksheet_Change(ByVal Target As Range) >(内容2) >End Sub を貼り付けた瞬間に1個目と2個目の間に線が入って勝手に区切られたので感動していたのですが それがいけなかったのでしょうか? 要は >Private Sub Worksheet_Change(ByVal Target As Range) >End Sub 上記の2つが同じシートにあってはいけないと解釈しましたが この解釈で大丈夫ですか?