DoCmd.TransferTextメソッドを使ってテキストファイルをインポートする

こんにちはmasalifeです

今回はフォームに設置したボタンをクリックするだけで、特定のテキストファイルをインポートする機能を紹介します。

使用するのはVBAのDoCmd.TransferTextメソッド

それではやっていきましょう。

構文

DoCmd.TransferTextメソッドはAccessとテキストファイルの間でテキストをインポートまたはエクスポートできます。

Microsoftリファレンスでは次のように示されています。

【構文】

DoCmd.TransferText(TransferType, SpecificationName, TableName, FileName, HasFieldNames, HTMLTableName, CodePage)

名前必須/オプションデータ型説明
TransferTypeOptionalAcTextTransferType変換の種類を指定。規定値はacImportDelim。
SpecificationName省略可能Variant作成してカレント データベースに保存したインポートまたはエクスポートの定義名を文字列式で指定。
TableName省略可能Variantテキスト データのインポート先の Access テーブル、テキスト データのエクスポート元の Access テーブル、テキスト データのリンク先の Access テーブル、またはテキスト ファイルにエクスポートする結果の Access クエリの名前を、文字列式で指定。
FileName省略可能Variantインポート、エクスポート、またはリンクを行うテキスト ファイルの、パスを含めた完全な名前を文字列式で指定。
HasFieldNames省略可能Variantインポート、エクスポート、またはリンクするときにフィールド名としてテキスト ファイルの最初の行を使用するには、True (1) を使用。テキスト ファイルの最初の行を通常のデータとして扱うには、False (0) を使用。この引数を空白にすると、既定値 (False) と見なされる。
HTMLTableName省略可能バリアント型インポートまたはリンクする HTML ファイル内のテーブルまたはリストの名前を文字列式で指定。
CodePage識別子省略可能バリアント型コード ページの文字セットを示す長整数型 (Long) の値を指定。

TransferTypeのデータ型、AcTextTransferTypeの種類は次のとおりです。

【AcTextTransferType】

名前説明
acExportDelim2区切り記号付きエクスポート
acExportFixed3固定長エクスポート
acExportHTML8HTML エクスポート
acExportMerge4Microsoft Word Merge のエクスポート
acImportDelim0区切り記号付きインポート
acImportFixed1固定長インポート
acImportHTML7HTML インポート
acLinkDelim5区切り記号付きリンク
acLinkFixed6固定長リンク
acLinkHTML9HTML リンク

CSVファイルはカンマ区切りのファイルなので、acImportDelimを使います。

実例で構文を分かりやすく

実例を挙げて、DoCmd.TransferTextメソッド の引数を指定していきます。

インポートする要件は次のとおりです。

1. 特定のフォルダ(C:Users\nakam\OneDrive\ドキュメント\Access)にある特定のファイル(売上当月.csv)をAccessのテーブル(T_売上累積)にインポートします。

2. その際、CSVファイルの先頭行はフィールド名として使用します。

3. CSVファイルの売上日は日付形式となっているため、Accessのテーブル(T_売上累積)にインポート時はインポート定義を使って、テキスト型でインポートします。

※今回は事前にインポート定義(売上インポート定義)を作成済みです。


実例で構文を整理すると、次のようになります。

名前実例での説明実例での引数
TransferType どの形式のファイルをインポートするのかエクスポートするのか
⇒CSVファイルをインポートする
acImportDelim
SpecificationName インポート定義を指定するのか
⇒「売上インポート定義」を指定する
“売上インポート定義”
TableName インポート先の名前は何か
⇒「T_売上累積」にインポートする
“T_売上累積”
FileName インポートするファイルのフルパスは何か
⇒「C:\Users\nakam\OneDrive\ドキュメント\Access\売上当月.csv」をインポートする
” C:\Users\nakam\OneDrive\ドキュメント\Access\売上当月.csv”
HasFieldNames テキストファイルの最初の行をフィールド名に使用するか
⇒使用する
True
\は¥に置き換えてください

【完成】

DoCmd.TransferText acImportDelim, "売上インポート定義", "T_売上累積", "C:\Users\nakam\OneDrive\ドキュメント\Access\売上当月.csv", True

※\は¥に置き換えてください。

フォームのボタンにVBAを設定する

フォームのボタンのクリック時イベントに次のVBAコード(3と5)を設定します。

※\は¥に置き換えてください。

DoCmd.TransferText ac ImportDelimでは、クリックする都度、重複してデータがインポートされてしまうため、

Msgbox関数を使って、正しくインポートされたことを知らせるようにしています。

さいごに

この方法は一番シンプルで分かりやすいですが、フルパスを指定しているため、汎用性にかけるデメリットがあります。

ルーチンでファイルをインポートするのであれば、インポートするファイル名は「〇月売上」とかではなく、「当月売上」「売上」といったファイル名にする工夫をしてください。

最後まで読んでいただきありがとうございました。