1. 経緯
現在、Aシステムズ様のxoBlos開発業務にて、Excelマクロの解析を行っている。
その中でFormat関数があり、時刻を表す表記として「hh:mm」と「hh:nn」の2種類が使われていたため、違いが気になり調べてみた。
2. Format関数とは
VBAで使用できる、日付や時刻、数値などを指定の書式の文字列に変換できる関数。
Format(Expression, [Format], [FirstDayOfWeek], [FirstWeekOfYear])
第一引数のExpressionに書式変換したい日付、第二引数の[Format]に書式を設定することで、指定の書式に変換することができる。
例えば、上の画像のように日付から「/(スラッシュ)」や「:(コロン)」を消した書式に変更したり、月や日の前に0を付けた書式に変更したりすることができる。
3. 「hh:mm」と「hh:nn」の違い
今回、実際に見かけたソースコードは以下の2種類である。
どちらも日付を「時間」と「分」の書式に変更する内容であり、マクロを実行すると画像のように同じ結果が表示された。
この「mm」と「nn」の表記の違いについて、Microsoftの公式リファレンスでは以下のように掲載されている。
どちらも同じ「分」を表す記号だが、「mm」はhまたはhhが先行する場合のみ、「分」として扱われる。
実際にマクロを実行して結果を確認してみると、時間を表す「h」の表記が無い場合は、下の画像のように実行結果が異なることが分かる。
書式を「nn」で指定した方は正しく「分」が取得できているが、
「mm」で指定した方は「分」ではなく「月」が取得されている。
これは、「m」という記号が「月」を表す記号としても使用できるためである。
「m」という記号だけでは「月」と「分」どちらを表すか判断ができないため、「h」の表記が無い場合は自動的に「月」が取得されるようになっている。
4. まとめ
これまで「分」を表す記号として、「minute」の頭文字である「m」のみを使用していたため、「n」という表記もあることに気づけて良かった。
一目で見たときの伝わりやすさでは「m」の表記が良いと思った。他のプログラミング言語では時刻の表記がどのようになっているのか調べてみようと思った。
5. 余談
・Excel
TEXT関数では、「n」の記号で「分」を指定することはできない。
代わりにMINUTE関数を使用して「分」のみを取得するなど、工夫が必要。
・xoBlos
xoBlosでは「n」の記号は存在しないが、小文字の「m」で「分」のみを取得することができる。(大文字の「M」で「月」を取得することができる)
6. 参考サイト
・Format 関数
・Format関数で「hh:nn:ss」と「hh:mm:ss」(エクセルVBA)
コメント