ときおりFizzBuzzを書きたくなる。
FizzBuzzはプログラマーにとって初歩的な題材である。
しかしいろいろと工夫の余地があって面白い。
今回はSelect文を活用する方法を思いついたので、それを使って書いてみたい。
できたコードはこちら。
Sub thomFizzBuzz() For n = 1 To 99 Debug.Print Format(n, "00"); " =>"; Select Case 0 Case n Mod 15: Debug.Print " FizzBuzz" Case n Mod 3: Debug.Print " Fizz" Case n Mod 5: Debug.Print " Buzz" Case Else: Debug.Print n End Select Next End Sub
一般的にSelect Caseの後にくるのは変数である。
でも、それぞれのCaseと単純に比較しているだけなので、別に変数で無くても良いのだ。
余り算の答えである0を比較元に持ってきて、それぞれのCaseに計算式を入れても分岐は成り立つ。
こんなコードを思いついたのはVBAExpert試験のおかげでもある。
VBAExpert試験の学習では、Optionボタンの選択判定をSelect文で行うテクニックが登場する。
オプションボタンとは以下のようにA、B、Cどれかを選択するようなコントロールである。
これまでそれぞれのオプションボタンに対してIf文で判定していたので、以下のテクニックを見たときは目から鱗という気分だった。
Private Sub CommandButton1_Click() Select Case True Case OptionButton1.Value MsgBox "Aが選択されています。" Case OptionButton2.Value MsgBox "Bが選択されています。" Case OptionButton3.Value MsgBox "Cが選択されています。" Case Else MsgBox "未選択です。" End Select End Sub
Trueをそこに持ってくるとは恐れ入った。
そして今回FizzBuzzに応用することを思いついたわけだ。
試験を受けるまでもVBAに関しては結構自身があったのだが、改めて勉強してみると色々と新しい発見があって面白かった。
やはり人のコードを見て勉強するというのは大事だと改めて思った。