【Access VBA】指定 CSV ファイルを指定テーブルにインポートする

【Access VBA】指定 CSV ファイルを指定テーブルにインポートする

指定 CSV ファイルを指定テーブルにインポートする

この記事では「指定 CSV ファイルを指定テーブルにインポートする」ために利用可能な ImportCsvFile というユーザー定義関数について紹介します。 この情報が読者のお役に立てば幸いです。

解決できること

Microsoft Access の中でここで紹介する ImportCsvFile をマクロの中で呼び出すと%USERPROFILE%からの相対パスで指定された CSV ファイルを指定テーブルに簡単にインポートできます。

ここに %USERPROFILE% は Windows であらかじめ定義されている環境変数で Windows 10 搭載 PCを使っている利用者のデフォルトのフォルダパスを表しています。この環境変数については必要に応じて以下の記事を参照下さい。

【Windows業務効率化】バッチファイルの基本テクニックを知ろう

読んでほしい方

こうした Microsoft Access VBA を使ったアプリケーションをこれから作ろうと思っている方、今まで VBA によるアプリケーションを作ってきたが、そのツールを第三者に提供する際に、フォルダの保存パス名等の利用者個人に紐づいた環境差分をVBAのプログラムの中にじかに書くのに抵抗がある方。

 

ImportCsvFile 関数 の紹介

説明

 %USERPROFILE%からの相対パスで指定された CSV ファイル 指定テーブルに簡単にインポートできます。

参照オブジェクト

この関数を利用するためにはこの関数の実行前に データベースツール > Visual Basic > ツール > 参照設定

 

【Access VBA】指定 CSV ファイルを指定テーブルにインポートする

の中で

  • Microsoft Office 16.0 Access Database engine
  • Microsoft ActiveX Data Objects 6.1 Library

にチェックを入れる必要があります。

利用例

本ツールの利用にあたっては事前に

【Access VBA】 Access にCSV インポート用のテーブルを作るには

を参考にして csv ファイルをインポートする先のテーブルを以下のように定義します(例えばインポート先のテーブル名が 130001_tokyo_covid19_patients の場合)。

【Access VBA】指定 CSV ファイルを指定テーブルにインポートする


次に Access のマクロ定義例えば “M0060_Call_ImportCsvFile” の中で

【Access VBA】指定 CSV ファイルを指定テーブルにインポートする

のように


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)」 で見ると

【Access VBA】指定 CSV ファイルを指定テーブルにインポートする

のように  “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:失敗) を設定して関数を終わります。
(注1) ADO (ActiveX Data Objects) : DAOの後継としてMicrosoftが仕様策定した統一的方法でデータベースを操作、参照するためのソフトウェア部品のパッケージおよびその呼び出し規約(API)ActiveXコントロールとして様々なソフトウェアやプログラミング言語から共通の方法で簡単にデータベースにアクセスでき、また表計算ソフトのワークシートやCSVファイルなどを含む様々な形式のデータに同じ手順でアクセスすることができます。

まとめ

この記事では「指定 CSV ファイルを指定テーブルにインポートする」ために利用可能な ImportCsvFile というユーザー定義関数について紹介しました。 この情報が読者のお役に立てば幸いです。