ウォーターサーバーとコーヒーマシンが一体化した画期的マシン >>

いつもお世話になります。

OSは Win10
エクセルは2016 です。

ご指導いただきたいのは、
参照図では、4つ目の 「郵便番号」 を入れると
5つ目の「住所1」に自動的にマクロで表示したい。

※可能ならばご指導いただけないでしょうか。


ユーザーフォームの「郵便番号」に 244-0842 と入力すると
「住所1」に 横浜市栄区飯島町 と自動的にマクロで表示

参考に
Private Sub cmdTouroku_Click()
n = Cells(Rows.Count, 1).End(xlUp).Row + 1

Cells(n, 1) = textKaisha.Text
Cells(n, 4) = textYomi.Text
Cells(n, 3) = textKatakana.Text
Cells(n, 5) = textYubin.Text
Cells(n, 6) = textJusho1.Text
Cells(n, 8) = textJusho2.Text
Cells(n, 9) = textTEL.Text
Cells(n, 10) = textFAX.Text
Cells(n, 11) = textEmail.Text
Cells(n, 12) = textTantou.Text
Cells(n, 15) = textBiko.Text
Cells(n, 16) = textNyuryoku.Text

textKaisha.Text = ""
textYomi.Text = ""
textKatakana.Text = ""
textYubin.Text = ""
textJusho1.Text = ""
textJusho2.Text = ""
textTEL.Text = ""
textFAX.Text = ""
textEmail.Text = ""
textTantou.Text = ""
textBiko.Text = ""
textNyuryoku.Text = ""

textKaisha.SetFocus

  For Each Ctrl In Me.Controls
If Ctrl.Name Like "text*" Then
Ctrl.Value = ""
End If
Next Ctrl
  End Sub

「UserFormでマクロにて郵便番号から」の質問画像

