確実に選択されているセルを操作する


UserFormでデータを入力してもらい、そのデータを加工するマクロがよくあります。ここでは、ユーザーから金額を入力してもらうケースを考えてみましょう。

金額とはいえ数値ですから、入力時には簡単に「1234」と入力させたいです。しかし、実体は金額ですから表示上は「\1,234」のように\記号と3桁区切りの,を追加したいです。

このリクエストをかなえるには、TextBoxのChangeイベントを使います。Changeイベントは、TextBoxのデータが変化したときに発生します。

上図のように、UserFormにTextBoxとCommandButtonを1つずつ配置します。

TextBox1のChangeイベントに次のコードを記述します。

Private Sub TextBox1_Change()
    TextBox1 = Format(TextBox1, "\\#,###")
End Sub

簡単でしょ。Format関数についてはヘルプなどをご覧ください。

さて、ここでもう1つ問題があります。ユーザーに入力してもらった金額を、その後計算に使うときはどうしましょう。「\1,234」のように\や,が含まれていると、そのデータは文字列と認識されてしまい、そのままでは計算に使えません。

これを力技で解決しようとすると、先頭に\が存在するかどうかを調べたり、,の数や位置を調べたり…と、全てのデータに対応させるのは少々面倒くさいです。そんなときは、CCur関数を使いましょう。CCur関数は通貨型を返す関数ですが、引数に通貨形式の文字列を指定すると純粋な数値を返すという特徴があります。

CommandButtonをクリックしたとき、TextBoxに入力された金額を2倍して表示するには次のようにします。

Private Sub CommandButton1_Click()
    MsgBox CCur(TextBox1) * 2
End Sub

計算した結果を通貨型で表示したいときは、計算結果をFormat関数で加工しましょう。