説明
PythonとExcelVBAの連携方法です。
Pythonが引数を渡したらExcelVBA側で100を加算してPythonに返す処理をご紹介します。
フォルダ構成
C:\temp\python検証\sample001\
main.py
calc.xlsm
事前準備
コマンドプロンプトでwin32com ライブラリをインストール
pip install pywin32
使用方法
main.py
import win32com.client
from time import sleep
if __name__ == '__main__':
#Excelアプリケーションを起動する
excel = win32com.client.Dispatch('Excel.Application')
#Excelウインドウを非表示にする
excel.Visible = False
# マクロのフルパスを設定
path = r"C:/temp/python検証/sample001/calc.xlsm"
#読み込みマクロ有効ブックを開く
excel.Workbooks.Open(path)
#マクロを実行する,引数にリストを渡す
li = [10, 20, 30]
result = excel.Application.Run('Module1.calc', li)
print(result)
#ファイルを保存してブックを閉じる
excel.Workbooks(1).Close(SaveChanges=1)
#Excelを閉じる
sleep(1)
excel.Application.Quit()
msg = input('何かキーを入力してください:')
print('bye!')
calc.xlsm
標準モジュール名は任意ですが、今回はModule1に設定。
ここにコードを書いていく。
Option Explicit
Function calc(li As Variant) As Variant
Dim i As Integer: i = 0
Dim num As Variant
'100を加算していく
For Each num In li
li(i) = num + 100
i = i + 1
Next
'リストを返す
calc = li
End Function