vba seminar banner 
    Home   >>   Quiz   >>   Fizz Buzz
 "Fizz Buzz 問題"
"出力例"
1から100までの数を出力するプログラムを書け。

ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」と出力し、3と5の両方の倍数のときは、「FizzBuzz」と出力しろ。

この問題は、プログラマ採用試験として使われたことがあるとか。

fizzbuzz01
"サンプルマクロ01"
"ヒント・解説01"
Public Sub FizzBuzz01()

Dim i As Byte

For i = 1 To 100

    If i Mod 3 = 0 And i Mod 5 = 0 Then
        Cells(i, 1).Value = "FizzBuzz"
    ElseIf i Mod 3 = 0 Then
        Cells(i, 1).Value = "Fizz"
    ElseIf i Mod 5 = 0 Then
        Cells(i, 1).Value = "Buzz"
    Else
        Cells(i, 1).Value = i
    End If

Next i

End Sub
	
  1. Ifによる条件分岐を使う。

  2. 剰余(Mod)を使う。

  3. Forを用いてループを行う。
"サンプルマクロ02"
"ヒント・解説02"
Public Sub FizzBuzz02()

Dim i As Byte

For i = 1 To 100

    If i Mod 3 = 0 Or i Mod 5 = 0 Then
        
        If i Mod 3 = 0 Then
            Cells(i, 3).Value = "Fizz"
        End If
        
        If i Mod 5 = 0 Then
            Cells(i, 3).Value = Cells(i, 3).Value & "Buzz"
        End If
        
    Else
        Cells(i, 3).Value = i
    End If

Next i

End Sub
	
   文字の結合に、"&"演算子を使う。
"サンプルマクロ03"
"ヒント・解説03"
Public Sub FizzBuzz03()

Dim i As Byte
Dim count3 As Byte, count5 As Byte

count3 = 0: count5 = 0

For i = 1 To 100

    count3 = 1 + count3: count5 = 1 + count5

    If count3 = 3 And count5 = 5 Then
    
        Cells(i, 1).Value = "Fizz" & "Buzz"
        count3 = 0: count5 = 0

    ElseIf count3 = 3 Then
    
        Cells(i, 1).Value = "Fizz"
        count3 = 0

    ElseIf count5 = 5 Then
    
        Cells(i, 1).Value = "Buzz"
         count5 = 0

    Else
    
        Cells(i, 1).Value = i
        
    End If

Next i

End Sub
	
  Mod(剰余)を使わない。

  カウンタを作って判定する。
"サンプルマクロ04"
"ヒント・解説04"
Public Sub FizzBuzz04()

Dim FB As Variant
Dim i As Integer, j As Integer, a As Integer, b As Integer, c As Integer
Const x As Byte = 100 'セルの総数
Const n As Byte = 15 '配列の総数

a = Fix(x / n) '商
b = x Mod n '余

FB = Array("Null", "Null", "Fizz", "Null", "Buzz", "Fizz", "Null", _
"Null", "Fizz", "Buzz", "Null", "Fizz", "Null", "Null", "FizzBuzz")

For i = 1 To a + 1

    For j = 1 To IIf(i = a + 1, b, n)
        
        c = (i - 1) * n + j
        Range("G" & c).Value = IIf(FB(j - 1) = "Null", c, FB(j - 1))
        
    Next j

Next i

End Sub
	
  配列を使って最小公倍数分、繰り返しのセットをつくる。

  配列から値を取り出して表示する。