Excel での Pythonを試してみた

この記事は筑波NSミライラボ Advent Calendar 2023 15 日目の記事です。

# はじめに

2023年8月頃、Excel での Pythonが公開されましたが、宣伝されているかどうか定かではありません。私の場合は最近やっとXで知りました。思い出してみると、xlookup機能の時と同じで、新機能ノートに期待せず読まない私ですので、みんなより遅れてスタートしています。やっと手強いVBAとさよならできる日が来るのでしょうか。

https://techcommunity.microsoft.com/t5/excel-blog/announcing-python-in-excel-combining-the-power-of-python-and-the/ba-p/3893439

今回はExcel での Pythonを試したいので、申請から使用できるまで、導入してみたいと思います。

# 導入

1.　Excelを最新版にする

2.　Excelを開き、画面の左下にある「アカウント」を開く

![qiita2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3625111/ec83f5ff-ee95-6314-c0f9-0594b5b7f56e.png)

3.　Microsoft 365 Family / Personal サブスクの場合はMicrosoft 365 Insider Programが表示されます。
　　Business/Education サブスクの場合は、管理者から設定されていますので、表示しない場合は管理者に確認してください。

4.　Microsoft 365 Insiderのボタンをクリックして、チャンネル選択の画面から、ベータチャンネルを選び、確認したらOKボタンをクリックします。

![qiita3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3625111/2352924b-cb36-a014-d673-887641145ceb.png)



5.　Excelを再起動して、新しいシートを開きます。

6.　「数式」に「Pythonの挿入」があれば、クリックして、チュートリアルみたいな説明を受ければ、利用できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3625111/216f70b5-0234-1c13-73be-d2cd4717b445.png)
# 使い方

=pyをformulaに入力し、Enterを押せば、セルがPython式を対応します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3625111/17add2e1-daca-e160-cfbf-c7253a5d1168.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3625111/aa857860-8a40-a7f3-e68c-0e391e56d4e0.png)

100人のExcelランダムデータを作成しました（適当で）。
名前、年齢、所属地域、給料、そして、4グループ（25名1グループ）に分けて、Excel での Pythonを試したいと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3625111/bb9375bd-d2ab-4562-09de-0f866a1623d9.png)

まず全員の平均年齢を探してみたいので、普通なら、=AVERAGE(C2:C101)ですぐに答える出せますが、そのままPythonを入力したら、早速エラーが出ました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3625111/719f3841-5624-54aa-7f97-c3d7a4c4bc56.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3625111/f28181ce-a605-20ff-4e8e-c41d412c9667.png)

そのままPythonを入力ではなさそうです。そのため、説明動画を確認してみました。

https://www.youtube.com/watch?time_continue=113&v=H9ME4pGaQiQ&embeds_referring_euri=https%3A%2F%2Fdekiru.net%2F&embeds_referring_origin=https%3A%2F%2Fdekiru.net&source_ve_path=MjM4NTE&feature=emb_title



# Step 1 : Dataframeの作成

Excel での Pythonはpandasのライブラリと連携していますので、引用しなくで大丈夫そうです。
Pythonの時と同じ、Excelデータを変数で定義して、分析したあと、変数に入れて分析した結果を表示するスタイルです。

Dataframeの作成する前に、もう1つのTableを作成します。Tableの名前を変えて、データが入っている(Data)と計算用のTable(Clac)にします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3625111/eff5986f-cf11-a8ac-2b87-0ac8fbd89c3d.png)

計算用Table(Clac)の中にPython式を入力します。

DataFrameを作成します。
```:Python in Excel
df1 = xl("Data!A1:F101", headers = True)　
```
実行の時はEnterではなく、Ctrl+Enterになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3625111/68f3b777-53ec-3497-a22b-26b6ecf43d9d.png)

成功したら、DataFrameのテキストが出ます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3625111/acb29953-ce87-435f-13ae-9a713e0b3760.png)

DataFrameの中身を確認することもできます。PY式の左のボタンをクリックし、Excelの値を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3625111/fdbc3926-5a7c-babd-e1fc-157def33a0f9.png)

これはExcel での Pythonの特徴であり、可視化できますので、連携性と便利さを感じました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3625111/88be39bf-a433-a9c1-2f8d-c33eecc2e10d.png)

# Step 2 : 平均年齢を計算する

下準備が終わりましたら、平均年齢を計算してみたいです。

Pythonの場合は
```Python
import pandas as pd
df1 = pd.DataFrame(xl('Data!A1:F101', headers=True))
return df1['Age'].mean()
```
Excel での Pythonはreturnのあとの部分を入力すれば大丈夫そうです。

```:Python in Excel
df1['Age'].mean()
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3625111/b1c14f3f-bdae-6312-4d4b-535a50206407.png)

Averageで計算して、同じ結果が出ました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3625111/425c90e9-63d4-4cfa-0e10-5520008cedc4.png)

# Step 3 :　グループ毎の平均給料を計算する

下のPY式で計算したあと、表示したい変数grouped_averagesを最後に入力します。

```:Python in Excel
grouped_averages = df1.groupby('Group')['Salary'].mean()
grouped_averages
```


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3625111/1775d814-80a2-8664-e607-9eb2440a7f52.png)

左の![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3625111/f0410508-42d5-5889-b62d-a5efbeb251f6.png)をクリックします。


4群の平均給料が出てきました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3625111/eca516ac-4b37-35c6-ad4f-70d19dcbfafd.png)

Excelの公式で計算して、結果は同じです。
これでPythonでいろいろ挑戦してみたいですね！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3625111/f7f201be-a56d-b3b5-3f52-e6952e0b4835.png)

# あとがき

数時間、利用した結果、Excelがこれで結構強化した気がしました。
pandasの機能は基本使えそうですので、統計に関する計算もできると思います（まだ試してないですが）。
統計関係の分析は、今まで基本Excelからデータを出力して、MatlabとSPSSで計算するので、毎回Excelを修正したら、MatlabとSPSSに読み込み直したり、新旧のデータセットがフォルダにいっぱいあったりと、時間がかかりますし、データ管理も大変でした。やっとExcelの中で完結できると思います。使い方に慣れたらとても強いツールになると思います。そして、VBAの時代が終わりそうです。