いつもお世話になります。
エクセル2013から搭載された WEBSERVICEという関数を使って
郵便番号→住所の変換をしたいと思っています。

《参考にしたサイト》
http://www.ka-net.org/blog/?p=1933

↑こちらに紹介されていた

=FILTERXML(WEBSERVICE("http://zip.cgis.biz/xml/zip.php?zn=" & $A2),"/ZIP_result/ADDRESS_value/value[@address]/@address")

を使うと、簡単に住所変換できるのですが
都道府県~市までの情報が 表記されません。

●●県●●市 も表記できるようにしたいのですが
どのようにすればよいか ご存じの方いらしたら教えてください。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

お示しの


> 《参考にしたサイト》
> http://www.ka-net.org/blog/?p=1933
からリンクをたどって「xmlサンプル」まで確認されましたか?
(もっとも、確認していればこの質問には陥らなかったのでしょうけれど。)


さて、リンクをたどって
http://zip.cgis.biz/xml/zip.php?zn=0600000
にたどり着けたとして話を進めます。

郵便局が発行している郵便番号データは通常の場合、
・都道府県名
・市区町村名
・町域名
・(事業所固有)
の4欄に分かれています。

で、上記サンプルと照らし合わせたとき、
・都道府県名=state
・市区町村名=city
・町域名=address
・(事業所=company)
であることが読み取れます。

これを踏まえてお示しの「式」
> =FILTERXML(WEBSERVICE("http://zip.cgis.biz/xml/zip.php?zn=" & $A2),"/ZIP_result/ADDRESS_value/value[@address]/@address")
を見てみると、きっと末尾の「value[@address]/@address」が何やら怪しいと思いませんか?
ここを例えば「value[@state]/@state」などとしたら、何が返ってくるでしょう?
市区町村に関しても同様だと思われます。


あとは「&」でも使って結合してやればどうとでもなりますね。




※当然ながら2010以前のバージョンでは正しく機能しません。
 ほかのPCでの閲覧・他所への配布を考えるならコレはオススメできません。
 ということだけ、付記しておきます。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます♪
実は、質問したあとに [@address]/@addressの部分に気がついて
stateとcityに変えればよいのだとわかったのですが

現状、別々の列に情報を出しているような状態です><
(A列に郵便番号、B列に府県、C列に市区郡、D列にアドレスみたいな~)

回答者様のおっしゃってる

>あとは「&」でも使って結合してやればどうとでもなりますね。

のやり方を、良かったら教えていただけないでしょうか?
関数は既存のものしか使ったことがなく
自分で組み立てる方法(基礎)を知りません。

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

お礼日時:2013/09/10 20:17

ん?



> >あとは「&」でも使って結合してやればどうとでもなりますね。
> のやり方を

ん?エクセルの基礎ですが?
  ="A"&"B"
です。


詳細まで説明するつもりはありませんので
APIを探し当てたんですから、
「エクセル 文字列を結合」辺りで検索して
基礎をじっくり学習なさってくださいませ。
    • good
    • 0

