筒井
なお、Python in Excelは本記事執筆時点
誰向けの機能なのか
Python in Excelは、以下のようなことをしたい人に最適な機能です。
- Excelに入力したデータを集計、分析したい
- Excelに入力したデータでグラフを作成したい
従来も上記を行うための機能はありましたが、Python in ExcelではPythonを使うことでより複雑な処理を書くことができます。
導入方法
冒頭でも説明した通り、Python in Excelは本記事執筆時点ではプレビュー段階です。今のところWindows版Excel
Excelを起動し、メニューの
![[ファイル]をクリック](/assets/images/article/2024/02/monthly-python-2402/001.png)
画面左下の
![[その他...]-[アカウント]をクリック](/assets/images/article/2024/02/monthly-python-2402/002.png)
「Microsoft 365 Insider」

ダイアログを以下の状態に変更してから

サインアップ後にベータチャネルで利用できる機能のダウンロードが始まります。終わるまでしばらくお待ちください。
なお、Python in ExcelではPythonの実行はMicrosoft Cloud上で行われます。ローカルにPython環境はインストールされません。
基本的な使い方
まずは、基本的な使い方について説明します。新規ファイルを作成し、以下のようにA1セルに1
、A2セルに2
を入力してください。

Python in Excelでは、=PY()
というExcel関数にPythonコードを渡すことでPythonを実行し、結果をセルに埋め込むことができます。
A3セルに=PY(
まで入力してください。以下の部分にPythonコードを入力できるようになります。
=PY()
Excel関数を入力
この状態でxl("A1") + xl("A2")
というコードを書いてから、Ctrl+Enterキーを押してください。以下のように、A1セルとA2セルの合計値が表示されます。

ここで使用したxl()
関数は、Python in Excelが提供する独自関数です。セルの値を読み取るために使います。今回はPythonコードは手で入力しましたが、読み取りたい対象のセルをクリックすることでPythonコードにxl()
関数を自動入力することも可能です。
また、xl("A1:A2")
のようにセルの範囲指定もできます。対象のセルをドラッグアンドドロップで範囲指定するとxl()
関数を自動入力できます。範囲指定の場合、データがpandasのDataFrameオブジェクトとして扱われます。

関数定義もできます。どこかのセルで関数を定義すると、別のセルでそれを呼び出すことができます。


定義した関数はExcelブックの中で同一スコープになるので、A1セルのNone
という表示が気になる場合は関数定義用のシートを用意する方法もあります。
=PY()
Excel関数の出力形式には、以下の2種類があります。
- Pythonオブジェクト
(デフォルト) - Excelの値
「Pythonオブジェクト」=PY()
Excel関数を埋め込むセルを分ける用途で使います。
「Pythonオブジェクト」

「Excelの値」
出力形式の変更は、変更したいセルを右クリックしてメニューの

なお、Python in Excelで利用できるPythonのバージョンは、本記事執筆時点でPython 3.sys.
を実行すると確認できます。

コアライブラリを使ってグラフを作成する
ここでは、コアライブラリという便利な機能を利用してグラフを作成する方法について説明します。
コアライブラリとは
Python in ExcelではAnacondaに同梱されているライブラリの一部が利用できます。以下のライブラリはコアライブラリとしてあらかじめimport文が実行されているので、自分でimport文を書く必要はありません。
ライブラリ名 | 説明 | 実行されるimport文 |
---|---|---|
Matplotlib | 図やグラフを描画するためのライブラリ | import matplotlib. |
NumPy | 数値計算を効率的に行うためのライブラリ | import numpy as np |
pandas | データ解析を簡潔な書き方で行えるライブラリ | import pandas as pd |
seaborn | データを視覚化するためのライブラリ | import seaborn as sns |
statsmodels | 統計モデルの推定、統計テストの実行、統計データの探索のためのライブラリ | import statsmodels as sm |
上記以外にも、サードパーティ製のライブラリのいくつかがpip install
を実行する必要はありません。import文を書くことで利用できます。詳細は、以下公式ドキュメント
以下は、beautifulsoup4を使ってHTMLのスクレイピングを行っているコードの例です。

なお、その他のサードパーティーライブラリを自分でインストールすることはできません。
コアライブラリを使ってみよう
では、コアライブラリのseabornを使って実際にグラフを作成してみましょう。Excelファイルを新規で作成し、dataシートを作って以下の内容を入力してください。

次に、dataシートにテーブルを挿入します。この手順はxl()
関数でデータを参照する際に必要です。テーブルの挿入は画面上のメニューで

ダイアログが表示されたらセルの範囲は変更せず

テーブルが挿入されると、シートは以下の状態になります。

これでグラフを作成するための準備が整いました。graphシートを作成し、A1セルに=PY()
Excel関数を入力してください。入力するPythonコードは以下の内容にしてください。
sns.relplot(x="Month", y="Weight", data=xl("テーブル1[#すべて]", headers=True), kind="line")
xl("テーブル1[#すべて]", headers=True)
の第1引数"テーブル1[#すべて]"
はテーブルの全データを指定する書き方です。第2引数headers=True
を指定することで、テーブルの先頭行がヘッダーとして読み込むようになります。
この書き方も、手入力せず自動入力する方法があります。自動入力する場合は、dataシートのテーブル全体をドラッグアンドドロップで範囲指定してください。
テーブル1
というテーブル名は、テーブルのどこかを選択してからメニューの

graphシートのA1セル上でCtrl+Enterキーを押すとPythonコードが実行されますが、デフォルトの出力形式

これでグラフが表示されるようになりました。A1セルの幅を広げると、折れ線グラフを確認できます。

セキュリティについて
Python in Excelでは、他人が書いた不正なコードの実行を防ぐため、いくつかセキュリティ上の制限があります。具体的には、以下の処理を実行できません。
- Excelの外にあるローカルリソースへのアクセス
- ネットワークアクセス
- 数式、グラフ、ピボットテーブル、マクロ、VBA コードなど、Excelブック内の他のプロパティへのアクセス
Pythonから直接外部データを読み取ることはできませんが、Power Queryを使ってExcelブックにデータを取り込んでからxl()
関数で読み取ることはできます。
Pythonコードが含まれているExcelファイルの入手元がインターネットまたは信頼されていないソースの場合、これを開くと保護ビューが有効になり、Pythonは実行されません。
以下はインターネットからダウンロードしたExcelファイルを開いた直後の画面です。Excel保護ビューが有効になっています。

上記ファイルはA3、A4セルに=PY()
Excel関数が書かれていますが、表示されているのはExcelファイルを編集する際に計算された値です。Excel保護ビューが有効になっている状態では、Pythonコードは実行されません。ネットワークに繋がらない環境でもA3、A4セルの値は表示されます。
最後に
Excelを使って資料を作っている人にとっては、Python in Excelは非常に強力な機能ではないでしょうか。データサイエンティストがExcel上でJupyterLabのような使い方でデータを集計、分析し、完成した成果物はそのまま資料としてチームで利用する、といった使い方ができそうです。Excelファイルのデータを更新すればPythonを使えない人でも結果を再計算できるのが便利そうですね。