仕事で使っている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で割って余りを取得すればいいのである。これも、数学に関心がない大多数の人間の思考回路からは外れているが、プログラミングの定番だから、知らなかったとすれば初心者扱いされても仕方ないだろう。
常に、もっといい書き方はないのかと考える。きっと、それが上達のコツであるし、プログラミングの醍醐味なのだ。