💻

Python in Excel が正式リリースされたので触ってみる

2024/09/18に公開

Python in Excel が GA (General Release)

Microsoft 365 Insider Program で公開されていた Python in Excel が一般提供開始され、Windows 版 Excel アプリで利用できるようになったので、試してみた。

https://techcommunity.microsoft.com/t5/excel-blog/python-in-excel-available-now/ba-p/4240212

https://support.microsoft.com/en-us/office/introduction-to-python-in-excel-55643c2e-ff56-4168-b1ce-9428c8308545

Python in Excel の導入により、Excel のデータを Python ライブラリを使用して分析できるようになった。
これにより、開発者などが Excel 上でのデータ分析を行うにあたり、使い慣れた Python を用いることができるようになるとのことで、Python ユーザーとしてはうれしいアップデート。

インターネット接続前提の機能

Python in Excel は、裏で Python ランタイムがある Microsoft Cloud にあるコンテナーが利用され、コンテナー内で Python コードが実行される仕組み。そのため、利用にあたってはインターネットアクセスが必要。
試しにネットワークを切断した状態で実行を試みると、確かに Python 実行が #BLOCKED! になり、コードを実行できなかった。エラーもネットワークエラーの内容が表示された。

インターネットからアクセスしているコンテナーは、他の Microsoft Cloud 基盤から厳重に隔離された領域にあり、セッションタイムアウトやアプリ終了時などのタイミングでコンテナーが自動で破棄されるため、利用者が意図しないデータ流出が発生する懸念はないとのこと。
ローカル環境に Python ランタイムを構築する必要がなく、オプトアウトされたサンドボックスの Excel 専用 Python 環境が Microsoft Cloud 経由で提供されているということになる。

また、Python in Excel は Anaconda ディストリビューションが採用されているため、よく使われる Python ライブラリが標準で利用可能であることは非常にうれしい。
ただ、開発者としては、コンテナー利用であるなら、自分のローカル PC 上にある Docker コンテナーを流用できるようになるとうれしい気持ちもなくはない。そこは今後に期待したいところ。

Copilot in Excel with Python

Python in Excel は Microsoft Copilot 対応もするとのこと。
ただ、現時点で Excel 自体の Copilot は Copilot for Microsoft 365 でないと利用不可なので、これに内包されると思って良さそう。
(つまり、課金しないと Copilot による支援はなさそうな雰囲気、まあ商売なので仕方ない、なんでも無料は欲張りすぎる)

https://techcommunity.microsoft.com/t5/excel-blog/unlock-the-power-of-copilot-in-excel-now-generally-available/ba-p/4242810

利用に必要なライセンス

Microsoft 365 Business または Enterprise サブスクリプションでは、すでに標準の Python in Excel をサブスクリプション内で利用可能の模様。
いずれほかのエディションの Microsoft 365 プランの Excel でも利用可能になる見込みとのことだが、Family、Personal および Education プランはまだプレビュー扱いとのこと。

また、Python in Excel には、標準版に加えて Premium 版も存在するとのこと。(月額 $24USD/Users)
Python in Excel アドオンを購入すると、裏で利用できるコンテナーのコンピューティング環境が標準よりも高性能になるほか、標準時では Excel 側で自動制御される Python コードの実行タイミングを手動にしたり、Python コードの実行間隔を変更するなど、自分でランタイム実行の制御ができるようになる模様。

https://support.microsoft.com/en-us/office/python-in-excel-availability-781383e6-86b9-4156-84fb-93e786f7cab0

Python in Excel に似たサードパーティアドインには注意

なお、アドイン一覧にある Python for Excel アドインは全くの別物なので要注意。Microsoft 公式ではない。
(同じ時期にリリースしているのは意図的なのか、たまたまなのかは不明だが、こっちはデータ抜かれる可能性あるので入れる必要性は皆無と思われる)
社内で利用を広めるときは気を付けた方が良さそう。


要注意!! Boardflare って会社のものらしい。

サポート環境

現時点では、Windows 版 Excel アプリでのみ利用可能。
macOS、iOS、iPadOS、Android 版の Excel アプリ、および Web 版 Excel は、現時点では利用不可。

バージョン制約

Excel アプリのバージョンが 2407 以上、ビルドバージョンは 17830.20128 以上。
自分の環境だと、2024/09/18 時点で上位バージョンになっていたので問題なし。

実際に試してみる

Formula (数式) タブに Python の表示が表示されていれば、標準版の Python in Excel の利用が可能。

モジュール確認

実際にどんなモジュールが import されているかは、Initialization ボタンから確認可能できた。
以下のコードでコンテナー環境を初期化している模様。numpy や pandas、matplotlib.pyplot に加え、excel モジュールもきちんと入っている。

# The following import statements are pre-loaded.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import statsmodels as sm
import seaborn as sns
import excel
import warnings

