郵便番号検索APIを利用してAccessフォームで住所入力

Accessで住所を入力する際には、郵便番号で住所を入力できる入力アシスト機能が便利なのですが、個別郵便番号などで出てこないものが多いのがちょっと不満です。
そこで、郵便番号から住所を検索するWebサービスの「郵便番号検索API」を利用して、郵便番号から住所を入力するサンプルフォームを作ってみました。
フォームの郵便番号欄に番号を入力すると、下の各欄に住所が入力されます。

実際の動作やVBAソースを見るには、下のMDBファイルのアーカイブをダウンロードして下さい。
XMLを読み込んでフォームに値を入力しているだけの単純なプログラムなので、VBAソースを見ていただければ、Excel等への応用も簡単だと思います。

なお、郵便番号検索APIはリンクウェアですので、ご利用の際はドキュメント内に郵便番号検索APIへのリンクを設置するようにして下さい。

zipsearch.lzh


日付が土日祝日かを判別するVBA関数

前の記事のスクリプトで祝日データが取得できたので、VBAでそれを利用するサンプルとして日付が土日祝日かを判別する関数を紹介します。
前記事のスクリプトではタブ区切りテキスト形式で出力していましたが、今回はADOで利用しやすいCSV形式を利用します。
前記事のスクリプトをCSV出力に変更するためには、Else以降の部分を以下のものに差し替えます。

Else
  Set objFS = CreateObject("Scripting.FileSystemObject")
  Set objText = objFS.CreateTextFile(OUTPUTFILE)
  Set entrys = xmlDoc.selectNodes("//feed/entry")
    objText.Write("hdate,hname" & VbCr)
  For Each entry In entrys
    objText.Write(Replace(entry.selectSingleNode("gd:when").getAttribute("startTime"), "-", "/"))
    objText.Write("," & entry.selectSingleNode("title").text & VbCr)
  Next
  objText.Close
End If

すでに取得したデータがある場合は、エディタ等でタブを”,”に変更して、一行目に”hdate,hname”という行を追加してください。
例:
hdate,hname
2008/09/23,秋分の日
2008/03/20,春分の日

以下からがVBA関数のソースです。ADOを利用しているので実行にはMicrosoft ActiveX Data Objectsへの参照設定が必要です。
IsHoliday(date)で土日祝日のいずれかならばTrue、それ以外ならFalseを返します。祝日データの場所はそれぞれの環境に合わせて修正してください。

'祝日データの場所設定(ファイルのフォルダパスとファイル名)
Const HOLIDAYDATADIR = "c:¥calendar¥"
Const HOLIDAYDATAFILENAME = "holiday.txt"
'
'入力日が土日祝日かどうかを返す
Public Function IsHoliday(ByVal paramDate As Date) As Boolean
    Dim objRS As Object
    Dim objConn As Object
    '土日ならTrue
    If IsSaturdayorSunday(paramDate) = True Then
        IsHoliday = True
        Exit Function
    End If
    'CSVデータから祝日を検索してレコードがあればTrue
    Set objConn = New ADODB.Connection
    Set objRS = New Recordset
    objConn.Open "Driver={Microsoft Text Driver (*.txt; *.csv)};DBQ=" & HOLIDAYDATADIR & ";"
    objRS.ActiveConnection = objConn
    objRS.Source = "SELECT * FROM " & HOLIDAYDATAFILENAME & " WHERE hdate LIKE '" & paramDate & "'"
    objRS.Open
    If objRS.EOF Then
        IsHoliday = False
    Else
        IsHoliday = True
    End If
    objRS.Close
    objConn.Close
End Function
'
'入力日が土日かどうかを返す
Public Function IsSaturdayorSunday(ByVal paramDate As Date) As Boolean
    Dim tmpWeekDay As Integer
    tmpWeekDay = Weekday(paramDate)
    If tmpWeekDay = vbSunday Or tmpWeekDay = vbSaturday Then
        IsSaturdayorSunday = True
    Else
        IsSaturdayorSunday = False
    End If
End Function


Google Calendarの祝日データフィードからテキスト生成

休日のお知らせの生成や営業日の自動算出など、祝日のデータが必要になることはよくありますが、カレンダーから手入力というのも何ですので、Googleカレンダーの祝日データフィードから祝日名と日付のみ抽出してテキストにするVBScriptを作ってみました。Dimの部分を修正すればVBAにも応用できます。
なお、Googleカレンダーの祝日データフィードに関してはこちらの記事を参考にさせていただきました。

'Google Calendarから祝日データを取得
Option Explicit
'開始日
Const START_DATE="2008-01-01"
'終了日
Const END_DATE = "2008-12-31"
'保存ファイル名
Const OUTPUTFILE = "holiday.txt"
Dim xmlUrl, xmlDoc, i, entrys, entry, objFS, objText
xmlUrl="http://www.google.com/calendar/feeds/" &_
  "japanese@holiday.calendar.google.com/public/" &_
  "full-noattendees?start-min=" & START_DATE & "&start-max=" & END_DATE
Set xmlDoc = CreateObject("Microsoft.XMLDOM")
xmlDoc.async = False
If xmlDoc.Load(xmlUrl) = False then
  Msgbox("フィードの読み込みに失敗しました")
Else
  Set objFS = CreateObject("Scripting.FileSystemObject")
  Set objText = objFS.CreateTextFile(OUTPUTFILE)
  Set entrys = xmlDoc.selectNodes("//feed/entry")
  For Each entry In entrys
    objText.Write(Replace(entry.selectSingleNode("gd:when").getAttribute("startTime"), "-", "/"))
    objText.Write(vbTab & entry.selectSingleNode("title").text & VbCr)
  Next
  objText.Close
End If


Excelでチェックボックスもどき

通常Excelでチェックボックスを使いたい場合は、チェックボックスコントロールを配置してセルとリンクさせますが、大量にある場合は面倒ですし(そういう場合にこそVBAマクロの使いどころですが)、セルに連動して動いてくれるわけでもないですので使い勝手もいまいちです。
そこでチェックボックスとは違いますが、VBAマクロを使ってセル内でそれっぽい動作をさせる「チェックボックスもどき」を紹介します。

とりあえずExcelを起動したら、ツール→マクロ→Visual Basic Editor(Alt+F11)でVBAのエディタを開き、左上のプロジェクトの中の「チェックボックスもどき」を使いたいシート(例えばSheet1)のアイコンをダブルクリックして、開いたウインドウに以下のコードを貼り付けてください。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

    Select Case Target.Value
        Case “■”
            Target.Value = “□”
        Case “□”
            Target.Value = “■”
    End Select
    
End Sub

下のような画面になればOKです。
VBE画面

エディタの画面を閉じて、ワークシート上で「■」または「□」のみが入ったセルを作れば、ダブルクリックするたびに「■」と「□」が入れ替わります。ダブルクリックというのがちょっと面倒ですが、これをチェックボックス代わりに使うのが「チェックボックスもどき」です。
もちろん上のコードの「■」と「□」を変更すれば別の記号や文字も使えます。別のセルにIF関数を使って数値やTRUE/FALSEに置き換えたものを入れておけば集計にも使えるでしょう。

Excel画面

サンプルファイル

chkboxsamp.lzh


    サイト内検索

    プロフィール

  • 顔絵
  • kotani(こたに)

    30台後半になって突然脱サラ。フリーのスクリプト系プログラマーとして独立を目論む謎のおやぢ。東京都在住。趣味は古本屋巡り、文具いぢり、機械いぢり、B級グルメ探索等々多岐にわたる。PCを使う作業に関しては何でもかんでも自動化したがる自動化オタク。