---
title: "Python in Excelの使い方｜有効化・xl()・ライブラリと制限を公式仕様で整理"
url: "https://www.issoh.co.jp/tech/details/9157/"
published: 2025-10-03
updated: 2026-09-27
categories: ["Python"]
publisher: "株式会社一創"
---

# Python in Excelの使い方｜有効化・xl()・ライブラリと制限を公式仕様で整理

Python in Excelは、Excelのセルに直接Pythonコードを書き、計算をMicrosoftのクラウドで実行して結果をシートに返す機能です。ローカルにPythonをインストールする必要はありません。一方で「自分の契約プランで使えるのか」「pipで好きなライブラリを足せるのか」「会社のデータをクラウドに送って大丈夫か」でつまずく人が多い機能でもあります。ここでは公式ドキュメントの記述をもとに、有効化から書き方、制限、そして使うべきでない場面までを整理します。

## まとめ

- **有効化**：\[数式\]タブの\[Pythonの挿入\]、またはセルに `=PY` と入力。Microsoft 365のBusiness／Enterpriseプランでは一般提供済みで、Insider登録は不要です。Personal／Familyは現在もプレビュー扱いです。
- **書き方**：シートのデータは `xl("A1")` や `xl("売上テーブル[#All]", headers=True)` で読み込み、結果はPythonオブジェクトかExcelの値かを数式バーの出力メニューで切り替えます。セルは行優先（左から右、上から下）の順に計算されます。
- **ライブラリ**：Anacondaがキュレーションしたセットが用意済みで、`pip install` による追加はできません。既定のimport文は、Windows版のバージョン2509以降なら初期化コードの編集で変更できます。
- **セキュリティ**：コードはハイパーバイザーで分離されたコンテナ内で動き、そこからネットワークにも利用者のPCにもアクセスできません。コンテナはブック単位で、使い終わると破棄されます。
- **向き不向き**：分析・可視化には強い一方、ファイル操作やメール送信といった業務自動化はできません。そこはVBAやOffice Scriptsの領域です。

以下、有効化の条件から順に、公式仕様と実務上のつまずきどころを見ていきます。

## Python in Excelの有効化条件と手順

### プラン別の提供状況とビルド番号

2023年の登場時はOffice Insiderへの加入が必須でしたが、その前提はすでに古くなっています。現在、Microsoft 365のBusinessおよびEnterpriseプランでは一般提供（GA）に到達しており、通常のチャネル更新だけで使えます。プレビューのままなのは個人向け契約と教育機関向け契約です。

| 契約                        | Windows                                          | Mac                  | Web | 状態    |
| ------------------------- | ------------------------------------------------ | -------------------- | --- | ----- |
| Business / Enterprise     | 現在のチャネル v2408 (17928.20114) 以降                   | v16.96 (25041326) 以降 | 対応  | 一般提供  |
| Business / Enterprise（月次） | 月次エンタープライズ v2408 (17928.20216) 以降                | –                    | 対応  | 一般提供  |
| Business / Enterprise（半期） | 半期エンタープライズ v2502 (18526.20472) 以降                | –                    | 対応  | 一般提供  |
| Personal / Family         | 現在のチャネル v2405 以降                                 | Betaチャネル v16.95 以降   | 対応  | プレビュー |
| 教育機関                      | Current Channel (Preview) v2406 (17726.20016) 以降 | Insider              | –   | プレビュー |
| iPad / iPhone / Android   | 非対応                                              | 非対応                  | –   | 非対応   |

モバイル版Excelでは、Pythonを含むブックを開くことはできますが、Pythonセルは再計算するとエラーになります。またクラウドで計算する仕組み上、インターネット接続とコネクテッド エクスペリエンスの有効化が前提です。外部通信を遮断した業務端末では使えません。

### 有効化の操作と、リボンにPythonが出ないときの確認箇所

操作自体は2通りだけです。セルを選び、\[数式\]タブの**\[Pythonの挿入\]**をクリックする。あるいはセルに `=PY` と入力してオートコンプリートから選ぶ（`=PY(` まで打っても切り替わります）。Pythonモードに入ったセルには緑色のPYアイコンが表示されます。

ボタンが見当たらない場合、原因はたいてい次のどれかです。

- Excelのバージョンが上表の条件を満たしていない（\[ファイル\]→\[アカウント\]→\[Excelのバージョン情報\]で確認）
- コネクテッド エクスペリエンスが無効化されている
- ライセンスが対象外（デバイスベースライセンス、共有コンピューターライセンス、無償版や買い切り版のExcelは対象外）
- 管理者がPython関数をブロックしている（この場合セルに `#BLOCKED!` が返ります）

バージョンとライセンスを満たしていれば、あとは更新チャネルへのロールアウトを待つだけです。個人向け契約でボタンが出ない場合は、まだプレビュー段階であることを疑ってください。

