Accessの活用例として株価データを蓄積し、これらデータから株価指標を計算するクエリを作成する方法をシリーズとして紹介しています。今回は第4回目として、第3回目に紹介したCSVファイルインポートをAccess VBAで処理する方法を紹介します。
なお、第3回目までのインポート設定については、以下の記事もご参考にしてください。
インポート手順の確認
シリーズ第3回では、Accessのウィザード機能を用いてCSVファイルをインポートするための「インポート定義」を設定し、「StockValue インポート定義」という名称で保存しました。
今回は、このインポート定義をVBAで呼び出して、すでに作成している「T_株価」テーブルにデータインポートをします。
なお、インポート元のCSVファイルは「C:\TEST\」フォルダに保存されており、「220430_StockValue.csv」という名称とします。(このCSVファイルの取得方法はシリーズ第2回で紹介しました。)
また、テキストファイルのインポート処理には「DoCmd.TransferText」メソッドを用います。
DoCmd.TransferTextメソッドについて
今回のインポート処理で用いる「DoCmd.TransferText」は次の構文で示すことができます。
DoCmd.TransferText (TransferType, SpecificationName, TableName, FileName, HasFieldNames, HTMLTableName, CodePage)
ここで、各引数については表1に示すとおりです。
表1 DoCmd.TransferTextの引数一覧
名前 | 省略可否 | データ型 | 説明 |
TransferType | Optional | AcTextTransferType | 変換の種類を指定します。 区切りテキスト ファイル、固定長テキスト ファイル、または HTML ファイル間でデータをインポート、エクスポート、リンクすることができます。 既定値は acImportDelim です。 Microsoft Access プロジェクト (.adp) では、acImportDelim、acImportFixed、acExportDelim、acExportFixed、または acExportMerge のみサポートされています。 |
SpecificationName | 省略可能 | Variant | 作成してカレント データベースに保存したインポートまたはエクスポートの定義名を文字列式で指定します。 固定幅テキスト ファイルの場合、引数を指定するか、schema.ini ファイルを使用する必要があり、この schema.ini ファイルは、インポート、リンク、またはエクスポートを行うテキスト ファイルと同じフォルダーに格納する必要があります。
schema ファイルを作成するには、テキストのインポート/エクスポート ウイザードを使用します。 区切りテキスト ファイルおよび Microsoft Word の差し込み印刷データ ファイルの場合は、この引数を指定しないで、既定のインポート/エクスポート定義を選択できます。 |
TableName | 省略可能 | Variant | テキスト データのインポート先の Access テーブル、テキスト データのエクスポート元の Access テーブル、テキスト データのリンク先の Access テーブル、またはテキスト ファイルにエクスポートする結果の Access クエリの名前を、文字列式で指定します。 |
FileName | 省略可能 | Variant | インポート、エクスポート、またはリンクを行うテキスト ファイルの、パスを含めた完全な名前を文字列式で指定します。 |
HasFieldNames | 省略可能 | Variant | インポート、エクスポート、またはリンクするときにフィールド名としてテキスト ファイルの最初の行を使用するには、True (1) を使用します。 テキスト ファイルの最初の行を通常のデータとして扱うには、False (0) を使用します。 この引数を空白にすると、既定値 (False) と見なされます。 Microsoft Word の宛名の差し込みデータ ファイルの場合は、この引数は無視され、最初の行には常にフィールド名が含まれます。 |
HTMLTableName | 省略可能 | Variant | インポートまたはリンクする HTML ファイル内のテーブルまたはリストの名前を文字列式で指定します。 TransferType 引数が acImportHTML または acLinkHTML に設定されている場合を除き、この引数は無視されます。 この引数を空白のままにすると、HTML ファイル内の最初のテーブルまたはリストがインポートまたはリンクされます。
CAPTION タグがある場合、HTML ファイル内のテーブルまたはリストの名前は、CAPTION タグで指定されたテキストによって決まります。 CAPTION タグが存在しない場合、この名前は TITLE タグで指定されたテキストによって決まります。 複数のテーブルまたはリストの名前が同じ場合、それらを区別するためにそれぞれのテーブルまたはリストの名前の末尾に番号が追加されます。たとえば、Employees1 および Employees2 のようになります。 |
CodePage 識別子 | 省略可能 | Variant | コード ページの文字セットを示す長整数型 (Long) の値を指定します |
今回のインポート処理でのポイントとして、区切り文字でのテキストファイルインポートとなるため、「TransferType」を「acImportDelim」と設定するところにあります。仮に、固定長のテキストファイルをインポートする場合は、「acImportFixed」を用いることになりますので、必要に応じて設定を変えるようにしてください。
以上を踏まえて、VBAのコードを実装していきましょう。
VBAによる処理の実装
それでは、VBAでコードを実装するために、標準モジュールを作成し、以下のコードを追記してください。
Private Sub csvImport() On Error GoTo Err_cI 'インポート元株価ファイルの保存先 Dim FilePath As String FilePath = "C:\TEST\220430_StockValue.csv" 'CSVファイルの取り込み DoCmd.TransferText acImportDelim, "StockValue インポート定義", "T_株価", FilePath, True 'インポート処理を終了したことをメッセージボックスで知らせる。 MsgBox "ファイルのインポートを終了します。" Exit_cI: Exit Sub Err_cI: MsgBox Err.Description & ", " & Number Resume Exit_cI End Sub
これらコードの内容を確認します。まずインポート元の株価ファイルとして、「FilePath」変数に本シリーズで作成した「220430_StockValue.csv」のファイルパスを設定しています。実際の運用(毎日の運用)をする場合は「”C:\TEST\ & Format(Date, “yymmdd”) & “_StockValue.csv”」と記載することで、当日に作成された「StockValue.csv」ファイルをインポートできるように設定できます。
次に、「DoCmd.TransferText」メソッドを用い、保存されている「StockValue_インポート定義」により、「T_株価」テーブルに、先に設定したファイルパスのStockValue.csvファイルをインポートする処理となります。
インポートが終わったことが分かるように、MsgBoxによりメッセージを出すようにしました。また、後半に続くコードはエラー処理を示すものです。
以上で、コードの実装ができましたので、実際にインポートができるかを確認しましょう。
作成したSubプロシージャにカーソルを合わせ、VBA画面上部の「▶」ボタンをクリックすると処理が実行されます。処理実行後に「T_株価」テーブルを確認すると、「220430_StockValue.csv」の値がインポートされていることが分かると思います。
まとめ
今回は、VBAによりCSVファイルのインポートを、予め設定しているインポート定義を用いて実行する処理方法について紹介しました。
特に、ルーチン業務として決まったインポート処理であれば、今回紹介したような方法は業務効率を飛躍的に改善する助けになると思いますので、是非活用していただければと思います。
Accessでデータベースを作成するにあたって、専門書も参考になりますので、お手元に用意されるといざというときに非常に便利です。
スポンサーリンク
コメント