- ベストアンサー
エクセルVBAのTextbox同士の計算
エクセルVBAのTextbox同士の計算 フォームの中で、TextBox1とTextBox2の合計を常にTextBox3に表示する方法を教えて下さい。 TextBox1やTextBox2には、数字が入らないこともあります。 両方ともに数字が入っていない時は、0を表示させたいです。 宜しくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
回答も出て、一応、満足のようですが TextBox1_Change()イベントで大丈夫ですか? 私は下記のように考えました。 エクセルVBAです。 UserForm1にテキストボックス3つを貼り付けます。 UserForm_Initializeイベントで Private Sub UserForm_Initialize() Me.TextBox1.Text = 0 Me.TextBox2.Text = 0 Me.TextBox3.Text = 0 End Sub ーー こうしないとTextbox1から入れていくときに、入力途中で、余分なエラーコメントが出てしまいます。それで入れました。 ーー Private Sub TextBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) If KeyCode = 13 Then If Me.TextBox2 = "" Or Not IsNumeric(Val(TextBox2.Text)) Then MsgBox "テキストボックス2が数ではありません" Else Me.TextBox1.TextAlign = fmTextAlignRight Me.TextBox3 = Val(Me.TextBox1.Text) + Val(Me.TextBox2.Text) Me.TextBox3.TextAlign = fmTextAlignRight End If End If End Sub Private Sub TextBox2_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) If KeyCode = 13 Then If Me.TextBox1 = "" Or Not IsNumeric(Val(TextBox1.Text)) Then MsgBox "テキストボックス1が数ではありません" Else Me.TextBox2.TextAlign = fmTextAlignRight Me.TextBox3 = Val(Me.TextBox1.Text) + Val(Me.TextBox2.Text) Me.TextBox3.TextAlign = fmTextAlignRight End If End If End Sub テキストボックスのKeyUpイベントで、押されたキーがENTERで確定する事を択びました。ChangeイベントではEnterキーを捉えようにもKeyCodeを返してくれない。 ーー そのほかに、質問者の言うとおりにして、フォームに計算をするきっかけのボタンなどを設けないのは、無理があるように思います。 普通は2つの計数の入力確定を人間が判断して、計算ボタンをクリックする、が普通ではないですか。 テキストボックス1に入れてテキストボックス2に入れてないときにエラーとせざるをえないから。 そこでユーザーフォームのInitializeイベントを入れて、初期値を0にしました。 3桁ごとにカンマは、(エクセルVBAの)テキストボックスのプロパテティに無いのでFormat でも使わないとならないと思う。上記では略。
その他の回答 (3)
- aloha88600
- ベストアンサー率17% (10/58)
やはり思ったとおりですね フォーム上のテキストボックスには計算式は入れられません ワークシートと混同されていますね フォーム表示後に入力して計算を行うなら 入力完了後に With UserForm TextBox3.Value = Val(TextBox1.Value) + Val(TextBox2.Value) End With を実行しなくてはいけません コマンドボタンでこれを実行するか テキストボックスのイベントで行うしかありません!
- aloha88600
- ベストアンサー率17% (10/58)
「.」 ← どっと を忘れていますよ! .Textbox1 です さて、フォームの出現イベントが計算タイミングなのでしょうか 合計以外のテキストボックスの値が格納されるタイミングはいつですか? 計算を行うコードの前でなくてはいけません それと 入力値は半角ですよね? 全角だとそれは数値ではないので計算できません
補足
フォームが出現したら計算を開始するようにしたいです。 その後テキストボックスに値を入れていきたいのですが... Private Sub UserForm_Initialize() の中に入れるのはだめですか? 入力は半角です。
- aloha88600
- ベストアンサー率17% (10/58)
With UserForm1 .TextBox3.Value = Val(.TextBox1.Value) * Val(.TextBox2.Value) End With
補足
Private Sub UserForm_Initialize() With UserForm TextBox3.Value = Val(TextBox1.Value) + Val(TextBox2.Value) End With と入れてみました。 初期値で0は表示されるようになったのですが、合計が出ません。なぜでしょうか?
補足
ご指摘頂いた通りに、テキストボックスのイベントで行うようにしました。 そうしたらうまく行きました。が...もう1点問題が発生してしまいました。 テキストボックス内の数字に区切りを入れたくて、下記のように入れました。 そしたら合計の計算が、Textbox1に入れた数字のの1/1000として認識されて計算してしまいます。 対策としてはどうすればよいのでしょうか? Private Sub TextBox1_Change() TextBox1.Text = Format(TextBox1.Text, "#,##0") TextBox1.SelStart = Len(TextBox1.Text) + 1 With UserForm TextBox3 = Val(TextBox1.Value) + Val(TextBox2.Value) TextBox3.Text = Format(TextBox3.Text, "#,##0") TextBox3.SelStart = Len(TextBox3.Text) + 1 End With End Sub