0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

VBAで"Python in Excel"を試してみた

Posted at

Python in Excelが一般公開されたのでお試ししてみた

今回の目的

Python in ExcelをVBAで扱えるのか?

結論

若干苦戦しましたが
簡単に扱えました

内容

サンプルセットが用意されているので今回はその中の"pandasで説明する"をお借りして検証

  • データフレーム作成
  • 統計情報 (Describe)

の二つが実装されているので、同様のことをVBAで実装してみる

検証コード

Sub test()
    
    Dim dRng        As Range
    Dim str_CodePy  As String
    
    Set dRng = Range("G2")
    '式: =PY("sample_df = xl(""IrisDataSet1[#すべて]"", headers=True)",1)
    str_CodePy = "=PY(""sample_df = xl(""""IrisDataSet1[#すべて]"""", headers=True)"",1)"
    dRng.Formula2Local = str_CodePy
    
    Set dRng = Range("G4")
    '式: =PY("sample_df.describe()",0)
    str_CodePy = "=PY(""sample_df.describe()"",0)"
    dRng.Formula2 = str_CodePy
    
    
End Sub

解説

選択セルにPythonコード "sample_df.describe()"を埋め込む

何か所か詰まったのでメモ

  • RangeオブジェクトにはFormula2プロパティを使用する
    Formulaプロパティではエラーになります
    Formula2プロパティは通常のFormulaと違い、スピルなどの動的配列に対応
    .describe()の結果も動的に変化するためこちらを使用する

また、テーブルを指定する際、
 ・ "[#すべて]"と記載するならFormula2Local
 ・ "[#All]"と記載するならFormula2 でも可
というところが地味に詰まりました

  • PY関数 コードの後に ",0"をつける
    単純にPY関数の仕様 (ちゃんと把握してませんでした 汗)
    第1引数:Pythonコード
    第2引数:戻り値の型 (0:Excelの値, 1:Pythonオブジェクト)

データフレームはPythonオブジェクトなので 1 を指定
describe()はセルに書き出すので 0 を指定

  • その他
    ダブルクォーテーションの数に注意
    エスケープも必要なため、イミディエイトウィンドウに書き出すなどして確認が必要

まとめ

VBAでPython in Excelを扱うには、通常の計算式と同じように扱える
Python in Excelの使い方自体がこれから模索する必要はあるが、VBAと併用できるならば幅が広がるなぁって思いました

課題

VBA実行中はPythonの結果が表示されない (#Busy!表示)
下記はいずれも意味がなかった

DoEvents
Application.Wait [Now() + "0:00:01"]
Application.Calculate

何かしら方法がないか探してみたい

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?