Accessでデータを蓄積した後、別のシステムへデータを移行する際に、テキストファイルとしてデータを出力することがあります。こんなときも、Access VBAを用いることで容易に処理を実装することができます。
今回は、Access VBAを用いてデータをテキストファイルとしてエクスポートする方法を紹介します。
なお、似たような方法で、Excelファイルをエクスポートする方法は以下の記事で紹介していますので、ご参照ください。
Accessによるエクスポート処理
テキストファイルの出力は、Accessに搭載されている「Docmd.TransferText」を用います。ここで、出力できるデータは「テーブル」か「クエリ」となります。既存のテーブル、クエリの他、一時的に作成したクエリを用いてエクスポートすることも可能です。
ここで、一時的にクエリを作成する方法は以下の記事をご参照ください。
さて、Docmd.TransferTextは実際にはどのように記載すれば良いでしょうか?以下から細かく見ていきましょう。まずは、基本構文を示します。
Docmd.TransferText TransferType, SpecificationName, TableName, FileName, HasFieldNames, HTMLTableName, CodePage
上で示した基本構文の内、引数はそれぞれ表1で示すことを意味しています。
表1 Docmd.TransferTextの引数について
名前 | 省略 | データ型 | 説明 |
TransferType | 不可 | AcTextTransferType |
変換の種類を指定します。 区切りテキスト ファイル、固定長テキスト ファイル、または HTML ファイル間でデータをインポート、エクスポート、リンクすることができます。 既定値は acImportDelim です。 Microsoft Access プロジェクト (.adp) では、acImportDelim、acImportFixed、acExportDelim、acExportFixed、または acExportMerge のみサポートされています。 |
SpecificationName | 可能 | Variant | 作成してカレント データベースに保存したインポートまたはエクスポートの定義名を文字列式で指定します。 固定幅テキスト ファイルの場合、引数を指定するか、schema.ini ファイルを使用する必要があり、この schema.ini ファイルは、インポート、リンク、またはエクスポートを行うテキスト ファイルと同じフォルダーに格納する必要があります。
schema ファイルを作成するには、テキストのインポート/エクスポート ウイザードを使用します。 区切りテキスト ファイルおよび Microsoft Word の差し込み印刷データ ファイルの場合は、この引数を指定しないで、既定のインポート/エクスポート定義を選択できます。 |
TableName | 可能 | Variant | テキスト データのインポート先の Access テーブル、テキスト データのエクスポート元の Access テーブル、テキスト データのリンク先の Access テーブル、またはテキスト ファイルにエクスポートする結果の Access クエリの名前を、文字列式で指定します。 |
FileName | 可能 | Variant | インポート、エクスポート、またはリンクを行うテキスト ファイルの、パスを含めた完全な名前を文字列式で指定します。 |
HasFieldNames | 可能 | Variant | インポート、エクスポート、またはリンクするときにフィールド名としてテキスト ファイルの最初の行を使用するには、True (1) を使用します。 テキスト ファイルの最初の行を通常のデータとして扱うには、False (0) を使用します。 この引数を空白にすると、既定値 (False) と見なされます。 Microsoft Word の宛名の差し込みデータ ファイルの場合は、この引数は無視され、最初の行には常にフィールド名が含まれます。 |
HTMLTableName | 可能 | Variant | インポートまたはリンクする HTML ファイル内のテーブルまたはリストの名前を文字列式で指定します。 TransferType 引数が acImportHTML または acLinkHTML に設定されている場合を除き、この引数は無視されます。 この引数を空白のままにすると、HTML ファイル内の最初のテーブルまたはリストがインポートまたはリンクされます。
CAPTION タグがある場合、HTML ファイル内のテーブルまたはリストの名前は、CAPTION タグで指定されたテキストによって決まります。 CAPTION タグが存在しない場合、この名前は TITLE タグで指定されたテキストによって決まります。 複数のテーブルまたはリストの名前が同じ場合、それらを区別するためにそれぞれのテーブルまたはリストの名前の末尾に番号が追加されます。たとえば、Employees1 および Employees2 のようになります。 |
今回の場合、区切りテキストファイルをエクスポートするため、TransferType引数には「acExportDelim」を選択します。
以上で、Docmd.TransferTextの基本的な使い方は紹介できましたので、サンプルデータを用いてテキストファイルへの出力の様子を見ていきましょう。
サンプルデータ
サンプルテーブルとして、「T_TextExport」テーブルを作成し、「氏名」、「生年月日」及び「性別」フィールドを作成します。そして、これらフィールドのデータ型は、それぞれ「短いテキスト」、「日付/時刻型」及び「短いテキスト」とします。
「T_TextExport」テーブルを作成後、表2に示すサンプルデータを追加します。
表2 サンプルデータ
氏名 | 生年月日 | 性別 |
坂本 花子 | 1998/01/06 | 女 |
山本 寛治 | 1978/04/05 | 男 |
森本 真一 | 1997/12/07 | 男 |
相川 ふみ | 2001/06/19 | 女 |
次からは、VBAによりテキストファイルへエクスポートするコードを実装していきましょう。
VBAによる実装
Access VBA画面を開き、標準モジュールを追加し、以下のコードを追加します。
Private Sub TextExport() '変数宣言 Dim TextPath As String 'テキストファイルエクスポート先のファイルパス TextPath = "C:\TEST\" & Format(Date, "yymmdd") & ".txt" 'テキストファイルの出力 DoCmd.TransferText acExportDelim, , "T_TextExport", TextPath, True 'テキストファイルをエクスポートした旨を通知する。 MsgBox "テキストファイルをエクスポートしました。" End Sub
追加したコードにおいて、テキストファイルの出力先を決める必要があります。ここでは、Date関数とFormat関数を用いて「本日」を「yymmdd」形式で取得し、これを「txt」ファイルとして出力するようにしています。テキストファイルとしては「csv」ファイルなども有名ですが、ファイル名の拡張子を「csv」とすれば、こちらでも出力可能です。
なお、「C:¥TEST」としていますが、当該フォルダが存在していないとエラーになりますので、ご注意ください。また、エクスポート先に同一名称のファイルが存在している場合は、自動的にファイルが上書きされます。
次に、TransferTextメソッドを用いて「txt」形式としてテキストファイルを当該ファイルパスにエクスポートします。ここでは、テーブルを出力対象としましたが、上述のとおりクエリを出力対象とすることもでき、またDAOを上手く組み合わせることで、適宜クエリを作成し、これをテキストファイルにエクスポートすることも可能です。
このままでは、処理が終了したことが分かりませんので、テキストファイルをエクスポートした旨を通知するためのメッセージボックスを表示させるようにしました。
図1には、上述のコードをVBA画面に追加した状態を示します。
コードの実装ができた後、VBA画面上部の「▶」アイコンをクリックして処理が適切に行われるかを確認しましょう。
実装がうまくできていると「C:¥TEST」フォルダの中に、本日の日付を「yymmdd」形式としたファイル名を持つ「txt」ファイルが出来上がっているはずです。
図2は、テーブルの値がtxtファイルとしてエクスポートされた結果を示したものです。
まとめ
今回はAccessからテキストファイルをエクスポートする方法を紹介しました。出力する内容は、可変的にクエリを作成したり、またファイル名も任意につけることができますので、業務プロセスとして決まった出力ルーチンがある等、効率改善が図れるようなものには積極的に導入することをお勧めします。
また、今回紹介した内容は、専門書でも説明されていますので参考書としてお手元に用意することもお勧めです。
スポンサーリンク
コメント