## PY関数とxl()の書き方

### xl()によるシートデータの参照

PythonコードからExcelのデータを参照する唯一の入口が、専用の `xl()` 関数です。参照の書式は3つ覚えれば足ります。

```
# 単一セル
xl("A1")

# 範囲
xl("B1:C4")

# テーブル（見出し行をヘッダーとして扱う）
df = xl("売上テーブル[#All]", headers=True)
df.head()
```

`[#All]` はテーブル全体を渡す指定、`headers=True` は先頭行を列名として解釈させる指定です。範囲を渡した場合、複数セルならpandasのDataFrame、単一セルなら数値や文字列として渡ります。[Pandasとは？できること・使い方とPandas 3.0の変更点を解説](/tech/details/3123/)で扱っているDataFrameの操作は、そのままPython in Excel上でも通用します。

### 出力形式の切り替え（Pythonオブジェクト／Excelの値）

Pythonセルの出力形式は2種類あり、数式バー左の出力メニューで切り替えます。ここを理解していないと「結果がカード表示のままで次の計算に使えない」という詰まり方をします。

- **Pythonオブジェクト**：DataFrameなどをPythonの型のままセルに保持します。カードのアイコンで表示され、後続のPythonセルから `xl()` で参照して処理を続けられます。
- **Excelの値**：数値・文字列・スピルした表などExcelネイティブの値に変換します。Excel関数から参照したり、標準のグラフ機能や条件付き書式にかけたりできるのはこちらです。

途中の計算はPythonオブジェクトのまま引き回し、シートで見せる最終結果だけExcelの値に落とす。この使い分けが、セル数を無駄に増やさずに済むコツです。

### 行優先の計算順序と再計算の制御

Pythonセルは書いた順ではなく、**行優先（row-major）**で計算されます。1行目を左から右へ、次に2行目を左から右へ、という順序です。変数は複数のPythonセルをまたいで引き継がれますが、定義するセルは参照するセルより上の行、または同じ行の左側に置く必要があります。下の行で定義した変数を上の行から参照するとエラーになります。

Pythonセルは既定で自動再計算の対象になり、シートを編集するたびにクラウドへ計算が飛びます。重い処理では待ち時間が積み上がりますが、**Pythonの数式についての手動計算・部分計算モードはアドオンライセンスの特典**です（アドオン購入時は\[数式\]→\[計算方法の設定\]で切り替え、手動時は**F9**で再計算）。素のMicrosoft 365契約では自動計算のみとなるため、重い処理を書くほどアドオンの必要性が上がると考えてください。

## 使えるライブラリと、追加できない制約

Python in Excelの実行環境には、Anacondaがキュレーションしたライブラリのセットが最初から入っています。pandas、NumPy、Matplotlib、Seaborn、SciPy、statsmodels、scikit-learnといった分析の定番はここに含まれ、コード側で `import` するだけで使えます。データ整形は[Pandas](/tech/details/3123/)、可視化は[Matplotlibとは？Pythonでグラフを描く使い方を入門から実践まで解説](/tech/details/3125/)、機械学習は[Scikit-learnとは何か？基本的な概要と特徴](/tech/details/3133/)と、ローカルでの構成がそのまま持ち込めます。

逆に、**`pip install` による追加インストールはできません**。実行コンテナは外部ネットワークに出られないため、PyPIから取得する余地がそもそもありません。使いたいライブラリがキュレーション対象外なら、その処理はPython in Excelでは実現できないと判断して、ローカルのPythonやPower Automate側に寄せる必要があります。

既定で読み込まれるimport文（初期化コード）は、Windows版Excelのバージョン2509（ビルド19230.20002）以降、Mac版16.104（ビルド25110914）以降で編集できるようになりました。2025年10月にMicrosoft 365 Insider向けとして案内された機能で、組み込みエディターで構文の色分け・行番号付きのまま初期化コードを書き換え、保存するとPythonランタイムが再起動します。ワンクリックで既定へ戻すリセットも用意されています。毎回同じ前処理やフォント設定を書いている場合は、ここに寄せると各セルのコードが短くなります。

## クラウド実行のセキュリティ（社内データを扱ってよいかの判断材料）

導入審査でいちばん問われるのがここです。公式ドキュメントが明示している仕組みを、そのまま押さえておきます。

