PY関数(Pythonコードをセル内で実行)
PY関数は、PythonコードをExcelのセル内で実行できる関数です。
「Python in Excel」と呼ばれたりしています。
PY関数は、セキュリティで保護されたMicrosoft CloudランタイムでPythonコードを実行し、結果をPythonオブジェクトまたはExcel値として返します。
PY関数の構文
引数 | 説明 |
python_code | 必須 セキュリティで保護された Microsoft Cloud ランタイムで実行する Python コード。 静的テキストである必要があります。 |
return_type | 必須 目的の戻り値の型を指定します。 0 は Excel 値を示します。 1 は Python オブジェクトを示します。 |
PY関数は他のExcel関数では使用できません。
PY関数はFORMULATEXT関数によって表示できます。
(方法があるかもしれませんが、現時点で筆者には分かりません)
関数を入れ終わった後で、

・Python オブジェクト
・Excel の値
これらを選択できます。
Python オブジェクト → return_type=1
Excel の値 → return_type=0
Excel 参照
xl()関数では、以下の参照がサポートされています。
・範囲
・名前
・テーブル
・接続のPower Query
xl() 関数では、省略可能な headers 引数がサポートされています。
headers 引数は、最初の行にヘッダーがあるかどうかを指定します。
PY関数の使い方


数式バーは適当な高さに調節するようにしてください。


Ctrl+Enter
でコミット(確定)させます。
Enterだけでは、数式内で数式が改行されるだけです。

この間に、クラウドに送られて実行されます。
結構時間がかかるのがわかると思います。
従って、あまりむやみに使うものではないという事を理解してほしいと思います。
クラウドから値が返されるとセルに表示されます。



数式バーの左のひし形アイコンをクリックすると、

「Excel の値」を選択すると、

「ひし形アイコン」はオブジェクトを表しているという事を覚えておけば良いでしょう。

B列にはFORMULATEXT関数を入れてあります。
=PY(python_code,return_type)
このreturn_typeがこれで確認できます。
これ以降の説明の数式では、
=PY("Pythonコード",0)
Pythonコード
この2つの形式を適宜使い分けていますので、セルに入れて確かめる場合はPythonコードの部分だけを入れてください。
PY関数のエラー
「#PYTHON!」のエラー表示となります。

「Excel Labs」アドイン
「Python Editor」は現在、実験的な機能を集めたアドイン「Excel Labs」の一部として提供されています。
「Excel Labs」はExcelへの追加を検討している新機能をテストするための「Excel」用「Office アドイン」です。
インストール




これを「追加」します。



使い方
「Python editor」の「Open」を押すことで入力画面になります。


このA1は現在の選択セルになります。


これでA1セルにPY関数が入ります。
Python サンプルを試す
Microsoft Search(Alt+Q)


pandas で説明する
散布図を作成する
相関マトリックスを作成する
ペア プロットを作成する
線形回帰を生成する
この下では、最初の2つだけ例示します。
pandas で説明

G4=PY("sample_df.describe()",0)
※Pythonコード部分だけを抜き出す場合は、""を"に置き換えてください。
G1ではpandasから返されたPythonオブジェクトをセルに出力しています。
そのPythonオブジェクトの名前が「sample_df」です。
このPythonオブジェクトの参照は、セル参照でも構いません。
G4セルはG1セルの参照で数式を書くこともできますので、以下でも同じです。
ただし、従来の数式でも同様ですが、
同じ数式が何度も使われるのであれば、その部分を別のセルで計算しておいた方がより効率的です。



pandasの公式ページ
各列ごとに件数、最大値、最小値、平均値、標準偏差等々の要約統計量を取得できる。
データの概要を把握するのに便利なメソッドになります。
詳細は以下を参照してください。
pandas.DataFrame.describe
散布図を作成する

