プロが教える店舗&オフィスのセキュリティ対策術

お世話になります。初心者ですみません。。

ユーザーフォームに数量・金額のテキストボックスがあります。
数量のテキストボックスの小計は出すことが出来たのですが、
金額の小計を出すことが出来ません。。

色々なHPで見たところ金額のテキストボックスにあらかじめ
TextBox金額1.Value = Format(TextBox金額1.Value, "##,##0")
と入れているからなのかな?と思うのですが、
この表示形式を崩さずに最下段の黒太字にある小計欄に金額小計を出したいです。

よろしくお願いします。

「Excel VBA ユーザーフォーム内の」の質問画像

質問者からの補足コメント

  • ご回答ありがとうございます。

    大変失礼しました。
    数量・金額それぞれ縦3つのテキストボックスの小計をラベルに出したいです。

    Private Sub TextBox金額1_AfterUpdate()
    label金額計 = Val(TextBox金額1.Value) + Val(TextBox金額2.Value) + Val(TextBox金額3.Value)
    End Sub

    Private Sub TextBox金額2_AfterUpdate()



    としていたのですが、カンマ前までしか計算されていないようでした。。
    教えていただいた方法でやってみます!

    「Excel VBA ユーザーフォーム内の」の補足画像1
    No.1の回答に寄せられた補足コメントです。 補足日時:2022/08/17 14:59
  • ご回答ありがとうございます。

    Private Sub TextBox金額1_AfterUpdate()
    label金額計 = CLng(TextBox金額1.Value) + CLng(TextBox金額2.Value) + CLng(TextBox金額3.Value)
    End Sub

    としてみたのですが、黄色いエラーが出てしまいました。。
    型が一致しません (エラー 13)と出たため、ヘルプを見てみたのですがどうしたら良いでしょうか?
    身の丈に合わないことをやろうとしていること自体が申し訳なくなってきました。。
    すみませんが、もう少しおつきあいいただけると嬉しいです。
    よろしくお願いします。

    No.2の回答に寄せられた補足コメントです。 補足日時:2022/08/17 16:46
  • つらい・・・

    本当に何度もお手間をおかけして申し訳ないです。。
    色々なHPを見て理解もせずコピペしたためご迷惑をおかけしています。。

    Private Sub TextBox金額1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    If Not Chr(KeyAscii) Like "[0-9]" Then
    KeyAscii = 0
    End If
    End Sub

    Private Sub TextBox金額1_Change()
    TextBox金額1.Value = Format(TextBox金額1.Value, "##,##0")
    End Sub

    の2つが入っています。
    数字のみ、3桁区切りの表示、label金額1にTextBox1~3が可能なコードを最初からご教示いただけますでしょうか。。本当にすみません。

      補足日時:2022/08/18 08:27

A 回答 (5件)

変更1.


Private Sub TextBox金額1_AfterUpdate()
Private Sub TextBox金額2_AfterUpdate()
Private Sub TextBox金額3_AfterUpdate()
を以下のように変えてください。
Private Sub TextBox金額1_AfterUpdate()
Call set_shokei
End Sub
Private Sub TextBox金額2_AfterUpdate()
Call set_shokei
End Sub
Private Sub TextBox金額3_AfterUpdate()
Call set_shokei
End Sub

変更2.
そして、いかのプロシージャを追加してください。
Private Sub set_shokei()
Dim total As Long: total = 0
If IsNumeric(TextBox金額1.Value) Then total = total + CLng(TextBox金額1.Value)
If IsNumeric(TextBox金額2.Value) Then total = total + CLng(TextBox金額2.Value)
If IsNumeric(TextBox金額3.Value) Then total = total + CLng(TextBox金額3.Value)
Label金額計 = total
End Sub
    • good
    • 0
この回答へのお礼

本当に何度もお世話になりました!
もっと自身でも勉強していきたいと思います!
またお世話になることもあるかもしれませんが、
その際はどうぞよろしくお願いいたします。

お礼日時:2022/08/18 09:34

横から失礼します


TextBox?金額が数値に出来ない文字または空白の場合
CLngはエラーになります。
1つまたは複数の TextBox?で空白や文字を無視する場合、
条件により一旦変数に値を代入して最後にラベルに出力するのが容易です

ちなみにコントロールオブジェクトを扱う時は面倒でもプロパティの省略は避けた方が良いですね

Dim i As Long, subtotal As Long
For i = 1 To 3
If IsNumeric(Me.Controls("TextBox金額" & i).Value) Then
subtotal = subtotal + CLng(Me.Controls("TextBox金額" & i).Value)
End If
Next
If subtotal <> 0 Then
label金額計.Caption = Format(subtotal, "##,##0")
Else
label金額計.Caption = ""
End If
End Sub

回答投稿時に確認しましたら、該当部分についてすでに回答されていましたが、参考コードを書いたので投稿します
BAはいりません
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
もっと勉強して理解できるように頑張ります!
また何かありましたらよろしくお願いいたします。

お礼日時:2022/08/18 09:35

>黄色いエラーが出てしまいました。



数値以外の値を入力すると、「型が一致しません (エラー 13)」
のエラーが発生します。(a,b,c等)
数値のみ入力する前提での回答でしたので、
数字以外が入力されるなら、まず、入力データのフォーマットチェックが必要になります。

If IsNumeric(TextBox金額1.Value) = False Then
MsgBox ("金額が不正")
Exit Sub
End If
のチェックを入れる必要があります。(金額2,3も同様)
    • good
    • 0

Val(TextBox金額1.Value) ではなく


CLng(TextBox金額1.Value)
を使ってください。
Valはカンマがあるとギブアップします。
CLngはカンマをスキップして処理します。
この回答への補足あり
    • good
    • 0

こんにちは



ご質問のタイトルには「ラベル」となっていて、本文は「テキストボックス」となっていますが、どちらなんでしょうね?
添付図の見た目からすると、ラベルっぽいですけれど・・

いずれにしろ、「小計」は計算できているものとして、対象のコントロールにフォーマット指定のテキストを表示するようにすれば宜しいかと。

例えば、表示対象がラベルなら、
 対象のラベル.Caption = Format(小計値, "#,##0")
といった要領です。
テキストボックスなら、
 対象のテキストボックス.Text = Format(小計値, "#,##0")
といった感じ。
この回答への補足あり
    • good
    • 1
この回答へのお礼

ご回答ありがとうございました。
初めての投稿だったので回答がつくか不安でしたが
早々とご回答いただけて嬉しかったです。
また何かありましたらよろしくお願いいたします。

お礼日時:2022/08/18 09:36

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A