- Pythonコードは**ハイパーバイザーで分離されたコンテナ**（Azure Container Instances）内で、最小権限のアカウントとして実行されます。
- コンテナから**ネットワークにアクセスできません**。利用者のPC・デバイス・アカウントにもアクセスできません。コード内でURLを叩いて外部にデータを送る、といった動作は成立しません。
- コンテナは**ブック単位**で割り当てられ、ブックを閉じるかタイムアウトすると**破棄**されます。セッションをまたいでデータは残らず、Microsoftクラウドにデータは永続化されません。
- Pythonコードにデータを渡せる経路は `xl()` と**Power Query接続**の2つだけです。`pandas.read_csv` や `pandas.read_excel` のような外部データ読み込みは非対応です。
- データがAnacondaや第三者に共有されることはありません。保護ビューで開いたブックでは、Pythonの数式は実行されません。
- GDPRおよびEUデータ境界に準拠し、EU顧客のコンテナは欧州で稼働します。
- 管理者はレジストリ設定（`PythonFunctionWarnings`）で、Pythonを含むブックを開いた際の警告表示を有効化したり、Python関数自体を全面的にブロックしたりできます。

ここで判断が分かれるのは技術的な隔離の強さではなく、**「ブックのデータがMicrosoftクラウドへ送信される」という事実を社内規程が許容するか**です。分離コンテナで処理され残存しないとはいえ、送信自体は発生します。個人情報や未公開の財務データを含むブックでは、まず情報システム部門の判断を仰ぐのが順当です。外部送信そのものを避けたい場合、ローカルで完結する[Power Query（パワークエリ）とは？できること・使い方・活用例を初心者向けに解説](/tech/details/6111/)の変換処理に寄せるほうが通しやすくなります。

## Excelマクロ（VBA）やOffice Scriptsとの違い

「PythonでExcel作業を自動化できるようになった」と受け取ると、確実に期待外れになります。Python in Excelは**分析エンジン**であって、自動化ツールではありません。

| 観点           | Python in Excel              | VBA    | Office Scripts     |
| ------------ | ---------------------------- | ------ | ------------------ |
| 主目的          | データ分析・可視化                    | 操作の自動化 | 操作の自動化（Web対応）      |
| 実行場所         | Microsoftクラウド                | ローカル   | クラウド               |
| セル書式の変更      | 不可                           | 可      | 可                  |
| ファイル操作・メール送信 | 不可                           | 可      | Power Automate連携で可 |
| 統計・機械学習      | pandas / scikit-learn 等を標準同梱 | 実質困難   | 実質困難               |
| ネットワーク接続     | 不可                           | 可      | 可                  |

Pythonセルは値を返すだけで、セルの色を変える、シートを追加する、ブックを保存する、といったExcelオブジェクトの操作は一切できません。ここはVBAか、後発のクラウド対応版である[Office Scriptsとは？VBAとの違い・できること/できないことを公式仕様で整理](/tech/details/11630/)の担当領域です。相関分析や予測モデルはPython、定型作業の自動実行はVBA／Office Scripts、と役割で切り分けるのが実務的な結論になります。

## pandasとmatplotlibの実践：集計・グラフ・日本語の文字化け

### 集計結果のExcel値化

典型的な流れは、テーブルをDataFrameとして受け取り、集計して、Excelの値で返す形です。

```
import pandas as pd

df = xl("売上テーブル[#All]", headers=True)
result = df.groupby("支店")["売上"].agg(["sum", "mean", "count"])
result.reset_index()
```

最後の行の評価結果がセルの出力になります。出力形式を「Excelの値」にすればスピルして表として展開され、以降はSUMIFやピボットテーブルなど通常のExcel機能から参照できます。`df.describe()` や `df.corr()` をそのまま返せば、要約統計量や相関行列も同じ手順でシートに落とせます。

### グラフの日本語が □ になるときの対処

Python in Excelは、既定では非ラテン文字を空の四角（□）で描画します。日本語のラベルが化けるのはこのためで、Microsoftは `excel.FontPath` で用意されたフォントパスを `FontProperties` に渡す方法を公式手順として示しています。日本語のパスは `excel.FontPath.JAPANESE`（実体は `/usr/share/fonts/Meiryo.ttf`）です。

```
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties

font_path = excel.FontPath.JAPANESE          # Meiryo.ttf のパス
font_properties = FontProperties(fname=font_path)
plt.rcParams["font.family"] = font_properties.get_name()

df = xl("売上テーブル[#All]", headers=True)
fig, ax = plt.subplots()
ax.bar(df["支店"], df["売上"])
ax.set_title("支店別の売上")
fig
```

フォント指定は必ず作図の前に置いてください。描画後に変更しても、すでに描かれたラベルには反映されません。`plt.rcParams["font.family"] = "Meiryo"` と直接書く簡便法も実環境では通りますが、公式に示されているのは上記の `excel.FontPath` を経由する書き方です。なお日本語で選べるフォントはMeiryoのみで、`pip install` ができないため `japanize-matplotlib` のような外部パッケージは使えません。毎回書くのが煩雑なら、前述の初期化コードにフォント設定を入れておくと各セルから消せます。

