「ExcelでpandasのDataFrameを使えたらラクなのに」「matplotlibやseabornでサクッとグラフを描きたい」と思ったことはありませんか。これまではExcelからデータをCSVで書き出して、Jupyterで分析して、結果をまた貼り戻す、というひと手間が必要でした。
これを根本から変えてくれるのが Python in Excel(PY関数) です。Excelのセルに直接Pythonコードを書いて、シート上のデータをそのまま分析できます。pandas・numpy・matplotlib・seabornが標準で使えるので、データサイエンスの主要ツールがそのままExcelに乗ってきた感覚です。
この記事では、Python in Excelの仕組み、PY関数の構文、xl()でセル参照する方法、pandasでの集計やseabornでの可視化の実例、対応バージョン・ライセンス・セキュリティまでまとめて整理します。
Python in Excelとは?
Python in Excel(パイソン イン エクセル)は、Excelのセル上で Pythonコードを直接実行できる新機能 です。2023年にプレビュー提供が始まり、2024年に一般提供が開始されました。専用の =PY() 関数(PY関数)を使ってPythonスクリプトをセルに埋め込みます。
実行はローカルではなく Microsoftのクラウド(Azure Container Instances) で行われます。コードと参照データがクラウドに送られ、Anaconda が用意したセキュアなPython環境で実行され、結果だけがセルに返ってきます。ローカルにPythonをインストールする必要は一切ありません。
これまで Excel には Power Query や VBA という選択肢がありましたが、Python in Excel ならpandas・numpy・matplotlib・seaborn・statsmodels といった データサイエンス標準ライブラリ がそのまま使えるのが大きな強みです。
NOTE
Python in Excel は LAMBDA や VBA とは別物です。あくまで「セル内でPythonを実行する仕組み」であり、ユーザー定義関数を作るのとは異なります。コード自体はセルの数式バーではなく専用のPythonエディタから入力します。
PY関数の書き方(構文と引数)
PY関数の構文は次のとおりです。
=PY(python_code, return_type)
引数は2つです。
| 引数 | 必須 | 説明 |
|---|---|---|
| python_code | 必須 | 実行するPythonコード(静的テキストのみ。セル参照や数式不可) |
| return_type | 任意 | 0=Excel値(既定)、1=Pythonオブジェクト |
戻り値は、return_type の指定によって挙動が変わります。0 を選ぶと数値・文字列・配列などのExcelで扱える値として返り、1 を選ぶとDataFrame や Figure などのPythonオブジェクトのまま保持されます。後段の別のPY関数で xl(...) 経由で再利用したい場合は 1 を選ぶのがポイントです。
WARNING
PY関数には独特の制約があります。他のExcel関数と組み合わせて使えません。たとえば
=IF(条件, PY(...), 0)のようなネストはできません。また、引数の python_code は静的なテキストのみで、=PY(A1)のように動的に組み立てることもできません。
Pythonエディタからの入力手順
PY関数は、通常の数式バーから直接入力するのではなく 専用のPythonエディタ から入力します。
入力手順は次のとおりです。
- Pythonコードを書きたいセルを選択する
- リボンの「数式」タブから「Pythonの挿入」をクリック(またはセルに
=PY(と入力) - 数式バーが緑色のPythonエディタに切り替わる
- Pythonコードを書いて Ctrl + Enter で確定する
通常の Enter は改行扱いになるので、確定は必ず Ctrl + Enter を押す点に注意してください。確定すると Excel が「計算中…」の状態になり、クラウドで実行された結果がセルに返ってきます。
xl()関数でExcelデータをPythonに渡す
Python in Excel の真価は xl() 関数 にあります。Pythonコードの中で xl() を使うと、シート上のセルやテーブルを pandas DataFrame として取り込めます。
# A1:C100 を DataFrame として読み込む
df = xl("A1:C100", headers=True)
# テーブル名で参照する
sales = xl("売上テーブル[#All]", headers=True)
# 単一セルを取得する
target = xl("E1")
headers=True を指定すると、範囲の1行目を列名として扱ってくれます。これでExcel側で整形済みの表をそのまま pandas のDataFrame として処理できます。
xl() で渡したデータはあくまで 読み取り専用のスナップショット です。元のシートに書き戻すわけではないので、加工した結果をシートに反映したい場合は PY関数の戻り値(return_type=0)として返すか、別のセルにコピーする運用になります。
実用例1:pandasでピボット集計する
売上データから商品別の合計と平均を一気に集計してみます。次のような表が A1:D11 にあるとします。
| 日付 | 商品 | 数量 | 売上 |
|---|---|---|---|
| 2026-04-01 | A | 3 | 9000 |
| 2026-04-01 | B | 2 | 4000 |
| 2026-04-02 | A | 5 | 15000 |
| 2026-04-02 | C | 1 | 3500 |
| …(10行分) |
任意の空きセルにPython エディタで次のコードを入力します。
df = xl("A1:D11", headers=True)
result = df.groupby("商品").agg(
合計=("売上", "sum"),
平均=("売上", "mean"),
件数=("売上", "count")
).reset_index()
result
最後の行に result だけを書くのがポイントです。Python in Excel は 最後に評価された値 を戻り値として扱う仕様なので、変数名だけを置いておけば DataFrame がそのまま展開されます。
return_type を既定の0のままにしておくと、結果のDataFrame が 動的配列 としてシートに展開されます。商品列・合計列・平均列・件数列がきれいに広がるイメージです。
TIP
ピボットテーブル機能と比べると、pandas の groupby は 集計関数を細かく組み合わせられる のが強みです。中央値・分位点・カスタム集計関数まで自在に使えます。Excelの組み込みピボットでは難しい複雑な集計は、Pythonのほうが圧倒的にラクです。
実用例2:seabornでヒートマップを描く
可視化も Python in Excel の得意分野です。月別・商品別の売上ヒートマップを seaborn で描いてみます。
import seaborn as sns
import matplotlib.pyplot as plt
df = xl("A1:D365", headers=True)
df["月"] = pd.to_datetime(df["日付"]).dt.month
pivot = df.pivot_table(index="商品", columns="月", values="売上", aggfunc="sum")
fig, ax = plt.subplots(figsize=(8, 4))
sns.heatmap(pivot, annot=True, fmt=".0f", cmap="YlOrRd", ax=ax)
ax.set_title("商品別月次売上ヒートマップ")
fig
最後の fig がポイントです。matplotlib の Figure オブジェクトを最後に置くと、Python in Excel が 画像としてセル内にレンダリング してくれます。セルの上で右クリック→「セルに表示」を選べば、画像をセルサイズに合わせて表示できます。
NOTE
Python in Excel ではよく使うライブラリが
pd、np、plt、snsの別名で 既にインポート済み です。import pandas as pdなどを毎回書く必要はありません。ただし明示的に書いてもエラーにはならないので、コードの可読性のために書いても問題ありません。
実用例3:複数セルを連携させる
return_type=1(Pythonオブジェクト)を使うと、PY関数同士を連携させられます。たとえば B1 セルでデータを準備し、B2 セルで集計し、B3 セルでグラフ化、という流れが組めます。
# B1セル(return_type=1 を指定)
df = xl("A1:D365", headers=True)
df["利益"] = df["売上"] * 0.3
df
# B2セル(B1 を参照)
src = xl("B1")
src.groupby("商品")["利益"].sum().reset_index()
B1のセルが「DataFrameを保持する変数」として機能し、B2 から xl("B1") で受け取れます。前処理→集計→可視化を セル単位で分割 できるので、ノートブック感覚で分析を組み立てられます。
対応バージョンとライセンス要件
Python in Excel は、すべての Excel で使えるわけではありません。下表が対応状況の目安です。
| プラットフォーム | 対応バージョン |
|---|---|
| Windows | Current Channel Version 2408(Build 17928.20114)以降 |
| Mac | Enterprise / Business Version 16.96 以降 |
| Web | 対応(Microsoft 365 サブスクリプション必須) |
| iPad / iPhone | 非対応 |
| Android | 非対応 |
ライセンスは 有料の Microsoft 365 サブスクリプション が前提です。家庭向け(Personal / Family)でも一部機能が使えますが、ビジネス利用や高度な機能は Business / Enterprise プランが推奨されます。
WARNING
Office 永続版(Office 2021 / 2024 など、買い切り型)では Python in Excel は使えません。Microsoft 365 サブスクリプション専用の機能です。社内環境で導入を検討する際は、ライセンス契約形態を必ず確認しましょう。
デフォルトで使えるライブラリ一覧
Python in Excel には Anaconda Distribution が用意した Python 環境が組み込まれており、データサイエンスでよく使うライブラリは 追加インストール不要 で利用できます。
既定でインポート済みのライブラリ
| ライブラリ | 別名 | 主な用途 |
|---|---|---|
| pandas | pd | DataFrame でのデータ加工 |
| numpy | np | 数値計算・配列処理 |
| matplotlib.pyplot | plt | グラフ描画 |
| seaborn | sns | 統計的な可視化 |
| statsmodels | (as smで明示) | 回帰分析・時系列分析 |
import すれば使える主要ライブラリ
import 文を書けば追加で利用できる主要ライブラリの例です。
| ライブラリ | 用途 |
|---|---|
| scikit-learn | 機械学習(分類・回帰・クラスタリング) |
| SciPy | 科学技術計算(最適化・統計検定) |
| beautifulsoup4 | HTML/XMLパース |
| Pillow | 画像処理 |
| openpyxl | Excelファイル操作 |
合計で 30以上 のライブラリが利用可能です。pip install で任意のライブラリを追加することはできない(クラウド側の固定環境なので)ので、リストにないライブラリが必要な場合は別の手段(ローカルPython)を検討する必要があります。
Copilot との連携
Python in Excel は Microsoft Copilot との連携 が前提に設計されています。自然言語で「商品別の売上合計を出して」と入力すると、Copilot が PY関数のコードを自動生成してくれます。Pythonの文法を覚えていなくても、やりたいことを日本語で書くだけで分析が始められます。
2026年2月に Excel の App Skills(Copilotの機能群)の一部が廃止され、後継として Agent Mode が提供されています。Agent Mode では、複数ステップの分析タスクを Copilot が自律的に実行し、その過程で Python in Excel を使って中間結果を確認しながら進めてくれます。
セキュリティの注意点
Python in Excel はクラウド実行型のため、セキュリティ面の配慮が必要です。
- データはMicrosoftのクラウドに送信される: xl() で参照したセル範囲のデータは、計算のために Azure 上のコンテナに送られます
- データは保存されない: 計算実行のために一時的に処理されるだけで、Microsoft 側に永続保存されることはありません
- コンテナは隔離される: 実行環境はリクエストごとに分離され、他のユーザーから見えることはありません
- ネットワークアクセス制限: 実行コンテナは外部インターネットにアクセスできません(外部APIコールやスクレイピングは不可)
機密性の高いデータ(個人情報・財務データ・人事情報など)を扱う場合は、社内のIT・情報セキュリティ部門のガイドラインを必ず確認しましょう。一部の企業ではデータガバナンスの観点から、Python in Excel の利用を組織ポリシーで制限しているケースもあります。
TIP
動作確認や学習目的なら、ダミーデータや公開データを使うのが安全です。実データで初めて使う前に、扱うデータの分類(公開・社外秘・極秘など)と、Python in Excel の利用可否について上長や情報システム部門に確認しておくとトラブルを避けられます。
よくあるエラーと対処法
| エラー | 原因 | 対処法 |
|---|---|---|
#PYTHON! | Pythonコードに構文エラー・実行時エラー | 「診断」ペインでエラー詳細を確認しコード修正 |
#BUSY! | クラウド実行中(一時的) | 数秒〜数十秒待つ。改善しなければ Ctrl + Alt + F9 で再計算 |
#CONNECT! | クラウドへの接続失敗 | ネットワーク・サインイン状況・サブスクリプション契約を確認 |
#BLOCKED! | 組織ポリシーで Python in Excel が無効化 | IT管理者に利用可否を相談 |
#NAME? | PY関数自体が利用できないバージョン | Excelのバージョンを Build 17928.20114 以降に更新 |
特に #BUSY! は、クラウド実行のレイテンシが原因で発生する正常な状態です。慌てずに少し待てば解消することが多いので、まずは様子を見ましょう。
まとめ
Python in Excel(PY関数)は、Excel のシート上で pandas・matplotlib・seaborn といったデータサイエンス標準ライブラリを直接使える新機能です。要点を整理すると次のとおりです。
- 構文:
=PY(python_code, return_type)、入力は専用のPythonエディタから Ctrl + Enter で確定 - xl() でシートのセル・テーブルを DataFrame として読み込む
- return_type=0 はExcel値、return_type=1 は Python オブジェクト(後続の PY関数 で再利用)
- 対応: Microsoft 365 サブスクリプション必須、Windows / Mac / Web に対応、モバイルは非対応
- 既定ライブラリ: pandas、numpy、matplotlib.pyplot、seaborn、statsmodels が自動インポート済み
- 追加可: scikit-learn、SciPy、beautifulsoup4 など30以上が import で利用可能
- セキュリティ: クラウド実行のためデータ取り扱いには社内ガイドラインの確認を
VBA や Power Query では難しかった統計解析や機械学習も、Python in Excel なら数行で実現できます。Copilot との組み合わせで自然言語からコード生成も可能なので、Pythonに慣れていない方でも気軽に試せる時代になりました。まずはダミーデータから、pandas のgroupby や seaborn のヒートマップなど、定番の処理を動かしてみるところから始めるのがおすすめです。
