VBAでPython実行しCSV取込

2026/5/21 22:44

Claude Opus 4.7

VSCODE 拡張プラグインXVBAで、開発実装中です。環境はwindows11です。 要件は、Python にて、Akamai API を叩いた結果をCSVに出力。そのCSV をExcel worksheet に取り込むというものです。 セットアップを軽くする為、開発地はVSCODE を用いていますが、実行時はExcel だけで完結出来ないか模索しています。 実行環境にはPython を導入済みであること。を前提に、Excel の設定シートにVBA マクロを埋め込んで置き、システム環境変数もしくはユーザー環境変数を検索し、Python の導入パスを特定のセルに格納します。 そのパスにあるPython を用いて、ワークブックに埋め込んだPythonTest.pyを実行したいと考える。PythonTest.pyは、実行時にはワークブックのパスと同じディレクトリに格納されて、それを呼び出す形にしたい

ExcelからPython実行する仕組みの実装

ご要件を整理すると以下のフローになります。

  1. Excel起動時/ボタン押下時に環境変数からpython.exeのパスを検索
  2. 特定セルにパスを格納
  3. ワークブック同一ディレクトリにPythonTest.pyを展開(必要なら埋め込みから書き出し)
  4. そのPythonでスクリプトを実行し、CSV出力
  5. 出力CSVをワークシートに取り込み

以下、実装例を示します。

1. シート構成(例: Configシート)

セル内容
B2Python実行パス(マクロが自動格納)
B3スクリプト名(例: PythonTest.py
B4出力CSVパス(例: output.csv
B5取り込み先シート名(例: Data

2. VBAコード(標準モジュール)

Untitled
vba

3. スクリプト埋め込みの考え方

VBAから直接.pyファイルを書き出す方式が最もシンプルです。方法は2通り:

方法A: 専用シート(ScriptSource)にコードを1行ずつ格納
上記DeployEmbeddedScriptが対応。シートはxlSheetVeryHiddenにしておけばユーザーから不可視にできます。

方法B: VBAの定数文字列に丸ごと保持
コードが短い場合のみ向き。長文だとVBAの行長制限で煩雑になります。

Akamaiクライアントのように外部依存(requests, edgegrid-python等)が必要なら、方法Aでrequirements.txtも同梱・展開し、初回起動時にpip installさせる仕組みを足すと良いです。

4. PythonTest.py 側の最低構造

PythonTest
py

5. 注意点・推奨事項

  • 環境変数の取得: VBAのEnviron$("PATH")はExcelプロセス起動時にマージされた値(システム+ユーザー)を返すため、別々に取得する必要はありません。ただしマクロ実行中にユーザーが環境変数を変更しても反映されない点に注意。
  • Microsoft Storeのpython.exeスタブ: %LOCALAPPDATA%\Microsoft\WindowsApps\python.exeはインストール誘導用のダミーです。これを掴まないよう、検出後に--versionで実行確認するか、WindowsAppsを除外するロジックを追加すると安全です。
  • CSV取り込み: 上記は単純なカンマ分割です。Akamai応答に改行・カンマ・引用符を含む値が出る場合はQueryTables.AddまたはWorkbooks.OpenTextを使うか、Python側でTSVやJSONを返してパースする方が堅牢です。
  • 文字コード: PythonがUTF-8で書き出すため、ExcelのVBAでOpen ... For Inputすると日本語が化けます。日本語を扱うならADODB.Streamを使ったUTF-8読み込みに置き換えてください。

UTF-8対応版のCSV読み込みが必要であれば、その部分を追加で提示します。

追加要件ですが、Python -m venv venv を実行させたうえで、必要なモジュールを導入するソースも上記にマージして下さい
当社はGMOインターネットグループ(東証プライム上場9449)のメンバーです。
グループサービス