2024年2月: ExcelにPythonコードを埋め込める「Python in Excel」の紹介(ryu22e)

筒井@ryu22eです。2024年2月の『Python Monthly Topics』は、Excelの新機能Python in Excelについて紹介します。 なお、Python in Excelは本記事執筆時点(2024年1月29日)ではプレビュー段階です。正式版リリース時には仕様が変更される可能性があります。

誰向けの機能なのか

Python in Excelは、以下のようなことをしたい人に最適な機能です。

  • Excelに入力したデータを集計、分析したい

  • Excelに入力したデータでグラフを作成したい

従来も上記を行うための機能はありましたが、Python in ExcelではPythonを使うことでより複雑な処理を書くことができます。

導入方法

冒頭でも説明した通り、Python in Excelは本記事執筆時点ではプレビュー段階です。 今のところWindows版Excel(Excel for Windows)でしか使用できない機能なので、実際に使ってみる場合はWindows PCを用意してください。 また、プレビュー段階の機能を利用するには、「Microsoft 365 Insider」のベータチャネルにサインアップする必要があります。サインアップの手順は以下の通りです。

Excelを起動し、メニューの[ファイル]をクリックします。

../_images/setup-python-in-excel-1.jpg

[ファイル]をクリック

画面左下の[その他...]-[アカウント]をクリックします。

../_images/setup-python-in-excel-2.jpg

[その他...]-[アカウント]をクリック

「Microsoft 365 Insider」のアイコンをクリックし、表示されるメニューの「Channelを変更します」をクリックします。

../_images/setup-python-in-excel-3.jpg

チャネルを変更

ダイアログを以下の状態に変更してから「OK」ボタンをクリックします。これで、ベータチャネルにサインアップできました。

../_images/setup-python-in-excel-4.jpg

ベータチャネルにサインアップ

サインアップ後にベータチャネルで利用できる機能のダウンロードが始まります。 終わるまでしばらくお待ちください。

なお、Python in ExcelではPythonの実行はMicrosoft Cloud上で行われます。ローカルにPython環境はインストールされません。

基本的な使い方

まずは、基本的な使い方について説明します。 新規ファイルを作成し、以下のようにA1セルに1、A2セルに2を入力してください。

../_images/example-1.jpg

セルに値を入力

