目次
ファイル名保存テーブル内に取得済の CSV ファイルを指定テーブルにインポートする
この記事では「ファイル名保存テーブル内に取得済の CSV ファイルを指定テーブルにインポートする」ために利用可能な ImportCsvFileInBookNameTable というユーザー定義関数について紹介します。
この情報が読者のお役に立てば幸いです。
解決できること
Microsoft Access の中でここで紹介する
ImportCsvFileInBookNameTable
をマクロの中で呼び出すと ファイル名保存テーブル内に取得済の CSV ファイルを指定テーブルに簡単にインポートできます。
読んでほしい方
こうした Microsoft Access VBA を使ったアプリケーションをこれから作ろうと思っている方、今まで VBA によるアプリケーションを作ってきたが、そのツールを第三者に提供する際に、フォルダの保存パス名等の利用者個人に紐づいた環境差分をVBAのプログラムの中にじかに書くのに抵抗がある方。
ImportCsvFileInBookNameTable 関数 の紹介
説明
ファイル名保存テーブル内に保管されている csv ファイルの フルパス名 、ファイル名 をもとに対象 csv ファイルをターゲットテーブルにインポートします。
参照オブジェクト
この関数を利用するためにはこの関数の実行前に
データベースツール > Visual Basic > ツール > 参照設定
の中で
- Microsoft Office 16.0 Access Database engine
- Microsoft ActiveX Data Objects 6.1 Library
にチェックを入れる必要があります。
利用例
本ツールの利用にあたっては事前に
を参考にして csv ファイルをインポートする先のテーブルを定義します。
次に
で紹介した MakeBookNameTable を使い “FileNamesList” テーブルを作成します。
次に
で紹介した GetBookNameList を使い “FileNamesList” テーブルに指定フォルダ配下に保存されているファイル名を取得したあと、この “FileNamesList” テーブルからインポートしたい csv ファイルのみを抽出するためのクエリ操作を行いレコード登録数が1個の以下のような “FileNameList” を作成します。
次に Access のマクロ定義例えば “M0050_Call_ImportCsvFileInBookNameTable” の中で
のように
If ImportCsvFileInBookNameTable("FileNamesList","Issues",True,True)>0
If 文の最後
のように ImportCsvFileInBookNameTable を “FileNamesList“、,”issues” といったパラメータを付けて呼び出します。
この “M0050_Call_ImportCsvFileInBookNameTable” のでデザインビューを閉じて、この ”M0050_Call_ImportCsvFileInBookNameTable” マクロをダブルクリックすると、このマクロが実行されこの中で ImportCsvFileInBookNameTable が実行されたあと、この”issues” を 「開く(O)」 で見ると
のように “issues” テーブルの中に”FileNamesList” で指定されたcsv ファイルからデータがインポートされていることがわかります。
引数
属性 | 意味 | |
---|---|---|
参照テーブル名 | 文字型 | 取得したい csv ファイルの フルパス名 、ファイル名 、ファイル作成日時 が入っているテーブル名 |
テーブル名 | 文字型 |
インポート先のテーブル名 |
タイトル行の有無 | Boorian型 |
True: タイトル有 |
文字コード部字コード識別子 | Boorian型 |
True: 入力CSVの文字コードはutf-8 |
戻り値
値 | 意味 |
---|---|
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 というユーザー定義関数について紹介しました。この情報が読者のお役に立てば幸いです。