目次
指定 CSV ファイルを指定テーブルにインポートする
この記事では「指定 CSV ファイルを指定テーブルにインポートする」ために利用可能な ImportCsvFile というユーザー定義関数について紹介します。 この情報が読者のお役に立てば幸いです。
解決できること
Microsoft Access の中でここで紹介する ImportCsvFile をマクロの中で呼び出すと%USERPROFILE%からの相対パスで指定された CSV ファイルを指定テーブルに簡単にインポートできます。
ここに %USERPROFILE% は Windows であらかじめ定義されている環境変数で Windows 10 搭載 PCを使っている利用者のデフォルトのフォルダパスを表しています。この環境変数については必要に応じて以下の記事を参照下さい。
読んでほしい方
こうした Microsoft Access VBA を使ったアプリケーションをこれから作ろうと思っている方、今まで VBA によるアプリケーションを作ってきたが、そのツールを第三者に提供する際に、フォルダの保存パス名等の利用者個人に紐づいた環境差分をVBAのプログラムの中にじかに書くのに抵抗がある方。
ImportCsvFile 関数 の紹介
説明
%USERPROFILE%からの相対パスで指定された CSV ファイル を指定テーブルに簡単にインポートできます。
参照オブジェクト
この関数を利用するためにはこの関数の実行前に データベースツール > Visual Basic > ツール > 参照設定
の中で
- Microsoft Office 16.0 Access Database engine
- Microsoft ActiveX Data Objects 6.1 Library
にチェックを入れる必要があります。
利用例
本ツールの利用にあたっては事前に
を参考にして csv ファイルをインポートする先のテーブルを以下のように定義します(例えばインポート先のテーブル名が 130001_tokyo_covid19_patients の場合)。
次に Access のマクロ定義例えば “M0060_Call_ImportCsvFile” の中で
のように
importCsvFile("Downloads\130001_tokyo_covid19_patients.csv","130001_tokyo_covid19_patients",True,True)>0
If 文の最後
のように ImportCsvFile を “Downloads\130001_tokyo_covid19_patients.csv“、,”130001_tokyo_covid19_patients” といったパラメータを付けて呼び出します。
そしてこの M0060_Call_ImportCsvFile のデザインビューを閉じ、この M0060_Call_ImportCsvFile マクロをダブルクリックすると、マクロの中で ImportCsvFile が実行されます。
このあと 130001_tokyo_covid19_patients テーブル を 「開く(O)」 で見ると
のように “130001_tokyo_covid19_patients” テーブルの中に”Downloads\130001_tokyo_covid19_patients.csv” で指定されたcsv ファイルからデータがインポートされていることがわかります。
引数
属性 | 意味 | |
---|---|---|
CSV ファイル名 | 文字型 | %USERPROFILE%からの相対パスで指定された CSV ファイル名 |
テーブル名 | 文字型 | インポート先のテーブル名 |
タイトル行の有無 | Boorian型 | True: タイトル有 False:タイトル無 |
文字コード部字コード識別子 | Boorian型 | True: 入力CSVの文字コードはutf-8 False:入力CSVの文字コードはutf-8以外(SHIFT-JIS) |
戻り値
値 | 意味 |
---|---|
0 | 正常終了 |
1 | 異常終了 |
VBAコード
Function ImportCsvFile(input_csv_path_name As String, table_name As String, has_field_names As Boolean, is_utf As Boolean) As Integer
Const C_SUCCESS As Integer = 0
Const C_FAILURE As Integer = 1
Dim codeSet As Long
If is_utf = True Then
codeSet = 65001 ' utf-8
Else
codeSet = 932 ' Shift-JIS
End If
On Error GoTo exitWithFailure
DoCmd.TransferText acImportDelim, , table_name, Environ("UserProfile") & "\" & input_csv_path_name, has_field_names, , codeSet
ImportCsvFile = C_SUCCESS
Exit Function
exitWithFailure:
ImportCsvFile = C_FAILURE
End Function
VBAコードの簡単な説明
行番号 | 説明 |
---|---|
1 | 関数名と関数の戻り値の型(Integer:整数型)、入力パラメータ input_csv_path_name(String:文字列型)、 table_name (String:文字列型)、has_field_names (Boolean:論理型)、is_utf (Boolean:論理型)の名前、型を定義しています。 |
3-4 | このプログラムの中で利用する定数C_SUCCESS(0:成功)、C_FAILURE(1:失敗)を定義しています。ここでは27行目、31行目ででこの関数の戻り値が C_SUCCESS(0:成功)、C_FAILURE(1:失敗)であることが明確にわかるようなコーディングの仕方になります。 |
6-12 | 入力パラメータ is_utf を使って 入力となる CSV ファイルの文字コードを指定します。 WEBからダウンロードした CSV ファイルは文字コードとして UTF-8 を使用することがあるため 25行目の DoCmd.TransferText 関数に適切な codeSet を設定するためのものです。 |
14 | この関数の実行中にエラーが発生したときの例外処理として、exitWithFailure にジャンプします。 |
16 | DoCmd.TransferText 関数に environ 関数と input_csv_path_name で csv のフルパス名 、 table_name でこの csv ファイルをインポートするテーブル名、has_field_names で この CSV ファイルに対するフィールドデータの有無、codeSet に文字コードをセットして CSV ファイルをインポートします。 |
18-19 | この関数の戻り値に C_SUCCESS(0:成功) を設定して関数を終わります。 |
21-23 | この関数の戻り値に C_FAILURE (1:失敗) を設定して関数を終わります。 |
まとめ
この記事では「指定 CSV ファイルを指定テーブルにインポートする」ために利用可能な ImportCsvFile というユーザー定義関数について紹介しました。 この情報が読者のお役に立てば幸いです。