mugaxのなんでも情報局

いろんな分野について発信していきます。

VBAでゼロ埋めする方法から考えるプログラミングの魅力

仕事で使っているExcelマクロにゼロ埋めする処理があったのだが、その書き方が酷いものだったので記しておこう。

処理の内容は、数値を、4桁に満たない数値の場合はゼロ埋めして、4桁の文字列にするというものである。

'ゼロ埋めの悪い書き方
    Dim disp As String
    
    If num < 10 Then
        disp = "000" & num
    ElseIf num < 100 Then
        disp = "00" & num
    ElseIf num < 1000 Then
        disp = "0" & num
    Else
        disp = "" & num
    End If

    Debug.Print disp

たかがゼロ埋めでこれは大げさだ。VBAなら1行で書く方法がある。

'ゼロ埋めの良い書き方
    Debug.Print Format(num, "0000")

Format関数を使えば済むのである。しかし、Format関数の存在や仕様を忘れていることも考えられる。VBAは毎日書くようなメジャーな言語ではない。仕事で必要になった場合に書くという人が多いだろう。細かいことを忘れていても仕方がないのだ。

そんなときはRight関数を使う方法がある。さすがにRight関数は忘れないはずだ。

'Format関数を忘れていた時の書き方
    Debug.Print Right("0000" & num, 4)

人間の思考回路とは大きく異なる方法だが、こういう書き方がプログラミングの魅力のひとつなのだ。

ちなみに、数値の下2桁を取得したいときに、数値を文字列に変換してRight関数を使っているコードを見たことがある。もちろん悪い書き方だ。下2桁が欲しいなら100で割って余りを取得すればいいのである。これも、数学に関心がない大多数の人間の思考回路からは外れているが、プログラミングの定番だから、知らなかったとすれば初心者扱いされても仕方ないだろう。

常に、もっといい書き方はないのかと考える。きっと、それが上達のコツであるし、プログラミングの醍醐味なのだ。