Accessを通じて、初心者がリレーショナルデータベースやSQLの基本を学び、データベースを使った簡単なシステムの作り方を習得する本連載。今回は、「CSVファイルの読み込み/書き出し」機能を追加するテクニックをお伝えする。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
本連載はMicrosoft Access(マイクロソフトアクセス 以下、Access)を使って、リレーショナルデータベース(RDB)やSQLの基本を学び、データベースを使った簡単なシステムの作り方を習得するものだ。
前回までは、テキストボックス、リストボックス、コンボボックス、タブコントロールへ、値集合タイプ/ソース、SQLでデータを表示する基本を解説した。
今回は、「CSVファイルの読み込み/書き出しの機能」を実装していく。CSVファイルを読み込んでAccessデータベースへ取り込む方法、顧客管理データベースから必要なデータを取得して、CSVファイルとして書き出すためのVBAコードなどをじっくり解説する。
今回も同様に、バックナンバーである第1回「どんなビジネスにも欠かせないリレーショナルデータベースの基礎知識と作り方――テーブル、レコード、フィールド、主キーとは」、第2回「Access VBAでデータ入力フォームを作り、各コントロールを追加するためのデザインビューの使い方」などで作成した「顧客管理.accdb」を使用する。「顧客管理.accdb」をダブルクリックして開いてほしい。
事前準備として、ナビゲーションウィンドウから「顧客管理テーブル」を、今回の作業用テーブルとして複製する。「顧客管理テーブル」を選択して右クリック→コピー→貼り付けを実行。名前を「CSV用顧客管理テーブル」とし、「テーブルの構造とデータ」にチェックを入れてOKをクリックする。これで、ナビゲーションウィンドウに「CSV用顧客管理テーブル」が追加される。
続いてルートドライブ(C:\)直下に「Access2013Data」というフォルダを作成し、リスト1の内容を「顧客データ.csv」というファイル名で保存しておく。このCSVファイルはメモ帳などのテキストエディタで作成し、文字コードは「ANSI」で保存する。UTF-8やUnicodeで保存すると文字化けするので、注意してほしい。
"ID","氏名","性別","年齢","郵便番号","住所","電話番号" 18,"紫式部","女",25,"657-0845","神戸市灘区岩谷中町","000-246-8101" 19,"光源氏","男",30,"816-0822","福岡県春日市ちくし台","000-7777-0000" 20,"聖徳太子","男",45,"150-0001","東京都渋谷区神宮前","003-5678-8910"
顧客データ.csvは、先頭に項目名があり、各データは「カンマ(,)」で区切られている。
Accessのメニューから「作成」→「フォームデザイン」と選択する。
フォームのデザイン画面はこのままでは少し小さいので、サイズを少し大きくしておく。そこへ「ボタン」と「リストボックス」コントロールを配置する(図1)。
フォームへの「ボタン」コントロール配置時に起動するウィザードはキャンセルする。「ボタン」を選択して、プロパティシートから「書式」タブを選択し、標題は「CSVの読み込み」とする。続いてフォント名を「Meiryo UI」に、フォントサイズは「14」、フォント太さは「太字」を指定する。最後に「その他」タブから名前欄に「CSV読み込みボタン」と入力する。
「リストボックス」コントロールは、ウィザードに従って設定する。やり方は、第2回「Access VBAでデータ入力フォームを作り、各コントロールを追加するためのデザインビューの使い方」を参照してほしい。リストボックスの取得元となるテーブルまたはクエリには「CSV用顧客管理テーブル」を指定し、項目名は「結果リストボックス」としておく。
リストボックス | 値 |
---|---|
ID | 0.979cm |
氏名 | 2.542cm |
性別 | 1.27cm |
年齢 | 1.00cm |
郵便番号 | 2.50cm |
住所 | 5.50cm |
電話番号 | 2.542cm |
続いて「結果リストボックス」コントロールのプロパティシートから、「書式」タブを選択し、「書式」タブから、列幅には表1の値を「セミコロン(;)」で区切って1行で指定する。列見出しは「はい」、フォント名は「Meiryo UI」、フォントサイズは「12」と設定。「その他」タブにある名前は「CSV追加結果リストボックス」と指定しておく。
0.979cm;2.542cm;1.27cm;1.00cm;2.50cm;5.50cm;2.542cm
Copyright © ITmedia, Inc. All Rights Reserved.