毎回同じテーブルやクエリをCSVに出力していると、エクスポートのウィザードを開いて同じ設定を選ぶ作業が負担になります。Accessのマクロを使えば、VBAを書かずに「ボタンを押すとCSVが出力される」状態を作れます。
この記事では、マクロのテキスト変換アクションでCSVを出力し、フォームのボタンから実行するまでの流れを説明します。
画面の名前(アクション名、引数名、タブ名)は、Accessのバージョンや表示言語によって異なる場合があります。英語表示では、テキスト変換アクションは ImportExportText と表示されます。手元の画面と食い違う場合は、Microsoftの公式ヘルプで、使っているバージョンの表記を確認してください。
全体の流れ
- 出力するテーブル・クエリと、エクスポート定義を確認する
- マクロを作成し、「すべてのアクションを表示」をオンにする
- テキスト変換アクションを追加して引数を設定する
- マクロを単体で実行し、出力されたCSVの中身を確かめる
- フォームのボタンのクリック時イベントに割り当てる
1. 事前に確認するもの
出力元のテーブルまたはクエリ
列の並び、絞り込み、並べ替えを変えたいなら、先にクエリを作っておき、それを出力元にします。マクロ側で列を選ぶことはできないため、出力したい形をクエリで作っておくのが基本です。
エクスポート定義の名前
エクスポート定義は、区切り文字・引用符・文字コード・日付の形式などを保存した設定です。テキストエクスポートウィザードの「設定」(詳細設定)画面で保存したもので、マクロではこの定義名を指定します。
混同しやすいのが「保存済みのエクスポート操作」です。ウィザードの最後で「エクスポート操作の保存」にチェックを入れて保存したものは、エクスポート定義とは別物です。テキスト変換アクションの定義名の欄にその名前を入れても使えません。
保存されている定義名は、ウィザードの「設定」画面にある「定義」ボタンから一覧で確認できます。定義の作り方そのものは、手作業でのエクスポートを扱う記事を参照してください。
出力先のフォルダ
出力先のフォルダが存在しないと出力に失敗します。テスト用のフォルダを先に作っておき、最初はそこへ出力して動作を確かめてください。
2. マクロを作成して「すべてのアクションを表示」をオンにする
- 「作成」タブの「マクロ」をクリックし、マクロビルダーを開く
- 「マクロツール」の「デザイン」タブ(バージョンによっては「マクロのデザイン」タブ)で、「すべてのアクションを表示」をオンにする
- 「新しいアクションの追加」の一覧、または右側のアクションカタログから 「テキスト変換」 を選ぶ
テキスト変換は、初期状態では一覧に出てきません。ファイルを書き出すアクションなので、データベースが信頼されていない状態では表示が制限されるためです。「すべてのアクションを表示」をオンにしても見つからない場合や、実行時にブロックされる場合は、次の点を確認してください。
- データベースを開いたときにセキュリティの警告が出ていないか(出ていれば「コンテンツの有効化」)
- ファイルが信頼できる場所に置かれているか(「ファイル」→「オプション」→「トラストセンター」で確認)
社内PCで設定を変えられない場合は、管理者のルールに従ってください。
3. テキスト変換アクションの引数を設定する
アクションを追加すると、引数の入力欄が表示されます。CSVを出力するときの設定は次のとおりです。
| 引数 | 設定する内容 | 注意点 |
|---|---|---|
| 変換の種類 | エクスポート (区切り記号付き) | 「固定長」や「インポート」と取り違えない |
| 定義名 | 保存したエクスポート定義の名前 | 一覧から選べない場合は正確に入力する。空欄でも動くが、既定の設定で出力される |
| テーブル名 | 出力するテーブル名またはクエリ名 | クエリ名も指定できる |
| ファイル名 | 出力先のフルパス(例:C:\export\sales.csv) | フォルダが存在すること。拡張子まで書く |
| フィールド名を含める | はい/いいえ | 1行目に列名を出すかどうか |
| HTMLテーブル名 | 空欄 | HTML用の引数なのでCSVでは使わない |
| コードページ | 必要な場合のみ | 文字コードは定義で決めておくと管理しやすい |
定義名を空欄にした場合
定義名を指定しなくても、区切り記号付きのテキストとして出力されます。ただし、文字コード、引用符の付け方、日付の書式はAccessの既定に従うため、取り込み先の要件に合うとは限りません。取り込み先が決まっているCSVなら、定義を作って指定するほうが、毎回同じ形で出力できます。
見出し行の設定が二か所にある場合
エクスポート定義の中にも「先頭行をフィールド名として使う」に相当する設定があります。マクロの「フィールド名を含める」と食い違うと、思った結果にならないことがあります。どちらを優先するかは環境で確かめるのが確実なので、両方を同じ設定にそろえておくのが無難です。
パラメータクエリを出力元にする場合
実行時に入力を求めるパラメータクエリを出力元にすると、入力画面が出る、またはエラーになることがあります。ボタン一つで出力したい場合は、条件をフォームのコントロールから読む形にするか、条件を固定したクエリを用意してください。
4. マクロを保存して単体で実行する
- マクロを保存する。名前は内容が分かるものにする(例:mcr_売上CSV出力)
- 「デザイン」タブの「実行」をクリックする
- 出力先フォルダにCSVができているか確認する
出力されたCSVは、Excelではなくテキストエディタ(メモ帳など)で開いて確かめます。Excelで開くと、先頭の0が消えたり日付の表示が変わったりして、ファイルの本当の中身が分からなくなるためです。
確認する項目は次のとおりです。
- 1行目の見出しが意図どおりか(あるか、ないか、列名は正しいか)
- 区切り文字と引用符が取り込み先の要件どおりか
- 日本語が文字化けしていないか(文字コードが合っているか)
- 件数がテーブル・クエリの件数と一致するか
- 日付・小数の書式が意図どおりか
同じファイル名が出力先にすでにあるときの扱い(上書きされるか、エラーになるか)も、テスト用フォルダで一度確かめておくと安心です。
5. フォームのボタンに割り当てる
動作を確かめたら、フォームにボタンを置いて実行できるようにします。割り当て方は2通りあります。
方法A:作成したマクロを指定する
- フォームをデザインビューで開く
- 「ボタン」コントロールを配置する(コマンドボタンウィザードが起動したら「キャンセル」で閉じてよい)
- ボタンを選択した状態でプロパティシートを開き、「イベント」タブの 「クリック時」 の一覧から、保存したマクロ名を選ぶ
- ボタンの表示文字(標題)を「売上CSVを出力」などに変える
- フォームビューに切り替えてボタンを押し、CSVが出力されることを確認する
方法B:埋め込みマクロとして作る
「クリック時」の右にある「…」ボタンから「マクロビルダー」を選ぶと、そのボタン専用のマクロ(埋め込みマクロ)を作れます。中身の作り方は手順2〜3と同じです。
| 方法 | 向いている場面 |
|---|---|
| A:独立したマクロ | 複数のフォームから同じ出力を使う。ナビゲーションウィンドウから直接実行もしたい |
| B:埋め込みマクロ | そのボタンからしか使わない。フォームをコピーしたときに一緒に移したい |
出力後にメッセージを出す
ボタンを押しても画面上は何も変わらないため、出力されたのか分からないことがあります。テキスト変換アクションの後ろに 「メッセージボックス」 アクションを追加し、「売上CSVを出力しました」などと表示させると、押した人が完了に気づけます。
出力先のパスもメッセージに書いておくと、ファイルを探す手間が省けます。
ファイル名に日付を付けたい場合
毎回同じファイル名だと前回のファイルが上書きされます。日付付きのファイル名にしたい場合は、ファイル名の引数に、等号で始まる式を入れる方法があります。
="C:\export\sales_" & Format(Date(),"yyyymmdd") & ".csv"
式がそのまま使えるかどうか、出力されたファイル名が意図どおりかは、必ずテスト用フォルダで確認してください。うまくいかない場合は、固定のファイル名で出力し、後から手作業で名前を変える運用でも十分です。
うまく動かないときの確認表
| 症状 | 確認する点 |
|---|---|
| テキスト変換が一覧に出ない | 「すべてのアクションを表示」がオンか。データベースが信頼されているか |
| 定義が見つからないというエラー | 定義名の綴り。「保存済みのエクスポート操作」の名前を入れていないか |
| テーブルが見つからないというエラー | テーブル名・クエリ名の綴り。名前を変更した後で、マクロ側を直していないか |
| ファイルに書き込めない | 出力先フォルダが存在するか。同名のCSVをExcelなどで開いたままにしていないか。書き込み権限があるか |
| 文字化けする | 定義の文字コードが取り込み先と合っているか |
| 列の順番や件数が違う | 出力元クエリの列の並びと抽出条件 |
| 入力画面が出る | 出力元がパラメータクエリになっていないか |
保存済みのエクスポート操作を使う別の方法
ウィザードで「エクスポート操作の保存」をしてある場合は、マクロの 「保存済みのインポート/エクスポートの実行」 アクションに、その操作名を指定して実行する方法もあります。出力先や設定を保存済みの操作側で管理したい場合はこちらが向いています。
テキスト変換アクションなら、引数がマクロの画面に並ぶため、出力先やファイル名を後から確認・修正しやすいのが利点です。どちらで管理するかを決めて、運用をそろえておくと混乱しません。
