はじめに
FizzBuzzを題材にしてExcel VBAを学んでいきます。
FizzBuzzとは?
英語圏でよく遊ばれている言葉ゲームです。ひとりずつ順番に1から数字を言っていきます。ただし、3の倍数のときは、数字の代わりにFizz、5の倍数のときはBuzz、3の倍数かつ5の倍数のときはFizzBuzzと言います。間違えた人が負けというゲームです。
次のようなプログラムを作ることにします。
- 1から100までの整数を順番に表示する。ただし、3の倍数のときは、数の代わりにFizz、5の倍数のときはBuzz、3の倍数かつ5の倍数のときはFizzBuzzと表示する。
- 表示するのはセルA1からA100とする。
作成例
- 基本のFizzBuzz
'-----------------------------------
'基本の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
'-----------------------------------
'分岐を減らした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までコピーするだけです。