Python in Excel入門|利用条件と集計・可視化のコード例

Excelの表をpandasやmatplotlibで分析するPython in Excel。契約・更新チャネルによる利用条件、基本操作、10のコード例、クラウド実行の制約を整理します。旧Copilot連携の廃止案内も反映しています。

Microsoft 365 の Python in Excel は、ExcelのセルにPythonコードを書き、pandasやmatplotlibで集計・可視化する機能です。コードはMicrosoftのクラウドで実行されます。Windows・Mac・Webに対応していますが、利用できる範囲は契約と更新チャネルによって異なります。

Pythonの初学者でも、セル範囲の取り込み方と短いコード例から試せます。AIにコードの作成を手伝わせる場合も、参照範囲や計算条件が目的に合っているかを確認します。

Excelで扱っている表を、そのままPythonの集計や可視化に渡せます。AIが作ったコードでも、欠損値の処理、集計対象、予測の評価方法を確認してから使います。

Python in Excel とは何か

Python in Excel は、Excelのセル内で直接Pythonコードを実行できる機能です。呼び出しには =PY( と打つだけで、セルが緑色のPython編集モードに変わり、そこに書いたコードがクラウド上で実行され、結果だけがワークシートに戻ってきます。pandas、NumPy、Matplotlib、seaborn、scikit-learn など、データ分析の定番ライブラリは最初から使える状態で入っており、追加インストールは不要です。

Pythonコードは利用者のPCではなく、Microsoftクラウド上の隔離されたコンテナで実行されます。Anacondaが提供するライブラリを利用でき、PCへのPythonのインストールは不要です。ただし、インターネット接続と対象ライセンスが必要で、社内のクラウド利用方針や管理者設定も確認します。

2023年8月にプレビューが始まり、2024年9月にWindowsで一般提供されました。現在は対象の法人契約でMacとWebでも利用できます。個人向け・教育向け契約にはプレビュー条件があります。なお、Copilotの旧App SkillsによるPython連携には2026年2月末までの廃止案内があり、当時の操作手順をそのまま使えるとは限りません。

Python in Excel でDataFrameとmatplotlibチャートを表示
Python in Excel の標準的な画面。DataFrameの集計結果とmatplotlibのチャートがセル内に表示される(画像:Microsoft Tech Community)

料金と利用条件

対象のMicrosoft 365契約では、標準コンピュートでPython数式を実行できます。Pythonの実行機能と、Copilotの利用条件は別に確認します。契約名だけでなく、Excelの更新チャネル、ライセンスの割当方式、管理者設定も利用可否に関係します。

契約の区分利用条件
Microsoft 365 Business・Enterpriseの対象契約Windows・Mac・Webで提供。デスクトップアプリの権利を含む対象ライセンスと、対応するExcelのビルド・更新チャネルを確認
Microsoft 365 Personal・Familyプレビュー。Windows・WebとMacでは参加条件が異なる
Education対応するWindows版のMicrosoft 365 Insiderでプレビュー。対象ライセンスを確認
Business Basic・F3・Office 365 E1などWeb版Excelが使えることだけでは、Python in Excelの利用資格を確認できない。管理者に対象ライセンスを確認
Office 2021・2024などの永続ライセンス対象外

よく誤解されるのは「買い切り版Excel 2024 でも使えるのでは」という点ですが、これは対象外です。Python in Excel はサブスクリプション限定の機能で、買い切り版では利用できません。

Python in Excel add-onでは、高速なプレミアムコンピュートと手動・部分・自動の計算モードを利用できます。価格と契約条件は購入地域や契約によるため、Microsoftの購入画面または管理者に確認してください。処理速度が上がっても、分析結果の妥当性や大規模処理の成功を保証するものではありません。

使い方の基本フロー

セルに =PY と入力するか、リボンの「数式」タブから「Pythonの挿入」を選ぶ。これでセルがPython編集モードに切り替わり、あとはコードを書いて Ctrl+Enter で確定するだけです。

数式タブのPythonの挿入ボタン
リボンの「数式」タブにある「Pythonの挿入」ボタン(画像:Microsoft Support)

ただ一点、Excelのセル範囲をPythonコードに渡す方法は最初に覚える必要があります。xl() という専用関数を使います。

xl関数でセル値を参照する例
xl("A1") でセル値を取り出し、Python側で計算する(画像:Microsoft Support)
python
df = xl("A1:D100", headers=True)
df.describe()

この xl("A1:D100", headers=True) が「A1:D100の範囲を、1行目をヘッダーとして pandas DataFrame に変換する」という意味になります。Excelテーブル名を指定することもできて、xl("Sales[#All]", headers=True) のように書けば、テーブル全体を取り込めます。

結果の表示方法は2種類あります。既定の「Python Object」は、DataFrameをカード形式でセルに表示するモードで、Python側の操作を続けたいときに便利です。一方「Excel Value」に切り替えると、DataFrameの中身が普通のExcelセルとして展開され、その値に対して通常の数式やピボットテーブルが使えます。セルを右クリック→「Python出力」で切り替えられます。

Python出力形式の切り替えメニュー
数式バー横のドロップダウンで「Python Object」と「Excel Value」を切り替える(画像:Microsoft Support)

Python Objectのまま分析を続け、共有用の結果をExcel Valueとして展開すると、他のセルや数式で扱いやすくなります。

なお、計算順序は「行優先・左上から右下へ」です。つまりA1セルで作成したDataFrameをB1で参照するのはOKですが、A2セルで作ったものをA1で使うことはできません。Jupyterに慣れた人は混乱するポイントです。

実例10パターン(コード付き)

実務で使うパターンを10個、目的別に並べます。列名と範囲は例示です。対応するExcelテーブルを用意し、列の型や欠損値の条件を確認してから実行してください。

1. 基本統計量を一発で

数値列の件数、平均、標準偏差、四分位数などをまとめて返します。合計値は含まれないため、必要なら別途集計します。

python
df = xl("Sales[#All]", headers=True)
df.describe()

2. 重複除去とクレンジング

次の例は、1行が1注文の表を前提に、OrderIDの重複を除き、金額の欠損を中央値で補います。実データでは、同じOrderIDに複数の商品明細が含まれる場合や、欠損が未確定額を意味する場合があります。重複の単位と補完の可否を確認してから適用してください。

python
df = xl("Orders[#All]", headers=True)
df = df.drop_duplicates(subset=["OrderID"])
df["Amount"] = df["Amount"].fillna(df["Amount"].median())
df

3. グループ集計(SQLのGROUP BY相当)

地域×商品ごとの売上合計、平均、件数をまとめて出します。

python
df = xl("Sales[#All]", headers=True)
df.groupby(["Region","Product"]).agg(
    total=("Amount","sum"),
    avg=("Amount","mean"),
    count=("Amount","count")
).reset_index()

4. 相関ヒートマップ

指標間の相関を色付きの表で示します。Excelの相関関数と条件付き書式でも作れますが、Pythonでは計算と描画をまとめて記述できます。相関だけで因果関係は判断できません。

python
import seaborn as sns, matplotlib.pyplot as plt
df = xl("KPI[#All]", headers=True)
sns.heatmap(df.corr(numeric_only=True), annot=True, cmap="RdBu_r", center=0)
plt.show()

5. 単回帰の係数と決定係数

広告費と売上に単回帰を当てはめ、回帰式と決定係数(R²)を返します。このコードはグラフを描きません。また、係数は関連の強さを表すもので、この計算だけでは広告の因果効果とはいえません。欠損値は処理してから入力します。

python
from scipy.stats import linregress
df = xl("Marketing[#All]", headers=True)
res = linregress(df["AdSpend"], df["Revenue"])
f"y = {res.slope:.1f}x + {res.intercept:.1f}, R²={res.rvalue**2:.3f}"

6. K-meansで顧客クラスタリング

RFMの3指標で顧客を4グループに分類する例です。日数・回数・金額は尺度が異なるため、標準化してからK-meansへ渡します。欠損値や極端な値を点検し、4群で分ける意味があるかも結果を見て確認します。

python
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
df = xl("Customers[#All]", headers=True)
km = KMeans(n_clusters=4, random_state=42, n_init=10)
X = df[["Recency","Frequency","Monetary"]]
X_scaled = StandardScaler().fit_transform(X)
df["Segment"] = km.fit_predict(X_scaled)
df

7. 時系列予測(指数平滑化)

statsmodelsの指数平滑化で、月次売上の次の6か月を予測する例です。日付を昇順に並べ、月ごとの欠測や重複を処理しておきます。12か月周期の季節性を使うため、少なくとも2周期分の連続データを用意し、過去の一部を検証用に残して予測誤差を確認します。

python
from statsmodels.tsa.holtwinters import ExponentialSmoothing
df = xl("MonthlySales[#All]", headers=True)
df["Date"] = pd.to_datetime(df["Date"])
ts = df.sort_values("Date").set_index("Date")["Sales"]
fit = ExponentialSmoothing(ts, seasonal="add", seasonal_periods=12).fit()
fit.forecast(6)

8. 異常値検知

平均から標準偏差の3倍を超えて離れた値を、確認候補として抽出します。金額は分布が偏りやすいため、3σを超えたことだけで誤りや不正とは判断できません。科目・部門ごとの分布や、中央値・四分位範囲による方法も比較します。

python
df = xl("A1:D1000", headers=True)
mean, std = df["Amount"].mean(), df["Amount"].std()
df["is_outlier"] = (df["Amount"] - mean).abs() > 3 * std
df[df["is_outlier"]]

9. テキストの正規表現置換

電話番号を文字列で取り込み、半角数字以外を除く例です。Excel側で数値として保存して先頭の0が落ちている場合、その0は復元できません。国番号や内線は、利用目的に合わせて別の列で管理します。

python
df = xl("Contacts[#All]", headers=True)
df["電話番号"] = df["電話番号"].str.replace(r"[^0-9]", "", regex=True)
df

10. 分類予測(ロジスティック回帰)

離脱を0、1で記録したChurn列を目的変数にして、ロジスティック回帰を当てはめる最小例です。入力は欠損のない数値列とし、IDや離脱後にしか分からない情報を除きます。この例の出力は学習に使った顧客への当てはめ値です。将来の離脱予測に使うには、別の期間・顧客の検証データで予測性能を確かめます。

python
from sklearn.linear_model import LogisticRegression
df = xl("Churn[#All]", headers=True)
X = df.drop("Churn", axis=1)
y = df["Churn"]
model = LogisticRegression(max_iter=1000).fit(X, y)
pred = model.predict_proba(X)[:,1]
pd.DataFrame({"ChurnProbability": pred})

AIにコード案を作らせる場合は、学習と検証の分け方も指定します。動作するコードでも、将来情報の混入や不適切な補完があれば、分析結果は使えません。

Copilot連携を使う前に確認すること

Copilotの旧App Skillsには、依頼文からPythonコードを作ってセルへ挿入する高度な分析機能がありました。Microsoftは、このApp Skillsを2026年2月末までにExcelから削除すると案内しています。Python in Excel自体の提供終了ではありません。

後継のExcelのAgent Mode、Copilot Chat、Analystは用途や出力が異なり、旧App Skillsと同じ形でPYセルを生成するとは限りません。利用中の画面と公式の対応情報を確認してください。

Copilotの利用資格は、個人向け契約、法人向け契約、組織の設定によって異なります。特定価格の法人向けCopilot追加契約だけに限定されるわけではありません。Python in Excelの資格と分けて、現在の対象プランを確認します。

実務観点では、Copilot抜きでもPython in Excelは使えます。ChatGPTやClaudeにコードを書いてもらって =PY() に貼り付けるだけ、でも充分機能します。Copilotはあくまで「Excelの中で完結させたいとき」の選択肢、と理解しておくと誤解がありません。

Copilotに日本語でForecast作成を指示する画面
旧CopilotによるPython分析の画面例。現在の操作画面や対応機能とは異なる場合がある(画像:Microsoft Tech Community)。

制限事項と落とし穴

導入前に確認する主な制約は、ライブラリ、通信、計算順序、コンピュートです。

利用できるライブラリは、Python in Excelに用意された環境に限られます。pipで任意のパッケージを追加することはできません。必要なライブラリがない場合は、ローカルのPythonや、別の実行環境を検討します。Prophetは時系列予測用であり、MeCabやGiNZAのような日本語解析用ライブラリとは用途が異なります。

2つ目は外部ネットワークへのアクセスが遮断されていること。セキュリティのため、Pythonコードから外部APIを叩いたり、Webスクレイピングしたり、社内DBに接続したりはできません。閉じた環境で完結する処理に限られる、と理解しておきましょう。

3つ目は計算順序の話で、先述したとおり「行優先・左上から右下」に固定されています。Jupyterに慣れていると感覚がずれやすいので、セル同士の依存関係を設計するときに意識してください。

対象契約に含まれる月間プレミアムコンピュート枠を使い切ると、標準コンピュートへ切り替わり、計算速度が下がります。枠は月初に更新されます。通常、この上限到達だけで#BLOCKEDになるわけではありません。プレミアム計算を継続したい場合はアドオンの条件を確認します。

モバイル版Excel(iPad・iPhone・Android)ではPython in Excelの計算に対応していません。ブックの閲覧はできますが、Pythonセルを再計算するとエラーになります。

セキュリティとガバナンス

社内データを扱う前に、Microsoftが公開している実行環境とデータの扱いを確認します。

Pythonコードは、Microsoftクラウド上のハイパーバイザーで隔離されたコンテナ内で動きます。最小権限で実行され、PCのファイルや外部ネットワークにはアクセスできません。実行環境はブックを閉じるかタイムアウトするまで稼働し、Python in Excel自体はデータを永続保存しません。OneDriveなどに保存したブックのデータが消えるという意味ではありません。

MicrosoftはPython in Excelについて、GDPRとEU Data Boundaryへの対応を案内しています。EUの顧客のコンテナはEUで稼働し、多国籍テナントはOffice Configuration Serviceで欧州実行を設定できます。規格や地域要件への適合は、組織の契約と構成に即して確認します。

AI学習への利用については、Copilot経由の利用を含めてユーザーデータは学習に使われないとMicrosoftが明言しています。Microsoft Purview のDLP(情報漏洩防止)ポリシーも、通常のExcelワークブックと同じように適用されます。

社内展開にあたって情シス部門と詰めるべき論点は主に3つです。リージョンをどこに固定するか(EUDBを使うか)、管理者権限でPython in Excel をブロックする必要があるか(Windowsレジストリ経由で可能)、そして機密性ラベル付きワークブックでの挙動をどう扱うか。社内の情報分類、契約条件、利用規程と照合して導入可否を判断します。

他ツールとの住み分け

データ分析の選択肢はExcel+Pythonだけではありません。典型的な選択肢を並べると、それぞれの向き不向きが見えてきます。

ツール実行場所外部API非エンジニア向き
Python in ExcelMicrosoftクラウド不可◎(Copilot併用)
Anaconda Code(アドイン)端末内のWebAssembly環境通信先などの制約ありPythonの知識が必要
Jupyter Notebookローカル/サーバー×
Google Sheets + Apps ScriptGoogleクラウド△(JavaScript)
Power BI / Microsoft Fabricローカル/クラウド△(運用向け)

Excel内の表をPythonで集計・可視化したい場合はPython in Excelが候補になります。任意のライブラリや直接の外部通信が必要ならローカルPython、定期配信や権限管理を含むBI運用ならPower BIやFabricなどを、要件に応じて比較します。

まずは既存のExcel作業を1つ選び、処理時間、更新の手間、共有方法が改善するか確認します。Pythonを使わず、関数やPower Queryで済む場合もあります。

導入ステップと日本企業での使われ方

社内展開では、対象ライセンス、Excelのビルドと更新チャネル、クラウド接続、管理者設定を確認します。Windows 2408やMac 16.96というバージョン番号だけで、すべての環境の利用可否が決まるわけではありません。

まず1ブックで小さく試すのが第一歩です。=PY( を打って df.describe() を動かす、matplotlib で1つグラフを作る──この2つで、環境が使えるかどうかは即座に判定できます。動いたら、部門ごとに「毎月やっているExcel作業」のうち、関数やピボットで苦労している1つを選んでPython in Excel で置き換えてみる。作業時間と再実行のしやすさを比べ、続けるか判断します。

想定される利用例には、分析前のデータ整備や、既存のExcel集計の置き換えがあります。経理部門では月次試算表の外れ値検知や、勘定科目×部門のピボット超え集計。人事部門では従業員サーベイの集計や、勤怠データから残業偏りのクラスタリング。マーケティングや事業企画では顧客LTVの計算、広告費と売上の回帰分析、コホート分析、モンテカルロ・シミュレーションによる売上予測。いずれも以前はPython単独や専用ツールでやっていた仕事が、Excelの中で完結できるようになったという位置づけです。

管理職がAIへ分析を依頼する場合も、集計対象と確認したい判断を明確にします。結果の確認では、元データとの件数・金額の照合と、分析担当者による計算条件の点検を組み込みます。

逆に注意したいのは、Python in Excel をExcelの拡張機能として使うだけで満足すると、本格的な分析基盤への移行が遅れる点です。月次で数十万行のデータを扱うようになったり、外部APIからのデータ取り込みが必要になったら、Power BI / Fabric や Anaconda Code に移行する判断も視野に入れておくべきです。

最後に

Python in Excelは、既存のExcelデータにPythonの集計や可視化を追加する選択肢です。AIにコード案を作らせる場合も、結果を確認できる範囲から始めます。

対象の契約と管理設定を確認したうえで、機密情報を含まないサンプルの表を使い、集計とグラフ作成を試せます。追加インストールは不要ですが、クラウド接続は必要です。

Python in Excel の社内展開、はてなベースが伴走します 部門別のユースケース設計、テンプレート作成、CopilotとPython in Excelを組み合わせた研修カリキュラム、Anaconda Code など拡張ツールとの併用設計まで、経理DX事業部がご支援します。オンプレミスでのデータ分析基盤の構築もあわせて検討可能です。 無料相談はこちら

定義・計算方法の確認先