Excelの凄さを体験せよ ☆ 乱数とVBAで広がるマルコフ連鎖とモンテカルロの世界

エクセルは、マルコフ連鎖もモンテカルロ法も得意
エクセルは、マルコフ連鎖もモンテカルロ法も得意

はじめに|Excelで確率の世界を動かす

Excelは、表計算やデータ集計、グラフ作成などに広く利用されているソフトウェアです。

業務では、担当者ごとに独自の使い方が発展し、作成した本人にしか仕組みが分からないような属人的なツールになることもあります。

一方、個人の研究や分析、意思決定に利用すると、Excelは実に強力な道具になります。

筆者「理屈コネ太郎」が特に面白いと感じるのは、乱数発生機能とVBA(Visual Basic for Applications)を組み合わせた確率的シミュレーションです。

乱数を発生させ、一定の条件に従って計算を繰り返すことで、さまざまな現象をコンピューター上に再現できます。

計算内容やプログラムの作り方によっては、数千万回、さらには数億回規模の試行を行うことも可能です。

そこから得られるのは、一つの計算結果だけではありません。

同じ条件から生じ得る多数の結果を調べることで、現象の背後にある確率的な構造を考察できるのです。

この記事では、筆者がExcelの面白さに気づいた経験を出発点に、マルコフ連鎖やモンテカルロ法を使って何ができるのか、その魅力を紹介します。

1.ファイナンスの授業で気づいたExcelの可能性

筆者がExcelの本当の凄さに気づいたのは、社会人大学院でファイナンスを学び始めたときのことです。

大学院では経営学や経済学など幅広い分野を学びましたが、なかでも数学を駆使するファイナンスの授業に強く引き込まれました。

そこで出会ったのが、「酔歩(ランダムウォーク)」という概念とExcelです。

ランダムウォークとは、確率的に決まる移動を繰り返すことで、位置や状態が変化していく過程です。

例えば、数直線上の点が、コインを投げるたびに右か左へ一歩ずつ移動するとします。

一歩進む方向は確率によって決まり、その繰り返しによって点の位置が変化していきます。

Excelで乱数を発生させれば、この動きをシミュレーションできます。

さらに、同じ出発点から何度もシミュレーションを実行すると、さまざまな経路が現れます。

ある試行では出発点から遠く離れ、別の試行では出発点の近くに戻ってくるかもしれません。

試行を重ねれば、一定の歩数を経過した時点で、どの位置にどの程度の頻度で到達するかを調べることもできます。

私は、この仕組みに強く惹かれました。

確率的に決まる個々の動きを繰り返すことで、全体としてどのような結果の分布が現れるのかを観察できるからです。

以来、Excelを使って社会現象や人間の営みを数理モデルとして表現し、統計的に分析することが趣味の一つになりました。

こうした取り組みの成果を、海外の医学会議で発表した経験もあります。

Excelは、私にとって身近な現象を数学的に考察するための道具になったのです。

2.乱数とVBAで繰り返し計算する

Excelには、乱数を発生させる機能があります。

例えば、RAND関数を使えば、0以上1未満の疑似乱数を生成できます。

VBAでもRnd関数などを利用して疑似乱数を生成できます。

疑似乱数は、一定の計算手順によって生成される数値の列です。適切な乱数生成器を使うことで、確率に従って結果が変化する現象をシミュレーションできます。

さらにVBAを使えば、変数、条件分岐、繰り返し処理などを組み合わせて、自分で計算手順を設計できます。

例えば、ある確率で出来事が発生するモデルを作り、それを1万回、100万回と繰り返します。

各試行の結果を集計すれば、出来事の発生頻度や結果のばらつきを調べられます。

試行回数を増やしていくと、推定結果がどのように変化するかを観察することもできます。

数億回の計算から何を取り出すか

簡単な計算であれば、VBAでも数億回規模の反復処理を実行できます。ただし、実行に必要な時間は、計算内容やプログラムの作り方、パソコンの性能によって変わります。

ここで重要になるのが、何を記録するかという問題です。

