郵便番号を入れると住所が出るマクロを組みたい

このQ&Aのポイント
  • A列に郵便番号を入れると、B列に住所が出るマクロを組みたい。
  • 現在作成したマクロはA1セルしか対応しておらず、A列全体で対応できない。
  • 方法があれば教えていただきたい。
回答を見る
  • ベストアンサー

郵便番号を入れると住所が出るマクロを組みたい

A列に郵便番号を入れると、(例:123-4567)B列に住所が出るマクロを組みたいのですが なかなかできません。例えばA1セルに入力するとB1セルに。A4セルに入力するとB4セルに 出るといった感じです。インターネットで調べながら、 Option Explicit ' ワークシートのChangeイベント記述 Private Sub Worksheet_Change(ByVal Target As Range) Dim xlAPP As Application ' 郵便番号セル以外では動作させない If Target.Address <> "$A$1" Then Exit Sub ' (1) ' 3桁以上の郵便番号があり、住所がブランクの場合のみ住所を変換させる If ((Len(Cells(1, 1).Value) >= 3) And (Cells(1, 2).Value = "")) Then ' (2) Set xlAPP = Application xlAPP.EnableEvents = False ' (3) ' 郵便番号を全角変換し住所に転記 Cells(1, 2).Value = StrConv(Target.Value, vbWide) ' (4) ' 住所のセルを選択 Cells(1, 2).Select ' (5) ' F2 → Shift+Home → F13 を擬装入力する SendKeys "{F2}", True ' 編集モード ' (6) SendKeys "+{HOME}", True ' 文字列全体を選択 ' (7) SendKeys "{F13}", True ' 再変換(MS-IME) ' (8) xlAPP.EnableEvents = True End If End Sub というコードを作ったのですが、これはA1セルしか対応しておらず、A列全体で対応できません。 何か方法があればご教授いただけたら幸いです。

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

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

「A1セル」あるいは「1行目」を指定している箇所を漏れなく修正します。 変更例:今のマクロを全て消して下記に差し替える Private Sub Worksheet_Change(ByVal Target As Range) Dim xlAPP As Application ' 郵便番号セル以外では動作させない If Target.column <> 1 Then Exit Sub ' (1) if target.count > 1 then exit sub ' 3桁以上の郵便番号があり、住所がブランクの場合のみ住所を変換させる If ((Len(Cells(target.row, 1).Value) >= 3) And (Cells(target.row, 2).Value = "")) Then ' (2) Set xlAPP = Application xlAPP.EnableEvents = False ' (3) ' 郵便番号を全角変換し住所に転記 Cells(target.row, 2).Value = StrConv(Target.Value, vbWide) ' (4) ' 住所のセルを選択 Cells(target.row, 2).Select ' (5) ' F2 → Shift+Home → F13 を擬装入力する SendKeys "{F2}", True ' 編集モード ' (6) SendKeys "+{HOME}", True ' 文字列全体を選択 ' (7) SendKeys "{F13}", True ' 再変換(MS-IME) ' (8) xlAPP.EnableEvents = True End If End Sub

kokorororo
質問者

お礼

ご回答ありがとうございます。 無事できることができました。本当に感謝いたします。

その他の回答 (1)

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.2

横からすみません。 郵便番号ウィザードでは・・・ 2007-2010 http://office.microsoft.com/ja-jp/excel-help/HP010077514.aspx 2000-2007 http://www.microsoft.com/downloads/ja-jp/details.aspx?FamilyID=6F6AF8EF-B9DD-4E21-9E63-AF4A0FF4E7CE&displaylang=ja 人は易きに流れ。。。

kokorororo
質問者

お礼

ご回答ありがとうございます。郵便番号変換ウィザードでは一気に変換するしか方法がなく、 途中のセルを修正したいときにすぐに確かめることができず使い勝手が悪いため使用していません。

