mugaxのなんでも情報局

いろんな分野について発信していきます。

FizzBuzzで学ぶExcel VBA

はじめに

FizzBuzzを題材にしてExcel VBAを学んでいきます。

FizzBuzzとは?

英語圏でよく遊ばれている言葉ゲームです。ひとりずつ順番に1から数字を言っていきます。ただし、3の倍数のときは、数字の代わりにFizz、5の倍数のときはBuzz、3の倍数かつ5の倍数のときはFizzBuzzと言います。間違えた人が負けというゲームです。

VBAFizzBuzzを作る

次のようなプログラムを作ることにします。

  • 1から100までの整数を順番に表示する。ただし、3の倍数のときは、数の代わりにFizz、5の倍数のときはBuzz、3の倍数かつ5の倍数のときはFizzBuzzと表示する。
  • 表示するのはセルA1からA100とする。

作成例

'-----------------------------------
'基本のFizzBuzz
'-----------------------------------
Sub FizzBuzz01()

    Dim i As Long
    Dim dispData As Variant

    For i = 1 To 100

        If i Mod 3 = 0 And i Mod 5 = 0 Then
            dispData = "FizzBuzz"
        ElseIf i Mod 3 = 0 Then
            dispData = "Fizz"
        ElseIf i Mod 5 = 0 Then
            dispData = "Buzz"
        Else
            dispData = i
        End If

        Range("A" & i).Value = dispData

    Next

End Sub
'-----------------------------------
'分岐を減らしたFizzBuzz
'-----------------------------------
Sub FizzBuzz02()

    Dim i As Long
    Dim dispData As Variant
    
    For i = 1 To 100
    
        dispData = ""
        
        If i Mod 3 = 0 Then
            dispData = "Fizz"
        End If
        
        If i Mod 5 = 0 Then
            dispData = dispData & "Buzz"
        End If

        If dispData = "" Then
            dispData = i
        End If
    
        Range("A" & i).Value = dispData
    
    Next

End Sub

上記1つ目と2つ目のコードの違いは、プログラミングを学び始めたばかりの初心者がIf文の仕組みを理解するのにちょうどよいでしょう。

ちなみに、VBAを使わずにワークシート関数だけでも作れる

=IF(MOD(ROW()-ROW($A$1)+1,15)=0,"FizzBuzz",IF(MOD(ROW()-ROW($A$1)+1,3)=0,"Fizz",IF(MOD(ROW()-ROW($A$1)+1,5)=0,"Buzz",ROW()-ROW($A$1)+1)))

この数式をA1に貼り付けてA100までコピーするだけです。