表計算ソフトCalcを使って数字を扱うBASICマクロを開発していると、時に「大きな数字を3桁ごとに,を入れて文字列化したい」「整数部と小数部の桁数表記を統一したい」といった「数値を指定のフォーマット(書式)で文字列にする」処理が必要になることがあります。OpenOffice.orgのBASICには、Format()というまさにその数字の書式文字列化の関数があるので、基本的な使い方を確認してみることにしましょう。

Format関数は、「文字列にしたい数値」「文字列の書式」という二つの引数を取ります(数値のみで呼び出すと単純に数値を文字列化するStr関数と同等の機能になる)。

書式指定は、文字としての数字をどう配置するか、いくつかの文字で指定します。とりあえずは、以下の指定を覚えておけばほとんどの場面で対応できるのではないでしょうか。

0…その桁に数字があればその数字、なければ"0"を配置
#…その桁に数字があればその数字を配置。なければ空
.…小数点

たとえば、「ある数字nを(上位の桁を0で埋めながら)3桁の数字の文字列にしたい」場合は、

Format(n, "000")

とするわけですね。

ためしに、OpenOffice.orgのBASICマクロ管理画面で以下のMain関数を作成し、実行してみましょう。

Sub Main
	MsgBox(Format(12, "000"))
End Sub

ダイアログで「012」と表示されたはずです。

0や#では「桁数の指定」を行うわけですが、「数字として並べた場合に指定の桁数に収まらない場合は、指定桁数以上の数字として文字列化される」点に注意が必要です。たとえば、以下のマクロは「上位0詰めで3桁」を指定する書式でFormatを呼び出していますが、文字列化する数字が4桁なので、実行すると「1234」と4桁の文字列が表示されます。

Sub Main
	MsgBox(Format(1234, "000"))
End Sub

続いて、小数点以下の桁数指定も試してみましょう。小数点「.」の後に0を並べると、その桁数だけ(数値が整数であっても)小数部分を並べることができます。

Sub Main
	MsgBox(Format(1234, "000.00"))
End Sub

上のマクロなら「1234.00」となるわけですね。数字を「1234.567」としてどうなるかも試してみてください。

最後に3桁ごとに「,」を入れるなど、区切り記号を入れてみましょう。

区切り記号を入れた数字文字列を作成する場合は、#と区切り記号を使います。たとえば3桁ごとに「,」を入れる場合は、書式として「#,###」を指定することになります。

この場合、7桁以上になっても,が一つだけになりそうですが、実際には指定していなくても3桁ごとに,が付加され、たとえば以下のマクロを実行すると「123,456,789」が表示されるはずです。

Sub Main
	MsgBox(Format(123456789, "#,###"))
End Sub

なお、ここで#ではなく0を使うと指定桁数未満の数値を変換したときに上位の桁に0や「,」が付加されるので注意してください。


創作プログラミングの街 > OpenOffice.orgマクロ開発メモ