AccessVBA:【DoCmd】【TransferText メソッド】CSVファイルのインポート・取込み
ここでは「TransferText メソッド」を使ったCSVの取込み方法について、2通りの取り込み方を説明していきます。
- CSVにヘッダー情報がある場合
- CSVにヘッダー情報がない場合
◆事前準備
ここでは事前にCSVを取り込む先のテーブルを以下のように作っておきます。
1.CSVにヘッダー情報がある場合
以下では「サンプル1」テーブルに、FilePathにあるCSVファイル取り込みます。
このCSVにはヘッダー情報があることが前提です。
なお、ヘッダー情報と取込み先のテーブルのヘッダー情報が一致したものにデータが追加されます。
1 2 3 4 5 6 7 8 9 |
Private Sub CSV取込み1_Click() Dim FilePath As String FilePath = "C:\Users\CVS取込み\サンプル1.csv" '//ヘッダー情報のあるCSVの取込み方法' '「サンプル1」テーブルに、FilePathのCSVを取り込む' DoCmd.TransferText acImportDelim, , "サンプル1", FilePath, True '//Trueはヘッダーありとして読み込む' End Sub |
以下はCSVファイルのサンプルです。1行目をヘッダー情報として取り扱います。
2.CSVにヘッダー情報がない場合
ここでは上記と同じく、「サンプル1」テーブルに、FilePathにあるCSVファイル取り込みますが、このCSVにはヘッダー情報がない状態です。
ひとまず取り込むためのコードは以下のようになります。
1 2 3 4 5 6 7 8 9 |
Private Sub CSV取込み2_Click() Dim FilePath As String FilePath = "C:\Users\サンプル2_ヘッダーなし.csv" '//ヘッダー情報のないCSVの取込み方法' '「サンプル1」テーブルに、FilePathのCSVを取り込む、インポート定義は事前に作った「インポート定義_サンプル2」' DoCmd.TransferText acImportDelim, "インポート定義_サンプル2", "サンプル1", FilePath, False '//Falseはヘッダーなしとして読み込む' End Sub |
しかし、「ヘッダー情報がない状態」でCSVを取り込もうとすると、「インポート定義」を設定していないと以下のようなエラーが出てしまいます。
これはヘッダー情報がないので、自動で割り振られた「F1」として読み込んだけれど、取込み先のテーブルに「F1」テーブルがないのでエラーとなります。
なお、テーブルのカラム名を「F1」しておくと取込みは可能です。
このような状況を解消するために、「インポート定義」というものを利用します。
次で「インポート定義」の作り方を説名します。
◆インポート定義の作り方
インポート定義を作るには以下のステップを踏みます。
- ウィザードを開く
- ウィザードを進めていく(1)
- ウィザードを進めていく(2)
- ウィザードを進めていく(3)
Accessのタブの「外部データ」の「インポートとリンク」の「テキストファイル」をクリックする。。
「参照」ボタンを押して、取り込みたいCSVを選択する。
次に「レコードのコピーを次のテーブルに追加する」にチェックを入れて、取り込みたいテーブルを選択すし、「OK」を押す。
テキストインポートウィザードが出てくるので、左下の「設定」ボタンをクリックする。
開いた画面を確認し、「保存」ボタンを押す。
そうするとインポート定義名を指定するところが出てくるので、任意の名称にして「OK」を押す。
※インポート定義名は忘れないようにメモしておく。忘れた場合、ウィザードをまた開いて、「保存」ではなく、「定義」ボタンを押すと確認できる。
これでインポート定義は作成されました。
この後は「次へ」などを押して、ひとまずこのウィザードを終了させる。
もし取込みが失敗していたら、再度ウィザードを開いて、インポート定義を見直す。
これでインポート定義ができたので、「TransferText メソッド」でインポート定義を使うことが可能になります。
以下、上述のコードと同じものですが、7行目で作成したインポート定義を使っています。
1 2 3 4 5 6 7 8 9 |
Private Sub CSV取込み2_Click() Dim FilePath As String FilePath = "C:\Users\サンプル2_ヘッダーなし.csv" '//ヘッダー情報のないCSVの取込み方法' '「サンプル1」テーブルに、FilePathのCSVを取り込む、インポート定義は事前に作った「インポート定義_サンプル2」' DoCmd.TransferText acImportDelim, "インポート定義_サンプル2", "サンプル1", FilePath, False '//Falseはヘッダーなしとして読み込む' End Sub |