例えば、1億回の試行から、ある出来事が何回発生したかを知りたいとします。

その場合、VBAの変数を使って発生回数を集計し、最後に合計や割合をワークシートへ書き出せば十分です。

Excelのワークシートには行数の上限がありますが、プログラム内で繰り返し実行する計算の回数は、それとは別に考えられます。

さらに、計算結果の平均値や分散なども、各試行の値を順次処理しながら求めることができます。

何を計算し、何を記録し、どのような結果を取り出すのか。

こうしたことを自分で設計できる点に、VBAプログラミングの面白さがあります。

乱数の品質と再現性

確率的シミュレーションでは、計算速度に加え、使用する乱数の品質も重要になります。

ExcelのRAND関数とVBAのRnd関数は、それぞれ異なる疑似乱数生成の仕組みを使用しています。

どちらも確率的シミュレーションの学習や身近な数値実験に利用できますが、乱数生成器にはそれぞれ固有の統計的性質があります。

例えば、従来のVBAのRndには約1,677万回という周期が知られています。

疑似乱数の周期とは、生成される数値の並びが繰り返されるまでの長さです。

数億個の乱数を連続して使用するような計算では、乱数生成器の周期や統計的性質が、得られる結果の信頼性に関わります。

そのような用途では、計算規模に適した乱数生成器を選択することが重要です。

また、シミュレーションでは再現性も大切になります。

VBAのRndには、初期値(シード)を管理して同じ疑似乱数列を再現する方法があります。一方、ワークシートのRAND関数は再計算によって値が更新され、通常の関数の引数からシードを指定する仕組みはありません。

同じ乱数列を再現できれば、プログラムの修正前後で計算結果を比較する際にも役立ちます。

試行回数、乱数の品質、計算方法、再現性。これらを適切に組み合わせることが、確率的シミュレーションの信頼性を高める基礎になります。

プログラミングに興味がある方には、関連記事も用意しています。

関連記事:初めてのプログラミングにExcel VBAを勧める理由 ☆ 単純なコードからより良い意思決定を学ぶ

3.マルコフ連鎖で状態の変化を考える

確率的な現象を表現する方法の一つに、マルコフ連鎖があります。

マルコフ連鎖は、現在の状態が分かれば、次の状態への遷移確率が定まる確率モデルです。

例えば、天気を「晴れ」と「雨」の二つの状態に分けます。

今日が晴れである場合と、雨である場合とで、翌日の天気が決まる確率をそれぞれ設定します。

この確率に従って乱数を発生させれば、天気が日々どのように変化するかをシミュレーションできます。

さらに長期間の計算を行えば、設定した遷移確率の下で、晴れと雨がそれぞれどの程度の頻度で現れるかを調べられます。

先ほど紹介したランダムウォークも、次の移動が現在の状態と所定の確率によって決まるように構成すれば、マルコフ連鎖の一例になります。

マルコフ連鎖の考え方は、社会や経済、人間の行動など、さまざまな状態の変化をモデル化する際にも利用できます。

例えば、ある集団に属する人々の状態が、時間の経過とともにどのような確率で変化するのかを考察できます。

状態をどのように分類するか。遷移確率をどのように設定するか。

それらを決めることによって、現象を確率的な状態遷移として表現できます。

そしてExcel VBAを使えば、そのモデルを繰り返し動かし、結果を観察できるのです。

4.モンテカルロ法で多数の可能性を調べる

マルコフ連鎖が状態の変化を表現する確率モデルであるのに対し、モンテカルロ法は、乱数を用いた繰り返し計算によって数値的な推定を行う手法です。

例えば、複数の不確実な条件によって結果が決まる問題を考えます。

それぞれの条件に確率分布を設定し、乱数を使って値を生成します。

その値を使って計算し、一つの結果を得ます。

これを何度も繰り返すと、多数の結果が得られます。

それらを集計すれば、結果の平均値、ばらつき、一定の範囲に収まる確率、極端な結果が生じる頻度などを調べられます。

解析的に解くことが難しい問題でも、モンテカルロ法によって数値的な近似値を求められる場合があります。

