この記事を読んで出来るようになること
1. Excel VBAでコマンドプロンプトを起動できるようになる
2. Excel VBAからPythonを実行できるようになる
Excel VBAでコマンドプロンプトを起動する
下記のコードでコマンドプロンプトを起動し、
Pythonを実行できます。
Dim suji1 As String
Dim suji2 As String
Dim WSH
Dim wExec
Dim cmd_str As String
suji1 = Range("D4").Value ''セルから数字を取得
suji2 = Range("D5").Value
Set WSH = CreateObject("WScript.Shell")
py_file = ThisWorkbook.Path & "\Python.py"
cmd_str = "python " & py_file & " " & suji1 & " " & suji2
cmd_str = Replace(cmd_str, "\", "/")
Set wExec = WSH.Exec("%ComSpec% /c " & cmd_str)
Do While wExec.Status = 0
DoEvents
Loop
Range("D6").Value = Val(wExec.StdOut.ReadAll) ''Pythonから結果を受け取る
Set wExec = Nothing
Set WSH = Nothing
#解説
''オブジェクトの生成
Set WSH = CreateObject("WScript.Shell")
''実行するPythonのファイルパス
py_file = ThisWorkbook.Path & "\Python.py"
''コマンド作成
cmd_str = "python " & py_file & " " & suji1 & " " & suji2
cmd_str = Replace(cmd_str, "\", "/")
''コマンド実行
Set wExec = WSH.Exec("%ComSpec% /c " & cmd_str)
これだけで簡単にコマンドプロンプトを起動し、
Pythonを起動できます。
''コマンド作成
cmd_str = "python " & py_file & " " & suji1 & " " & suji2
suji1とsuji2は引数です。
なのでセルなどから値を取得して渡すことができます。
#実際に動かす
数字1、数字2に任意の値を入れると計算をして、答えに出力します。
ちなみにPythonはこういうコードです。
import sys
def sum(suji1, suji2):
return suji1 + suji2
if __name__ == "__main__":
argv = sys.argv
suji1 = str(argv[1])
suji2 = str(argv[2])
total = sum(suji1, suji2)
print(total)
#最後に
今回はVBAでPythonを起動しましたが、実際はコマンドプロンプトを使って実行しているので
応用すればもっといろんなことができる気がします。
また、学びがあれば更新していきます。