- ベストアンサー
テキストボックスの数値を3桁ごとに区切りたい
- エクセルのユーザーフォームにテキストボックスを1~7まで並べ、テキストボックス1~6の合計を7に入れる方法を教えてください。
- 質問者は、テキストボックスに投入した値の合計を表示するために、バリアブル「res」に値を加算しています。しかし、合計値を3桁ごとに「,」で区切りたいとのことです。
- 解決策として、テキストボックスをフォーマットする方法があります。例えば、TextBox1の値を3桁ごとに「,」で区切る場合、TextBox1.Text = Format(TextBox1.Value, "#,##0")と記述します。同様に、TextBox7に合計値を表示する際もフォーマットを適用することができます。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
同じようなコードは纏めてやると修正が容易になりますので も少し慣れてきたらそのようなコードも覚えましょう。 '---------------------------------- Private Sub TextBox1_AfterUpdate() Call Gokei(1) End Sub Private Sub TextBox2_AfterUpdate() Call Gokei(2) End Sub Private Sub TextBox3_AfterUpdate() Call Gokei(3) End Sub Private Sub TextBox4_AfterUpdate() Call Gokei(4) End Sub Private Sub TextBox5_AfterUpdate() Call Gokei(5) End Sub Private Sub TextBox6_AfterUpdate() Call Gokei(6) End Sub '------ 纏めのコード ---------------- Private Sub Gokei(N) Dim i As Integer Dim res As Double For i = 1 To 6 If IsNumeric(Controls("TextBox" & i)) Then res = res + CDbl(Controls("TextBox" & i)) End If Next i TextBox7 = Format(res, "#,##0") '入力したTextBox Controls("TextBox" & N) = Format(Controls("TextBox" & N), "#,##0") End Sub '----------------------------------------------------- 以上です。
その他の回答 (2)
- Wendy02
- ベストアンサー率57% (3570/6232)
> res = res + Val(Me.Controls("TextBox" & i).Value) Val関数と、Format(TextBox1.Value, "#,##0")は、直接、組み合わせが出来ません。一旦、数字を変換しなければなりません。 ずっと同じ質問がつづいているようですが、そろそろ、見極めつけてしまったほうが良いような気がします。 なお、今までの話の様子からして、Userform の起動は、 UserForm1.Show False とした方がよいです。 * UserForm 名は、UserForm1, Class名は、Class1 と、決めてしまっていますから、もし違うなら、書き換えてください。 私は、AfterUpDate ではなく、Enterkey とTab にしました。 '------------------------------------------- 'UserForm モジュール Dim TxtBoxes As Collection Dim myClass(6) As Class1 Private Sub Userform_Initialize() Dim i As Long Set myForm = Me Set TxtBoxes = New Collection For i = 0 To 6 Set myClass(i) = New Class1 '* Set myClass(i).TxtB = Me.Controls("TextBox" & i + 1) Next End Sub '------------------------------------------- 'Class モジュール (Class1) Public WithEvents TxtB As MSForms.TextBox 'モジュールの上部 Private Sub TxtB_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) Dim Ret As Long Dim i As Long Dim v As Variant 'Enter やTab で計算される If KeyCode.Value <> 13 And KeyCode.Value <> 9 Then Exit Sub If IsNumeric(TxtB.Text) Then TxtB.Text = Format(TxtB.Text, "#,##0") End If With myForm For i = 1 To 6 v = .Controls("TextBox" & i).Value If IsNumeric(v) Then Ret = Ret + CDbl(.Controls("TextBox" & i).Value) End If Next .TextBox7.Value = Format$(Ret, "#,##0") End With End Sub '------------------------------------------- '標準モジュール Public myForm As UserForm 'モジュールの上部 Sub Test_Click() 'コマンドボタンで起動する場合 UserForm1.Show False '* End Sub '-------------------------------------------
お礼
Class モジュールは初めて使用しましたが、何とか組み立てられました。 申し少し調べてみます。
- keithin
- ベストアンサー率66% (5278/7941)
サンプル1: Private Sub TextBox1_Change() textbox1 = format(textbox1, "#,##0") End Sub 他のテキストボックス2~6についても同様に作成します。前回みたいにあと5個書いて貰わないと,自分じゃ何も出来ませんは無しの方向で。 サンプル2:(安直) Private Sub TextBox1_AfterUpdate() Dim i Dim res For i = 1 To 6 res = res + ccur(0 & Me.Controls("TextBox" & i).Value) Next i TextBox7 = format(res, "#,##0") End Sub 同様に他も直します。
お礼
無事に数字を3桁ごとに区切ることが出来ました! 他にも、応用したいと思います。
お礼
同じ情報をまとめるとシンプルで良いですね。 参考になりました!!