![見出し画像](https://assets.st-note.com/production/uploads/images/75682527/rectangle_large_type_2_b58e72927e2c4e3e29aa162dc72e0071.png?width=800)
【Excelマクロで遊ぼう】ピタゴラス数の組合せ、第100番目はいくら?
今回は「Excelのマクロで遊ぼう」のコーナーです。題材として使うのは中学校の数学で習うピタゴラスの定理です。斜辺の長さの2乗は残り2辺の2乗の和に等しいっていうやつです。これを満たす整数三辺の中で1番小さな組合せ「ピタゴラス数」は(3,4,5)です。2番目に小さいのは(5,12,13)ですが「第100番目の組合せを知りたい!」ってなった時には簡単にはいきません。とてもじゃないですけど、いちいち手計算なんかやってられません。
![](https://assets.st-note.com/img/1648996934325-6JGeUFmXkR.png?width=800)
そんな時に便利なのがExcelの機能の一つ「マクロ」なんです。マクロを一言で言えば、めんどいことをコンピュータに全部やらせる指示書ですね。今回のピタゴラス数を計算して出力する指示書を日本語で書くとすれば、下の3つの命令になります。
1.辺の長さaとbにそれぞれ1から上限値kまでの数値を代入して
aとbの2乗を足し算したものを「c1」と呼ぶ
(結果の重複を避けるためa≦b条件、kはとりま1000にしておく)
2.「c1」のルートを取ったものを「c」と呼ぶ
3.もしcが整数になったら直角三角形なのが確定するので、その時だけ
エクセルシートにピタゴラス数番号と(a,b,c)の組合せを出力する
3つの命令をエクセルの言葉(VBA)に翻訳すると次のようになります。
Sub Yattuke()
Dim a As Long, b As Long, c As Long, c1 As Long, d As Long, k As Long
d = 1
k = 1000
For a = 1 To k
For b = a To k
c1 = a ^ 2 + b ^ 2
c = Sqr(c1)
If (Int(Sqr(c1) = c)) Then
Cells(d, 1).Value = d
Cells(d, 2).Value = a
Cells(d, 3).Value = b
Cells(d, 4).Value = c
d = d + 1
End If
Next b
Next a
End Sub
もし「試しにやってみたいなぁ」という方は、Excelを開いた初期画面からの手順を書いておきましたので試してみて下さい。
![](https://assets.st-note.com/img/1649000658849-esHKJ2c6Qg.png?width=800)
結果は下記の通りです。A列はピタゴラス数番号、B列は辺の長さa、C列は辺の長さb、D列は辺の長さcを表しています。
![](https://assets.st-note.com/img/1648997346670-EtqFHTKQu2.png?width=800)
このように、aを小さい順に並べた時のピタゴラス数第100番目は(51,140,149)と瞬く間に分かりました。ついでに、第1000番目はどうでしょうか?実は、これが分かるように指示書ではkの値を1000としておいたんです。結果は(740,777,1073)というかなりデカい組合せでした。
もっと遊びたい方は、指示書のkの数字1000をいじって大きくしてF5で実行してみて下さい。もっとデカい組合せが見つかるでしょう。ただ、コンピュータの性能を超えるほど大きい数を入力するとフリーズする恐れがあったり、計算を終えるまでエクセルの作業ができなくなりますので、そんな時はEscで停止して下さい。
( 'ω' ).。oO( ほぼ一瞬で答えが分かるって凄くないですか?
「ためになるわ」と感じて頂ければサポートを頂ければ幸いです。よろしくお願いいたします。