t-hom’s diary

主にVBAネタを扱っているブログ…とも言えなくなってきたこの頃。

VBA Select文の比較テクニック

ときおり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どれかを選択するようなコントロールである。
f:id:t-hom:20150912011033p:plain

これまでそれぞれのオプションボタンに対して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に関しては結構自身があったのだが、改めて勉強してみると色々と新しい発見があって面白かった。
やはり人のコードを見て勉強するというのは大事だと改めて思った。

当ブログは、amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、 Amazonアソシエイト・プログラムの参加者です。