【Access VBA】ファイル名保存テーブル内に取得済の CSV ファイルを指定テーブルにインポートする

【Access VBA】ファイル名保存テーブル内に取得済の CSV ファイルを指定テーブルにインポートする

ファイル名保存テーブル内に取得済の CSV ファイルを指定テーブルにインポートする

この記事では「ファイル名保存テーブル内に取得済の CSV ファイルを指定テーブルにインポートする」ために利用可能な ImportCsvFileInBookNameTable というユーザー定義関数について紹介します。

この情報が読者のお役に立てば幸いです。

解決できること

Microsoft Access の中でここで紹介する

ImportCsvFileInBookNameTable

をマクロの中で呼び出すと ファイル名保存テーブル内に取得済の CSV ファイルを指定テーブルに簡単にインポートできます。

読んでほしい方

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

ImportCsvFileInBookNameTable 関数 の紹介

説明

 ファイル名保存テーブル内に保管されている csv ファイルの フルパス名ファイル名 をもとに対象 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 ファイルをインポートする先のテーブルを定義します。

【Access VBA】ファイル名保存テーブル内に取得済の CSV ファイルを指定テーブルにインポートする

次に

【Access VBA】指定フォルダ配下のファイル名を保存するテーブルを自動生成する

で紹介した MakeBookNameTable  を使い “FileNamesList” テーブルを作成します。

次に

【Access VBA】指定フォルダ配下のファイル名を自動取得する

で紹介した GetBookNameList を使い “FileNamesList” テーブルに指定フォルダ配下に保存されているファイル名を取得したあと、この “FileNamesList” テーブルからインポートしたい csv ファイルのみを抽出するためのクエリ操作を行いレコード登録数が1個の以下のような “FileNameList” を作成します。

【Access VBA】ファイル名保存テーブル内に取得済の CSV ファイルを指定テーブルにインポートする

 

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

【Access VBA】ファイル名保存テーブル内に取得済の CSV ファイルを指定テーブルにインポートする

 

のように


If ImportCsvFileInBookNameTable("FileNamesList","Issues",True,True)>0
If 文の最後

のように ImportCsvFileInBookNameTable を “FileNamesList“、,”issues” といったパラメータを付けて呼び出します。

この “M0050_Call_ImportCsvFileInBookNameTable” のでデザインビューを閉じて、この ”M0050_Call_ImportCsvFileInBookNameTable” マクロをダブルクリックすると、このマクロが実行されこの中で  ImportCsvFileInBookNameTable が実行されたあと、この”issues” を 「開く(O)」 で見ると

【Access VBA】ファイル名保存テーブル内に取得済の CSV ファイルを指定テーブルにインポートする

 

 

のように  “issues”  テーブルの中に”FileNamesList” で指定されたcsv ファイルからデータがインポートされていることがわかります。

引数

属性 意味
参照テーブル名 文字型 取得したい csv ファイルの フルパス名 、ファイル名 、ファイル作成日時 が入っているテーブル名
テーブル名 文字型

インポート先のテーブル名

タイトル行の有無 Boorian型

True: タイトル有
False:タイトル無

文字コード部字コード識別子 Boorian型

True: 入力CSVの文字コードはutf-8
False:入力CSVの文字コードはutf-8以外(SHIFT-JIS)

戻り値

意味
0 正常終了
1 異常終了

VBAコード


Function ImportCsvFileInBookNameTable(reference_table_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


  Dim tableName As New ADODB.recordSet
  tableName.Open reference_table_name, CurrentProject.Connection

  On Error GoTo exitWithFailure

  Do Until tableName.EOF
    DoCmd.TransferText acImportDelim, , table_name, tableName!pathName & tableName!bookName, has_field_names, , codeSet
    tableName.MoveNext
  Loop

  tableName.Close

  ImportCsvFileInBookNameTable = C_SUCCESS
Exit Function

exitWithFailure:
  ImportCsvFileInBookNameTable = C_FAILURE
End Function

VBAコードの簡単な説明

行番号 説明
1 関数名と関数の戻り値の型(Integer:整数型)、入力パラメータ reference_table_name(String:文字列型)、 table_name (String:文字列型)、has_field_names (Boolean:論理型)、is_utf (Boolean:論理型)の名前、型を定義しています。
3-4 このプログラムの中で利用する定数C_SUCCESS(0:成功)、C_FAILURE(1:失敗)を定義しています。ここでは18行目、22行目ででこの関数の戻り値が C_SUCCESS(0:成功)、C_FAILURE(1:失敗)であることが明確にわかるようなコーディングの仕方になります。
6-12

入力パラメータ is_utf  を使って 入力となる CSV ファイルの文字コードを指定します。

WEBからダウンロードした CSV ファイルは UTF-8 コードのなることが

15-16

ADO(注1) を用いてオブジェクト  tableName  の定義をします。この tableName  は 入力パラメータで指定された 参照テーブル名 table_name に設定されます

18 この関数の実行中にエラーが発生したときの例外処理として、exitWithFailure にジャンプします。
20-23 参照テーブル  tableName  から csv のフルパス名 、ファイル名 を取り出し、 入力パラメータで指定された table_name 、、にこの csv ファイルをインポートします。
25

参照テーブルをクローズします。

27-28 この関数の戻り値に C_SUCCESS(0:成功) を設定して関数を終わります。
30-32 この関数の戻り値に C_FAILURE (1:失敗) を設定して関数を終わります。

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

まとめ

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


ライブラリ一覧