こんにちは、なかぜんです。
Accessでのデータ処理、便利だけど「もう少し自動化できたら…」と思ったことありませんか?
たとえば、定期的なデータ分析や外部システムとの連携。そんなときに力を発揮するのがPythonです。
今回は、AccessとPythonを連携させて、VBAでは難しい処理をPythonで代替する方法をご紹介します。
特に人気のpyodbcライブラリを使った接続方法や注意点も解説しますので、業務で活用したい方にぴったりです。
AccessとPythonをつなぐ「pyodbc」とは?
pyodbcは、ODBCドライバを使ってAccessやSQL Serverなどのデータベースに接続するためのPythonライブラリです。
Accessに直接接続できるのが特徴で、.accdbファイルに対して読み書きが可能です。
事前に準備するもの
- Python(3.x 推奨)
- Microsoft Access Database Engine(64bit or 32bit)
- pyodbcライブラリ(
pip install pyodbc
でインストール) - 接続対象のAccessファイル(例:
C:\data\sample.accdb
)
Accessに接続してデータを取得する基本コード
それでは、実際にPythonからAccessへ接続し、データを取得するコードを見ていきましょう。
import pyodbc
# データベースファイルのパス
db_path = r'C:\data\sample.accdb'
# ODBC接続文字列
conn_str = (
r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};'
rf'DBQ={db_path};'
)
# 接続処理
conn = pyodbc.connect(conn_str)
cursor = conn.cursor()
# データ取得例
cursor.execute('SELECT * FROM 商品マスタ')
rows = cursor.fetchall()
# 結果表示
for row in rows:
print(row.商品名, row.単価)
cursor.close()
conn.close()
ポイント解説:
conn_str
の中でDRIVERとDBQ(ファイルパス)を指定します- AccessのバージョンやPythonのbit数と一致するODBCドライバが必要です
fetchall()
で結果をリスト形式で取得し、ループで表示しています
Accessから呼び出す場合(VBAからPython実行)
逆に、Access(VBA)からPythonスクリプトを実行することも可能です。以下のようにShell関数でPythonを呼び出します。
Sub RunPythonScript()
Dim pyScript As String
pyScript = """C:\Scripts\access_query.py"""
Shell "python " & pyScript, vbNormalFocus
End Sub
注意:Pythonのパスが環境変数に通っていない場合は、"C:\Path\To\Python.exe"
でフルパス指定が必要です。
よくあるミス・注意点
- ODBCドライバが見つからない:Access Database Engineのインストールを確認(32bitか64bitをPythonと一致させる)
- ファイルロック:Accessファイルが開きっぱなしだと読み書きに失敗する場合があります
- 日本語テーブル・フィールド名の扱い:特にカラム名の大文字小文字の違いでエラーになることがあります
業務での応用例
この方法は、以下のような業務に活かせます。
- Accessで受注管理 → Pythonで集計しグラフ化・Excel自動出力
- CSVやWeb APIデータをPythonで取得 → Accessに自動インポート
- Accessで作成したデータをPython経由で機械学習モデルに投入
AccessはUIやトランザクション管理が得意。Pythonは外部連携や計算処理が得意。両者を組み合わせれば、かなりの「業務自動化」が可能になります。
まとめ:連携で可能性は無限に広がる
今回は「AccessとPython(pyodbc)で連携する方法」をご紹介しました。
Accessのデータを外部ツールで活用したいとき、pyodbcはとても便利な手段です。
学べたこと:
- AccessとPythonを接続するにはODBCドライバとpyodbcが必要
- VBAからPythonを実行して逆連携も可能
- 注意点を押さえれば業務でも十分使える
次のステップ:
・Python側でAccessのデータを加工してPower BIやTableauに渡す
・Accessからの自動レポート生成とPythonの連携で、週次集計を完全自動化
Accessの可能性、まだまだ広がりますね!
それではまた、なかぜんでした。
