30日間1日1本マクロ生活、10日目です。
ついに10日目。我ながら頑張ってます。3分の1に到達しました。
引き続き、褒めてくれてもいいんですよ。内容が面白くなくても、続いていることに価値があります。はい。
まあ、頑張って30日間続けますよ。
コラッツ予想
マクロを書く準備は、0日目に記事を書きました。
マクロを書く準備早速マクロを書こうと思ったんですが、マクロって何?食えんの?って人もいると思うんで、丁寧に行こうかな、と。マクロってのは、通常は人間の手でやるような作業を、プログラムを書くことで機械に自動的にやらせるってことです。Excelの場合はVBA(Visual Basic for Application)という言語を使ってマクロを書きます。まずはその準備を。Excelを起動すると、ワークシートが現れます。ここでキーボードの「ALT+」を押してください。はキーボードの上方にあるファンクションキーの11番です。すると、このウィンドウが開... 0日目 マクロを書く準備をしよう【30日間1日1本マクロ生活】 - わたしの日常に価値はありますか? |
今日のネタは、コラッツ予想という数学の問題です。
コラッツ予想とは、全ての自然数
が偶数のときは2で割る が奇数のときは3倍して1を足す
そうしてできた数に、同じルールを繰り返していくと最後は必ず1になる、というものです。
数学の世界でも未解決
コラッツ予想は、数学の世界でも未解決の問題です。
この予想が「正しい」とも「間違っている」とも結論が出ていないんです。
世の中には、とんでもなく頭のいい人たちがいるんです。
数学の世界で、信じられないような発想を当たり前のようにしてしまう大天才がたくさんいるんです。
とてもとても同じ人類とは思えない。そういう人々をわたしは数学奇人と呼んでます。
そんな頭の良い人たちが寄ってたかって取り組んでも、この単純な問題が解決できないんです。
数学って本当に奥が深いですよね。
コラッツ予想をシミュレーション
Cells(1,1)に数値を入力し、マクロを実行すると、上のコラッツ予想の操作を繰り返し、1になったところで終了させます。
さっそくコードを
Sub コラッツ予想()
y = 1
Do Until Cells(y, 1) = 1
n = Cells(y, 1)
If n Mod 2 = 0 Then
Cells(y + 1, 1) = n / 2
Else
Cells(y + 1, 1) = 3 * n + 1
End If
y = y + 1
Loop
End Sub
では、解説します。
Do Until
昨日までは「Do While」をよく使っていましたが、今日は「Do Until」を使ってみました。
Whileは後ろに続く条件が「正しい」ときにループが続きます。
Untilは後ろに続く条件が「間違っている」ときにループが続きます。
今回の例では「Do Until Cells(y,1)=1」ですから、Cells(y,1)が1になった時点でループが終わります。
この問題に最適な使い方ですね。
Mod
「n Mod 2」は「nを2で割った余り」と読みます。
2で割ったあまりが0ならば、偶数ですよね。そうでなければ奇数です。
実行結果
マクロを記述するウィンドウの「Sub」と「End Sub」の間にカーソルを置いて、画面上方の再生ボタン的なアイコン(右向きの三角形)をクリックするか、[F5]キーを押します。
このように、ルール通りの操作が繰り返されています。
最初の数字が425の例ですが、58回の操作で1になりました。
現在ではコンピュータの計算で
もしかしたら、その次の数でできなくなるかもしれませんからね。
物事が「できない」ということを証明するのは、とても難しいことです。「できる」ということを証明するのは簡単ですよ。やって見せればいいんです。✕を通らずに全ての○を通れますか○○○○○○○○○○○○○✕○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○ルール どこからスタートしてもよい どこでゴールしてもよい 東西方向、もしくは南北方向に進むことができる。 一度通った○は通れない ✕は通れない 7✕7の枠の外は通れないこのルールを守って、すべての○を一度ずつ通ることができればクリアです。なかなかできませんどうぞ、やってみてください。なかな... 一筆書きできますか?「できない」ことを証明するのが一番難しい - わたしの日常に価値はありますか? |
Excelは便利
悔しいですが、Excelは便利です。
Microsoftにお金を払うのは癪でしょうがないんですが、Excelばかりは仕方がない。
マクロを書くようになると、Excelからは離れられないですね。
30日間、頑張ります。