手順
次の画像ではB3セルに数式を入力し、32桁の数値と10桁の数値の2つの数値の足し算を行っています。
B3セル(Python in Excel)
str(12345678901234567890123456789012+5019583393)
入力手順は次のようになります(2,3は順不同)。
- B3セルに「=PY(」と入力、または数式タブから「Pythonの挿入」を選択してセルを変化させる。
- 数式バーの左にあるアイコンをクリックして「Excelの値」を選択(に変わる)
- 上記の式を入力してCtrl+Enterで確定する。
Pythonでは簡単に長い桁の計算ができるのですが、そのままセルに数値として出力しようとするとExcel側の都合で通常の指数表示に変換されてしまいます。
そこで文字列に変換したうえでセルに出力しています。「str()」を付けずにアイコンをのままにしてオブジェクトのまま受け取り、そこから文字列を取得する方法もありますがここでは省略します。
次の画像はカンマを入れた結果を取得する例です。
B3セル(Python in Excel)
format(12345678901234567890123456789012+5019583393,',')
カンマの入れ方はいくつかありますが、そのうちの1つとしてformatを使った例です。
次の画像はセル内に入力された数字(文字列として入力しています)の足し算を行う例です。
なお、A4セルのプラスの記号は単なる表示用(飾り)です。
B3セル(Python in Excel)
str(int(xl("B3"))+int(xl("B4")))
セルの文字列を数値に変換して足し算を実行し、また文字列に戻しています。
次の画像ではB3:B7の範囲の数字(文字列)を合計しています。
B3セル(Python in Excel)
str(sum([int(i) for i in xl("B3:B7").unstack()]))
Excelの感覚で「sum(int(xl("B3:B7")))」などとやりたくなりますが、これはうまくいきません。
「[int(i) for i in xl("B3:B7").unstack()]」の部分で、配列を1次元に変換(pandas.DataFrame→Series)して各文字列を数値に変換しています。あとはsumで合計してstrで文字列に変換しています。
リスト内包表記([ ]の部分。for文に相当)のおかげで1行で済んでいますがなかなか面倒です。ただしもうちょっと簡単にできるかもしれません。
Pythonの仕様上は桁数の上限はないので、次のような長桁の値も余裕で出力できます。実際にどこまでできるかは試してませんが、セルの文字数制限の方がネックになりそうです。
なお、「**」がべき乗の記号です。
ちなみに引き算は「-」、割り算は「/」、整数商は「//」です。
次の画像では割り算と整数商は「//」を試していますが、小数(込み)の計算では大した精度が出ないので注意してください。精度を高めて計算する方法もありますが本記事では省略します。