LoginSignup
4
6

More than 3 years have passed since last update.

この記事を読んで出来るようになること

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に任意の値を入れると計算をして、答えに出力します。
スクリーンショット (3).png

ちなみに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)

実行するとこんな感じです。
スクリーンショット (5).png

最後に

今回はVBAでPythonを起動しましたが、実際はコマンドプロンプトを使って実行しているので
応用すればもっといろんなことができる気がします。
また、学びがあれば更新していきます。

4
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
6