【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で出力するようなシステムを使っている場合、データベース側でデータを自動切り分けする機能は非常に有意義だと思います。
今日の記事も誰かの参考になると嬉しいです。