質問者からの補足コメント

  • どう思う?

    ありがとうございます。
    現在は、F列の「住所1」に郵便番号を手動で入力スペースキーで変換しています。
    この手動入力から省力化したく質問させていただきました。

    No.1の回答に寄せられた補足コメントです。 補足日時:2018/04/10 21:46
  • どう思う?

    郵便番号データダウンロード
    http://www.post.japanpost.jp/zipcode/download.html

    で 神奈川県 を同じブック内に落としました。

    私の考えですが
    VLOOKUP で抽出します。
    いい方法があればご教授いただけたら幸いです。

      補足日時:2018/04/10 22:05
  • どう思う?

    お世話になりありがとうございます。

    未熟な考えで私なりに対応したのを報告します。

    ユーザーフォーマット
    住所1 は削除


    シート名 データー

     シート名 〒 
      郵便番号データダウンロード
      http://www.post.japanpost.jp/zipcode/download.html
      神奈川県 のみを追加

     F2に 
     =IF(ISNA(VLOOKUP(E2,〒,2,FALSE)),"",VLOOKUP(E2,〒,2,FALSE))
     名前の管理 〒 =〒!$A$1:$B$2290
     
    ※この方法だと神奈川県だけになります。

    他の都道府県だとシート「〒」莫大なデーターが大変です。

    このブックの用途はユーザー管理のためです。

      補足日時:2018/04/11 10:02
  • うーん・・・

    1 標準モジュール に Module1 を追加して下記の構文を入力しました。
     a)'//基本的には標準モジュールでお使いください。
     b)'//Excel 全般、または、Office VBA用
    UserrForm2 の 「郵便番号」に 例 244-0842 を入力し
            「住所1」  には 例 横浜市栄区飯島町 と表示されません。
    シートの F列「住所1」 にされるのかと思いましたが駄目でした。

    2 シート名 右クリック コードの表示 に下記を入力
      '//Excel 全般、または、Office VBA用
    UserrForm2 の textbox と 構文 textboxを削除してもダメでした。

    私のやり方が悪いのでしょうか
    お忙しいところ再度ご協力いただけませんか。

    No.3の回答に寄せられた補足コメントです。 補足日時:2018/04/11 12:48
  • へこむわー

    2件の構文をお示しいただきましたがこれらのマクロをどこに入れればいいのかが分かりません。

    module
    シートコード
    Sheet1(名簿作成)
    ThisWorkbook

    のいずれにも入力して UserForm2 を作動しましたが応答はありません。
    私のやり方のどこかに問題かあると思います。

    ここまで難しくなると対応ができなくなり具体的にご指導いただくとありがたいのですがお願いできませんか。

    No.4の回答に寄せられた補足コメントです。 補足日時:2018/04/11 15:17
  • つらい・・・

    おはようございます。
    お世話かけます。

    No.6 を早速トライさせていただきました。
    画像の確認で、
    ① ② ③ はご指示通りWクリックして表示されます。
    順調でした。

    質問

    ワークシートのセルに、この数式を貼り付ければ
    =Zip2Addr("246-0824")
    神奈川県横浜市栄区飯島町

    E列の 「郵便番号」 E2 のセルに =Zip2Addr("246-0824")
    をそのまま貼り付けました。
    その結果 #NAME? と表示されました。

    余計なことかもしれませんが、
    神奈川県横浜市栄区飯島町 の郵便番号は 244-0842 です。

    ※UserForm2 で 氏名 カタカナ 郵便番号 住所1(何も表示されずまた何も入力せず)
     住所2  TEL と進め 登録ボタン クリックしましたが シート名「名簿作成」
     の住所1(E列)には何も反映されませんでした。

    ごめんなさい

    No.6の回答に寄せられた補足コメントです。 補足日時:2018/04/12 07:05
  • つらい・・・

    おはよう後さぞいます。
    本当にお世話かけます。
    ご指導の努力に感謝します。


    何度も何度も原点に返って試してみるのですが
    私の能力不足でご迷惑かけます。
    うまくゆきません。

    No.7の回答に寄せられた補足コメントです。 補足日時:2018/04/13 07:28
  • うーん・・・

    ありがとうございました
    原点に戻り新規に作り直しテストしましたが

    =Zip2Addr(E2)  #NAME?

    の結果でした

      補足日時:2018/04/13 11:42
  • どう思う?

    ありがとうございます。
    ご指導の結果を報告します。


    1 モジュール内の、コードのFunction のところで、デバッグメニューのブレイクポイントのマークを置いて

    あずき色になります
    2 デバッグメニューのVBAProject のコンパイルというところをクリックすると、
    役に立っていないコードは、エラーが出るようになっています。

    エラーなどは出ません

     VBAProject のコンパイル はグレーになりました
    3 ワークシートで、=ZI ぐらいまで入れるとインテリセンスが働いて、
    Zip2Addr( が出てくるはずですが

    fx Zip2Addr( が出てきました

    No.8の回答に寄せられた補足コメントです。 補足日時:2018/04/13 15:28

A 回答 (9件)

こんにちは。


どうやら、原因が分かりました。

>3 ワークシートで、=ZI ぐらいまで入れるとインテリセンスが働いて、
>Zip2Addr( が出てくるはずですが
これは、ユーザー定義関数が生きているという意味で、見通しが立ちました。
現在は、Zip2Addr も、Zip2Address も、WebSerive 関数も、データが取れていないはずです。

おそらく同じだと思いますが、こちらでも、PCを別の環境にして再現性が取れました。私は、今まで下位バージョンばかり扱っていたので、気が付かなかったし、新しいセキュリティ設定には無頓着でした。

私も初めての経験で、お手数を掛けて、申し訳ありませんでした。
その状態から、解除するのにもかなり試行錯誤しました。

オプション-セキュリティセンター-プライバシーオプション

□ Office のインターネット接続を許可する

これをオン ☑ していただくこと。
もうひとつは、同じくセキュリティセンターの中の、
信頼できる場所に、そのファイルを置くか、そのファイル・フォルダーを信頼できる場所と登録していただく必要があります。

そう設定した後に、Excelを再起動すると、何やら、またVBA側からエラーが出てくることがあるかもしれません。もし、エラーが出ましたら、一旦、そのユーザー定義関数のマクロのコード部分だけを削除していただき、再登録していただいたほうが良いのではないかと思います。

もしくは、WebService 関数を利用した、Zip2Address 関数をお使いになったほうが、より確かかもしれません。これがダメでしたら、後は、ファイヤーウォールやセキュリティソフトを見なくてはなりませんが、それは、私からは難しいです。

ただ、お仕事でセキュリティの規則で許されていないと、もうひと方の方が語った、単独のスタンドアロン形式にするしかありません。その場合は、どの程度提供しなければならないかは不明です。
Vlookup という方法もないとは言いませんが、あまり反応が鈍いので、快適とは言えません。そうすると、データベースmdbファイルですが、それをこちらから提供することも可能ですが、いずれ更新などを考えると、csvファイルを辞書化するようなプログラムも提供しなくてはならないかと思います。

長い間、私自身もやったことがないことです。

郵便番号ウィザードの内部を書き換えて、UserForm に組み込む方法もないとはいいませんが、事実上、もう郵便番号ウィザードは手に入らないことが判明しましたし、それ以上に、郵便番号ウィザードの辞書がもう更新はしていないのです。おそらく、今回のWeb APIやIMEの変換があるので、こうした郵便番号ウィザードは消えていったのだろうと思います。

できれば、今回、私のユーザー定義関数が働くことを期待したいのです。

なお、まだ、これから先の問題が少しあります。私自身、VBA何年目かの頃に、こういうスタイルのUserForm を作って、他人に使ってもらうユーティリティとしては失敗した経験があるのですが、その失敗した原因に似通った部分を持っています。
「UserFormでマクロにて郵便番号から」の回答画像9
    • good
    • 0
この回答へのお礼

大変な労力を気遣っていただき誠にありがとうございます。
私の力が遠くに及ばないのをお許しください。

私としてはNo.2 めぐみさんの方法で進めさせていただきますのでご理解ください。


再度報告します。
ユーザーフォーマット
住所1 は削除


シート名 データー

 シート名 〒 
  郵便番号データダウンロード
  http://www.post.japanpost.jp/zipcode/download.html
  神奈川県 のみを追加

 F2に 
 =IF(ISNA(VLOOKUP(E2,〒,2,FALSE)),"",VLOOKUP(E2,〒,2,FALSE))
 名前の管理 〒 =〒!$A$1:$B$2290
 
※この方法だとシート「〒」に上記から 神奈川県/千葉県/埼玉県/静岡県/東京都 をダウンロードしました。

お礼日時:2018/04/15 09:36

>=Zip2Addr(E2)  #NAME?



こうなるのは、モジュールに、ユーザー定義関数が認識していないということなのです。
用意されている内部エラーは、Error と #Valueです。

例えば、モジュール内の、コードのFunction のところで、デバッグメニューのブレイクポイントのマークを置いて、数式をEnter すると、ユーザー定義関数が呼び出されるのが確認できます。

また、デバッグメニューのVBAProject のコンパイルというところをクリックすると、役に立っていないコードは、エラーが出るようになっています。

ワークシートで、=ZI ぐらいまで入れるとインテリセンスが働いて、Zip2Addr( が出てくるはずですが、今の状態は、数式バーのfx をクリックして、関数の分類の「ユーザー定義」の中に、くだんの関数は見つからないはずです。

ただし、この関数は、登録したブックにしか使うことができません。また、標準モジュール以外に登録しても、このユーザー定義関数はワークシート上では使えません。

もちろん、UserForm モジュールに入れて、モジュール内で呼び出す分には使えますが、UserForm モジュール自体の負担が増えてしまいますので、私はそういう方式を取りません。
この回答への補足あり
    • good
    • 0

最初に、数式をみると、以下のようになっていましたから、私の転機ミスです。


失礼しました。

=Zip2Addr("244-0842")
神奈川県横浜市栄区飯島町

=Zip2Addr("244-0841")
神奈川県横浜市栄区長沼町

>その結果 #NAME? と表示されました。

勝手な考え方で申し訳ないのですが、今までの経験で、初めにこのようなレベルでつまづいたことは、終わりまで、続くことが多いのです。そしてまた、お互いがつまらない結果に終わっているのです。こういうことにトラブった時は、不可抗力によるものでも、少なくとも、Windows 10 でしたら、どこかに問題が発見できるはずです。

なんとか、踏ん張って、ネット検索などをして、ご自身で解決してみてください。郵便番号を表示する方法としては、他の方法もあるのですが、この方法が使える限りは、一番楽でデータも少なくてすみます。ただ、もしも、ギブアップでしたら、こちらの方法はお忘れください。ただ、VLOOKUPにしろ、加工するのが、かなり面倒な気がします。

念のために、数式の画像を付けておきます。
正しく登録されていれば、=Z... だけ入れても、関数は出てくるはずです。
「UserFormでマクロにて郵便番号から」の回答画像7
この回答への補足あり
    • good
    • 0

VLOOKUPなどの組み込み関数を利用することと、まったく同じ原理なのですが。


ただ、ユーザー定義関数を、標準モジュールに入れればよいだけのことです。
オブジェクト名まで変えたり、コントロール名をループして処理しているなど、かなり凝った作りをなさってるのに、どうして、こちらの話が通じないのか、よく分かりません。

>ここまで難しくなると対応ができなくなり具体的にご指導いただくとありがたいのですがお願いできませんか。

ご自身のやり方と違うと、分からないということでは?
まったく分からない人に、今のUserFormの組み立てができるとは思えません。

まず、こちらが提示したコードの全体的な疑問を感じていらっしゃるのではないでしょうか。
もし、そうなら、私の書いたコードの中で、ユーザー定義関数が可動するかどうか、ワークシート上でチェックはしてみたらいかがですか?ファイヤーウォールなど、プロテクトが掛かっているかもしれません。

標準モジュールにユーザー定義関数を入れて、
ワークシートのセルに、この数式を貼り付ければ
=Zip2Addr("246-0824")
神奈川県横浜市栄区飯島町

と出てくるはずです。これが出てこないようなら、まったく別なシステムを考えなくてはなりません。

後は、画像をご覧ください。画像は小さいですが、右クリックして、画像のURLを取り出し、それをブラウザで閲覧しながら拡大できるかと思います。
「UserFormでマクロにて郵便番号から」の回答画像6
この回答への補足あり
    • good
    • 0

No.2です。



>※この方法だと神奈川県だけになります。
>他の都道府県だとシート「〒」莫大なデーターが大変です。

全国で行なうと膨大になるので個人的にはACCESS等にインポートし、そのデータベースへ接続して得る方法はあります。
ただうちのは既に古くなったバージョンなので最新(?)の物で可能かどうか、データベースの構築とかについても心配はしちゃいます。
それにこう言った物は「VisualBasic」か「VisualC#」でやってたので、VBAではちょっと苦手意識も。。。

既に出ている回答のようにインターネットへの接続は必須ではなく、孤立したスタンドアローン(1台)でも出来ますね。
だって私ネット接続系の方が苦手ですので。
    • good
    • 0

わかりやすく「tx郵便番号」と「tx住所」というテキストボックスにしてみました。


最初は、エンターで変換されるものを考えていましたが、

もしかしたら、入力の自動変換のほうがよいのかもしれませんね。分からないと言っている人に提供するのは、ちょっと顰蹙ものなのですが。複雑すぎて分からないというなら、最初に考えたほうをお使いください。ユーザー定義関数は、Zip2Addr を利用しました。なお、インターネット環境がで、外部にアクセスできることを条件としています。Zip2Address も、同様のインターネット環境が必要です。

'UserFormモジュールに以下のようにします。2つ必要です。
'---------------
Private Sub tx郵便番号_Change()
If Len(Replace(tx郵便番号, "-", "")) = 7 Then
 tx住所.Text = Zip2Addr(tx郵便番号.Text)
End If
End Sub

Private Sub tx郵便番号_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
'数字とハイフン(-)しか入力できません。
If KeyAscii < 48 Or KeyAscii > 57 Then
   If KeyAscii <> 45 Then
    KeyAscii = 0
   End If
  End If
End Sub

'----------------------
'簡易型(上記と併用はできません。)
'この場合は、入力した後に、Enter を入れると、住所欄に変換された住所が出てきます。

Private Sub tx郵便番号_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode <> 13 Then Exit Sub
 tx住所.Text = Zip2Addr(tx郵便番号.Text)
End Sub
'-----------------

できれば、こちらは、tx郵便番号のプロパティのIMEModeは、「3 - fmIMEModeDisable」などの、全角数字が入らないようにしておくとよいです。
この回答への補足あり
    • good
    • 0

こんにちは。



昨日から、VBAの郵便番号検索プログラム関数を作ってみました。
ご使用になっているのは、Excel 2016だそうですから、特に問題はありません。
ただ、これをご覧の方の中には、それ以下のバージョンもあると思いましたので、両方作ってみました。これは、郵便番号Wizard や郵便番号データが不要です。

もし汎用性を考えるのでしたら、2番めのZip2Addr 関数のほうをお使いください。

UserFormのテキストボックスへの組み込み方は、おわかりになると思いますが、分からないようでしたら、サポートします。

なお、専門的にはなりますが、出力は、JSONファイルですが、昨日から、これを素直に取り出す方法がないか、いろいろ検討してみましたが、以下の方法が一番短くて済むように思いました。

これは、郵便番号データ配信サービス zipcloud様のWeb APIを利用したプログラムです。

'//基本的には標準モジュールでお使いください。
Function Zip2Address(ByVal ZipCode As String)
 If Application.Version < 15 Then Zip2Address = "not Available": Exit Function
 ''Excel 2010以下は、別のユーザー定義関数が必要です
 Dim sZipCode As String
 Dim buf As String
 Dim arBuf
 Dim i As Long, j As Long
 Dim adrBuf As String, b As String
 Const strURL As String = "http://zipcloud.ibsnet.co.jp/api/search?zipcode="
 sZipCode = Replace(ZipCode, "-", "", , , vbTextCompare)

 If Len(sZipCode) <> 7 Then Zip2Address = "length_Err": Exit Function
 buf = WorksheetFunction.WebService(strURL & sZipCode)
 arBuf = Split(Replace(buf, vbLf, ""), "address")
 If UBound(arBuf) = 0 Then Zip2Address = "Error": Exit Function
 For i = 1 To 3
  b = arBuf(i)
  j = InStr(1, b, ",")
  adrBuf = adrBuf & Mid(b, 6, j - 7)
 Next i
 Zip2Address = adrBuf
End Function

'//Excel 全般、または、Office VBA用
Function Zip2Addr(ByVal ZipCode As String)
'グローバルバージョン
Dim objHTTP As Object
Dim strURL As String
Dim arAdr As Variant
Dim sZipCode As String
Dim buf As String
Dim arBuf
Dim i As Long, j As Long
Dim adrBuf As String, b As String
Const URL As String = "http://zipcloud.ibsnet.co.jp/api/search?zipcode="
 sZipCode = Replace(ZipCode, "-", "", , , vbTextCompare)
 If Len(sZipCode) <> 7 Then Zip2Addr = "Error w": Exit Function
 strURL = URL & sZipCode
 Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")

 objHTTP.Open "GET", strURL, False
 objHTTP.Send
 If objHTTP.Status = 200 Then
  buf = objHTTP.ResponseText
 Else
  Zip2Addr = "Error i": Exit Function
 End If
 arBuf = Split(Replace(buf, vbLf, ""), "address")
 If UBound(arBuf) = 0 Then Zip2Addr = "Error": Exit Function
 For i = 1 To 3
  b = arBuf(i)
  j = InStr(1, b, ",")
  adrBuf = adrBuf & Mid(b, 6, j - 7)
 Next i
 Zip2Addr = adrBuf
End Function
この回答への補足あり
    • good
    • 0

>VLOOKUP で抽出します。



別シートに取り込んでおいて

http://officetanaka.net/excel/vba/speed/s9.htm

のようにWorkSheet関数もコード内で記載できますので、それを利用するとかですかね。
    • good
    • 0

その郵便番号の一覧表をどのように作成されてるのでしょう?


それが不明ですと回答も難しいですよ。

もし作成からの質問であるなら

郵便番号データダウンロード
http://www.post.japanpost.jp/zipcode/download.html

で、試しに1つの都道府県のCSVファイルを落として見てみて下さい。
同じ郵便番号の地区を省略して書いてあったりと、質問者さんの希望通りには難しいかもって感じるかもです。
この回答への補足あり
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aと関連する良く見られている質問

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

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列全体で対応できません。
何か方法があればご教授いただけたら幸いです。

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桁以上の郵便番号があり、住所がブランクの場...続きを読む

Aベストアンサー

「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

「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 xl...続きを読む

QVBAユーザーフォームで郵便番号から住所変換するには?

会社で顧客リストを作成しているのですが、エクセルではじめてVBAを利用しようと思い、ユーザーフォームを使って連続登録までのマクロコードは入力出来たのですが、テキストボックスに郵便番号を入力すると自動的に次のテキストボックスに住所が入力されるようにするには、どのようなコードを追加すればよいのでしょう?

Aベストアンサー

ワークシート上で可能にする方法。
http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_800_040.html

フォームから使うには、こちらを参考にしてください。
ユーザーフォームで郵便番号住所変換
http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_130_050.html

作業には、
1.郵便番号データ取り込み
2.データ変換(アクセス型式)
3.VBAからデータ利用
という手順です。
1はネットから入手できますが、2~3は全てVBAでコードを作成する必要があります。

簡単な方法として、アドインや市販ツールを利用する事も出来ます。

Q【VBA】郵便番号を入れたら住所が出てくる仕組み

http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_130_050.html

このサイトを参考に見たのですが
かなり難しそうなのですが

これは簡単にできるものでしょうか?

Aベストアンサー

IMEでよかったらですが、関数を使った一案です。
IMEのツール=>辞書の追加で 郵便番号辞書の機能を追加

  A      B    C
 郵便番号   住所1 住所2
=PHONETIC(B2)

B2セルに =PHONETIC(B2)セルに入れて下までコピーしておきます。

B列に 全角で郵便番号を入れると、希望の住所に変換できます。
A列には、郵便番号が表示されます。
C列には、残りの住所を入力します。
住所入力がかなり楽になるのは間違いないです。


但し、IMEの郵便番号辞書は、常に最新に更新されるわけではないので
注意は必要です。

QExcel VBAで、ユーザーフォームの値を、モジュールで使用したい。

VBA初心者です。(おそらく)基本的な質問で、申し訳ありません。
ユーザーフォーム1には、テキストボックス1とコマンドボタン1が配置されているとします。

Sub TEST ()
Dim N
Userform1.Show
MsgBox N
End Sub

Private Sub CommandButton1_Click()
Dim N
N = TextBox1.Text
UserForm1.Hide
End Sub

Sub TESTを実行した時に、ユーザーフォーム1からNの値を引き継ぐには、どうしたら良いのでしょうか?よろしくお願いします。

Aベストアンサー

'モジュールに変数宣言(グローバル変数)
'Public 宣言すると他のモジュールやフォームと
'共有できる変数になります。
Public AA As String

'sample
'A1 を実行する。

Sub A1()
Call A2
AA = InputBox("input", , AA)
End Sub

Sub A2()
AA = InputBox("input", , AA)
End Sub

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

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​

7/26に下記の質問をしまして、Wendy02さんからURLを教えてもらい、一時は解決したのですが、
すみません、特定のセル1ケ所に入力し、それを特定のセル同じく1ケ所に表示するにはどのようにするとよいのでしょうか?
VBAを作ってみましたが、上手く動きません。。。(>_<)
どこかが間違っているのだと思うのですが・・・・・・
よろしくお願いします。

⇒エクセルで、例えばA1に123456と入力したら、B1に
それに対応する住所が表示されるようにしたい。。

Excel アドイン: 郵便番号変換ウィザ...続きを読む

Aベストアンサー

こんにちは。Wendy02です。

まず、郵便番号変換ユーティリティの周辺の事情を、他の方にも読める形で書いておきます。

>Excel アドイン: 郵便番号変換ウィザードがあるのは知っていますが、
>これを利用しないで、IMEの郵便番号変換機能を利用して、関数で、あるいはVBAで表示できるようにしたいのですが、可能でしょうか??

アドイン自体よりも、この郵便変換ウィザードの郵便変換エンジン(MSYubin7.DLL)は生きているのですが、再利用されることをメーカー側が嫌って、4~5年前に、アドイン・プログラムにプロテクトをしてしまいました。ですから、それ以前の製品は、関数で変換が可能です。何名かの雑誌などでも名の知れた人たちが、MSにクレームをつけましたが、結局、変わりませんでした。

他人に渡したらライセンス違反になりますが、もし、古いパソコンなどに残っていたら、そのエンジンは使えるのではないかと思います。ただ、API関数から、関数を作りますから、かなり詳しい人でないと、設定は難しいです。

この製作会社は、「アドバンスソフトウェア株式会社」というところで、製品版としては関数変換は使えます。ただし、3万円以上もするものです。

製品名
Yubin7
http://www.adv.co.jp/products/product_Yubin7.htm

他にも、Vector で、いくつか出ていたと思いますが、私個人としては、Office で個人で出しているものは、以前試したときは、PCのスペックが低かったので、とても、Yubin7 の変換スピードに追いつくものはありませんでした。データベースで再編成した辞書を利用して、VBAから、ADOやDAOで使うというのが、最も、実行可能な関数だと思います。今は分かりませんが、ADO等で使用可能な郵便番号辞書を、郵便番号辞書を出している人がいたような気がします。

他にも、Access 2000 のACWZZIP.MDE を再利用する方法などもありましたが、これも、上位バージョンではユーザーの再利用は適わなくなってしまいました。

私を含めた大勢の人たちが、このユーティリティについては考えてきたわけですが、どうも、メーカー側では、ユーザーの利便性より利益を優先させてしまったわけです。もしかしたら、Moug のダウンロード・ユーティリティで出ているのかもしれませんが、私は分かりません。

Office のアドインのオリジナルメーカー数社をみていると、不都合さを解消した製品を出してはいても、MS-Office の値段に匹敵するものしかないという、不条理としかいえない製品を、エンド・ユーザーに提供するだけになってしまっています。

私自身も、現在のところ、開発力が伴わないので、Office VBA周辺でしかいじることが出来ないから、こんな結果になっています。こんなものしか提供できない、何か、とても悔しい気持ちです。

本来は、アドバンス社は、中身自体を変えているわけではありませんから、単に、昔のようにユーザーに解放してくれるだけでよいのですが。

マクロについてですが、ご期待に沿えるものとはいえませんが、以下のように直してみまそた。

入力側は、A1, 変換側は、CONST SEL... B1
となっています。

シートモジュール
-------------------------------------------------------------

Private Sub Worksheet_Change(ByVal Target As Range)
'設定場所
Const SEL As String = "B1"

'MS-IMEの辞書は、郵便番号辞書にチェック
 If Target.Address <> "$A$1" Then Exit Sub 'A1でなかったら、取りやめ
 If Target.Rows.Count > 1 Then Exit Sub
 If Len(Target.Value) <> 8 Then Exit Sub
 If InStr(Target.Value, "-") = 0 Then Exit Sub
   Application.ScreenUpdating = False
 With Range(SEL).Validation '入力規則
   .Delete
   .Add Type:=xlValidateInputOnly
   .IMEMode = xlIMEModeHiragana 'IME立ち上げ
  End With
    Application.EnableEvents = False
    Range(SEL).Select
    Application.EnableEvents = True
    SendKeys Target.Value '番号を入れる
    SendKeys "{ }" '変換
    SendKeys "{ENTER}"
settei:
 Application.ScreenUpdating = True
End Sub

こんにちは。Wendy02です。

まず、郵便番号変換ユーティリティの周辺の事情を、他の方にも読める形で書いておきます。

>Excel アドイン: 郵便番号変換ウィザードがあるのは知っていますが、
>これを利用しないで、IMEの郵便番号変換機能を利用して、関数で、あるいはVBAで表示できるようにしたいのですが、可能でしょうか??

アドイン自体よりも、この郵便変換ウィザードの郵便変換エンジン(MSYubin7.DLL)は生きているのですが、再利用されることをメーカー側が嫌って、4~5年前に、アドイン・プロ...続きを読む

QExcelVBAでMS-IMEを制御して再変換するには

お世話になっております。
MS-IMEでは、セルのデータが選択された状態で[F13]キーを押すと再変換されます。これをVBAを使って再変換しようとしていますが、わからずに困っています。sendkeys "{f13}"が使えない状況なので、何とかMS-IMEを制御したいのですが、どなたかおわかりになりましたら、お助けいただけないでしょうか。
どうか、よろしくお願いいたします。

Aベストアンサー

> sendkeys "{f13}"が使えない状況

どのように使えないんでしょうか?

SendKeys "{F2}+^{HOME}{F13}"

では、できませんでしたか?

QExel VBA 別ブックから該当データを検索し、必要なデータを取得する方法について

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数ではなく、マクロで処理を希望します。

自分では、部品表の商品番号をコピーして、コード一覧表で検索し、検索結果の右隣のセル(B列のコード)の値を部品表のC列に貼り付ければよいかと思い、書いてみたんですが…

Sub 別ブックから貼り付ける()
  Dim 検索する As Long
Windows("部品表.xls").Activate
検索する = cells(i,2).Value
Windows("コード一覧表.xls").Activate
ActiveWindow.SmallScroll Down:=-3
Selection.AutoFilter Field:=3, Criteria1:="=検索する", Operator:= xlAnd

と、してみたものの、検索しても、その検索結果の隣のセルのコードをどうやって取得すればいいのかが、わかりませんでした。

基本事項は本で学びましたが、呪文のようなコードはよく理解できません。懸命にネットで検索して、訳して理解する努力をしてはいますが。

どうぞよろしくお願いします。

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数...続きを読む

Aベストアンサー

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks.Open("C:\★★\コード一覧表.xls") '★要変更★
 I = 2
 Do While Range("A" & I).Value <> ""
  ThisWorkbook.Worksheets("Sheet1").Range("C" & I).Value = Application.VLookup(ThisWorkbook.Worksheets("Sheet1").Range("B" & I).Value, xlBook.Worksheets("Sheet1").Range("A2:B65535"), 2, 0)
  I = I + 1
 Loop
 xlBook.Close
 Application.ScreenUpdating = True
 MsgBox ("完了")
End Sub

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks....続きを読む

QExcel VBA コンボボックスの初期値の設定について

いつもお世話になっています。
Excel VBA コンボボックスの初期値の設定について教えてください。
ユーザーフォームを表示させた時、そこにあるコンボボックスには何も表示されていません。
コンボボックスのボタンを押すとちゃんと
「アジア」「ヨーロッパ」「アメリカ」等の語群が表示されます。

ユーザーフォームを表示させた時点でコンボボックスに「アジア」を表示させるにはどうすればいいか教えてください。
よろしくお願いします。

Aベストアンサー

UserForm Initialize
ComboBox1.Text = ComboBox1.List(0)

Q【Excel】郵便番号を入力し、隣りのセルに住所を表示したい

「EXCELの郵便番号変換ツール」のことは存じております。
この機能を使うと、まとめて入力してある場合には、一括変換できるのですが
全く新規に、お客様の名簿を見ながら入力するので、
その都度、ウィザードを使って変換しながら進めるのは面倒ですし、
1件入力するごとに、正しい郵便番号と住所が表示されているかを
確認したいのです。

1.郵便番号を入力
2.隣りのセルに住所が自動的に表示される
3.続きの住所を入力

のような使い方は、Excelで出来ますでしょうか?

IMEで「人名地名辞書」を使うと、
郵便番号を2度入力するようになって、誤りが発生しやすい気がしてます。
(1回目は、郵便番号の列用、2回目は住所列で変換用)

できれば1回入力するだけで自動表示させたいので
もしそのような使い方をされている方がいらしたら教えてくださいませ。

本人、出来たような。。。出来なかったようなうろ覚えでして、
質問させていただきました。
よろしくお願い申し上げます。

Aベストアンサー

IMEで「人名地名辞書」モードにして
住所は郵便番号変換します。その際、
郵便番号のセル(恐らく住所を入力するセルの左隣?)
に以下の関数を仕込んでおいたら如何でしょう?

=LEFT(ASC(PHONETIC(★)),8)  
*★は住所のセル番号

Qエクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?

エクセルのVBAでユーザーフォームの中に
テキストボックスとラベルがあります。

ラベルの縦幅とテキストボックスの縦幅は
同じです。(文字1行分くらい)

そのテキストボックスの左隣にラベルを置いて、
項目名的なものを表示させたいと思うのですが
ラベルの値が上に寄っているので、垂直方向に
中央揃えさせたいのですが、設定の仕方が
分からず困っています。

ちなみにエクセルはXPで、VBAは詳しくありません。
詳しくないけど調べながらちょっとずついろいろ
作業しています。

どうぞよろしくお願いします。

Aベストアンサー

文字の上下中央設定は、確かにできませんね。
代案ですが、次のような操作はいかがでしょうか。

1.双方を選択した状態でプロパティを表示し、AutuSize の値を True にする。
2.前回のようにコントロールの位置を上下中央で揃える。
3.各コントロールの長さ(幅)や文字サイズを調整する。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング