和風スパゲティのレシピ

日本語でコーディングするExcelVBA

22本目:FizzBuzz発展問題

Excel&VBA解説サイト「エクセルの神髄」様出題の問題集、
VBA100本ノック」に対する私の回答と解説のページです。

100本ノックの出題リストはこちらから
excel-ubara.com

出題:FizzBuzz発展問題

#VBA100本ノック 22本目
たまにはちょっと遊んでみましょう!
A列に1からの連番を出力してください。
ただし、
・3で割り切れる場合はB列に"Fizz"を出力。
・5で割り切れる場合はC列に"Buzz"を出力。
・両者で割り切れる場合はD列に"FizzBuzz"を出力。
※出力する数値範囲は適当に

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が出力されます。

たまにはこんな無駄な遊びでコードを書くのも楽しいですね(´∀`)