エクセルのマクロで郵便番号から住所を参照する方法とは?

このQ&Aのポイント
  • エクセルのマクロを使用して、ブック「住所録管理」で郵便番号から住所を参照する方法を紹介します。
  • VLOOKUP関数を使用して郵便番号を検索し、住所を取得する方法もありますが、一部の場合において正しく動作しない可能性があることが報告されています。
  • VLOOKUP以外の方法としては、INDEX関数とMATCH関数を組み合わせる方法があります。詳細な手順は以下をご確認ください。
回答を見る
  • ベストアンサー

エクセルのマクロが上手く働いたり働かなかったりです。

ブック「住所録管理」で以下をオートマクロで作り、C7セルに郵便番号を入力するとブック「郵便」の郵便番号から住所を参照してC8:D8セルにコピーペーストするようにしましたが、VLOOKUPが上手く働いたり働かなかったりします。 ブック「郵便」には A    B    C 郵便番号   住所 フリガナ の形式で、2000件以上のデータがありますが、多すぎる為でしょうか? VLOOKUP以外の方法でも構いませんので、何か良い方法がありましたらご教授下さいます様、宜しくお願いします。 Sub 住所検索() Application.ScreenUpdating = False Dim myFileName As String myFileName = ThisWorkbook.Path & "\郵便.xls" Workbooks.Open Filename:=myFileName Windows("住所録管理.xls").Activate Range("C8:D8").Select ActiveCell.FormulaR1C1 = "=VLOOKUP(R[-1]C,[郵便.xls]Sheet1!R1C1:R1838C2,2)" Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Windows("郵便.xls").Activate ActiveWindow.Close Application.ScreenUpdating = True End Sub

noname#15453
noname#15453

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

  • ベストアンサー
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.2

> 1838行以下にあるものは全てダメな感じです。 1838行以下が検索範囲に入ってないのでは? VLOOKUPの式を御確認ください。

noname#15453
質問者

お礼

あっ!ありがとうございました&超超スミマセンでした。

その他の回答 (1)

noname#123709
noname#123709
回答No.1

ちゃんと見てませんが、通常VLOOKUPを使う時はデータを昇順に並び替えて おく必要があります。 その作業を不要とする為にもVLOOKUP関数の最後の引数にFALSEを指定して おく方が良いのではないでしょうか。 "=VLOOKUP(R[-1]C,[郵便.xls]Sheet1!R1C1:R1838C2,2,FALSE)" で直りませんか?

noname#15453
質問者

お礼

早速のご解答ありがとうございました。 おっしゃる様にFALSEを付けました。 その結果ですが、今まで誤表示された場合の所が#N/Aとエラー表示されます。 ブック「郵便」の上位にあるものは正確に(総て試す訳にもいきませんので断言できませんが)表示されるのですが、1838行以下にあるものは全てダメな感じです。

