アクセスの知識

アクセスのテーブルにCSVファイルをインポートする【VBA使用】

アクセスで作成したテーブルにVBAを利用してCSVデータをインポートすると、

『貼り付け先のテーブルには'F1'フィールドがありません』

のエラーが発生する場合があります。

このエラーはヘッダ(見出し行)が存在しないCSVをVBAでインポートする際に発生します。

見出しが無いCSVを取り込む時は『インポート定義』を設定する必要があります。

そこで今回は、

ヘッダ無しのCSV(「インポート定義」が必要)
ヘッダ有りのCSV(「インポート定義」が不要)

この2つのCSVをそれぞれVBAでインポートする手順を解説します。

CSVファイルをインポートするための事前準備

CSVデータの取り込みを確認するために用意したのは以下の通りです。

CSVを格納するテーブル:発送データ_TR

VBAを記述するトリガーとなるフォーム:カード発送

CSVデータ(ヘッダ情報なし):Inport_data1.csv

見出し行のないCSV

CSVデータ(ヘッダ情報あり):Inport_data2.csv

見出し行のあるCSV

使用するメソッドDoCmd.TransferText

★構文★
Docmd.TransferText(TransferType, SpecificationName, TableName, FileName, HasFieldNames, HTMLTableName,CodePage)

各パラメーター

・TransferType[省略可能]
変換の種類(区切りテキスト、固定長テキストなど)を指定します。規定値は「acImportDelim」です。

・SpecificationName[省略可能]
データベースに保存したインポート、もしくはエクスポートの定義名を文字列式で指定します。

・TableName[省略可能]
インポート先、エクスポート先のAccessテーブル/クエリの名前を文字列式で指定します。

・FileName[省略可能]
インポート、エクスポートを行うテキストファイルのパス名を文字列式で指定します。

・HasFieldNames[省略可能]
インポート、エクスポートするときにテキストファイルの1行目をフィールド名とするか否かを指定します。
1行目を使用する場合は「True」、使用しない場合は「false」を使用します。
規定値は「false」です。

・HTMLTableName[省略可能]
インポートまたはリンクする HTMLファイル内のテーブルまたはリストの名前を文字列式で指定します。

・CodePage[省略可能]
コード ページの文字セットを示す長整数型 (Long) の値を指定します。

【参考:TransferTypeの種類】

定数説明
acExportDelim カンマ、タブなど区切り記号つきエクスポート
acExportDelim 固定長エクスポート
acExportHTML HTMLエクスポート
acExportMerge Word Word差し込みデータエクスポート
acImportDelim カンマ、タブなど区切り記号つきインポート(既定値)
acImportFixed 固定長インポート
acImportHTML HTMLインポート
acLinkDelim カンマ、タブなど区切り記号つきリンク
acLinkFixed 固定長リンク
acLinkHTML HTMLリンク

CSVファイルをVBAでインポートする(ヘッダ情報あり)

フォームに作成した『データ取り込み』のボタンを押した際のクリックイベントに、以下のVBAを記述します。

ヘッダ情報ありのCSVを取り込む時は、『HasFieldNames』に『True』を設定しましょう。

ポイント

Private Sub btn取込_TR_Click()

'=== CSVをテーブルにインポートする ===

'ヘッダ有り
DoCmd.TransferText acImportDelim, , "発送データ_TR", "C:\Access\Inport_data2.csv", True

End Sub

VBAを保存、『データ取り込み』のボタンを押してCSVをインポートしてみます。

無事に『発送データ_TR』にCSVデータがインポートされました。

CSVファイルをVBAでインポートする(ヘッダ情報なし)

では次に、ヘッダ情報がないCSVファイル(Inport_data1.csv)をインポートしてみましょう。

『データ取り込み』のボタンを押した際のクリックイベントに、以下のVBAを記述します。

ヘッダ情報なしのCSVを取り込む時は、『HasFieldNames』に『False』を設定しましょう。

データ取り込み』のボタンを押した際のクリックイベントに、以下のVBAを記述します。

ポイント

Private Sub btn取込_TR_Click()

'=== CSVをテーブルにインポートする ===

'ヘッダ有り
DoCmd.TransferText acImportDelim, , "発送データ_TR", "C:\Access\Inport_data2.csv",
False

End Sub

VBAを保存、『データ取り込み』のボタンを押してCSVをインポートすると、エラーが発生しました。

『HasFieldNames』に『False』を設定することは正解なのですが、ヘッダ情報がないため、CSVの項目をテーブルに設定できません。

それが原因となって『貼り付け先のテーブルには'F1'フィールドがありません』というエラーが発生しています。

このエラーは『SpecificationName』にインポート定義を設定することにより回避することができます。

CSV取り込み時のインポート定義を取得する手順

アクセスの『外部データ』→『新しいデータソース』→『ファイルから』→『テキストファイル』を選びます。

『外部データの取り込み』画面が開きます。
ファイル名の項目に、ヘッダ情報がないCSVファイルを指定して『OK』をクリック。

『区切り記号付き』を選択して『次へ』をクリック。

左下にある『設定』をクリック。

『インポート定義』の画面が開きます。
右側にある『保存』をクリックして、定義名を記述します。

インポート定義名を設定する

ここで作成した定義名は、VBAで記述するので控えておきましょう。
『OK』を押して『インポート定義』の画面を閉じます。

あとは通常通りに進んで、ヘッダ無しのCSVファイルがテーブルにインポート出来るか確認してみて下さい。

インポート完了

作成したインポート定義をVBAに設定する

先ほど作成したインポート定義『CSVヘッダ無し』をVBAのパラメーター(SpecificationName)に設定します。

ポイント

Private Sub btn取込_TR_Click()

'=== CSVをテーブルにインポートする ===

'ヘッダ無し(インポート定義を設定)
DoCmd.TransferText acImportDelim, "CSVヘッダ無し", "発送データ_TR", "C:\Access\Inport_data1.csv", False

End Sub

VBAを保存、『データ取り込み』のボタンを押してCSVをインポートしてみます。

インポート定義を設定したことにより、ヘッダ情報のないCSVファイルもVBAで取り込みできるようになりました。

ヘッダ無しのCSVを取り込み

システムにデータを取り込む際には、エクセルよりもCSVが利用されることが多いです。

ヘッダの有無にかかわらずVBAでインポートできると便利ですよ!

人気の投稿

1

会員制のサイトにログインするために必要なパスワード、どうやって管理していますか?エクセルやメモ帳などよりも便利で使いやすいソフトを作成しました。

2

自営業の人や個人事業主の人は、顧客管理をエクセルで行っている人も多いかと思います。 エクセルで顧客管理のメリット パソコンにエクセルが入っていれば費用ゼロで使え ...

顧客管理 3

ちょっとした顧客管理や請求書などの作成にエクセルを利用している会社は多いと思います。 特に自営業や個人事業を営んでいる人、まだ顧客数が少ない中小企業などでは、導 ...

-アクセスの知識
-,

Copyright© ビジツールラボ , 2020 All Rights Reserved.