エクセル入門
PY関数(Pythonコードをセル内で実行)

Excelの初心者向け入門解説
公開日:2023-11-17 最終更新日:2023-11-22

PY関数(Pythonコードをセル内で実行)


PY関数は、PythonコードをExcelのセル内で実行できる関数です。
「Python in Excel」と呼ばれたりしています。


実際の計算は Microsoft クラウドで実行され結果がワークシートに返されます。

セルに「=PY」と入力し、表示されたオートコンプリートメニューからPY関数を選択すると、セル編集エクスペリエンスがPythonエディターに変換されます。
PY関数は、セキュリティで保護されたMicrosoft CloudランタイムでPythonコードを実行し、結果をPythonオブジェクトまたはExcel値として返します。

PY関数の構文

=PY(python_code,return_type)

引数 説明
python_code 必須
セキュリティで保護された Microsoft Cloud ランタイムで実行する Python コード。
静的テキストである必要があります。
return_type 必須
目的の戻り値の型を指定します。
0 は Excel 値を示します。
1 は Python オブジェクトを示します。

PY関数は他のExcel関数では使用できません。
PY関数はFORMULATEXT関数によって表示できます。

return_type
セルにPY関数を手動入力していく時点では指定することが出来ないようです。
(方法があるかもしれませんが、現時点で筆者には分かりません)
関数を入れ終わった後で、

エクセル Excel PY関数 Python in Excel

この ひし形のアイコンをクリックして、
・Python オブジェクト
・Excel の値
これらを選択できます。
Python オブジェクト → return_type=1
Excel の値 → return_type=0

Excel 参照

Pythonコードでは、xl()関数(カスタム Python 関数) を使用してExcelの値を参照します。
xl()関数では、以下の参照がサポートされています。
・範囲
・名前
・テーブル
・接続のPower Query
xl() 関数では、省略可能な headers 引数がサポートされています。
headers 引数は、最初の行にヘッダーがあるかどうかを指定します。


PY関数の使い方

「=py」と入力します。

エクセル Excel PY関数 Python in Excel

青字反転「PY」をダブルクリック、または「Tab」キーで、

エクセル Excel PY関数 Python in Excel

Pythonコードは長くなりますので適宜改行を入れることが多くなります。
数式バーは適当な高さに調節するようにしてください。

エクセル Excel PY関数 Python in Excel
よりPythonコードを入力しやすくするツールとして「Python Editor」というアドインがあります。
このアドインについては次のセクションで説明します。

数式バーでPythonコードを入力していきます。

エクセル Excel PY関数 Python in Excel

Pythonコードを入れ終わったら、
Ctrl+Enter
でコミット(確定)させます。
Enterだけでは、数式内で数式が改行されるだけです。

エクセル Excel PY関数 Python in Excel

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

エクセル Excel PY関数 Python in Excel

インジケーターをクリックすると、

エクセル Excel PY関数 Python in Excel

さらに、セル内のひし形アイコンをクリックしても、

エクセル Excel PY関数 Python in Excel

ただし、これらを使う事はあまりないと思いうので説明は省略します。
数式バーの左のひし形アイコンをクリックすると、

エクセル Excel PY関数 Python in Excel

現在は「Python オブジェクト」がセルに表示されていることなります。
「Excel の値」を選択すると、

エクセル Excel PY関数 Python in Excel

セル内の表示からひし形アイコンが消えました。
「ひし形アイコン」はオブジェクトを表しているという事を覚えておけば良いでしょう。

A1は「Python オブジェクト」、A2は「Excel の値」、それぞれの数式を確認すると、

エクセル Excel PY関数 Python in Excel
B列にはFORMULATEXT関数を入れてあります。

最初に説明したPY関数の構文
=PY(python_code,return_type)
このreturn_typeがこれで確認できます。
これ以降の説明の数式では、
=PY("Pythonコード",0)
Pythonコード
この2つの形式を適宜使い分けていますので、セルに入れて確かめる場合はPythonコードの部分だけを入れてください。

PY関数のエラー

Pythonコードがエラーの場合は、
「#PYTHON!」のエラー表示となります。

エクセル Excel PY関数 Python in Excel


「Excel Labs」アドイン

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

インストール

「ホーム」タブの一番右に「アドイン」アイコンがあります。

エクセル Excel PY関数 Python in Excel

エクセル Excel PY関数 Python in Excel

いくつかリストにでてきますが、ここにないので「+アドインを取得」

エクセル Excel PY関数 Python in Excel

「Excel Labs」で検索します。

エクセル Excel PY関数 Python in Excel

「Excel Labs, a Microsoft Garage project」
これを「追加」します。

エクセル Excel PY関数 Python in Excel

リボンに「Excel Labs」のアイコンが追加されます。

エクセル Excel PY関数 Python in Excel

下にスクロールすると、「Python editor」があります。

エクセル Excel PY関数 Python in Excel


使い方

使う場合の手順は様々ですが、
「Python editor」の「Open」を押すことで入力画面になります。

エクセル Excel PY関数 Python in Excel

エクセル Excel PY関数 Python in Excel

「Add Python cell in A1」
このA1は現在の選択セルになります。

エクセル Excel PY関数 Python in Excel

Pythonコードを入れていきます。

エクセル Excel PY関数 Python in Excel

