器用貧乏の独り言

器用貧乏なおっさんが気の向くままに。

【MSAccess】csvファイルを取り込んで今月のデータだけを切り出す方法

皆さんこんにちは。

今日は、VBAの中にSQLを組み込んで、CSVファイルをAccessのデータベースに取り込むプロシージャを紹介します。

設定としては、csvファイルを一旦「Table1」というテーブルにインポートして、「今月の日付が入ったレコード」のみを「TM_Table」というテーブルに切り出します。

インポートするcsvのデータはこんなイメージです。

A列の日付を使ってレコードを切り出します。

さっそくですが、ソースコードはこんな感じです。

Public Sub csv_import()
 
Dim Today_year As Variant
Dim Today_month As Variant
Dim strSQL_1 As String
Dim strSQL_2 As String
Dim csvPath As String
 
'インポート先のテーブルを空にする(仕様によってはなくてもOK)
DoCmd.RunSQL "DELETE * FROM Table1"
 
'csvをインポートする
csvPath = "インポートするcsvのファイルパス"
DoCmd.TransferText acImportDelim, "インポート定義", "Table1", csvPath, False
 
'今日の年と月を取得する
Today_year = Year(Date)
Today_month = Month(Date)
 
'レコード切り出し用SQLを定義する。
strSQL_1 = "SELECT * FROM Table1 WHERE 日付 LIKE '*" & Today_year & "/" & Today_month & "*'"
strSQL_2 = "INSERT INTO " & TM_Table & " " & strSQL_1
   
'SQLを実行する。
DoCmd.RunSQL (strSQL_2)
End sub


データが多すぎて扱いにくいCSVファイルがある時は、こんな感じで切り出してあげると扱いやすくなります。

また、今回のソースコードではわざわざToday関数を使ってプロシージャ実行時の日付を取得しています。

これは定期実行時に役立てることができます。
(定期実行用に使っているプロシージャから引用してきたもので。)

長くなるので今回は省略しましたが、月毎のテーブルをAccess上に作っておく、もしくはテーブル自動作成用のSQLを書いておけば、自動で月毎にレコードを切り分けることができます。

大量のデータをCSVで出力するようなシステムを使っている場合、データベース側でデータを自動切り分けする機能は非常に有意義だと思います。

今日の記事も誰かの参考になると嬉しいです。