PR

Access VBA逆引き:CSV取込を自動化して業務時間を大幅削減する実践テクニック

未分類

毎月・毎週のようにCSVファイルをAccessへ取り込んでいるのであれば、VBAによる自動化は非常に効果があります。特に「ファイル選択」「取込」「エラーチェック」「履歴保存」までを自動化することで、ヒューマンエラーを削減しながら業務時間を大幅に短縮できます。本記事では、Access VBAを活用したCSV取込自動化の実践方法を紹介します。


スポンサーリンク

CSV取込を自動化するメリット

多くの業務システムでは、外部システムからCSVを出力し、Accessへ取り込んで分析や集計を行っています。

しかし手作業による取込では以下の課題があります。

  • ファイル選択ミス
  • 同じデータの二重取込
  • 取込漏れ
  • 担当者による作業品質のばらつき
  • 作業時間の増加

VBAによる自動化を行うことで、これらの問題を大幅に改善できます。

よくある取込業務

例えば以下のようなケースです。

  • 売上データの日次取込
  • 点検実績データの取込
  • 在庫情報の更新
  • モニタリングデータの収集
  • 作業実績の集計

CSV形式であれば、ほぼ同じ考え方で自動化できます。


Access標準機能によるCSV取込

まずはAccessに標準搭載されているDoCmd.TransferTextを利用します。

基本構文

DoCmd.TransferText _

    TransferType:=acImportDelim, _

    TableName:=”T_売上データ”, _

    FileName:=”C:\Data\Sales.csv”, _

    HasFieldNames:=True

このコードだけでCSVファイルをテーブルへ取り込めます。

引数の意味

引数内容
TransferTypeインポート・エクスポート指定
TableName取込先テーブル
FileNameCSVファイルパス
HasFieldNames先頭行が項目名かどうか

AccessのCSV取込では最も利用頻度の高い命令です。


ファイル選択ダイアログを表示する

毎回ファイル名を変更する業務では、ダイアログ表示が便利です。

ファイル選択処理

Function SelectFile() As String

    Dim fd As FileDialog

    Set fd = Application.FileDialog(msoFileDialogFilePicker)

    With fd

        .Title = “CSVファイルを選択してください”

        .Filters.Clear

        .Filters.Add “CSV”, “*.csv”

        If .Show = True Then

            SelectFile = .SelectedItems(1)

        End If

    End With

End Function

使用例

Dim strFile As String

strFile = SelectFile()

If strFile <> “” Then

    DoCmd.TransferText _

        acImportDelim, _

        , _

        “T_売上データ”, _

        strFile, _

        True

End If

利用者はボタンを押してファイルを選択するだけになります。


取込前にデータを削除する

毎回フルデータを取り込む場合は、既存データを削除してから取込を実施します。

テーブル初期化

CurrentDb.Execute _

    “DELETE FROM T_売上データ”, _

    dbFailOnError

一連の流れ

CurrentDb.Execute _

    “DELETE FROM T_売上データ”, _

    dbFailOnError

DoCmd.TransferText _

    acImportDelim, _

    , _

    “T_売上データ”, _

    strFile, _

    True

業務で非常によく使うパターンです。


二重取込を防止する方法

CSV取込業務では二重登録防止が重要です。

取込履歴テーブル

例として以下のテーブルを作成します。

項目内容
ImportDate取込日時
FileNameファイル名
UserName実行者

履歴登録処理

CurrentDb.Execute _

    “INSERT INTO T_取込履歴 ” & _

    “(ImportDate, FileName) ” & _

    “VALUES ” & _

    “(Now(), ‘” & strFile & “‘)”

登録済確認

If DCount(“*”, _

          “T_取込履歴”, _

          “FileName='” & strFile & “‘”) > 0 Then

    MsgBox “既に取込済です”

    Exit Sub

End If

これだけでも大きな事故防止になります。


エラー処理を実装する

業務システムでは必須です。

基本パターン

On Error GoTo ERR_HANDLER

DoCmd.TransferText _

    acImportDelim, _

    , _

    “T_売上データ”, _

    strFile, _

    True

MsgBox “取込完了”

Exit Sub

ERR_HANDLER:

MsgBox Err.Number & vbCrLf & Err.Description

よく発生するエラー

  • ファイルが存在しない
  • 共有フォルダ接続エラー
  • 項目不足
  • データ型不一致
  • ロックエラー

業務アプリでは必ず実装しましょう。


トランザクション処理を利用する

データの整合性を保つためにはトランザクションも有効です。

サンプル

Dim ws As DAO.Workspace

Set ws = DBEngine.Workspaces(0)

On Error GoTo ERR_HANDLER

ws.BeginTrans

CurrentDb.Execute _

    “DELETE FROM T_売上データ”

DoCmd.TransferText _

    acImportDelim, _

    , _

    “T_売上データ”, _

    strFile, _

    True

ws.CommitTrans

Exit Sub

ERR_HANDLER:

ws.Rollback

MsgBox Err.Description

途中で失敗した場合でもロールバックできます。


取込後にデータチェックを行う

CSVは外部から受け取るデータのため、チェック処理が重要です。

レコード件数確認

Dim lngCnt As Long

lngCnt = DCount(“*”, _

                “T_売上データ”)

MsgBox lngCnt & “件取込完了”

必須項目チェック

If DCount(“*”, _

          “T_売上データ”,

“顧客コード Is Null”) > 0 Then

    Msgox “顧客コード未設定データがあります”

End If

金額異常チェック

If DCount(““, _

          “T_売データ”, _

          “売上金額 < 0”) > 0 hen

    MsgBox “異常金額があります”

End I

実務では非常に有効な手法です。


フォルダ監視型の自動取込

さらに発展させると、特定フォルダへ配置されたCSVを定期的に取り込むことも可能です。

イメージ

  1. CSV出力
  2. 共有フォルダへ保存
  3. Access起動
  4. 自動取込
  5. 完了ログ出力

これにより利用者の操作をほぼゼロにできます。


実務でおすすめの構成

CSV取込機能を作る際は以下の構成がおすすめです。

テーブル

  • T_売上データ
  • T_取込履歴
  • T_エラーログ

フォーム

  • F_取込メニュー

モジュール

  • M_File
  • M_Import
  • M_Log

役割を分離することで保守性が向上します。


VBA化による改善効果

実際の業務では以下のような改善事例があります。

自動化前

  • 1日10分
  • 月20日稼働
  • 月200分

自動化後

  • 1日1分未満
  • エラー削減
  • 作業品質統一

年間では数十時間規模の削減につながることも珍しくありません。


CSV取込自動化で活用できる関連関数

ファイル存在確認

If*Dir(strFile) <> “” Then

   *MsgBox “存在します”

End If

現在日時取得

Now*)

“*

レコード数取得

DCount(“*”, “T_売上データ”)

SQL実行

CurrentDb.Execute strSQL

これらはCSV取込処理で頻繁に利用されます。


まとめ

Access VBAによるCSV取込自動化は、比較的少ないコード量で大きな効果を得られる業務改善テーマです。

特に、

  • TransferTextによる高速取込
  • ファイル選択ダイアログ
  • 二重取込防止
  • エラー処理
  • 取込履歴管理
  • トランザクション制御
  • データ検証

まで実装すると、業務利用に耐えうる堅牢な仕組みを構築できます。

Accessは今なお現場業務で強力なツールです。単純作業をVBAで自動化し、より価値の高い業務へ時間を使える環境を作っていきましょう。

コメント

タイトルとURLをコピーしました