関連するQ&A

  • エクセルのマクロ

    お世話になります。 Book1.xlsというファイルから、不特定のファイルを開き、一定の作業の後、閉じる場合のマクロについて伺います。 name1、name2のファイルを開き、vlookup関数を入力する場合のマクロの記載は、サイトを検索し、下記のようにすればできました。 Dim name1 As String Dim name2 As String sub macro1() 省略 Workbooks.Open Filename:=name1 Workbooks.Open Filename:=name2 Windows("Book1.xls").Activate Range("C6").Select ActiveCell.FormulaR1C1 = _ "=VLOOKUP(RC1,'[" & name1 & "]sheei1'!C1:C155,R1C,FALSE)" Range("C7").Select ActiveCell.FormulaR1C1 = _ "=VLOOKUP(RC1,'[" & name2 & "]sheei1'!C1:C155,R1C,FALSE)" (省略) ***************************** Windows("name1").Activate ActiveWindow.Close  Windows("name2").Activate ActiveWindow.Close ***************************** として、呼び出したファイルを(保存せず)閉じたいのですが、("name1")("name2")の部分の記載方法を教えてください。よろしくお願いします。

  • Excel マクロ : マクロの記録の表記方法の変更

    Excelで質問です。 下記のようなマクロの記録を使用し「顧客一覧」のブックにデータを追加しています。 しかし、処理の中で一項目コピーするごとにファイルを行ったり来たりしているようで処理が遅いようです。何か解決策はあるのでしょうか? ・ ・ ・ Windows("顧客一覧.xls").Activate Rows("4:4").Select Selection.Insert Shift:=xlDown Windows("2.xls").Activate Range("C6").Select Selection.Copy Windows("顧客一覧.xls").Activate Range("A4").Select ActiveSheet.Paste Windows("2.xls").Activate Range("C7").Select Application.CutCopyMode = False Selection.Copy Windows("顧客一覧.xls").Activate Range("B4").Select ActiveSheet.Paste Windows("2.xls").Activate Range("C8").Select Application.CutCopyMode = False Selection.Copy   ・   ・

  • エクセルで複数ファイルからコピーをする。

    すみませんが、BOOK1に複数のファイルから部分的にコピーして貼り付けるという作業をしたいのですが、ど素人なもんでわかりません。マクロで記録したモノをいじってみてるのですが、根本的にコードが分かっていなくギブアップです。  やりたいことは、フォルダーの中の970305日報1、970305日報2、970306日報1、970306日報2のようなファイルが山ほどあるのですが、 この970305の日報1と2を開き、それぞれファイルの決まった列を順番にをBook1の行へ行列を入れ替えて貼りつけていき(1日が1行)保存して閉じてから、次の日970306のデータをBOOK1の2行目に貼り付けるということをしたいのですが、どなたか教えていただければ助かります。よろしくお願いします。 Sub Macro2() Dim MyFile As String, MyPath As String Dim wb As Workbook, tb As Workbook Set tb = ThisWorkbook MyPath = tb.Path & "\" MyFile = Dir(MyPath & "*.xls", vbNormal) Application.ScreenUpdating = False Application.Calculation = xlCalculationManual Do While MyFile <> "" If MyFile <> tb.Name Then Set wb = Workbooks.Open(MyPath & MyFile) With ActiveSheet Windows("970305日報1.xls").Activate Range("B34:B38").Select Application.CutCopyMode = False Selection.Copy Windows("日報リスト.xls").Activate Range("C1").Select Selection.PasteSpecial Paste:=xlPasteAll,         Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True Windows("970305日報1.xls").Activate Range("C33:C38").Select Application.CutCopyMode = False Selection.Copy Windows("日報リスト.xls").Activate Range("H1").Select Selection.PasteSpecial Paste:=xlPasteAll,       Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True Application.CutCopyMode = False ActiveWorkbook.Save Windows("970305日報1.xls").Activate ActiveWindow.Close Windows("970305日報2.xls").Activate Range("B31:B36").Select Selection.Copy Windows("日報リスト.xls").Activate Range("N1").Select Selection.PasteSpecial Paste:=xlPasteAll,   Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True Windows("970305日報2.xls").Activate Range("D31:D36").Select Application.CutCopyMode = False Selection.Copy Windows("日報リスト.xls").Activate Range("T1").Select Selection.PasteSpecial Paste:=xlPasteAll,   Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True Application.CutCopyMode = False ActiveWorkbook.Save Windows("970305日報2.xls").Activate ActiveWindow.Close Windows("970306日報1.xls").Activate Range("B34:B38").Select Application.CutCopyMode = False Selection.Copy Windows("日報リスト.xls").Activate Range("C2").Select Selection.PasteSpecial Paste:=xlPasteAll,   Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True Windows("970306日報1.xls").Activate Range("C33:C38").Select Application.CutCopyMode = False Selection.Copy Windows("日報リスト.xls").Activate Range("H2").Select Selection.PasteSpecial Paste:=xlPasteAll,   Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True Application.CutCopyMode = False ActiveWorkbook.Save Windows("970306日報1.xls").Activate ActiveWindow.Close -----------------------------------------

  • エクセル・マクロでグラフを最背面に移動させたい

    エクセルのグラフを3つピッタリと重ねて表示しています 後ろのグラフを選択する時「最背面に移動」させてますが これをマクロにしたいです とりあえずマクロの記録でしてみたら Sub Macro1() ActiveSheet.ChartObjects("グラフ 7").Activate ActiveChart.ChartArea.Select Selection.ShapeRange.ZOrder msoSendToBack ActiveWindow.Visible = False Windows("Book1.xls").Activate Range("A1").Select ActiveSheet.ChartObjects("グラフ 5").Activate ActiveChart.ChartArea.Select Selection.ShapeRange.ZOrder msoSendToBack ActiveWindow.Visible = False Windows("Book1.xls").Activate Range("A1").Select ActiveSheet.ChartObjects("グラフ 2").Activate ActiveChart.ChartArea.Select Selection.ShapeRange.ZOrder msoSendToBack ActiveWindow.Visible = False Windows("Book1.xls").Activate Range("A1").Select End Sub と出来たのですが、マクロの実行そしてみると3列目の Selection.ShapeRange.ZOrder msoSendToBack の所で、 「実行時エラー438 オブジェクトはこのプロパティまたはメソッドをサポートしてません」 となってしまいます、どうすればよいのでしょう ボタンを押したら最前面のグラフが最背面に移動するようにしたいのですが難しいのでしょうか

  • Excel マクロでファイル名を変数に・・・

    初心者です。検索してもわからなかったので質問です。 下記のようなマクロの処理で「AAA」というファイル名のExcelに「2.xls」からデータをコピーし貼り付けています。    ・    ・ Windows("AAA.xls").Activate Rows("4:4").Select Selection.Insert Shift:=xlDown Windows("2.xls").Activate Range("C6").Select Selection.Copy Windows("AAA.xls").Activate Range("A4").Select ActiveSheet.Paste Windows("2.xls").Activate Range("C7").Select Application.CutCopyMode = False Selection.Copy    ・    ・ 今回は「2.xls」ではなく「3.xls」、「4.xls」、・・・といったように違うファイル名で同じ処理を行ないたいので「2」と指定するのではなく「(ファイル名).xls」といった形にしたいのですが、それは可能なのでしょうか。 ご意見宜しくお願いいたします。

  • コマンドボタンでマクロを起動するとエラーになる

    以下のようなコードをツールバーのマクロから起動するようにするとできるのですがコマンドボタンから起動するようにするとエラーになります。なぜでしょうか? Private Sub CommandButton1_Click() Application.ScreenUpdating = False Workbooks.Open "C:\My Documents\b.xls" Windows("b.xls").Activate Columns("A:C").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:= _ Workbooks("a.xls").Sheets("Sheet2").Range"A1:A3"), CopyToRange:=Columns("E:G"), Unique:=True ~ここでエラー'1004'~ Windows("a.xls").Activate Workbooks("C:\My Documents\b.xls").Close Application.ScreenUpdating = True End Sub

  • マクロを使って不特定のファイルからコピー&ペーストしたい(エクセル)

    エクセルのデータの必要な列を別のブックに入っているフォーマットにどんどん追加していけるようなマクロを作りたいと思っています。 マクロの自動記録を使ってみたのですが、特定のファイル名が入っているので、使えません。 中を見てみると Windows("A.xls").Activate Columns("b:b").select Selection.copy workbooks.open Filename:="B.xls" Windows("B.xls").Activate Range("D9").select Windows("A.xls").Activate Application.CutCopyMode = False Range("b:b").select Selection.copy Windows("B.xls").Activate Selection.Pastespecial Paste:=xlValues,Operation:=xlNone,SkipBlanks:=False,Transpose:=False . . . となっています。 このファイルAとなっている部分を、どのファイルでも実行できるようにしたいです。 後、ファイルBに貼り付けるときに一番最終行に追加していくにはどのような構文を足せばいいか教えていただきたいです。 初心者で質問の意図が伝わりにくかったらすみません.. よろしくお願いします。

  • サッカーもいいけどマクロもねっ

    多分わかる人には簡単な内容だと思いますが・・ Rows("1:1").Select Range("D1").Select ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-1],Sheet2!R1C1:R1200C2,2,FALSE)" Range("D1").Select Selection.Copy Application.Goto Reference:="R2C4:R65000C4" ActiveSheet.Paste Application.CutCopyMode = False Cells.Select Range("A2").Activate Selection.AutoFilter Selection.AutoFilter Field:=4, Criteria1:="0" End Sub これは「Sheet1にデーター」を入れ 「Sheet2のA列」に調べたい項目を打ち込み Sheet1でマクロの実行をし Sheet1の上の方に調べてる項目が出てくるマクロです 質問は「Sheet2のA列」に調べる項目を打ち込むのではなく 「Sheet2のB列」打ち込みを変更したいのです どこを変えれば良いのでしょうか? 又、A列には「ABC123」と打っているのですが「abc123」の様に小文字にも対応出来る方法はありますか?

  • エクセル マクロ 日付の検索

    エクセル2000にて検索のマクロを作っています。 オブジェクト変数またはwithブロック変数が設定されていません。とエラーがでます。 どなたか助けていただけませんか? ”メニュー”シートのAボタンを押すと”スケジュール”というシートの今日の日付のセルにカーソルが飛ぶようにしたいと思っています。 ”スケジュール”シートのR2セルに=today() 関数が入っています。 A列に日付が入っています。 Sub Macro3() Dim r2 As String   Application.ScreenUpdating = False  Sheets("スケジュール").Select  r2 = Range("R2").Value   Selection.Find(What:=r2, After:=ActiveCell, LookIn:=xlFormulas, _ LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False).Activate End Sub

  • エクセルマクロVLookupについて

    定義ブック.xlsm : 項目名、項目カテゴリ名、項目名長、文字種類 を定義する為ブック。 辞書ブック.xls : 項目カテゴリ名、項目名長、文字種類をこのブック内で色々処理して設定している。 定義ブックの項目名で検索し、 辞書ブックの項目カテゴリ名、項目名長、文字種類を参照してくる。 定義ブックを開いた時に辞書ブックの内容から値を参照(vlookup)するようにしたいです。 定義ブック、辞書ブック、ともに今後、行数が増える想定なので、 何行目まで、というのを変数にしてマクロで実装しようとしています。 そこで、 Application.WorksheetFunction.VLookup() を使ってみたのですが、そのセルが正常に値を表示しません。 vlookupをセルにベタ書きにすれば値は取得できている為、検索値が見つからない為にエラーになっている系統ではないハズです。 エクセルのバージョンは2007です。 また、エクセルにvlookupをベタ書きするようにマクロを組むと、それは正常に値を表示します。 (最悪この手ですが…、セルにカーソルを合わせるとvlookupの式が表示され、避けたいトコロです) どのように修正すれば良いでしょうか…? マクロは初心者です…。 以下、ソースの抜粋です。 ****************************************** Dim ItemCode As Variant Dim SerchArea As Variant Dim LastRow As Long '辞書ブックをアクティブにする Workbooks("辞書ブック.xls").Activate ActiveWorkbook.Worksheets("辞書シート").ActivateLastRow = Cells(Rows.Count, 1).End(xlUp).Row '項目数を取得 Dim LastRow As Long LastRow = Cells(Rows.Count, 1).End(xlUp).Row '最終行を取得(辞書ブック.辞書シートのvlookupを何行目までの範囲にするか) SerchArea = "[辞書ブック.xls]辞書シート!$B$5:$F$" & LastRow '定義ブックをアクティブにする Workbooks("定義ブック.xlsm").Activate ActiveWorkbook.Worksheets("定義シート").Activate For I = 11 To ColumnCnt 'C11セルから下へ、項目名を検索値として取っていく ItemCode = Cells(I, 3) '辞書ブックから値を取得(項目カテゴリ名) 【この書き方だとセルには「value!」と表示される】 Cells(I, 16).Value = Application.VLookup(ItemCode, SerchArea, 2, False) '辞書ブックから値を取得(項目名長) 【この書き方ならセルには正しく値が表示されるけど、勿論、セルにカーソルを合わせると、vlookupの式が表示される】 Cells(I, 38).Value = "=VLOOKUP(C" & I & ",[辞書ブック.xls]辞書シート!$B$5:$F$" & LastRow & ",4,FALSE)" Next I

専門家に質問してみよう