また、マルコフ連鎖とモンテカルロ法を組み合わせることもできます。

マルコフ連鎖に従う状態遷移を何度もシミュレーションすれば、そのモデルの下でどのような経路や結果が生じるのかを調べられます。

Excel VBAでは、乱数の生成、条件に応じた処理、繰り返し計算、結果の集計までを、一つのプログラムとして組み立てられます。

さらに、結果をExcelのワークシートに表示し、表やグラフとして観察できます。

自分の考えたモデルを動かし、その結果を直接確かめられることが、Excel VBAの魅力です。

5.一つの現実から、起こり得る多数の結果へ

私たちが実際に観測するのは、現実に生じた出来事です。

例えば、ある株価が1年間で大きく上昇したとします。

私たちが知ることのできるのは、その期間に実際に生じた価格変動です。

しかし、株価の変化を確率モデルで表現すれば、同じ出発点から異なる経路をたどる場合も計算できます。

ある経路では価格が上昇し、別の経路では下落するかもしれません。

多数の経路を生成して結果を集計すれば、どの程度の価格変動が、どのような頻度で生じるのかを調べられます。

現実に観測された一つの結果から、同じモデルの下で起こり得る多数の結果へと、考察の対象を広げられるのです。

ここに、確率的シミュレーションの大きな魅力があると考えます。

モデルを作ることで、何が分かるのか

確率モデルを作るには、現象を構成する要素を整理する必要があります。

どのような状態や変数を設定するのか。

それらはどのような確率に従って変化するのか。

変数の間には、どのような関係があるのか。

そして、何を結果として評価するのか。

これらを明確にすることで、現象についての自分の理解が、計算できる形になります。

モデルを実行すれば、設定した条件からどのような結果が導かれるかを調べられます。

さらに、条件や確率分布を変更すると、結果がどのように変化するかも観察できます。

計算結果をどこまで信頼できるのか

ここで重要になるのが、シミュレーションによって得られた結果の信頼性です。

例えば、1億回の試行を行い、ある結果が生じる確率を推定したとします。

その推定値の信頼性には、試行回数に加え、モデルの妥当性、前提条件、乱数の品質、計算処理の正確さなどが関わります。

また、乱数を使った有限回の試行には統計的な誤差が生じます。試行回数を増やしながら推定結果の安定性を確認することも重要です。

モデルの前提となる確率分布が実際の現象にどの程度適合しているかによって、計算結果の意味も変わります。

例えば、将来の株価変動をどのような確率分布で表現するかによって、大幅な価格下落が生じる確率の推定値も変化します。

実際のデータとの比較や、異なる仮定による計算結果の検討を通じて、モデルの妥当性を評価できます。

ここで、もう一つ重要なことに気づきます。

シミュレーションの目的は、計算を大量に実行することから、得られた結果を使って現象を理解することへと発展していくのです。

どの条件が結果に大きな影響を与えるのか。

どの仮定を変更すると、結果の分布が大きく変わるのか。

どの程度の精度があれば、自分の考えたい問題について有用な判断ができるのか。

こうした問いを重ねることで、現象への理解を深めることができます。

私がExcelで確率的シミュレーションを行うことに魅力を感じるのは、この一連の作業です。

自分の考えをモデルにし、そのモデルを何度も動かし、結果を観察する。

すると、当初は気づかなかった関係が見えてくることがあります。

自分の頭の中にあった考えが、数多くの試行結果となって目の前に現れ、その結果が自分の考えをさらに発展させてくれるのです。

6.Excelから広がる学びの世界

Excelによる確率的シミュレーションに興味を持つと、学びの対象はさらに広がります。

例えば、ファイナンスでは、将来の資産価格や金利などの不確実性をモデル化して分析します。

そのような分析を発展させると、リアルオプションという考え方にもつながります。

リアルオプション分析では、将来の状況を見てから投資や事業上の判断を行える柔軟性に、どの程度の経済的価値があるかを考えます。

将来の不確実な条件と、その時点で選択できる行動をモデルに組み込み、選択肢の価値を比較します。

