超ド級アップデート
「Excel上でPythonを使えるようになる」超ド級アップデートがMicrosoft 365 Insider Program 限定ではあるが(2023/09/17現在)公開されたので、Insider Programに参加していろいろ触ってみる。
※ちなみにIndider Programに参加しても即使用可能性にならない場合もある。当方は2週間待たされた。以下参考。
エクセルでのPythonの発表 (microsoft.com)
セルゲイ・バクラン
最優秀選手
23月 2023, 09 36:<> 午前
はい、ベータチャネルに移行する必要がありますが、一般的にWin 10またはWin 11は関係ありません。その後、定期的に更新を確認してください(通常は火曜日頃ですが、必須ではありません)。それで、新しい機能があなたのマシンに現れるまで数週間、多分数ヶ月待ちます。運が良ければ、それはもっと早いかもしれません。ベータユーザーの100%が一度にカバーしているわけではなく、新しい機能がウェーブによって展開されます。ビルド配置内に適切なコードを使用するということは、実際には、Microsoftサーバーをオンにすることで、ユーザーの別の部分に対してそのようなコードをアクティブ化するためのキーを意味します。宝くじのようなもの。
バージョン
Microsoft® Excel® for Microsoft 365 MSO (バージョン 2310 ビルド 16.0.16830.20000) 64 ビット
サンプル
[数式]リボンから[Pythonの挿入]が追加されている。ここから[Python サンプルを試す]を選択する。

画面右側にサンプルの案内が出てくるので、「散布図を作成する」カテゴリから[+サンプルの挿入]を選択すると、おなじみirisのデータセットと散布図が挿入される。


散布図は左のテーブルを直接参照していて、ためしにsepal_lengthを一部小さくしてみると、グラフも動的に更新される。

↓

散布図オブジェクトが埋め込まれているセルを選択すると、ウィザード画面にPythonのソースが記載されている。

import matplotlib.pyplot as plt
plt.scatter(xl("IrisDataSet2[sepal_length]"), xl("IrisDataSet2[sepal_width]"))
plt.xlabel('sepal_length')
plt.ylabel('sepal_width')
plt.title('Sepal length and width analysis')
サンプルを離れて、基本的なところから動きを確認する。
サンプルデータを別シートに値コピーして、セルをPYモードにしてから表部分をまるっと選択してCtrl+Enter実行する。
(以下、セルは基本的にPYモードで動作させているものとする)
(以下、PYモードのセルは基本的にCtrl+Enterで実行するものとする)
xl("A1:E151", headers=True)
するとセル上にDataFrameオブジェクトが生成される。
ちなみにオブジェクト名を明示的に定義しなくてきちんと動く。
セル番地自体がオブジェクト名になるということだろうか。
→(追記)全然そんなことなかった。セル内でオブジェクト名を定義して、別セルで呼び出せる。

それぞれのセルで
・5 とだけ打てばintのオブジェクト
・[1,2,3,4,5]でlistのオブジェクト
・”five”でstrのオブジェクト
が生成される。

intどうしの足し算は?
別セルにint 10のオブジェクトを作って、
xl("G4")+xl("G7")
で実行すると”#PYTHON!”のエラーが吐き出された。

エラーメッセージ
TypeError: unsupported operand type(s) for +: ‘NoneType’ and ‘NoneType’
PYモードにおいて、任意のPythonオブジェクトのセル番地を指定してもPythonオブジェクトとして取り出せないということだろうか。(これができないとけっこうしんどい)
ちなみにPYモードではなく、=G4+G7といった感じでセル番地の足し算をすると正しい結果が返ってくる。

セル範囲を選択して[]で囲むとlistになる。
[xl("B2:B9")]
PYモードでは戻り値の形式を選択することができる。特に指定がなければPythonオブジェクトが戻ってくるが、PYモードで現れる左上のメニューでExcelオブジェクトを選択すると、DFの中身が展開されて戻ってくる。


(随時追加)