Python Monthly Topics

ExcelにPythonコードを埋め込める「Python in Excel」紹介

筒井@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を起動し、メニューの[ファイル]をクリックします。

[ファイル]をクリック
[ファイル]をクリック

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

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

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

チャネルを変更
チャネルを変更

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

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

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

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

基本的な使い方

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

セルに値を入力
セルに値を入力

Python in Excelでは、=PY()というExcel関数にPythonコードを渡すことでPythonを実行し、結果をセルに埋め込むことができます。

A3セルに=PY(まで入力してください。以下の部分にPythonコードを入力できるようになります。

=PY() Excel関数を入力
`=PY()` Excel関数を入力

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

Pythonコードの実行結果
Pythonコードの実行結果

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Pythonのバージョン
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文を書くことで利用できます。詳細は、以下公式ドキュメント「推奨されるライブラリの一覧」を参照してください。

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

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

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

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

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

サンプルデータの作成
サンプルデータの作成

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

テーブルの挿入
テーブルの挿入

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

「OK」ボタンをクリック
「OK」ボタンをクリック

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

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

これでグラフを作成するための準備が整いました。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セル上でCtrlEnterキーを押すとPythonコードが実行されますが、デフォルトの出力形式「Pythonオブジェクト」だとグラフが表示されません。A1セルを右クリックして、メニューの[Python出力]から[Excelの値]を選択します。

出力形式の変更
出力形式の変更

これでグラフが表示されるようになりました。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を使えない人でも結果を再計算できるのが便利そうですね。

参考資料

おすすめ記事

記事・ニュース一覧