Excel VBAのフォームについて ユーザーフォームにテキストボックスを2つ配置し、それぞれに数字を入力
Excel VBAのフォームについて ユーザーフォームにテキストボックスを2つ配置し、それぞれに数字を入力 Excel VBAのフォームについて ユーザーフォームにテキストボックスを2つ配置し、それぞれに数字を入力 すると、あるセルに合計が表示されるという動作を行いたいのですがよくわかりません。 <1つ目> Private Sub TextBox2_Change() TextBox2 = Format(TextBox2, ["#,##0;-#,##0"]) Worksheets("計算書").Range("M58") = Val(TextBox2.Value) + Val(TextBox3.Value) End Sub <2つ目> Private Sub TextBox3_Change() TextBox3 = Format(TextBox3, ["#,##0;-#,##0"]) Worksheets("計算書").Range("M58") = Val(TextBox2.Value) + Val(TextBox3.Value) End Sub (長い行は改行されているかもしれませんが、VBAでは1行になっています) 例えばそれぞれに「1,500」と「2,000」と入力すると、合計が反映される セルには「3」として表示されてしまいます。 分かりやすく教えて下さい。宜しくお願いします。
Visual Basic・2,949閲覧
ベストアンサー
原因はVal関数ですね CCur等のデータ型変換関数を使用しましょう 但し、CCur関数は、長さ0の文字列ではエラーが発生するので On Error Resume Nextを使うか 例 Private Sub TextBox2_Change() On Error Resume Next TextBox2 = Format(TextBox2, ["#,##0;-#,##0"]) Worksheets("計算書").Range("M58") = CCur(TextBox2.Value) + CCur(TextBox3.Value) End Sub 実行時エラーを回避するユーザー定義関数を作成して使いましょう 例 Private Sub TextBox2_Change() TextBox2 = Format(TextBox2, ["#,##0;-#,##0"]) Worksheets("計算書").Range("M58") = CCurEx(TextBox2.Value) + CCurEx(TextBox3.Value) End Sub '標準モジュールに以下のコード Public Function CCurEx(ByVal strText As String) As Currency strText = Trim(strText) If Len(strText) = 0 Then CCurEx = 0 Else CCurEx = CCur(strText) End If End Function CCur関数は桁区切りの「,」があっても正しく変換されますが、 桁区切りとして認識する文字はコントロールパネルの設定に依存するので覚えておいて下さい 詳細はCCur関数のヘルプを参照
質問者からのお礼コメント
On Error Resume Next を使ってうまくいきました。まだまだ知らないことがあるので勉強します。ありがとうございました。
お礼日時:2006/9/1 14:03