関連するQ&A

  • 郵便番号から住所を自動表示

    お世話になります。 Excel 2016を使用して、A列のセルに郵便番号を入力すると、B列のセルにその住所を表示するようにしたいと思います。Webから検索した次のようなVBAをSheet1のシートモジュールとして貼り付けました。 Private Sub Worksheet_Change(ByVal Target As Range) '範囲は、A2~A100 に郵便番号を入力する場合 If Intersect(Target, Range("A2:A100")) Is Nothing Then Exit Sub If Target.Count > 1 Then Exit Sub Application.ScreenUpdating = False Application.EnableEvents = False With Target.Offset(0, 1).Validation .Delete .Add Type:=xlValidateInputOnly .IMEMode = xlIMEModeHiragana End With If Target Like "###-####" Then Target.Offset(0, 1).Select SendKeys Target.Value SendKeys "{ }" SendKeys "{ENTER}{ENTER}" SendKeys "{Left}" End If Application.EnableEvents = True Application.ScreenUpdating = True End Sub この結果自分の住所の郵便番号の場合はうまく表示されました。そのほかの番号の場合は、 瞬間的に何か表示されたような気はしますが、結果的には列に入力した番号が表示されます。 またうまく表示されないB列の郵便番号を変換キーで住所に変換する作業を3~4回繰り返した後にこの番号をA列に入力するとB列にこの住所が表示されます。「学習した番号については、うまくいく」ような感じです。 何か解決する方法はないでしょうか。 よろしく願いします。

  • エクセルで郵便番号を入力したら、別なセルに住所を応答させたい。

    7/26に下記の質問をしまして、Wendy02さんからURLを教えてもらい、一時は解決したのですが、 すみません、特定のセル1ケ所に入力し、それを特定のセル同じく1ケ所に表示するにはどのようにするとよいのでしょうか? VBAを作ってみましたが、上手く動きません。。。(>_<) どこかが間違っているのだと思うのですが・・・・・・ よろしくお願いします。 ⇒エクセルで、例えばA1に123456と入力したら、B1に それに対応する住所が表示されるようにしたい。。 Excel アドイン: 郵便番号変換ウィザードがあるのは知っていますが、 これを利用しないで、IMEの郵便番号変換機能を利用して、関数で、あるいはVBAで表示できるようにしたいのですが、可能でしょうか?? (IMEのプロパティの辞書/学習は「郵便番号辞書」にチェックはついています。為念) ★回答⇒Wendy02さんから↓↓↓ ​http://oshiete1.goo.ne.jp/kotaeru.php3?qid=3191662 <作ってみたVBA> Private Sub Worksheet_Change(ByVal Target As Range) 'IMEは、MS-IME に限る Application.ScreenUpdating = False With Range("B7") '入力規則 .Delete .IMEMode = xlIMEModeHiragana 'IME立ち上げ End With Application.EnableEvents = False Range("D7").Select SendKeys Target.Value '番号を入れる SendKeys "{ }" 'スペース変換 SendKeys "{ENTER}" SendKeys "{LEFT}" SendKeys "{DOWN}" settei: Application.ScreenUpdating = True End Sub​

  • このマクロあっていますでしょうか?よろしくお願いいたします。

    ★sheetA Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$C$14" And Target.Address <> "$C$19" _ And Target.Address <> "$F$19" Then Exit Sub If Target.Address <> "$R$14" And Target.Address <> "$S$14" _ And Target.Address <> "$T$19" Then Exit Sub Application.EnableEvents = False With Sheets("B") .Range("F14").Value = Range("C14").Value .Range("F17").Value = Range("C19").Value .Range("F20").Value = Range("F14").Value .Range("F23").Value = Range("F19").Value End With With Sheets("C") .Range("F13").Value = Range("R14").Value .Range("F14").Value = Range("S14").Value .Range("F18").Value = Range("T19").Value End With Application.EnableEvents = True End Sub ★sheetB Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$F$14" And Target.Address <> "$F$17" _ And Target.Address <> "$F$23" Then Exit Sub Application.EnableEvents = False With Sheets("A") .Range("C14").Value = Range("F14").Value .Range("C19").Value = Range("F17").Value .Range("F19").Value = Range("F23").Value End With Application.EnableEvents = True End Sub ★sheetC Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$F$13" And Target.Address <> "$F$14" _ And Target.Address <> "$F$18" Then Exit Sub Application.EnableEvents = False With Sheets("A") .Range("R14").Value = Range("F13").Value .Range("S14").Value = Range("F14").Value .Range("T19").Value = Range("F18").Value End With Application.EnableEvents = True End Sub

  • エクセルのマクロコードに付いて教えて下さい。

    下記のマクロコードがありますが、 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$A$1" Then Exit Sub x = Target.Value With Application .ScreenUpdating = False .EnableEvents = False .Undo y = Target.Value Target.Value = x + y .EnableEvents = True .ScreenUpdating = True End With End Sub セル位置の指定を変更する場合は、どの様に 書けば良いのですか? このコードですと、セルA1の入力指定でなっていますが A1~A5までとか。A1、B1,C1とかにする場合はどの様に 書けば良いか教えて下さい。 マクロに付いて、殆ど知識が無いものですので 出来れば、分かり易い説明でお願いします。 宜しくお願いします。

  • Excel2003 マクロをご教授ください!

    いつもお世話になっております。 ここで 様々な方にご教授いただいて Excelのマクロを反映させられたのですが マクロを貼り付けた後で列を削除したり、各種編集をしていたら 今まで動作していたマクロが動作しなくなってしまいました。 以下 前文を記しますが 動作しないのは 下のマクロです。 Private Sub Worksheet_Change(ByVal Target As Range) Dim rOne As Range Dim intNo As Integer If Target.Column <> "15" Then Exit Sub For Each rOne In Target intNo = Val(StrConv(rOne.Value, vbNarrow)) Select Case (intNo) Case 1 Range("p" & rOne.Row).Select Case 2 Range("x" & rOne.Row).Select Case 3 Range("z" & rOne.Row).Select Case Else End Select Next rOne If Intersect(Target, Range("L3:L3001")) Is Nothing Then Exit Sub If Target.Count > 1 Then Exit Sub Application.ScreenUpdating = False Application.EnableEvents = False With Target.Offset(0, 1).Validation .Delete .Add Type:=xlValidateInputOnly .IMEMode = xlIMEModeHiragana End With If Target Like "###-####" Then Target.Offset(0, 1).Select SendKeys Target.Value SendKeys "{ }" SendKeys "{ENTER}" End If Application.EnableEvents = True Application.ScreenUpdating = True End Sub 上のマクロ(セルを飛ばす)は正常に動作してくれるのですが 下のマクロで郵便番号を自動的に隣のセル(M列)に反映してくれなくなってしまいました。 M列のとなり(たしかN列だったと思うのですが)を削除したあたりから この郵便番号マクロが動作しなくなってしまいました。 どこか おかしな所はないか見ていただけますでしょうか。 宜しくお願い致します。

  • エクセルのマクロコードについて

    お世話になります。 下記コードで、セルごとにクリアをすると、エラーなくうごくのですが、セルをまとめてセルを消すと実行時エラー13型が一致しません。とでてIf Target.Value = "" Thenがだめだよとでてしまいます。 どなたか、回避の方法をご教授ください。 宜しくお願いいたします。 Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("B2:E2,G2:J2")) Is Nothing Then Exit Sub If Target.Value = "" Then Exit Sub x = Target.Value With Application .ScreenUpdating = False .EnableEvents = False .Undo 'Range("B2").Value = x + Z Z = Target.Offset(1, 0).Value y = Target.Value Target.Value = x + y .EnableEvents = True .ScreenUpdating = True End With Target.Offset(1, 0).Value = x + Z End Sub

  • このEXCELVBAを複数のセルにも別々に同じ処理をしたい

    はじめまして。 過去ログに私のやりたいような内容を探していたらこのような下記のエクセルVBAがあったので、 教えて頂きたいです。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$A$1" Then Exit Sub If Target.Value = "" Then Exit Sub x = Target.Value With Application .ScreenUpdating = False .EnableEvents = False .Undo y = Target.Value Target.Value = x + y .EnableEvents = True .ScreenUpdating = True End With With Cells(ActiveSheet.Rows.Count, "C").End(xlUp) .Offset(1, 0).Value = x .Offset(1, 1).Value = Time() End With End Sub A1に入力するたびに同一セルに加算。 A1をクリアできる。 C列に入力履歴、D列に入力時間を記録。 If Target.Address <> "$A$1" Then Exit Sub の$A$1を変えることによって他のセルにも設定できる。 と、いう内容なのですが、これを同一シートの複数のセルにも同じよう別々に処理できるように設定したいのですが、 どのようにすればいいのでしょうか? VBAは最近始めたばかりなのでわからない事だらけです。 Excelのバージョンは2003です。 よろしくお願い致します。

  • EXCEL VBAについて教えてください

    はじめまして。 過去ログに私のやりたいような内容を探していたらこのような下記のエクセルVBAがあったので、教えて頂きたいです。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$A$1" Then Exit Sub If Target.Value = "" Then Exit Sub x = Target.Value With Application .ScreenUpdating = False .EnableEvents = False .Undo y = Target.Value Target.Value = x + y .EnableEvents = True .ScreenUpdating = True End With With Cells(ActiveSheet.Rows.Count, "C").End(xlUp) .Offset(1, 0).Value = x .Offset(1, 1).Value = Time() End With End Sub A1に入力するたびに同一セルに加算。 A1をクリアできる。 C列に入力履歴、D列に入力時間を記録。 If Target.Address <> "$A$1" Then Exit Sub の$A$1を変えることによって他のセルにも設定できる。 と、いう内容なのですが、これをたとえば同一シートのA1~E10のセルとA12~E22にも同じよう別々に処理できるように設定したいのですが、どのようにすればいいのでしょうか?ちなみにA11~E11とA23~E23は合計を表示するセルにしたいです。 Excelのバージョンは2003です。 よろしくお願い致します

  • エクセルのマクロで複数セル指定は?

    以前(7月22日 質問No.936181)の質問でご回答を頂いたマクロなんですが、 Private Sub Worksheet_Change(ByVal Target As Range) Dim MyData As String Dim i As Integer Dim ImaNanji As String Dim SakkiNanji As String Dim ImaNanpun As String Dim SakkiNanpun As String SakkiNanpun = Cells(2, 3).Value ImaNanji = Cells(1, 3).Value ImaNanpun = Mid(ImaNanji, Len(ImaNanji) - 4, 2) If ImaNanpun <> SakkiNanpun Then Application.EnableEvents = False For i = 10 To 2 Step -1 MyData = Cells(i - 1, 2).Value Cells(i, 2).Value = MyData Next i MyData = Cells(1, 1).Value Cells(1, 2).Value = MyData Cells(2, 3).Value = ImaNanpun Application.EnableEvents = True End If End Sub A1のデータをB1からB10に一分おきにつぎつぎに書き込むというものなんですが、ひとつのセルではなく複数のセル(例えばA1からA30の30個のセル)をいっぺんに書き込むようにしたいのですが可能でしょうか? よろしくお願いします。

  • Excel2007 マクロについて

    自分で何とかしようと思い試行錯誤しましたがダメでしたのでご指導のほどお願いします。 今のコードが下記です Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, cancel As Boolean) If Application.Intersect(Target, Range("F:G")) Is Nothing Then Exit Sub Application.Goto Worksheets(IIf(Target.Column = 6, "人件費", "外注費")).Range("A65536").End(xlUp).Offset(1) ActiveCell.Value = Cells(Target.Row, "A").Value cancel = True End Sub 台帳シートのF列のセルをダブルクリックするとその列の先頭A列の数字を持って人件費シートが開き 一番新しい列のA列に台帳シートの値を入れる というコードです G列では外注費で同じ事が行われます。 それにH列を追加し材料費シートをに同じ事を行いたいのですがわかりません ご指導のほどお願いします。

専門家に質問してみよう