warnings.simplefilter('ignore')

# Set default conversions for the xl() function.
excel.set_xl_scalar_conversion(excel.convert_to_scalar)
excel.set_xl_array_conversion(excel.convert_to_dataframe)

上記に無いライブラリを使いたい際は、Excel セル内で記述する Python コードにて import を記述して利用する。
インポートできるライブラリについては、Anaconda でサポートされているもの、とのことで、公式ページにライブラリ一覧がある。requests とかも普通に import ができた。
個人的には、beautifulsoup4 などのライブラリもあり、Python in Excel コンテナーが意図しないところで勝手にスクレイピング用途として悪意ある使われ方がされないか不安が残る部分もあるが、まあ見なかったことにする。

https://support.microsoft.com/en-us/office/open-source-libraries-and-python-in-excel-c817c897-41db-40a1-b9f3-d5ffe6d1bf3e

あと、Microsoft なんだから Graph API とか Azure 関連のモジュールはどうなんだ、と思ったが、標準では対応はしてなさそうだった。残念。
Premium 版だとカスタマイズできるのか気になるところ。Excel なので VBA の代わりとして Python を推すなら、msal とか msgraph-sdk あたりの対応はあっても良い気がする。

サンプル実行

Insert Python ボタンを押すと、その時に選択されていたセルが Python コード入力画面に切り替わる。

その後は Python 認識となったセル内にコードを記述していき、Ctrl + Enter を押す (あるいは通常の Excel 関数同様、チェックボタンを選択する) ことで、上からコードが実行される。

Insert Python ボタンを選択すると、画面右側にヘルプ記事が表示され、pandas のサンプル挿入などもあるので、試しに触ってみる。

試しに、ヘルプにある Describe with sample の +Insert Sample を押すと、別シートが生成され、pandas ではおなじみの pandas.DataFrame.describe() による記述統計のサンプルが表示されていることを確認。

Python コードになったセルをみてみると、計算部分のセルは

sample_df = xl("IrisDataSet2[#All]", headers=True)

と、左側に自動生成されたデータセット (Iris data set) の表を参照しており、それを Python in Excel で Python コードを記述したセル内で取り込んで sample_df として変数化している。
xl() 関数が何を意味するかについては、公式ページに記載がある。

Excel の Python では、カスタム Python 関数 xl() を使用して、Excel と Python の間のインターフェイスを作成します。 xl() 関数は、範囲、テーブル、クエリ、名前などの Excel オブジェクトを受け入れます。

xl() 関数を使用して、Python セルに参照を直接入力することもできます。 たとえば、セル A1 を参照するには xl("A1") を使用し、 範囲 B1:C4 には xl("B1:C4")を使用します。 MyTable という名前のヘッダーを持つテーブルの場合は、 xl("MyTable[#All]", headers=True)を使用します。 [#All] 指定子を使用すると、テーブル全体が Python 数式で分析され、 headers=True テーブル ヘッダーが正しく処理されます。 [#All] などの指定子の詳細については、「Excel テーブルでの構造化参照の使用」を参照してください。

https://support.microsoft.com/en-us/office/get-started-with-python-in-excel-a33fbcbe-065b-41d3-82cf-23d05397f53d

Python in Excel のページで DataFrame についての解説もあるので、この辺りは非常に丁寧な雰囲気を感じる。

https://support.microsoft.com/en-us/office/python-in-excel-dataframes-a10495b2-8372-4f0f-9179-32771fe0dc04

要は、xl() 関数で Excel 内のデータを取り込んでいるということになる。
この取り込んだ sample_df が何なのかを

print(type(sample_df))

で見てみると、Diagnostics 画面にて <class 'pandas.core.frame.DataFrame'> と表示がされている。

つまり、xl() 関数で取り込んだ Excel データを、pandas.DataFrame 化しているということがわかる。
そのため、その下で表を表示している Python セルには、

sample_df.describe()

という Python コードが挿入されており、先の xl() で取り込んだデータセットを pandas.DataFrame の describe() 関数を使って、記述統計を表示しているということになる。Excel のデータを pandas.DataFrame で扱えるのは非常に便利。

このサンプルデータである Iris data set というデータセットは、Microsoft 公式に公開している Python in Excel の GitHub リポジトリに存在している模様。
sample-data ディレクトリ以下にある python-in-excel-iris-dataset.xlsx というファイルとデータが同じだったので、サンプルのボタン押したくない、って人は自分で試してみたい方はこちらを参照して利用すると良い。

https://github.com/microsoft/python-in-excel

Excel データを、Excel の中で pandas.DataFrame にして扱えるというのは、Python ユーザーにはいろいろと利用の幅が出そう。
あとは、先日アップデートされた Microsoft Forms の回答結果を Excel と連携できる部分で、Python in Excel と連携すればより面白いことができそうな予感。どこかで試してみたい。

Discussion