G2セルの数式
plt.scatter(xl("IrisDataSet7[sepal_length]"), xl("IrisDataSet7[sepal_width]"))
plt.xlabel('sepal_length')
plt.ylabel('sepal_width')
plt.title('Sepal length and width analysis')
import
第19回.import文(パッケージ・モジュールのインポート)|Python入門
実はこの下のセクションで説明していますが、
import matplotlib.pyplot as plt
これは、既定で使用できます。
従って、先のコードはimportの行を消しても正しく動作します。
Matplotlib: Visualization with Python
膨大な量があります。
使いたいと思ったときに他で調べて、詳しい公式ドキュメントを見る必要が出て来たら読んでみると良いと思います。
Pythonの文法
ただし、Excelではライブラリを使うだけで、Python自体の記述をすることは少ないと思われます。
したがって、ExcelでPY関数を使う目的でのPython学習は効率が悪いので、この点は承知おきください。
Python入門
PY関数で使えるライブラリ
Excel ライブラリのコア Python
Matplotlib: import matplotlib.pyplot as plt
NumPy:import numpy as np
pandas:import pandas as pd
seaborn:import seaborn as sns
statsmodels:import statsmodels as sm
推奨ライブラリの一覧
ライブラリ | 説明 |
Astropy | 天文学用の Python ライブラリ。 ライセンス: BSD-3-Clause。 |
beautifulsoup4 | 画面スクレイピング用に設計された Python ライブラリ。 ライセンス: MIT。 |
imbalanced-learn | 再サンプリング手法を提供することで分類の問題に対処するのに役立ちます。 scikit-learn に依存しています。 ライセンス: MIT。 |
IPython | 対話型コンピューティング用のライブラリ。 ライセンス: BSD-3-Clause。 |
Gensim | トピック モデリングと自然言語処理ライブラリ。 ライセンス: LGPL-2.1。 |
Matplotlib | Python でパブリケーション品質のグラフと図形を作成します。 ライセンス: PSF。 |
NetworkX | 複雑なネットワークを作成および操作するための Python パッケージ。 ライセンス: BSD-3-Clause。 |
NumPy | 数値、文字列、レコード、およびオブジェクトの配列処理を提供します。 ライセンス: BSD-3-Clause。 |
pandas | データ構造とデータ分析ツールを提供します。 ライセンス: BSD-3-Clause。 |
Pillow | さまざまなイメージ ファイル形式を開き、操作し、保存するためのサポートを追加します。 ライセンス: PIL。 |
PyTables | Python、HDF5ライブラリ、NumPyライブラリをまとめ、大量のデータを処理します。 ライセンス: BSD-3-Clause。 |
PyTorch | GPU と CPU を使用したディープ ラーニング用に最適化されたテンソル ライブラリ。 ライセンス: BSD-3-Clause。 |
PyWavelets | ウェーブレットはライブラリを変換します。 ライセンス: MIT。 |
scikit-learn | 機械学習とデータ マイニング用の Python モジュールのセット。 ライセンス: BSD-3-Clause。 |
SciPy | Python 用の科学ライブラリ。 ライセンス: BSD-3-Clause。 |
seaborn | 統計データ視覚化ライブラリ。 ライセンス: BSD-3-Clause。 |
snowballstemmer | Python 用のアルゴリズム ライブラリ コレクション。 ライセンス: BSD-2-Clause。 |
statsmodels | SciPyライブラリで使用するための統計計算とモデル。 ライセンス: BSD-3-Clause。 |
SymPy | シンボリック数学用の Python ライブラリ。 ライセンス: BSD-3-Clause。 |
tabulate | テーブルを作成および書式設定するためのライブラリ。 ライセンス: MIT。 |
もともとPythonを使っていた人にはとても便利だと思います。
逆に言えば、Pythonを使ったことのない人が、これらのライブラリから目的のライブラリを探して使うのは、かなり困難かもしれません。
Microsoft Support PY関数
Microsoft Support Excel での Python の概要
同じテーマ「エクセル入門」の記事
直積(クロス結合、交差結合)とピボット解除
複数の文字列を検索して置換するSUBSTITUTE
LAMBDA以降の新関数の問題集
LAMBDA以降の新関数の問題と解説(ヘルパー関数編)
LAMBDA以降の新関数の問題と解説(配列操作関数編)
PY関数(Pythonコードをセル内で実行)
GROUPBY関数(縦軸でグループ化して集計)
PIVOTBY関数(縦軸と横軸でグループ化して集計)
イータ縮小ラムダ(eta reduced lambda)
正規表現関数(REGEXTEST,REGEXREPLACE,REGEXEXTRACT)
TRIMRANGE関数(セル範囲をトリム:端の空白セルを除外)
新着記事NEW ・・・新着記事一覧を見る
TRIMRANGE関数(セル範囲をトリム:端の空白セルを除外)|エクセル入門(2024-08-30)
正規表現関数(REGEXTEST,REGEXREPLACE,REGEXEXTRACT)|エクセル入門(2024-07-02)
エクセルが起動しない、Excelが立ち上がらない|エクセル雑感(2024-04-11)
ブール型(Boolean)のis変数・フラグについて|VBA技術解説(2024-04-05)
テキストの内容によって図形を削除する|VBA技術解説(2024-04-02)
ExcelマクロVBA入門目次|エクセルの神髄(2024-03-20)
VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.RangeとCellsの使い方|VBA入門
5.繰り返し処理(For Next)|VBA入門
6.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
7.メッセージボックス(MsgBox関数)|VBA入門
8.セルのクリア(Clear,ClearContents)|VBA入門
9.条件分岐(Select Case)|VBA入門
10.ブック・シートの選択(Select,Activate)|VBA入門
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。