概要
| この記事の結論 Accessで「エクスポート定義」と呼ばれるものには、操作完了後に保存する実行手順と、テキスト出力ウィザードの[詳細設定]で保存する形式定義があります。前者は操作の再実行、後者は区切り・列・日付などの出力形式の再利用に使います。列構成などを変えるときは、どちらを編集するのかを確認し、別名で試してから本番の呼び出し先を切り替えましょう。 |
この記事でわかること
- 2種類の定義を区別
- 詳細設定で形式を保存
- 変更後は別名で比較検証
- 呼び出しコードと定義名を一致させる
この記事の主な内容
- エクスポート定義と保存済み操作の違い
- CSV用の形式定義を作成する
- 保存した形式定義を読み込み編集する
- 保存済みエクスポート操作を変更する
- マクロとVBAから定義を使う
- 定義変更で連携障害を起こさない運用
- よくある質問
想定読了時間:約9分~11分
1 エクスポート定義と保存済み操作の違い
「エクスポート定義」という言い方は、2種類の保存情報を指すことがあります。
最初にどちらを使っているかを確認しましょう。
テキスト出力の形式を細かく決めたい場合は詳細設定の形式定義、同じ操作を再実行したい場合は操作完了後の保存を使います。
| 比較項目 | テキスト形式定義 | 保存済み操作 |
|---|---|---|
| 保存時点 | ウィザードの詳細設定 | 操作完了後 |
| 主な目的 | 出力形式の再利用 | 一連の操作の再実行 |
| 主な呼び出し | TransferText | RunSavedImportExport |
| 変更する場面 | 列や区切りなどの形式変更 | ファイル名などの操作条件 |
テキスト形式定義を保存しただけでは、保存済みエクスポートの一覧に同じ名前で現れるとは限りません。
名称が同じように見えても、保存方法と実行先が違うためです。
マクロで名前が見つからない場合は下記の関連記事を参照してください。
関連記事:Accessで保存済み操作が表示されない対処|Accessの教科書
参考:Microsoft インポートまたはエクスポート操作の詳細を保存する
参考: Microsoft TransferTextメソッド
2 CSV用の形式定義を作成する
ここではテキストファイルへの出力形式を保存する方法を説明します。
CSVへ渡す列と順序を固定した選択クエリを用意し、テスト用のファイル名で出力を始めます。
1. 対象のテーブルまたは選択クエリを選び、[外部データ]から[テキストファイル]へのエクスポートを開きます。
2. 書式設定とレイアウトを付ける設定を選ばず、テキスト出力ウィザードへ進みます。
3. 区切り形式と区切り文字、引用符などを設定し、[詳細設定]を開きます。
4. 列、日付など表示される設定項目を受け渡し仕様と照合します。固定長の場合は長さや開始位置も確認します。
5. [名前を付けて保存]で、例えば「受注CSV形式_v1」のような定義名を付けます。
6. 実際にファイルを出力し、件数、列、文字コード、代表値を確認します。
画面の設定項目はAccessの版や区切り形式によって異なります。
元データの列が変わっても、保存済み定義が自動的に正しい形式へ更新されるとは考えないでください。
参考:Microsoft TransferTextメソッド
参考: Microsoft データをテキストファイルにエクスポートする
3 保存した形式定義を読み込み編集する
編集するときも、同じテキスト出力ウィザードの[詳細設定]を開きます。[定義]などの読込ボタンから既存の定義を選び、設定内容を確認します。表示されるボタン名は画面によって異なります。
1. 対象の出力クエリからウィザードを開き、[詳細設定]で既存定義を読み込みます。
2. 変更したい区切りや列の設定を修正します。
3. 試験段階では「受注CSV形式_v2」のような別名で保存します。
4. v1とv2をそれぞれテスト出力し、差分が意図した項目だけか比較します。
5. 受取側の確認後に、マクロやVBAの呼び出し先をv2へ変更します。
列追加では、出力用クエリ、形式定義、受け取り側の取り込み設定を一緒に点検します。
定義だけ変えても、クエリのSELECTに列が含まれていなければ出力されません。
関連する設定を1つの変更として管理することが大切です。

