Help us understand the problem. What is going on with this article?

VBAでPythonを動かす

More than 1 year has 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を起動しましたが、実際はコマンドプロンプトを使って実行しているので
応用すればもっといろんなことができる気がします。
また、学びがあれば更新していきます。

O_LUPAN
沖縄→名古屋 AWS C Java Python Kotlin
yowayowa-engineer
弱々エンジニア会とは駆け出しエンジニアやベテランエンジニアまで、弱々から強々まで幅広く集まるコミュニティのエンジニア集団です!!メンバー募集してますので気になる方は、URLよりSlackに参加ください!条件等は特にありません!
https://join.slack.com/t/yowayowa-engineer/shared_invite/zt-do4vhhzm-Yj~6DIMIfvqMvHm0hcXGrA
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away