• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:テキストボックスの数値を3桁ごとに区切りたい。)

テキストボックスの数値を3桁ごとに区切りたい

このQ&Aのポイント
  • エクセルのユーザーフォームにテキストボックスを1~7まで並べ、テキストボックス1~6の合計を7に入れる方法を教えてください。
  • 質問者は、テキストボックスに投入した値の合計を表示するために、バリアブル「res」に値を加算しています。しかし、合計値を3桁ごとに「,」で区切りたいとのことです。
  • 解決策として、テキストボックスをフォーマットする方法があります。例えば、TextBox1の値を3桁ごとに「,」で区切る場合、TextBox1.Text = Format(TextBox1.Value, "#,##0")と記述します。同様に、TextBox7に合計値を表示する際もフォーマットを適用することができます。

質問者が選んだベストアンサー

  • ベストアンサー
  • myRange
  • ベストアンサー率71% (339/472)
回答No.2

同じようなコードは纏めてやると修正が容易になりますので も少し慣れてきたらそのようなコードも覚えましょう。 '---------------------------------- 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 '----------------------------------------------------- 以上です。

donald1982
質問者

お礼

同じ情報をまとめるとシンプルで良いですね。 参考になりました!!

その他の回答 (2)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

> 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 '-------------------------------------------

donald1982
質問者

お礼

Class モジュールは初めて使用しましたが、何とか組み立てられました。 申し少し調べてみます。

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

サンプル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 同様に他も直します。

donald1982
質問者

お礼

無事に数字を3桁ごとに区切ることが出来ました! 他にも、応用したいと思います。

関連するQ&A

専門家に質問してみよう