"Fizz Buzz 問題"
"出力例"
1から100までの数を出力するプログラムを書け。
ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」と出力し、3と5の両方の倍数のときは、「FizzBuzz」と出力しろ。
この問題は、プログラマ採用試験として使われたことがあるとか。
ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」と出力し、3と5の両方の倍数のときは、「FizzBuzz」と出力しろ。
この問題は、プログラマ採用試験として使われたことがあるとか。
"サンプルマクロ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を用いてループを行う。
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
配列を使って最小公倍数分、繰り返しのセットをつくる。
配列から値を取り出して表示する。
配列から値を取り出して表示する。