Excel VBAでも、こうした分析に取り組むことができます。

また、確率的な計算手法をさらに学ぶと、MCMC(Markov Chain Monte Carlo:マルコフ連鎖モンテカルロ法)という手法にも出会います。

MCMCは、目的とする確率分布を定常分布として持つマルコフ連鎖を構成し、その連鎖から標本を得る手法です。

直接扱うことが難しい複雑な確率分布について、数値的な推定を行う際などに利用されます。

MCMCの考え方を理解するうえでも、マルコフ連鎖とモンテカルロ法について学んだ経験が役立ちます。

2026年現在の計算環境

現在は、Excelの中でPythonを利用できるPython in Excelも登場しています。

対応するMicrosoft 365環境では、PythonのNumPyやSciPyなどのライブラリを活用し、数値計算や統計解析を行うことができます。Pythonの計算はMicrosoftのクラウド環境で実行されます。

また、独立したPython環境には、複雑な確率モデルや大規模なシミュレーションを扱うためのさまざまなライブラリがあります。

用途に応じて専用のシミュレーションソフトウェアを利用する方法もあります。

Excel VBAを使って確率モデルやプログラミングの仕組みを理解し、興味や目的に応じて、こうした環境へ学びを広げていくこともできます。

Excelのワークシート上で条件を設定し、プログラムを動かして結果を観察するという経験は、その後に別の計算環境を使う際にも役立ちます。

実用書から学ぶ楽しさ

Excel VBAや確率的シミュレーションについては、多くの実用書や専門書が出版されています。

初心者向けのVBAプログラミングの書籍から始め、興味に応じて確率論やファイナンスの書籍へと進むことができます。

ファイナンス分野の書籍には、経営学や金融に関する用語が多く登場するため、最初は難しく感じるかもしれません。

しかし、ファイナンスの基礎を学ぶことで、Excelの活用方法とともに、現代の経済や社会を理解するための知識も身につきます。

食わず嫌いをせず、関心を持ったところから少しずつ学びを広げていくことも、独学の楽しさです。

結論|Excelで世界の見方が変わる

Excelの乱数発生機能とVBAプログラミングを使えば、身近な現象を確率モデルとして表現し、繰り返し試行することができます。

マルコフ連鎖で状態の変化を表現し、モンテカルロ法で多数の可能性を調べる。

そこからリアルオプション分析やMCMCへと、学びを発展させることもできます。

筆者にとって、こうしたExcelの使い方を知ったことは、とても大きな発見でした。

現実に観測された一つの結果を出発点に、その背後にある確率的な構造を考える。

そして、自分で作ったモデルを動かし、結果を観察しながら理解を深めていく。

その過程では、モデルを作る能力だけでなく、モデルから得られた結果の信頼性を評価する能力も育っていきます。

こうした面白さは、社会人大学院でファイナンスを学んでいた頃から、今も変わりません。

Excelは、このような知的な試行錯誤を身近な環境で楽しめる道具です。

乱数機能やVBAプログラミングに触れる機会を逃すことは、Excelを使っている人にとって、壮大な損失とさえ言いたくなります。

マルコフ連鎖やモンテカルロ法、そしてリアルオプション分析やMCMCに興味がある方は、ぜひExcelを使って自分で計算してみてください。

一つの現実の背後に、どれほど多くの可能性が広がっているのか。

その世界を自分の手で動かしてみると、きっと新しい発見があると思います。

面白いですよ。


6. サイト内の他の記事を閲覧したい方

理不尽社会を強くサバイブ|元医師が過去の自分に送りたい人生のヒント集
当サイト内記事のトピック一覧ページ 【最上位のページ】
管理人の自己紹介は理屈コネ太郎の知ったか自慢|35歳で医師となり定年後は趣味と学びに邁進

作成者: 理屈コネ太郎

元消化器内視鏡医・産業医。現在は社会・人間行動・構造分析をテーマに執筆活動を行う。定年退職後はヨット・ボート・クルマなど趣味と構造研究の日々を過ごす。

コメントする

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です