電子書籍の厳選無料作品が豊富!

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

エクセルのユーザーフォームにテキストボックスを1~7まで並べています。
テキストボックス1~6の合計を7に入れるようにしています。

テキストボックスに記入するVBAは以下のように投入しています。
合計は上手く表示されるのですが、3桁ごとに「,」の区切りを入れたいと思っています。
どのように記述したらよいのか、教えていただけないでしょうか。

--------------------------------------
Private Sub TextBox1_AfterUpdate()
Dim i
Dim res
For i = 1 To 6
res = res + Val(Me.Controls("TextBox" & i).Value)
Next i
TextBox7 = res
End Sub
Private Sub TextBox2_AfterUpdate()
Dim i
Dim res
For i = 1 To 6
res = res + Val(Me.Controls("TextBox" & i).Value)
Next i
TextBox7 = res
End Sub
Private Sub TextBox3_AfterUpdate()
Dim i
Dim res
For i = 1 To 6
res = res + Val(Me.Controls("TextBox" & i).Value)
Next i
TextBox7 = res
End Sub
Private Sub TextBox4_AfterUpdate()
Dim i
Dim res
For i = 1 To 6
res = res + Val(Me.Controls("TextBox" & i).Value)
Next i
TextBox7 = res
End Sub
Private Sub TextBox5_AfterUpdate()
Dim i
Dim res
For i = 1 To 6
res = res + Val(Me.Controls("TextBox" & i).Value)
Next i
TextBox7 = res
End Sub
Private Sub TextBox6_AfterUpdate()
Dim i
Dim res
For i = 1 To 6
res = res + Val(Me.Controls("TextBox" & i).Value)
Next i
TextBox7 = res
End Sub
--------------------------------------

#次の文字を書くテキストボックスの情報に加えてみましたが、
合計が狂ってうまくいきませんでした。

TextBox1.Text = Format(TextBox1.Value, "#,##0")
TextBox7.Text = Format(TextBox7.Value, "#,##0")

「テキストボックスの数値を3桁ごとに区切り」の質問画像

A 回答 (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
'-----------------------------------------------------

以上です。
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/04/22 21:20

> 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

'-------------------------------------------
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/04/22 21:38

サンプル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

同様に他も直します。
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/04/22 19:14

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