Access VBAで「Googleマップ」へデータを引き渡すAccess VBAで学ぶ初心者のためのデータベース/SQL超入門(終)(3/3 ページ)

» 2016年10月19日 05時00分 公開
[薬師寺国安PROJECT KySS]
前のページへ 1|2|3       

住所をUTF8に変換する処理を記述する

 前述した「住所をUTF8に変換する処理」には、ユーザー定義関数の作成が必要となる。作成は、VBEメニューの「挿入」→「プロシージャ」から行える(図6)。

photo 図6 「プロシージャの追加」の画面

 「プロシージャの追加」設定画面では、名前欄へ「encodeUTF8」と入力し、種類には「Functionプロシージャ」を、適用範囲には「Privateプロシージャ」を選択する。「OK」ボタンを押すと、VBEに、

Private Function encodeUTF8()

End Function

 のコードが生成される、これをリスト3のコードに書き換える。

  1. Private Function encodeUTF8(mytext As string)as String
  2. Dim myStream As New ADODB.Stream
  3. Dim myBinary As Variant
  4. Dim myNumber As Variant
  5. With myStream
  6. .Open
  7. .Type = adTypeText
  8. .Charset = "UTF-8"
  9. .WriteText myText
  10. .Position = 0
  11. .Type = adTypeBinary
  12. .Position = 3
  13. myBinary = .Read
  14. .Close
  15. End With
  16. For Each myNumber In myBinary
  17. encodeUTF8 = encodeUTF8 & "%" & Hex(myNumber)
  18. Next
  19. End Function
リスト3:文字列(住所)を「UTF8」に変換するコード

 なお、このコードの実行には、VBEメニューの「参照設定」で「Microsoft ActiveX Data Objects 6.1 Library」を参照しておく必要がある(図6)。

photo 図6 参照設定から、「Microsoft ActiveX Data Objects 6.1 Library」にチェックを入れる

 リスト3のコードは、以下のように記述してある。

 引数には文字列型のmyTextを用意しておく。このmyTextには、病院名リストボックスから選択された「病院名」に該当する「住所」が渡される。

 ADODB.Stream型の変数myStream、バリアント型の変数myBinaryと、同じくバリアント型の変数myNumberを宣言する。

 Openメソッドで引数として渡された「住所」を開き、Typeプロパティにデータの種類を「文字列型」に指定する。

 Charsetプロパティに「文字コード=UTF-8」を指定する。WriteTextメソッドで、文字列の「住所」をStreamに入力する。

 Positionプロパティで、Stream内の現在の位置を制御する。Positionプロパティの詳細については、下記のURLを参照してほしい。

(参考リンク)Microsoft Developer Nerwork「Position プロパティ


 Positionの値に「0」を指定した理由は、バイナリモードにするためには、Positionを1度「0」に戻す必要があるためだ。

 Typeプロパティでデータ型にバイナリを指定する。再度Positionプロパティで、Streamの位置を制御する。ここでPositionの値に「3」を指定している。Positionに「3」を指定して読み込むことで、最初の「3バイト」をスキップする。ADODB.StreamオブジェクトでUTF-8形式のファイルを作成すると、ファイルの先頭に「BOM(Byte Order Mark)が付加されてしまう。つまり、「BOM」をスキップするための処理となる。

 Readメソッドで、変換後の「住所」を読み込み、変数myBinaryに格納する。CloseメソッドでStreamを閉じる。

 バイナリ型の「住所」を、Hex関数で文字列「%」と連結して、16進表記の文字列に変換する。「%xx」の書式に変換される。

完成したフォームを実行し、動作をチェックする

 完成したフォームを実行すると、図7のように動作する。

photo 図7 ある施設を選択すると、Googleマップが表示され、該当する場所にピンが立つ
photo 図8 URLの文字列は、UTF-8に変換して代入されている


 「Access VBAで学ぶ初心者のためのデータベース/SQL超入門」は今回で最終回だ。この連載が皆さまの職場での作業効率化のお役に立ったならば筆者冥利に尽きるのだが、いかがだっただろうか。長い間、お付き合いありがとうございました。

筆者紹介

薬師寺 国安(やくしじ くにやす) / 薬師寺国安事務所

薬師寺国安事務所代表。Visual Basicプログラミングと、マイクロソフト系の技術をテーマとした、書籍や記事の執筆を行う。

1950年生まれ。事務系のサラリーマンだった40歳から趣味でプログラミングを始め、1996年より独学でActiveXに取り組む。

1997年に薬師寺聖とコラボレーション・ユニット「PROJECT KySS」を結成。

2003年よりフリーになり、PROJECT KySSの活動に本格的に参加。.NETやRIAに関する書籍や記事を多数執筆する傍ら、受託案件のプログラミングも手掛ける。

Windows Phoneアプリ開発を経て、現在はWindowsストアアプリを多数公開中。


Microsoft MVP for Development Platforms - Client App Dev (Oct 2003-Sep 2012)

Microsoft MVP for Development Platforms - Windows Phone Development(Oct 2012-Sep 2013)

Microsoft MVP for Development Platforms - Client Development(Oct 2013-Sep 2014)

Microsoft MVP for Development Platforms-Windows Platform Development (Oct 2014-Sep 2015)

前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

スポンサーからのお知らせPR

注目のテーマ

4AI by @IT - AIを作り、動かし、守り、生かす
Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。