Softex CelwareTech Blog
Excel VBA2026-05-16

Excel VBAで桁数の大きい整数を配列計算して三つの立方数の和を検算する

VBAの通常の数値型では扱いにくい大きな整数を1桁ずつ配列で持ち、加算・減算・乗算を実装して三つの立方数の和が42になることを検算する例です。

Excel VBA多倍長整数配列立方数Debug.Print

概要

この実装例は、Excel VBAで通常のLongDoubleでは正確に扱いにくい大きな整数を、1桁ずつ配列に分解して計算する例です。

題材として、数論で有名な「3つの立方数の和が42になる」解を使っています。MIT School of Scienceの記事では、Andrew Booker氏とAndrew Sutherland氏が次の解を得たことが紹介されています。

42 = (-80538738812075974)^3 + 80435758145817515^3 + 12602123297335631^3

この記事では、多倍長整数の考え方をVBAで簡易実装し、文字列で持った大きな整数を配列に変換して、三乗、加算、減算を行い、最終的に42になることをイミディエイトウィンドウで確認します。

使う場面

  • VBAの標準数値型では桁が大きすぎる整数を検算したい
  • 浮動小数点ではなく、整数の各桁を正確に扱いたい
  • 筆算と同じ考え方で、加算、減算、乗算をコード化したい
  • 数学ネタや検算用の実装例として、VBAで計算技術を示したい

処理イメージ図

今回のフォルダーには、計算結果をDebug.Printで出力したイミディエイトウィンドウのスクリーンショットが入っています。

三つの立方数の和が42になることをVBAのイミディエイトウィンドウで確認した結果

使用例

実行する入口はS_立法数の和が42確認です。VBEからこのSubを実行すると、XYZ、それぞれの三乗、途中の和、最終結果をイミディエイトウィンドウへ出力します。

実行例
vba
Call S_立法数の和が42確認

出力の最後が-X^3+Y^3+Z^3 42になれば、巨大な三乗計算と加減算が正しく処理できています。

コピー可能な実装コード

S_立法数の和が42確認.bas
vba
コードを読み込み中...

初心者向けコード解説

StrValue1StrValue2StrValue3では、巨大な整数を数値型ではなく文字列として持っています。VBAの通常の数値型に入れると精度や桁数の問題が出るため、最初から文字列として扱います。

ConvStrArray1DLongでは、文字列の各桁を1つずつ取り出して、Long型の一次元配列に入れています。このとき、1の位が配列の1番目になるように逆順で格納します。これにより、筆算と同じく下の桁から順に計算できます。

MultValue1_9Array1DValueは、配列で表した大きな整数に1桁の数を掛ける関数です。各桁の積が10以上になった場合は、次の桁へ繰り上げます。

MultValue10Array1DValueは、10のべき乗倍を表す処理です。配列の前側に0を追加することで、筆算で桁をずらす操作を再現しています。

MultArray1DValueでは、1桁ごとの乗算結果を桁ずらししながら足し合わせ、配列同士の大きな整数の乗算を実現しています。三乗は、この乗算を2回繰り返して計算しています。

AddArray1DValueは、2つの配列を下の桁から足していく関数です。10以上になったら次の桁に1を繰り上げます。

SubtractionArray1DValueは、配列同士の減算です。大きい方と小さい方を判定し、必要に応じて上の桁から借りることで、筆算と同じ考え方で引き算しています。

最後に、Y^3 + Z^3を先に足し、そこからX^3を引くことで、(-X^3) + Y^3 + Z^3の形を計算しています。コード上ではXの値を正の数として持ち、最後に減算することで、負の立方数を表現しています。

注意点

  • この実装は、学習と検算を目的にした素朴な多倍長整数計算です。高速化や汎用ライブラリ化までは行っていません。
  • 配列の各要素は0から9の1桁を前提にしています。関数に渡す配列の前提が崩れると正しく計算できません。
  • 減算結果が0になる場合や、最上位桁の0除去など、境界条件には注意が必要です。
  • VBAで本格的に巨大整数を扱う場合は、専用ライブラリや.NET連携なども選択肢になります。ただし、仕組みを理解するには今回のような配列による筆算実装がわかりやすいです。

参考

MITの記事では、三つの立方数の和の問題、42の解、計算に使われた分散計算の概要が紹介されています。

まとめ

この実装例では、VBAでも文字列と配列を使えば、通常の数値型を超える桁数の整数計算を自前で扱えることを確認できます。

大きな整数を「1桁ずつ配列に分ける」「下の桁から繰り上げ・借りを処理する」「乗算は1桁乗算と桁ずらしの足し合わせで行う」と考えると、巨大な三乗計算も筆算の延長として実装できます。

この技術で業務改善しませんか?

Excel VBA・GAS・Webアプリで業務の自動化ツールを開発しています。 「こんなことできる?」というご相談だけでもお気軽にどうぞ。

無料相談はこちら →