### Copilotによるコード生成

Microsoft 365 Copilotのライセンスがあれば、Excel上のCopilotに「支店ごとの売上を集計して棒グラフにして」のように日本語で指示し、生成されたPythonコードをPython in Excelとして実行できます。Pythonの構文を書けない担当者でも、生成コードを読んで妥当性を確認する使い方なら現実的です。ただし参照している列名や集計軸が意図どおりかは、実行前に必ず目視で確認してください。

## Python in Excelを選ぶべきでない場面

この機能を採用してはいけないケースは、はっきりしています。次のいずれかに当てはまるなら、Python in Excelは選択肢から外すのが正解です。

- **目的が業務自動化のとき**：セルの書式変更、シート生成、ファイル保存、メール送信は原理的にできません。VBAかOffice Scriptsを選んでください。
- **データを外部に出せないとき**：計算はMicrosoftクラウドで行われます。ブックの内容を社外に送信できない規程なら、隔離の強さとは無関係に不採用です。
- **オフライン環境・閉域網のとき**：インターネット接続とコネクテッド エクスペリエンスが必須のため、通信を遮断した端末では動きません。
- **キュレーション外のライブラリが要るとき**：`pip install` ができないため、必要なパッケージが標準セットに無ければ実現できません。
- **重い処理を頻繁に回すとき**：premium computeには月間の利用上限があり、超えると標準computeに切り替わって計算が遅くなります。上限なしで使い、手動・部分計算モードを選ぶにはアドオンライセンスが必要です（費用は公式の料金ページで確認してください）。
- **ローカルファイルやDBを直接読みたいとき**：データの入口は `xl()` とPower Query接続だけです。`pandas.read_csv` でローカルのCSVを開くことはできません。

逆に言えば、すでにExcelにあるデータを、Excelの外に出さずに統計処理・可視化・予測まで持っていきたい。この一点に用途が絞れるなら、環境構築なしで使えるぶん、ローカルにPython環境を組むより早く成果が出ます。

## よくある質問

### Python in Excelを有効化するには何が必要ですか？

対象プランのMicrosoft 365契約と、条件を満たすExcelのバージョン、そしてコネクテッド エクスペリエンスの有効化です。Business／Enterpriseは一般提供済みで、Windowsの現在のチャネルならv2408以降、Macならv16.96以降で使えます。Insiderへの加入はもう必要ありません。個人向けのPersonal／Familyはプレビュー扱いで、Windowsの現在のチャネルv2405以降が対象です。

### 好きなPythonライブラリを追加インストールできますか？

できません。実行コンテナはネットワークに接続できず、`pip install` は使えない仕様です。利用できるのはAnacondaがキュレーションしたライブラリのセット（pandas、NumPy、Matplotlib、Seaborn、SciPy、statsmodels、scikit-learnなど）に限られます。

### Excelマクロ（VBA）と何が違いますか？

Python in Excelは分析用で、セル操作やファイル操作などの自動化はできません。VBAはローカルでExcelを操作するためのもので、統計処理や機械学習は不得手です。分析はPython、自動化はVBAやOffice Scripts、という役割分担になります。

### 社内データをPython in Excelで扱ってもセキュリティ上問題ありませんか？

コードはハイパーバイザーで分離されたコンテナ内で実行され、そこからネットワークにも利用者のPCにもアクセスできません。コンテナは使用後に破棄され、データは永続化されず、Anacondaや第三者に共有されることもありません。ただしブックのデータがMicrosoftクラウドへ送信される点は変わらないため、機密区分によっては社内規程での可否判断が必要です。管理者はレジストリ設定でPython関数自体をブロックすることもできます。

### グラフの日本語が文字化けします。どうすればよいですか？

非ラテン文字は既定で □ になる仕様のためです。`excel.FontPath.JAPANESE`（Meiryo.ttf）を `FontProperties(fname=...)` に渡し、`plt.rcParams["font.family"]` に設定してから作図してください。作図後の指定では反映されません。

## 関連記事

- [Pandasとは？できること・使い方とPandas 3.0の変更点を解説](/tech/details/3123/)
- [Matplotlibとは？Pythonでグラフを描く使い方を入門から実践まで解説](/tech/details/3125/)
- [Office Scriptsとは？VBAとの違い・できること/できないことを公式仕様で整理](/tech/details/11630/)
- [Power Query（パワークエリ）とは？できること・使い方・活用例を初心者向けに解説](/tech/details/6111/)
- [Scikit-learnとは何か？基本的な概要と特徴](/tech/details/3133/)

---

出典: [Python in Excelの使い方｜有効化・xl()・ライブラリと制限を公式仕様で整理](<https://www.issoh.co.jp/tech/details/9157/>)（株式会社一創）
