VBA×SQL接続まとめ|CSVもDB化して爆速データ処理する方法
VBAで大量データを扱っていると、「処理が遅い」「コードが長い」「メンテが大変」…こんな悩み、出てきますよね。
実はこれ、SQLを組み合わせるだけで一気に解決できます。
特にポイントなのが、CSVをデータベースとして扱うという考え方。
これができると、VBAのループ処理が不要になり、処理速度も保守性もかなり向上します。
この記事では、VBAとSQLの接続から、実務で使える構成、CSV×SQLの応用までまとめて解説します。
■ VBA×SQLの基本構造
まずは全体像です。
- 接続(Open)
- 実行(SELECT / INSERT / UPDATE)
- トランザクション(任意)
- 終了(Close)
この4つだけ覚えればOKです。
■ 最適構成(シンプル設計)
実務では、以下の構成が一番バランスが良いです。
- SQL文 → 文字列 or 関数
- DB処理 → クラス化
過剰にクラスを分ける必要はありません。
「接続・実行・終了・トランザクション」だけに絞るのがポイントです。
■ クラステンプレ(そのまま使える)
Option Explicit
Private conn As Object
' 接続
Public Sub Open()
Set conn = CreateObject("ADODB.Connection")
conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=C:\CSVフォルダ;" & _
"Extended Properties=""text;HDR=Yes;FMT=Delimited"""
End Sub
' SELECT
Public Function ExecuteSelect(ByVal sql As String) As Object
Dim rs As Object
Set rs = CreateObject("ADODB.Recordset")
rs.Open sql, conn
Set ExecuteSelect = rs
End Function
' 更新系
Public Sub ExecuteNonQuery(ByVal sql As String)
conn.Execute sql
End Sub
' トランザクション
Public Sub BeginTrans()
conn.BeginTrans
End Sub
Public Sub Commit()
conn.CommitTrans
End Sub
Public Sub Rollback()
conn.RollbackTrans
End Sub
' 終了
Public Sub Close()
If Not conn Is Nothing Then
If conn.State = 1 Then conn.Close
End If
Set conn = Nothing
End Sub
■ 使用例(基本パターン)
Sub 実行()
Dim db As New clsDB
Dim rs As Object
On Error GoTo ErrHandler
db.Open
' SELECT
Set rs = db.ExecuteSelect("SELECT * FROM [users.csv]")
Sheet1.Range("A1").CopyFromRecordset rs
' 更新
db.BeginTrans
db.ExecuteNonQuery "UPDATE users SET name = 'test'"
db.Commit
db.Close
Exit Sub
ErrHandler:
db.Rollback
db.Close
MsgBox Err.Description
End Sub
■ CSVをSQLで扱う方法(超重要)
CSVはフォルダ単位でデータベースとして扱えます。
接続先:
Data Source = CSVフォルダ
SQL:
SELECT * FROM [file.csv]
※ファイル名は必ず[]で囲みます。
■ CSV同士をJOINする(実務で最強)
SELECT u.ID, u.Name, o.OrderDate
FROM [users.csv] u
INNER JOIN [orders.csv] o
ON u.ID = o.UserID
これだけで複数CSVの突合が可能です。
VBAでのループ処理は不要になります。
■ よく使うSQLパターン
▼ 抽出
SELECT * FROM [file.csv]
▼ 条件
WHERE ID = 1
▼ 集計
SELECT COUNT(*) FROM [file.csv]
▼ 結合
INNER JOIN
■ 実務での使い方(おすすめ)
- 各処理でCSVを出力
- SQLでJOIN・集計
- Excelへ出力
この流れにすると、処理がかなり軽くなります。
■ メリットまとめ
- ループ処理削減
- 処理速度向上
- コード短縮
- 保守性アップ
■ 注意点
- 接続文字列ミスが多い
- CSVは[file.csv]で指定
- 型のズレ(数値・文字)
- トランザクション管理忘れ
■ まとめ
VBA×SQLの本質はシンプルです。
「VBAは実行役、SQLが処理の本体」
この構成にするだけで、今のCSV処理やファイル処理は一気に効率化できます。
特におすすめなのが、
「CSVをデータベースとして扱う」
この考え方を取り入れるだけで、VBAの世界が変わります。
■ 次のステップ
- 複数CSVのUNION
- schema.iniで型固定
- Access連携で高速化
- パラメータ化SQL
ここまでできれば、実務でもかなり強いです。