「Ctrl+Enter」または上記アイコンをクリックします。
これでA1セルにPY関数が入ります。


Python サンプルを試す

Pythonのサンプルがありますので、それを使って説明します。
Microsoft Search(Alt+Q)

エクセル Excel PY関数 Python in Excel

「Python サンプルを試す」

エクセル Excel PY関数 Python in Excel

「サンプルの挿入」で、サンプルデータとPY関数が一式挿入されます。

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


pandas で説明

「pandas で説明」の「サンプルの挿入」をします。

エクセル Excel PY関数 Python in Excel

G1=PY("sample_df = xl(""IrisDataSet2[#すべて]"", headers=True)",1)
G4=PY("sample_df.describe()",0)
※Pythonコード部分だけを抜き出す場合は、""を"に置き換えてください。

IrisDataSet2 これが入力データのテーブル名です。
G1ではpandasから返されたPythonオブジェクトをセルに出力しています。
そのPythonオブジェクトの名前が「sample_df」です。
このPythonオブジェクトの参照は、セル参照でも構いません。
G4セルはG1セルの参照で数式を書くこともできますので、以下でも同じです。

xl("G2").describe()

そもそもがG1セルで一旦Pythonオブジェクトを経由する必要もありません。

xl("IrisDataSet2[#すべて]", headers=True).describe()

このように直接記述できます。
ただし、従来の数式でも同様ですが、
同じ数式が何度も使われるのであれば、その部分を別のセルで計算しておいた方がより効率的です。

loc、iloc、これらで特定の要素のみ抽出することが出来ます。

sample_df.describe().loc['max']
エクセル Excel PY関数 Python in Excel

sample_df.describe().loc['max'][2]
エクセル Excel PY関数 Python in Excel

sample_df.describe().iloc[7,2]
エクセル Excel PY関数 Python in Excel

pandasの公式ページ

pandas公式ドキュメント
膨大な量があります。
使いたいと思ったときに他で調べて、詳しい公式ドキュメントを見る必要が出て来たら読んでみると良いと思います。

DataFrame
DataFrameはPandasの2次元のデータ構造です。
詳細は以下を参照してください。
pandas.DataFrame

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

loc、iloc
詳細は以下を参照してください。
pandas.DataFrame.loc
pandas.DataFrame.iloc


散布図を作成する

「散布図を作成する」の「サンプルの挿入」します。

エクセル Excel PY関数 Python in Excel

G2セルの数式

import matplotlib.pyplot as plt
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入門
・Pythonの用語 ・import文の構文 ・標準ライブラリのインポート ・自作モジュールのインポート

実はこの下のセクションで説明していますが、
import matplotlib.pyplot as plt
これは、既定で使用できます。
従って、先のコードはimportの行を消しても正しく動作します。

以下は公式ドキュメントのページです。
Matplotlib: Visualization with Python
膨大な量があります。
使いたいと思ったときに他で調べて、詳しい公式ドキュメントを見る必要が出て来たら読んでみると良いと思います。


Pythonの文法

Pythonの文法等については以下を参照してください。
ただし、Excelではライブラリを使うだけで、Python自体の記述をすることは少ないと思われます。
したがって、ExcelでPY関数を使う目的でのPython学習は効率が悪いので、この点は承知おきください。
Python入門
・Pythonとは ・Pythonの特徴 ・PEPとは ・Python入門の目次 ・参考書籍


PY関数で使えるライブラリ

以下にMicrosoftの公式ページがあります。
Excel のオープンソース ライブラリと Python

Excel ライブラリのコア Python

次のオープン ソース ライブラリは、既定で Excel in 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。

上記以外にも200以上のライブラリが使えるようです。
もともとPythonを使っていた人にはとても便利だと思います。
逆に言えば、Pythonを使ったことのない人が、これらのライブラリから目的のライブラリを探して使うのは、かなり困難かもしれません。

Microsoft Support PY関数
Microsoft Support Excel での Python の概要





同じテーマ「エクセル入門」の記事

LAMBDA以降の新関数の使用例
縦横スピルしないXLOOKUP代替(MATCH+INDEX,FILTER,CHOOSEROWS)
直積(クロス結合、交差結合)とピボット解除
複数の文字列を検索して置換するSUBSTITUTE
LAMBDA以降の新関数の問題集
LAMBDA以降の新関数の問題と解説(ヘルパー関数編)
LAMBDA以降の新関数の問題と解説(配列操作関数編)
PY関数(Pythonコードをセル内で実行)
GROUPBY関数(縦軸でグループ化して集計)
PIVOTBY関数(縦軸と横軸でグループ化して集計)
イータ縮小ラムダ(eta reduced lambda)


新着記事NEW ・・・新着記事一覧を見る

ブール型(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)
累計を求める数式あれこれ|エクセル関数応用(2024-01-22)
複数の文字列を検索して置換するSUBSTITUTE|エクセル入門(2024-01-03)
いくつかの数式の計算中にリソース不足になりました。|エクセル雑感(2023-12-28)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.RangeとCellsの使い方|VBA入門
4.ひらがな⇔カタカナの変換|エクセル基本操作
5.繰り返し処理(For Next)|VBA入門
6.変数宣言のDimとデータ型|VBA入門
7.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
8.並べ替え(Sort)|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.Findメソッド(Find,FindNext,FindPrevious)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。


このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