4 保存済みエクスポート操作を変更する
操作完了後に保存したものは、[外部データ]の[保存済みのエクスポート操作]から管理します。
現在の画面で変更できる名前やファイル情報を確認してください。
管理画面だけで列構成などの全設定を編集できるとは限りません。
列順、抽出対象、ヘッダーなど出力内容の変更では、対象クエリと出力手順を見直し、修正した操作を別名で保存し直す方法が分かりやすくなります。旧操作をすぐ削除せず、比較試験が済んでから呼び出し側を切り替えます。
保存済み操作を同じ名前で置き換えるか、別名にするかは配布運用に合わせます。
別名にした場合はマクロの引数も変更します。
古い操作を参照したまま、新しい設定で出力したと思い込まないように注意してください。
参考:Microsoft インポートまたはエクスポート操作の詳細を保存する
参考: Microsoft RunSavedImportExportメソッド
複数テーブルや複数端末への影響が分からない場合は、変更目的と現状の構成を整理してお気軽にご相談ください。
5 マクロとVBAから定義を使う
形式定義を使ってCSVを出す場合は、TransferTextのSpecificationNameへ形式定義名を渡します。
次は「受注CSV形式_v2」と、選択クエリ「Q_受注CSV出力」が現在のDBに存在する想定の例です。
出力先フォルダーも事前に用意します。
Public Sub ExportOrdersCsv()
On Error GoTo EH
Dim outputFile As String
outputFile = “C:\AccessTest\orders_test.csv”
If Len(Dir$(outputFile)) > 0 Then
MsgBox “同名ファイルがあるため出力を中止しました。”
Exit Sub
End If
DoCmd.TransferText _
TransferType:=acExportDelim, _
SpecificationName:=”受注CSV形式_v2″, _
TableName:=”Q_受注CSV出力”, _
FileName:=outputFile, _
HasFieldNames:=True
MsgBox “出力しました。内容と件数を確認してください。”
Exit Sub
EH:
MsgBox CStr(Err.Number) & “: ” & Err.Description
End Sub
HasFieldNamesは先頭行のフィールド名の有無です。
文字コードをCodePage引数で指定する設計もありますが、受取仕様と実際の出力を確認して設定します。
掲載例は実機未検証であり、定義や環境による出力差はテストで確認してください。
保存済み操作を実行する場合は、DoCmd.RunSavedImportExportにその操作名を渡します。
2つの仕組みの名前を混ぜないことが重要です。
参考:Microsoft TransferTextメソッド
参考: Microsoft RunSavedImportExportメソッド
6 定義変更で連携障害を起こさない運用
定義は業務上のインターフェースの一部です。
取引先や別システムが読むファイルなら、列の変更や文字コードの変更を相手へ知らせ、受け取り試験まで完了してから切り替えます。Accessで出力できたことだけでは連携完了になりません。
- 定義名、用途、出力クエリ、呼び出すマクロ・VBAを一覧にする。
- 変更前のDBと定義を保管し、変更内容を記録する。
- 正常データだけでなく空欄、長文、引用符、改行も試す。
- 新版を配布する全フロントエンドへ必要な定義を含める。
MSysIMEXSpecsなどのシステムテーブルを直接編集する方法を、通常の保守手順にはしません。
まずウィザードの読込・保存や、操作の再作成で対応します。
内部の設定を部分的に変更して整合性を崩すリスクを避け、誰でも追跡できる変更手順を残しましょう。
よくある質問(FAQ)
テキスト形式定義はウィザードの詳細設定、保存済み操作は操作完了後に保存します。
まずどちらが必要か確認します。
出力クエリ、形式定義、実行している操作名を確認します。
古いクエリや定義を呼び出している可能性があります。
同じ種類ではありません。
TransferTextのSpecificationNameにはテキスト形式定義の名前を指定します。
変更影響を確認するまでは別名で保存して比較する方法が安全です。
検証後に呼び出し側を切り替え、旧版を保管します。
参考情報
Microsoft データをテキストファイルにエクスポートする