例えば以下のように、「桁区切り」と、「円」の表示ができるように改良してみましょう。
【1】Excelのファイル「gankin.xls」を開きます。
*マクロを有効にする
ダウンロードしたものでも、あなたが作成したものでもかまいません。
【2】VBEを起動します。
*「Altキー」+「F11キー」
【3】標準モジュールの「Module1」を選択し、コード(プログラム)を表示します。
コードウィンドウには、ユーザー定義関数の calcGankin() が表示されます。
【4】calcGankin()をコピーして、すぐ下に貼り付けます。
でもそのままだと、関数名が重複するのでダメです。
同じ関数名では、コンピューターが区別できないので、エラーになります。
【5】そこで新しいユーザー定義関数を、「calcGankinF」に変更します。関数名を変える場合は、戻り値の部分も変えなくてはなりません。
上の図のように2箇所変更してください。
【6】この段階で calcGankinF() を使うと、calcGankin()と全く同じ結果になります。
プログラムをコピー&ペーストしたのですから、当然ですよね。
【7】次は、ユーザー定義関数の戻り値のデータ型を、「String」(文字列型)に変更します。
これまでは、Currency(通貨型)だったので、数値を返していましたが、今回は「円」という文字まで含めたいので、String(文字列型)にします。
【8】この段階で calcGankinF() を試すと、小数点以下まで表示されます。
これは数値ではなく、文字列なので注意してください。
文字列型にしたことで、通貨型とは表示の仕方が変わったのです。
ここからが改良の本番です。
【9】戻り値を代入する部分を、以下のように変更します。
calcGankinF = Format(gankin, "##,##0")
Format関数は既存の関数で、1番目の引数の値(または式)を、2番目の引数の書式にして、その文字列を返します。
つまり桁区切りされた数字が、戻り値になります。数字といっても文字列です。
正確には、「文字列を示すバリアント型(内部処理形式 String の Variant)の値」を返します。
また、ユーザー定義関数の中で、既存の関数を使用できることにも注目してください。
【10】この段階で calcGankinF() を試してみてください。
桁区切りされていることがわかります。
【11】次は、プログラムに「円」まで含めてみましょう。
calcGankinF = Format(gankin, "##,##0") & "円"
「&」(半角のアンパサンド)は、文字を連結する演算子です。
したがって、Format関数の戻り値の後に「円」が連結されます。
以下のように置き換えてイメージすると、わかりやすいです。
calcGankinF = 250,000 & "円"
このようにプログラミングでは、関数の戻り値を置き換えるイメージが大切です。
【12】それでは、最終的な動作を確認してみましょう。
目的通りの結果を得ることができました。
【ワンポイント】
以下のようにプログラムを書けば、金額の前に「\」(円マーク)を付けることも可能です。
*「\」はWindowsでは円記号のことです。
calcGankinF = "\" & Format(gankin, "##,##0")
【補講】
実は今回のような処理は、Excelのワークシート上で、セルの書式や計算式を使っても可能です。
だから「わざわざユーザー定義関数を作るまでもない」と感じるかもしれません。
でもユーザー定義関数なら、数百行~数千行にもなる複雑な処理も可能なのです。
しかも今回のように、ユーザー定義関数をいくつか用意しておけば、関数名を換えるだけで、異なった処理を行ない、戻り値を変化させられます。
これはとても便利なことなのです。