どうも!げんじです。
最近Javascript の勉強中にFizzBuzz問題を解く機会があり、ふとExcel VBAでも同じことできるよな~と思ったので解いてみました(。・ω・。)!
せっかく解けたので、今回はExcel VBAで解いたFizzBuzz問題について、備忘録も兼ねてゆるっとシェアしていきたいと思います!
いい頭の体操になるので、興味がある方は挑戦してみるのもいいかも!?
FizzBuzz問題とは
Fizz Buzzとは1から順番に数字を言っていく英語圏の遊びです。
1, 2, ・・・
と一人ずつ順番に発言していくわけですが、3の倍数のときはFizz、5の倍数のときはBuzz、3の倍数かつ5の倍数のときはFizzBuzzと発言します。
1, 2, Fizz, 4, Buzz, Fizz, 7, 8, Fizz, Buzz, 11, Fizz, 13, 14, FizzBuzz, 16, 17, Fizz, 19, Buzz, ・・・
という具合に。
で、これをプログラミングでやるのがFizzBuzz問題。
1~100の自然数を1から順に100まで出力するプログラムを書け。
ただし、3の倍数のときはFizzを出力、5の倍数のときはBuzzを出力、
3の倍数かつ5の倍数のときはFizzBuzzと出力すること。
プログラマの腕試し的な問題らしい。
自分で解いてみたい人は、この下はまだ見ないで!
一旦解いてから読み進めよう(。・ω・。)!
FizzBuzz問題をVBAで解いてイミディエイトウインドウに出力してみた
さっそく1~100までFizzBuzzしてみました!
※分かりやすいようにFizzやBuzzを出力するときに数字も一緒に出力するようにしています。
ソースコードはこんな感じ↓
Sub FizzBuzz()
Dim i As Integer
For i = 1 To 100
If i Mod 3 = 0 And i Mod 5 = 0 Then
Debug.Print i & ":FizzBuzz"
ElseIf i Mod 3 = 0 Then
Debug.Print i & ":Fizz"
ElseIf i Mod 5 = 0 Then
Debug.Print i & ":Buzz"
Else
Debug.Print i
End If
Next i
End Sub
シンプルな問題ですが、For文(繰り返し文)の書き方や、IF文(条件分岐)の書き方、条件式などに対する理解などが問われ、これ一問解くために複数の知識をうまく組み合わせる必要があるので、なかなか書きごたえがありました。
条件式のポイントは、VBAでは割り算の余りの計算にはModという演算子を使うという点ですね。
Javascript やPythonでは割り算の余りを出力するのに%を使うので、少し新鮮でした。
演算子の種類 | 演算子 |
---|---|
足し算 | + |
引き算 | – |
掛け算 | * |
割り算 | / |
割り算の商 | \ |
割り算の余り | Mod |
べき乗 | ^ |
なお、実行結果はこんな感じで、VBEのイミディエイトウインドウに出力されます。↓
1 2 3:Fizz 4 5:Buzz 6:Fizz 7 8 9:Fizz 10:Buzz 11 12:Fizz 13 14 15:FizzBuzz 16 17 18:Fizz 19 20:Buzz 21:Fizz 22 23 24:Fizz 25:Buzz 26 27:Fizz 28 29 30:FizzBuzz 31 32 33:Fizz 34 35:Buzz 36:Fizz 37 38 39:Fizz 40:Buzz 41 42:Fizz 43 44 45:FizzBuzz 46 47 48:Fizz 49 50:Buzz 51:Fizz 52 53 54:Fizz 55:Buzz 56 57:Fizz 58 59 60:FizzBuzz 61 62 63:Fizz 64 65:Buzz 66:Fizz 67 68 69:Fizz 70:Buzz 71 72:Fizz 73 74 75:FizzBuzz 76 77 78:Fizz 79 80:Buzz 81:Fizz 82 83 84:Fizz 85:Buzz 86 87:Fizz 88 89 90:FizzBuzz 91 92 93:Fizz 94 95:Buzz 96:Fizz 97 98 99:Fizz 100:Buzz
良い感じに動いてくれました(。・ω・。)
実際の出力画面はこんな感じで100まで出力されます↓
いや~楽しかった!
今回はVBAでやりましたが、新しい言語を勉強するとき、その言語でもちゃんと解けるか試してみるのも面白そうです。
一問で色々な知識を試されるので、一通り文法を学んだあとの力試しにちょうど良さそうですね(。・ω・。)
コメント