見出し画像

【Python練習-008】Excelのアクティブセルの内容をPythonに渡そう

Excelのアクティブセルの内容をコマンドライン引数としてPythonプログラムに渡すためのVBAスクリプトを作っておけば、とても便利だろうと思いやってみました。以下のステップで実現できます。

またchatGPTに手伝ってもらって作りました。


Pythonスクリプトの準備

まず、コマンドライン引数を受け取るPythonスクリプトを用意します。例えば、引数を印刷する簡単なスクリプトは以下のようになります。

# ファイル名: script.py
import sys

# コマンドライン引数を表示
if len(sys.argv) > 1:
    print(sys.argv[1])
else:
    print("No arguments provided.")

Excel側の準備

Excelマクロ有効ブック (*.xlsm)を作って、開発タブの挿入からボタンを挿入して適当なラベルを付けておきます。
(ボタンは作らなくてもマクロは実行できます)

次に、Excel VBAで以下のコードを使用して、アクティブセルの内容をPythonスクリプトに渡すスクリプトを書きます。

Sub RunPythonScript()
    Dim cmd As String
    Dim pythonPath As String
    Dim scriptPath As String
    Dim cellValue As String
    
    ' Pythonの実行パス(自分の環境に合わせて変更してください)
    pythonPath = "C:\Python39\python.exe"
    
    ' Pythonスクリプトのパス
    scriptPath = "C:\path\to\your\script.py"
    
    ' アクティブセルの値を取得
    cellValue = ActiveCell.Value
    
    ' コマンドプロンプトが閉じないようにcmdを使って実行( /K オプション) 
    cmd = "cmd /k """ & pythonPath & """ """ & scriptPath & """ " & cellValue
    
    ' コマンドラインを実行
    Shell cmd, vbNormalFocus
End Sub

Pythonの実行パスとPythonスクリプトのパスは書き換えてください。

ボタン部品にマクロを登録

ボタンを右クリックして、「マクロを登録」を選んで、先ほど作って保存したVBAスクリプトを登録します。

実行してみましょう

「テストだよ」と入力したセルをアクティブにして、「python起動」ボタンを押します。

コマンドラインが立ち上がって、「テストだよ」が表示されたら成功です。

いろいろ試してみたくなります。
これから発展してまた何か作ったら投稿いたします。


Pythonの実行パスの簡単な取得

Pythonの実行パスを簡単に調べる方法をいくつか調べました。

コマンドプロンプトやターミナルを使う方法:

  • Windowsの場合は、コマンドプロンプトを開いて python -c "import sys; print(sys.executable)" と入力して実行します。

  • macOSやLinuxの場合は、ターミナルを開いて同じコマンドを入力します。(環境がないので確かめようがないですが)

Pythonスクリプトを使用する方法:

Pythonスクリプト内で、次のようなコードを書いて実行することもできます。

import sys
print(sys.executable)

どちらの方法もPythonのインストールされているパスを教えてくれるので、使いやすい方を選んでみてくださいね!

では🌸

この記事が気に入ったらサポートをしてみませんか?