Excel&VBA解説サイト「エクセルの神髄」様出題の問題集、
「VBA100本ノック」に対する私の回答と解説のページです。
100本ノックの出題リストはこちらから
excel-ubara.com
出題:FizzBuzz発展問題
#VBA100本ノック 22本目
たまにはちょっと遊んでみましょう!
A列に1からの連番を出力してください。
ただし、
・3で割り切れる場合はB列に"Fizz"を出力。
・5で割り切れる場合はC列に"Buzz"を出力。
・両者で割り切れる場合はD列に"FizzBuzz"を出力。
※出力する数値範囲は適当に

◇ 出題ページはこちら
ソースコード
Option Explicit ' 100本ノック022:FizzBuzz発展問題 Sub FizzBuzz問題出力() Cells.Clear Dim R As Long For R = 1 To 100 If R Mod 15 = 0 Then Cells(R, 4) = "FizzBuzz" ElseIf R Mod 3 = 0 Then Cells(R, 2) = "Fizz" ElseIf R Mod 5 = 0 Then Cells(R, 3) = "Buzz" Else Cells(R, 1) = R End If Next End Sub
解説
有名なFizzBuzz問題をセルに出力する問題でした。
アルゴリズムの問題なので定数定義は今回はおやすみしてみました。
親省略のCellsは久々に書いた気がしますね。
今回は特に解説はありませんので、ソースコードを眺めてみてください。
おまけ
せっかくなので「15の倍数」を使わずにやってみました。
Option Explicit ' 100本ノック022:FizzBuzz発展問題 Sub FizzBuzz問題出力() Cells.Clear Dim R As Long For R = 1 To 100 Dim C As Long: C = 1 Dim 出力文字列 As String: 出力文字列 = "" If R Mod 3 = 0 Then C = C + 1 出力文字列 = 出力文字列 & "Fizz" End If If R Mod 5 = 0 Then C = C + 2 出力文字列 = 出力文字列 & "Buzz" End If Cells(R, C) = IIf(出力文字列 <> "", 出力文字列, R) Next End Sub
Elseを使用せず、
- 3の倍数なら出力列番号を+1、出力文字列にFizzを追加
- 5の倍数なら出力列番号を+2、出力文字列にBuzzを追加
という仕組みにすると、うまい具合に15の倍数でD列にFizzBuzzが出力されます。
たまにはこんな無駄な遊びでコードを書くのも楽しいですね(´∀`)