いつもお世話になります。
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
No.9ベストアンサー
- 回答日時:
こんにちは。
どうやら、原因が分かりました。
>3 ワークシートで、=ZI ぐらいまで入れるとインテリセンスが働いて、
>Zip2Addr( が出てくるはずですが
これは、ユーザー定義関数が生きているという意味で、見通しが立ちました。
現在は、Zip2Addr も、Zip2Address も、WebSerive 関数も、データが取れていないはずです。
おそらく同じだと思いますが、こちらでも、PCを別の環境にして再現性が取れました。私は、今まで下位バージョンばかり扱っていたので、気が付かなかったし、新しいセキュリティ設定には無頓着でした。
私も初めての経験で、お手数を掛けて、申し訳ありませんでした。
その状態から、解除するのにもかなり試行錯誤しました。
オプション-セキュリティセンター-プライバシーオプション
□ Office のインターネット接続を許可する
これをオン ☑ していただくこと。
もうひとつは、同じくセキュリティセンターの中の、
信頼できる場所に、そのファイルを置くか、そのファイル・フォルダーを信頼できる場所と登録していただく必要があります。
そう設定した後に、Excelを再起動すると、何やら、またVBA側からエラーが出てくることがあるかもしれません。もし、エラーが出ましたら、一旦、そのユーザー定義関数のマクロのコード部分だけを削除していただき、再登録していただいたほうが良いのではないかと思います。
もしくは、WebService 関数を利用した、Zip2Address 関数をお使いになったほうが、より確かかもしれません。これがダメでしたら、後は、ファイヤーウォールやセキュリティソフトを見なくてはなりませんが、それは、私からは難しいです。
ただ、お仕事でセキュリティの規則で許されていないと、もうひと方の方が語った、単独のスタンドアロン形式にするしかありません。その場合は、どの程度提供しなければならないかは不明です。
Vlookup という方法もないとは言いませんが、あまり反応が鈍いので、快適とは言えません。そうすると、データベースmdbファイルですが、それをこちらから提供することも可能ですが、いずれ更新などを考えると、csvファイルを辞書化するようなプログラムも提供しなくてはならないかと思います。
長い間、私自身もやったことがないことです。
郵便番号ウィザードの内部を書き換えて、UserForm に組み込む方法もないとはいいませんが、事実上、もう郵便番号ウィザードは手に入らないことが判明しましたし、それ以上に、郵便番号ウィザードの辞書がもう更新はしていないのです。おそらく、今回のWeb APIやIMEの変換があるので、こうした郵便番号ウィザードは消えていったのだろうと思います。
できれば、今回、私のユーザー定義関数が働くことを期待したいのです。
なお、まだ、これから先の問題が少しあります。私自身、VBA何年目かの頃に、こういうスタイルのUserForm を作って、他人に使ってもらうユーティリティとしては失敗した経験があるのですが、その失敗した原因に似通った部分を持っています。
大変な労力を気遣っていただき誠にありがとうございます。
私の力が遠くに及ばないのをお許しください。
私としては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
※この方法だとシート「〒」に上記から 神奈川県/千葉県/埼玉県/静岡県/東京都 をダウンロードしました。
No.8
- 回答日時:
>=Zip2Addr(E2) #NAME?
こうなるのは、モジュールに、ユーザー定義関数が認識していないということなのです。
用意されている内部エラーは、Error と #Valueです。
例えば、モジュール内の、コードのFunction のところで、デバッグメニューのブレイクポイントのマークを置いて、数式をEnter すると、ユーザー定義関数が呼び出されるのが確認できます。
また、デバッグメニューのVBAProject のコンパイルというところをクリックすると、役に立っていないコードは、エラーが出るようになっています。
ワークシートで、=ZI ぐらいまで入れるとインテリセンスが働いて、Zip2Addr( が出てくるはずですが、今の状態は、数式バーのfx をクリックして、関数の分類の「ユーザー定義」の中に、くだんの関数は見つからないはずです。
ただし、この関数は、登録したブックにしか使うことができません。また、標準モジュール以外に登録しても、このユーザー定義関数はワークシート上では使えません。
もちろん、UserForm モジュールに入れて、モジュール内で呼び出す分には使えますが、UserForm モジュール自体の負担が増えてしまいますので、私はそういう方式を取りません。
No.7
- 回答日時:
最初に、数式をみると、以下のようになっていましたから、私の転機ミスです。
失礼しました。
=Zip2Addr("244-0842")
神奈川県横浜市栄区飯島町
=Zip2Addr("244-0841")
神奈川県横浜市栄区長沼町
>その結果 #NAME? と表示されました。
勝手な考え方で申し訳ないのですが、今までの経験で、初めにこのようなレベルでつまづいたことは、終わりまで、続くことが多いのです。そしてまた、お互いがつまらない結果に終わっているのです。こういうことにトラブった時は、不可抗力によるものでも、少なくとも、Windows 10 でしたら、どこかに問題が発見できるはずです。
なんとか、踏ん張って、ネット検索などをして、ご自身で解決してみてください。郵便番号を表示する方法としては、他の方法もあるのですが、この方法が使える限りは、一番楽でデータも少なくてすみます。ただ、もしも、ギブアップでしたら、こちらの方法はお忘れください。ただ、VLOOKUPにしろ、加工するのが、かなり面倒な気がします。
念のために、数式の画像を付けておきます。
正しく登録されていれば、=Z... だけ入れても、関数は出てくるはずです。
No.6
- 回答日時:
VLOOKUPなどの組み込み関数を利用することと、まったく同じ原理なのですが。
ただ、ユーザー定義関数を、標準モジュールに入れればよいだけのことです。
オブジェクト名まで変えたり、コントロール名をループして処理しているなど、かなり凝った作りをなさってるのに、どうして、こちらの話が通じないのか、よく分かりません。
>ここまで難しくなると対応ができなくなり具体的にご指導いただくとありがたいのですがお願いできませんか。
ご自身のやり方と違うと、分からないということでは?
まったく分からない人に、今のUserFormの組み立てができるとは思えません。
まず、こちらが提示したコードの全体的な疑問を感じていらっしゃるのではないでしょうか。
もし、そうなら、私の書いたコードの中で、ユーザー定義関数が可動するかどうか、ワークシート上でチェックはしてみたらいかがですか?ファイヤーウォールなど、プロテクトが掛かっているかもしれません。
標準モジュールにユーザー定義関数を入れて、
ワークシートのセルに、この数式を貼り付ければ
=Zip2Addr("246-0824")
神奈川県横浜市栄区飯島町
と出てくるはずです。これが出てこないようなら、まったく別なシステムを考えなくてはなりません。
後は、画像をご覧ください。画像は小さいですが、右クリックして、画像のURLを取り出し、それをブラウザで閲覧しながら拡大できるかと思います。
No.5
- 回答日時:
No.2です。
>※この方法だと神奈川県だけになります。
>他の都道府県だとシート「〒」莫大なデーターが大変です。
全国で行なうと膨大になるので個人的にはACCESS等にインポートし、そのデータベースへ接続して得る方法はあります。
ただうちのは既に古くなったバージョンなので最新(?)の物で可能かどうか、データベースの構築とかについても心配はしちゃいます。
それにこう言った物は「VisualBasic」か「VisualC#」でやってたので、VBAではちょっと苦手意識も。。。
既に出ている回答のようにインターネットへの接続は必須ではなく、孤立したスタンドアローン(1台)でも出来ますね。
だって私ネット接続系の方が苦手ですので。
No.4
- 回答日時:
わかりやすく「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」などの、全角数字が入らないようにしておくとよいです。
No.3
- 回答日時:
こんにちは。
昨日から、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
No.2
- 回答日時:
>VLOOKUP で抽出します。
別シートに取り込んでおいて
http://officetanaka.net/excel/vba/speed/s9.htm
のようにWorkSheet関数もコード内で記載できますので、それを利用するとかですかね。
No.1
- 回答日時:
その郵便番号の一覧表をどのように作成されてるのでしょう?
それが不明ですと回答も難しいですよ。
もし作成からの質問であるなら
郵便番号データダウンロード
http://www.post.japanpost.jp/zipcode/download.html
で、試しに1つの都道府県のCSVファイルを落として見てみて下さい。
同じ郵便番号の地区を省略して書いてあったりと、質問者さんの希望通りには難しいかもって感じるかもです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) VBA 重複チェック後に値をワークシートに転記する方法を教えてください。 1 2023/03/19 12:43
- Visual Basic(VBA) ユーザーフォームの書き出しで追加のご相談 ユーザーフォームの値をシートに書き出す際、コードが表示され 2 2022/08/05 10:58
- Excel(エクセル) VBA 同日で2回目(午後)の体温を登録するときのコード 3 2022/08/28 20:29
- Visual Basic(VBA) VBA チェックボックスで 5 2023/05/31 17:10
- Excel(エクセル) マクロでテキストファイルを読み込んだ際の最終セルにデータと改行が含まれる問題の改善方法 2 2022/03/25 16:50
- Visual Basic(VBA) 以下のVBAで該当文字列の前後に付与したい。 例 前に付与 abc ユーザーID 12345 後に付 3 2022/04/19 21:50
- Visual Basic(VBA) フレーム内のオプションボタンの選択結果をセルに書き出したい。 図のような預金種目というフレームにオプ 2 2022/07/29 11:12
- Visual Basic(VBA) 【VBA】特定のワードが入っている行全体を塗りつぶしたい 4 2022/04/20 15:22
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
郵便番号を入れると住所が出るマクロを組みたい
Excel(エクセル)
-
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
EXCELのVBAでフリガナ入力
Access(アクセス)
-
-
4
VBAユーザーフォームで郵便番号から住所変換するには?
Access(アクセス)
-
5
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
6
コンボボックス内の文字サイズ変更
Excel(エクセル)
-
7
Excel VBAのユーザーフォームでVLOOKUP
Visual Basic(VBA)
-
8
フォントの大きさ
Visual Basic(VBA)
-
9
エクセルのユーザーフォームでVLOOKUPと同じ機能をするには?
Excel(エクセル)
-
10
ExcelVBAでテキストボックスの表示形式を小数点第二位まで表示する方法
Visual Basic(VBA)
-
11
ExcelのComboboxでマウスのスクロールを有効にしたい
Excel(エクセル)
-
12
【エクセル】オプションボタンにセルの値を反映させるには
Visual Basic(VBA)
-
13
メッセージボックスのOKボタンをVBAでクリックさせたい
Visual Basic(VBA)
-
14
VBAのリストボックスをマウスでスクロール
PowerPoint(パワーポイント)
-
15
Excel VBA ユーザーフォーム内のラベルにテキストボックスの小計を出す方法
Visual Basic(VBA)
-
16
worksheetFunctionクラスのVlookupプロパティを取得できません エラーへの対応
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
富士山麓にオウム鳴く?
-
Googleドライブをクイックアク...
-
一方通行や右左折禁止のわかる...
-
ルート50の解き方
-
Cドライブ直下に、ファイル等を...
-
SDカードに取り込んだ音楽の...
-
関西(大阪)から尾瀬に電車、...
-
Googleマップのルートを手動で...
-
you are an idiot!のアクセス方...
-
ワードで式を書く時に、ルート...
-
京都から名古屋: 一般道での走...
-
一般道で軽井沢へ
-
車で大阪から高知への最短コー...
-
ノートパソコンにHDDアクセスラ...
-
千代田区に住居表示未実施地区...
-
横浜駅から200KmのJR駅は
-
新潟から軽井沢おもちゃ王国
-
鳥取の三朝温泉から出雲大社
-
DVD動画をパソコンに取り込み、...
-
√6のようなルートを少数に直す...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
富士山麓にオウム鳴く?
-
Googleドライブをクイックアク...
-
関西(大阪)から尾瀬に電車、...
-
√96の解き方
-
SDカードに取り込んだ音楽の...
-
通勤経路をわざわざ遠いところ...
-
自宅から最寄りの駅までの地図...
-
横浜駅から200KmのJR駅は
-
一方通行や右左折禁止のわかる...
-
google mapでのルート検索を良...
-
昼休みに来る人ってどういう神...
-
√6のようなルートを少数に直す...
-
2023.4.18東京から松本.安房峠...
-
ルート50の解き方
-
Googleマップのルートを手動で...
-
googlemapで最寄駅を調べる方法
-
nslookup時のDNSサーバのタイム...
-
京都から名古屋: 一般道での走...
-
定期券で途中で降りたらお金取...
-
番地までは分かっているがマン...
おすすめ情報
ありがとうございます。
現在は、F列の「住所1」に郵便番号を手動で入力スペースキーで変換しています。
この手動入力から省力化したく質問させていただきました。
郵便番号データダウンロード
http://www.post.japanpost.jp/zipcode/download.html
で 神奈川県 を同じブック内に落としました。
私の考えですが
VLOOKUP で抽出します。
いい方法があればご教授いただけたら幸いです。
お世話になりありがとうございます。
未熟な考えで私なりに対応したのを報告します。
ユーザーフォーマット
住所1 は削除
シート名 データー
シート名 〒
郵便番号データダウンロード
http://www.post.japanpost.jp/zipcode/download.html
神奈川県 のみを追加
F2に
=IF(ISNA(VLOOKUP(E2,〒,2,FALSE)),"",VLOOKUP(E2,〒,2,FALSE))
名前の管理 〒 =〒!$A$1:$B$2290
※この方法だと神奈川県だけになります。
他の都道府県だとシート「〒」莫大なデーターが大変です。
このブックの用途はユーザー管理のためです。
1 標準モジュール に Module1 を追加して下記の構文を入力しました。
a)'//基本的には標準モジュールでお使いください。
b)'//Excel 全般、または、Office VBA用
UserrForm2 の 「郵便番号」に 例 244-0842 を入力し
「住所1」 には 例 横浜市栄区飯島町 と表示されません。
シートの F列「住所1」 にされるのかと思いましたが駄目でした。
2 シート名 右クリック コードの表示 に下記を入力
'//Excel 全般、または、Office VBA用
UserrForm2 の textbox と 構文 textboxを削除してもダメでした。
私のやり方が悪いのでしょうか
お忙しいところ再度ご協力いただけませんか。
2件の構文をお示しいただきましたがこれらのマクロをどこに入れればいいのかが分かりません。
module
シートコード
Sheet1(名簿作成)
ThisWorkbook
のいずれにも入力して UserForm2 を作動しましたが応答はありません。
私のやり方のどこかに問題かあると思います。
ここまで難しくなると対応ができなくなり具体的にご指導いただくとありがたいのですがお願いできませんか。
おはようございます。
お世話かけます。
No.6 を早速トライさせていただきました。
画像の確認で、
① ② ③ はご指示通りWクリックして表示されます。
順調でした。
質問
ワークシートのセルに、この数式を貼り付ければ
=Zip2Addr("246-0824")
神奈川県横浜市栄区飯島町
E列の 「郵便番号」 E2 のセルに =Zip2Addr("246-0824")
をそのまま貼り付けました。
その結果 #NAME? と表示されました。
余計なことかもしれませんが、
神奈川県横浜市栄区飯島町 の郵便番号は 244-0842 です。
※UserForm2 で 氏名 カタカナ 郵便番号 住所1(何も表示されずまた何も入力せず)
住所2 TEL と進め 登録ボタン クリックしましたが シート名「名簿作成」
の住所1(E列)には何も反映されませんでした。
ごめんなさい
おはよう後さぞいます。
本当にお世話かけます。
ご指導の努力に感謝します。
何度も何度も原点に返って試してみるのですが
私の能力不足でご迷惑かけます。
うまくゆきません。
ありがとうございました
原点に戻り新規に作り直しテストしましたが
=Zip2Addr(E2) #NAME?
の結果でした
ありがとうございます。
ご指導の結果を報告します。
1 モジュール内の、コードのFunction のところで、デバッグメニューのブレイクポイントのマークを置いて
あずき色になります
2 デバッグメニューのVBAProject のコンパイルというところをクリックすると、
役に立っていないコードは、エラーが出るようになっています。
エラーなどは出ません
VBAProject のコンパイル はグレーになりました
3 ワークシートで、=ZI ぐらいまで入れるとインテリセンスが働いて、
Zip2Addr( が出てくるはずですが
fx Zip2Addr( が出てきました