この記事は筑波NSミライラボ Advent Calendar 2023 15 日目の記事です。
はじめに
2023年8月頃、Excel での Pythonが公開されましたが、宣伝されているかどうか定かではありません。私の場合は最近やっとXで知りました。思い出してみると、xlookup機能の時と同じで、新機能ノートに期待せず読まない私ですので、みんなより遅れてスタートしています。やっと手強いVBAとさよならできる日が来るのでしょうか。
今回はExcel での Pythonを試したいので、申請から使用できるまで、導入してみたいと思います。
導入
1. Excelを最新版にする
2. Excelを開き、画面の左下にある「アカウント」を開く
3. Microsoft 365 Family / Personal サブスクの場合はMicrosoft 365 Insider Programが表示されます。
Business/Education サブスクの場合は、管理者から設定されていますので、表示しない場合は管理者に確認してください。
4. Microsoft 365 Insiderのボタンをクリックして、チャンネル選択の画面から、ベータチャンネルを選び、確認したらOKボタンをクリックします。
5. Excelを再起動して、新しいシートを開きます。
6. 「数式」に「Pythonの挿入」があれば、クリックして、チュートリアルみたいな説明を受ければ、利用できます。
使い方
=pyをformulaに入力し、Enterを押せば、セルがPython式を対応します。
100人のExcelランダムデータを作成しました(適当で)。
名前、年齢、所属地域、給料、そして、4グループ(25名1グループ)に分けて、Excel での Pythonを試したいと思います。
まず全員の平均年齢を探してみたいので、普通なら、=AVERAGE(C2:C101)ですぐに答える出せますが、そのままPythonを入力したら、早速エラーが出ました。
そのままPythonを入力ではなさそうです。そのため、説明動画を確認してみました。
Step 1 : Dataframeの作成
Excel での Pythonはpandasのライブラリと連携していますので、引用しなくで大丈夫そうです。
Pythonの時と同じ、Excelデータを変数で定義して、分析したあと、変数に入れて分析した結果を表示するスタイルです。
Dataframeの作成する前に、もう1つのTableを作成します。Tableの名前を変えて、データが入っている(Data)と計算用のTable(Clac)にします。
計算用Table(Clac)の中にPython式を入力します。
DataFrameを作成します。
df1 = xl("Data!A1:F101", headers = True)
実行の時はEnterではなく、Ctrl+Enterになります。
DataFrameの中身を確認することもできます。PY式の左のボタンをクリックし、Excelの値を選択します。
これはExcel での Pythonの特徴であり、可視化できますので、連携性と便利さを感じました。
Step 2 : 平均年齢を計算する
下準備が終わりましたら、平均年齢を計算してみたいです。
Pythonの場合は
import pandas as pd
df1 = pd.DataFrame(xl('Data!A1:F101', headers=True))
return df1['Age'].mean()
Excel での Pythonはreturnのあとの部分を入力すれば大丈夫そうです。
df1['Age'].mean()
Averageで計算して、同じ結果が出ました。
Step 3 : グループ毎の平均給料を計算する
下のPY式で計算したあと、表示したい変数grouped_averagesを最後に入力します。
grouped_averages = df1.groupby('Group')['Salary'].mean()
grouped_averages
Excelの公式で計算して、結果は同じです。
これでPythonでいろいろ挑戦してみたいですね!
あとがき
数時間、利用した結果、Excelがこれで結構強化した気がしました。
pandasの機能は基本使えそうですので、統計に関する計算もできると思います(まだ試してないですが)。
統計関係の分析は、今まで基本Excelからデータを出力して、MatlabとSPSSで計算するので、毎回Excelを修正したら、MatlabとSPSSに読み込み直したり、新旧のデータセットがフォルダにいっぱいあったりと、時間がかかりますし、データ管理も大変でした。やっとExcelの中で完結できると思います。使い方に慣れたらとても強いツールになると思います。そして、VBAの時代が終わりそうです。