OpenOfficeでNUMBERSTRING関数(のようなもの) 漢字で金額を表示

エクセルでは、NUMBERSTRING関数で数字を漢字に変換して表示することができます。が、OpenOfficeでは、NUMBERSTRING関数がありません。
が、それに近いことをやってみようということで、下のサンプルを作りました。

送信者 OpenOffice

このサンプルファイルは、SKYDRIVEからcalc117.odsをダウンロードしてください。
L2セルを例にとって説明します。

=IF(B2*C2>=100;CHOOSE(IF(RIGHT(INT(B2*C2/100);1)="0";10;RIGHT(INT(B2*C2/100);1));"一";"二";"三";"四";"五";"六";"七";"八";"九";"〇");"")
この数式のキーポイントはCHOOSE関数です。



まず、B2*C2の値が100以上のときの処理であることを最初に書きます。
=IF(B2*C2>=100;処理内容;"")

L2セルには100の位の値を表示させたいので、まずB2*C2の百の位の値を調べます。
=RIGHT(INT(B2*C2/100);1) これで7が返されます。

CHOOSE関数は、1から30までの値をINDEXとして、対応する値を取り出す関数です。
例えば、=CHOOSE(2;"A";"B";"C")  で2番目の値のBが取り出されます。INDEXを3にするとCが取り出されます。
ここでL2の百の位の数字が0の場合、エラーが返されてしまいます。
試しに、=CHOOSE(0;"A";"B";"C")をOpenOfficeのセルに貼り付けてみてください。
この問題を解決するために、ゼロの場合、CHOOSE関数に10という値を渡すことにします。それ以外(1−9)のときはそのままの数字を渡すことにします。
ここで0をダブルクォーテーション("")で囲っておく必要があります。RIGHT(INT(B2*C2/100);1)で得られた数字は、計算できる数値ではなく、文字列としての数字だからです。
文字列としての0だったら10を返し、それ以外の場合は、その数字をそのままINDEXとして使用することにします。
=IF(RIGHT(INT(B2*C2/100);1)="0";10;RIGHT(INT(B2*C2/100);1)) で、7が返されます。

この値をINDEXにしてCHOOSE関数に当てはめるだけです。
=IF(B2*C2>=100;CHOOSE(IF(RIGHT(INT(B2*C2/100);1)="0";10;RIGHT(INT(B2*C2/100);1));"一";"二";"三";"四";"五";"六";"七";"八";"九";"〇");"")

見た目は長くて複雑なようですが、構造はシンプルであることが分かってもらえると思います。
K2セルでは1000の位を扱うので、2*C2>=1000;CHOOSE(IF(RIGHT(INT(B2*C2/1000);1)="0";10;RIGHT(INT(B2*C2/1000);1))
J2セルでは10000の位を扱うので、2*C2>=10000;CHOOSE(IF(RIGHT(INT(B2*C2/10000);1)="0";10;RIGHT(INT(B2*C2/10000);1))
M2セルでは10の位を扱うので、2*C2>=10;CHOOSE(IF(RIGHT(INT(B2*C2/10);1)="0";10;RIGHT(INT(B2*C2/10);1))
上のように0を増やしたり減らしたりすることで桁の調整をします。

ただし、1の位は
=CHOOSE(IF(RIGHT(INT(B2*C2);1)="0";10;INT(MOD(B2*C2;10)));"一";"二";"三";"四";"五";"六";"七";"八";"九";"〇")
B2*C2の値を10で割ったときの余りの一桁めをCHOOSE関数に当てはめるという形で数式をシンプルに整理できます。
2行目の場合、MOD(B2*C2;10)で、2が返されます。

合計を示す8行目では、B2*C2の代わりにSUMPRODUCT関数で得られた個数と単価の掛け算の合計を扱うので、そこが上の数式と変わるだけで基本的な構造に何の違いもありません。
さらに、税込み合計の場合は、8行目に比べて1.05を掛けているだけです。

これで、エクセルのNUMBERSTRING関数(のようなもの)が完成です。
"一";"二";"三";"四";"五";"六";"七";"八";"九";"〇"の文字セットはNUMBERSTRING関数で引数を3にした場合の表示値です。
NUMBERSTRING関数では、
引数を1にすると、百二十三
引数を2にすると、壱百弐拾参
と表示されます。

次回は、NUMBERSTRING関数(のようなもの)第二弾として引数1、2のような結果を得るには
をやります。

参考記事 
一つのセルに一桁ずつ入力する
OpenOfficeで金額を3桁ずつ区切ってセルを分割
結構使えるCHOOSE関数

この記事をクリップ!