> =FILTERXML(WEBSERVICE("

http://zip.cgis.biz/xml/zip.php?zn=" & $A2),"/ZIP_result/ADDRESS_value/value[@address]/@address")
> を使うと、簡単に住所変換できるのですが
> 都道府県~市までの情報が 表記されません。

WEBSERVICE関数ではありませんが、
従来と同様Excel2013でも「郵便番号変換ウィザード」は使用できるようです。

ご参考まで。

「Excel2013(エクセル2013)基本講座:Excel2013で郵便番号変換ウィザードは使えるのか?」
http://www4.synapse.ne.jp/yone/excel2013/excel20 …
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

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

このQ&Aを見た人が検索しているワード

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

Qマクロ Value=Valueで複写できない

いつも回答して頂きありがとうございます。
たぶん基本的な質問だと思うのですが、どうしたら上手くいくのか分かりません。御指導の程よろしくお願いします。以下の記述でエラーがかかります。

『コンパイルエラー:SubまたはFunctionが定義されていません』
Worksheets("一覧").Cells(d, 5).Value = Wokrsheets("編集用一覧").Cells(e, 5).Value

記述全体
Sub TEST()
Dim d As Integer
Dim e As Integer
Worksheets("一覧").Activate
d = 3
e = 6
Do While Worksheets("一覧").Cells(d, 2).Value <> ""
Worksheets("一覧").Cells(d, 5).Value = Wokrsheets("編集用一覧").Cells(e, 5).Value
d = d + 1
e = e + 4
Loop
End Sub

いつも回答して頂きありがとうございます。
たぶん基本的な質問だと思うのですが、どうしたら上手くいくのか分かりません。御指導の程よろしくお願いします。以下の記述でエラーがかかります。

『コンパイルエラー:SubまたはFunctionが定義されていません』
Worksheets("一覧").Cells(d, 5).Value = Wokrsheets("編集用一覧").Cells(e, 5).Value

記述全体
Sub TEST()
Dim d As Integer
Dim e As Integer
Worksheets("一覧").Activate
d = 3
e = 6
Do While Worksheets("一覧").Cell...続きを読む

Aベストアンサー

直接打ち込むスタイルを堅持するためには字数減らすことが大事では??

Sub TEST()
Dim d As Long
Dim e As Long
d = 3
e = 6
Sheets("一覧").Activate
With Sheets("編集用一覧")
Do While Cells(d, 2).Value <> ""
Cells(d, 5).Value = .Cells(e, 5).Value
d = d + 1
e = e + 4
Loop
End With
End Sub

QValueで値を貼り付けコピー時Escキー連続押下

現在業務で以下のようなマクロを記述しています。
(Xはダミー文字です)

Function XXX()

(略)

On Error GoTo OUTPUT_ERROR

Application.EnableCancelKey = xlErrorHandler

(略)

'別ブックからの値貼り付けコピー
XXX.Value = XXX.Value

(略)

OUTPUT_ERROR:

XXXXXXXXXXX


(略)

End Function


この処理において、Valueを用いた値の貼り付けが膨大なデータを対象としており長時間処理がかかる場合、その貼り付け処理中にEscキーを1回押下した時は、エラートラップが正常に働き、値の貼り付けの途中で終了しているようなのですが、同じ状況でEscキーを連続で押下し続けた場合、2回目の押下以降で「実行時エラー '18':」という表記のウィンドウが表示され処理が止まってしまいます。


上記ウィンドウにてデバッグボタンを押下すると、「OUTPUT_ERROR」の最初の行(XXXXXXXXXX
)で止まっています。


尚、同じ処理をValueではなくCopyにて実装したところ、Escキー連続押下しても、Copy処理が完了するまで割込み処理が走っていないようで、Copy終了後に「OUTPUT_ERROR:」以降の処理が走っているようでした。ただ、Valueよりも処理時間が格段に長くなってしまうため、こちらの案は出来る限り採用しない方向で検討しています。


実現したいことは、処理時間の短縮の為、Valueにて値を貼り付けコピーを実施しつつも、それが長時間に渡る場合はEscキー押下でキャンセル処理を実装することなのですが、Escキーを連続押下された場合も考慮して動作確認をしたところ、上記の現象が出てしまっており、解決の糸口が見つかっていません。

この場合、Escキーが連続で押された場合も正常にキャンセル処理を走らせるには、どのようにしたら実現できますでしょうか?よろしくお願い致します。

現在業務で以下のようなマクロを記述しています。
(Xはダミー文字です)

Function XXX()

(略)

On Error GoTo OUTPUT_ERROR

Application.EnableCancelKey = xlErrorHandler

(略)

'別ブックからの値貼り付けコピー
XXX.Value = XXX.Value

(略)

OUTPUT_ERROR:

XXXXXXXXXXX


(略)

End Function


この処理において、Valueを用いた値の貼り付けが膨大なデータを対象としており長時間処理がかかる場合、その貼り付け処理中にEscキーを1回押下した時は、エラートラップが正常に働き、値の貼り...続きを読む

Aベストアンサー

こんにちは。

まず、アプリケーションは、書かれていませんが、Excelということでしょうか?

ふつうは、.Value = .Value で、そのようなインターラプトさせるコードにはしないものですし、Excelでなぜ、Function プロシージャなのか、よく分かりません。つまり、他のマクロから呼び出ししているということでしょうか?

基本的に

Application.EnableCancelKey = xlErrorHandler
と入れるなら、
Application.EnableCancelKey = xlInterrupt
と戻さなくてもよいのかな?(場合によるようですが)

それから、大量ということは、ループしているのでしょうか?
もし、そうでしたら、DoEventsで割り込みさせたほうが無難だと思います。

EnableCancelKey を使う時は、処理条件が相手任せで、無限ループになる可能性がある場合などに施すのであって、注意して使うことが要求されます。これを使う場合は、イレギュラーなコードの方が多いです。質問内容では、隠れている所がよく分からないです。

そもそも、値コピーに時間が掛かるという部分に、解決の要素がないのか、現在の質問の中では分かりません。量的な問題の場合は、カウンターをつけて、1万回とか10万回とかループした時に、カウンターが回数を越えたということで、途中で止まるように作ります。また、別に、フラグで割り込みを入れるようにも作ります。

> OUTPUT_ERROR:
については、問題はありませんが、
通常は、

OUTPUT_ERROR:
If Err.Number = 18 Then
  MsgBox "途中終了します。"
  '別の処理があるなら、ここに入れます。
End If
'Application.EnableCancelKey = xlInterrupt

というようなスタイルにしますね。

こんにちは。

まず、アプリケーションは、書かれていませんが、Excelということでしょうか?

ふつうは、.Value = .Value で、そのようなインターラプトさせるコードにはしないものですし、Excelでなぜ、Function プロシージャなのか、よく分かりません。つまり、他のマクロから呼び出ししているということでしょうか?

基本的に

Application.EnableCancelKey = xlErrorHandler
と入れるなら、
Application.EnableCancelKey = xlInterrupt
と戻さなくてもよいのかな?(場合によるようですが)

それから、大量と...続きを読む

Qスケジュール管理ソフトをIIS/ASP/Accessで作る

100人程度の人が使用するスケジュール管理ソフトをIIS/ASP/Accessで作ろうとしています。
mdbファイルを1つにするとファイルサイズが大きくなりそうなので、
ユーザーごとにスケジュールが入ったファイルを作るようにしたのですが、
表示させるユーザーの数だけdb.openとdb.closeを繰り返すせいか、
スケジュール一覧を表示させるのに5秒以上かかってしまいます。
ASPでなんとか1秒以内に表示したいのですが、よいやり方があれば教えてください。

Aベストアンサー

こんにちは。
専門家ではないので、検討のとっかかりになれば幸いです。

「Accessが大前提」の場合
パフォーマンスがどれくらい変わるか判りませんが、ユーザーごとの
mdbに入っているテーブルに対してリンクを作成したmdbだけを用意し、
ASPからはそこだけをアクセスするようにすれば、ASPのOpen/Closeは
一度ですみますよね。
さらに外しているかもしれませんが、必要なビューをあらかじめ準備
するなどはどうでしょう。

「Accessが大前提」でない場合
やはりSQLServerなりを入れることを検討されるべきかと。

Q勤怠で指定した日にち(5/1~5/6)入れると計算結果だけ出せますか?

勤怠で指定した日にち(5/1~5/6)入れると計算結果だけ出せますか?

1シートに1名分の勤怠明細表があります。

 ・・A・・・・・ B・・・・・・・C・・・・・・・D・・・・・・・E・・・・・・・・F・・・・・・・・G・・・・・・・H・・・・・・・・・K
   
  ・日月・・・出勤・・・・退勤・・・・休憩・・・・実働時間・・・・時給・・・・・時間内・・・・時間外・・・・基本賃金
15

16  5月1日・9:00・・・・12:00・・・・1:00・・・・・2:00・・・・・・850・・・・・・1700・・・・・・・・・・・・・・¥1700円

17  5月2日

18  5月3日

19  5月4日

Fの12に、 支払金額が表示されます。

上記のような表が横並で、3枚(仮にA表・B表・C表) 3枚とも同じ書式で、A表・B表とも

時間の入力は、(B 列C 列D 列)別のシートからリンクされてます。

やりたい事は 3枚目C 表が、週払い用になってまして、 現在B表の時間を 張り付けしてましたが、
たとえば 
・・・・・・・ AE・・・・・・AF・・・・・AH・・・・・・ AJ 

4     ・1回目・・・・・ 5/1 ・・・・・5/5 ・・・・・ ¥3200

5     ・2回目・・・・・5/6 ・・・・・5/12 ・・・・・¥62000


6     ・3回目


7     ・4回目

 AF4に検索開始日 5/1 AH4に検索終了を入れると、 指定した日数の支払金額を、AJ4に出す事が出来るでしょうか、  週払いは、同じ月の日曜日~月曜で 月に 3回か4回です。
張り付けで作業してますと、その月の前のデーターが、残らないので、
当月の週払い金額 約 3回分が 残る形で考えているのですが、 分からないので
おたずねします。 よろしくお願いします。

勤怠で指定した日にち(5/1~5/6)入れると計算結果だけ出せますか?

1シートに1名分の勤怠明細表があります。

 ・・A・・・・・ B・・・・・・・C・・・・・・・D・・・・・・・E・・・・・・・・F・・・・・・・・G・・・・・・・H・・・・・・・・・K
   
  ・日月・・・出勤・・・・退勤・・・・休憩・・・・実働時間・・・・時給・・・・・時間内・・・・時間外・・・・基本賃金
15

16  5月1日・9:00・・・・12:00・・・・1:00・・・・・2:00・・・・・・850・・・・・・1700・・・...続きを読む

Aベストアンサー

こんにちは!
外していたらごめんなさい。

具体的にどの列に必要な数値が入っているか判断しかねますので、
こちらで勝手に↓のように判断しています。

元データはA16セル~A46セルまでシリアル値で1か月分の日付が入力してあり、
K16~K46までに賃金が数値で表示されていて、
AF列に入力された日付からAH列に入力された日付(両方ともシリアル値)の間の賃金合計を
AJ列に表示させれば良い訳ですよね?

一応そういうことだとして・・・

AJ4セルに
=IF(OR(AF4="",AH4=""),"",SUMPRODUCT(($A$16:$A$46>=AF4)*($A$16:$A$46<=AH4)*$K$16:$K$46))
という数式を入れ、オートフィルで下へコピーではどうでしょうか?

前述どおり、列の配置が違うかもしれませんので、その辺は適当にアレンジしてみてください。

尚、Excel2007ですと、SUMIFS関数が使えると思います。

以上、参考になれば良いのですが
的外れならごめんなさいね。m(__)m

Qマクロで自動圧縮(Zip)

教えて下さい。

あるExcelファイル中のマクロを実行するとそのExcelファイル自体が特定のフォルダに自動的にZipされる。
こんなことってマクロで可能なのでしょうか??

できればソースコードの例を頂けるとありがたいです。
よろしくお願いします。

Aベストアンサー

#1です。こんばんわ。

先ほどの回答で、自分自身は圧縮できないと書いてしまいましたが、訂正します。

やってみたら、できちゃいました。

ただし、UNLHA32.DLLが必要になりますので、別途入手してパスの通ったフォルダにインストールしてください。
サンプルでは、Dドライブに圧縮ファイルを作成します。


Option Explicit

'*****APIの宣言
Public Declare Function Unlha Lib "UNLHA32.DLL" _
(ByVal hWnd As Long, _
ByVal szCmdline As String, _
ByVal Lpstr As String, _
ByVal wsize As Long) As Integer

Sub testLZH()

'*****LZH圧縮/解凍コマンド
Dim strLZH As String 'LHAファイル名
Dim strXLS As String '圧縮元のフルパスとファイル名
Dim strCmdTxt As String 'UNLHA32.dllへのコマンド文字列
Dim strResult As String * 5000 '結果情報の戻り文字列

On Error GoTo ErrHandler

'ファイル名の設定
strXLS = ThisWorkbook.Path & "\" & ThisWorkbook.Name
strLZH = "D:\test.lzh"


'コマンド文字列の生成
'"a"はLZHの圧縮・解凍を選択するスイッチ a:圧縮、e:解凍
strCmdTxt = "a " & """" & strLZH & """" & " " & """" & strXLS & """"

'書庫ファイルの生成
If Unlha(0, strCmdTxt, strResult, 5000) <> 0 Then
MsgBox "LZH圧縮に失敗しました。 ", vbCritical
End If

Exit Sub

'エラー処理
ErrHandler:
MsgBox Err.Description
End Sub

#1です。こんばんわ。

先ほどの回答で、自分自身は圧縮できないと書いてしまいましたが、訂正します。

やってみたら、できちゃいました。

ただし、UNLHA32.DLLが必要になりますので、別途入手してパスの通ったフォルダにインストールしてください。
サンプルでは、Dドライブに圧縮ファイルを作成します。


Option Explicit

'*****APIの宣言
Public Declare Function Unlha Lib "UNLHA32.DLL" _
(ByVal hWnd As Long, _
ByVal szCmdline As String, _
ByVal Lpstr As String, _
ByVal wsi...続きを読む


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

人気Q&Aランキング

おすすめ情報