Python in Excelでは、=PY()というExcel関数にPythonコードを渡すことでPythonを実行し、結果をセルに埋め込むことができます。 A3セルに=PY(まで入力してください。 以下の部分にPythonコードを入力できるようになります。

../_images/example-2.jpg

=PY()Excel関数を入力

この状態でxl("A1") + xl("A2")というコードを書いてから、Ctrl + Enterキーを押してください。 以下のように、A1セルとA2セルの合計値が表示されます。

../_images/example-3.jpg

Pythonコードの実行結果

ここで使用したxl()関数は、Python in Excelが提供する独自関数です。セルの値を読み取るために使います。 今回はPythonコードは手で入力しましたが、読み取りたい対象のセルをクリックすることでPythonコードにxl()関数を自動入力することも可能です。

また、xl("A1:A2")のようにセルの範囲指定もできます。 対象のセルをドラッグアンドドロップで範囲指定するとxl()関数を自動入力できます。 範囲指定の場合、データがpandasDataFrameオブジェクトとして扱われます。

../_images/example-4.jpg

pandasのDataFrameオブジェクトしての扱い

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

../_images/define-function-1.jpg

A1セルに定義した関数

../_images/define-function-2.jpg

A1セルに定義した関数をB1セルで呼び出す

定義した関数はExcelブックの中で同一スコープになるので、A1セルのNoneという表示が気になる場合は関数定義用のシートを用意する方法もあります。

=PY()Excel関数の出力形式には、以下の2種類があります。

  • Pythonオブジェクト(デフォルト)

  • Excelの値

「Pythonオブジェクト」は、Pythonコードの実行結果をそのまま埋め込む出力形式です。 コードが長くなりそうな場合に、=PY()Excel関数を埋め込むセルを分ける用途で使います。

「Pythonオブジェクト」では、以下のようにひし形が2つ重なったアイコンが表示されます。 ひし形のアイコンをクリック、またはセルを選択してからCtrl + Shint + F5キーを押すと、オブジェクトに関する情報を確認できます。

../_images/check-information-about-objects.jpg

オブジェクトに関する情報を確認

「Excelの値」は、出力結果を人間に見せる際に使う出力形式です。 後述するグラフを表示する際にもこちらを使います。

出力形式の変更は、変更したいセルを右クリックしてメニューの[Python出力]から行えます。

../_images/select-output-format.jpg

右クリックメニューから出力形式を変更

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

../_images/python-version.jpg

Pythonのバージョン

コアライブラリを使ってグラフを作成する

ここでは、コアライブラリという便利な機能を利用してグラフを作成する方法について説明します。

コアライブラリとは

Python in ExcelではAnacondaに同梱されているライブラリの一部が利用できます。 以下のライブラリはコアライブラリとしてあらかじめimport文が実行されているので、自分でimport文を書く必要はありません。

ライブラリ名

説明

実行されるimport文

Matplotlib

図やグラフを描画するためのライブラリ

import matplotlib.pyplot as plt

NumPy

数値計算を効率的に行うためのライブラリ

import numpy as np

pandas

データ解析を簡潔な書き方で行えるライブラリ

import pandas as pd

seaborn

データを視覚化するためのライブラリ

import seaborn as sns

statsmodels

統計モデルの推定、統計テストの実行、統計データの探索のためのライブラリ

import statsmodels as sm

上記以外にも、サードパーティ製のライブラリのいくつかが「推奨されるライブラリ」としてPython in Excelに同梱されています。 これらはpip installを実行する必要はありません。import文を書くことで利用できます。 詳細は、以下公式ドキュメント「推奨されるライブラリの一覧」を参照してください。

Excel のオープンソース ライブラリと Python - Microsoft サポート

以下は、beautifulsoup4を使ってHTMLのスクレイピングを行っているコードの例です。

../_images/import-bs4.jpg

beautifulsoup4を使ってHTMLのスクレイピング

なお、その他のサードパーティーライブラリを自分でインストールすることはできません。

コアライブラリを使ってみよう

では、コアライブラリのseabornを使って実際にグラフを作成してみましょう。 Excelファイルを新規で作成し、dataシートを作って以下の内容を入力してください。

../_images/seaborn-example-1.jpg

サンプルデータの作成

次に、dataシートにテーブルを挿入します。この手順はxl()関数でデータを参照する際に必要です。テーブルの挿入は画面上のメニュー[挿入]-[テーブル]をクリックするか、入力したデータのどこかのセルを選択してCtrl + Tで実行できます。

../_images/seaborn-example-2.jpg

テーブルの挿入

ダイアログが表示されたらセルの範囲は変更せず「OK」ボタンをクリックします。これで、テーブルが挿入されます。

../_images/seaborn-example-3.jpg

「OK」ボタンをクリック

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

../_images/seaborn-example-4.jpg

テーブル挿入後のシートの状態

これでグラフを作成するための準備が整いました。 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というテーブル名は、テーブルのどこかを選択してからメニューの[テーブルデザイン]で確認できます。また、名前の変更もできます。

../_images/show-excel-table-name.jpg

テーブル名の確認

graphシートのA1セル上でCtrl + Enterキーを押すとPythonコードが実行されますが、デフォルトの出力形式「Pythonオブジェクト」だとグラフが表示されません。A1セルを右クリックして、メニューの[Python出力]から[Excelの値]を選択します。

../_images/seaborn-example-5.jpg

出力形式の変更

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

../_images/seaborn-example-6.jpg

出力されたグラフ

セキュリティについて

Python in Excelでは、他人が書いた不正なコードの実行を防ぐため、いくつかセキュリティ上の制限があります。 具体的には、以下の処理を実行できません。

  • Excelの外にあるローカルリソースへのアクセス

  • ネットワークアクセス

  • 数式、グラフ、ピボットテーブル、マクロ、VBA コードなど、Excelブック内の他のプロパティへのアクセス

Pythonから直接外部データを読み取ることはできませんが、Power Queryを使ってExcelブックにデータを取り込んでからxl()関数で読み取ることはできます。

Pythonコードが含まれているExcelファイルの入手元がインターネットまたは信頼されていないソースの場合、これを開くと保護ビューが有効になり、Pythonは実行されません。

以下はインターネットからダウンロードしたExcelファイルを開いた直後の画面です。 Excel保護ビューが有効になっています。

../_images/excel-protected-view.jpg

ファイルを開いた直後の画面

上記ファイルはA3、A4セルに=PY()Excel関数が書かれていますが、表示されているのはExcelファイルを編集する際に計算された値です。 Excel保護ビューが有効になっている状態では、Pythonコードは実行されません。 ネットワークに繋がらない環境でもA3、A4セルの値は表示されます。

最後に

Excelを使って資料を作っている人にとっては、Python in Excelは非常に強力な機能ではないでしょうか。 データサイエンティストがExcel上でJupyterLabのような使い方でデータを集計、分析し、完成した成果物はそのまま資料としてチームで利用する、といった使い方ができそうです。 Excelファイルのデータを更新すればPythonを使えない人でも結果を再計算できるのが便利そうですね。

参考資料