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

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

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

テキストボックスの数値を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")

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

  • ベストアンサー
  • 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/7940)
回答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

  • ユーザーフォームのテキストボックスでVLOOK

    ユーザーフォームのテキストボックスで、ご教示お願いいたします。 現在、以下のようなコードこちらで教えていただきセルに入力をしております。 上から順番に入力した際、テキストボックス5に値を入たら、 listのシートから該当するもの(項目は20個)をテキストボックス6に表示させたいと思っております。 ■現在のコード '// Private Sub CommandButton1_Click() Dim LastRow As Long 'ここはキャメル形式やパスカル形式にします/大文字は定数です。 Dim i As Long '/テキストボックスに値があるか調べる For i = 1 To 7 Next i '/セルに書き込み With Worksheets("Sheet1") LastRow = .Cells(Rows.Count, 1).End(xlUp).Row + 1 For i = 1 To 7 .Cells(LastRow, i).Value = Me.Controls("TextBox" & i).Value Next End With '/TextBox1-7をクリア If MsgBox("テキストボックスを空にしてよろしいですか?", vbQuestion + vbYesNo) = vbYes Then For i = 1 To 7 Me.Controls("TextBox" & i).Value = "" Next i End If 'TextBox1にフォーカスを移動 Me.TextBox1.SetFocus End Sub ■付け足したいコード Private Sub textbox5_change() Dim temp, x temp = Me.textBox5.Value If IsNumeric(temp) Then temp = Val(temp) x = Application.VLookUp(temp, Sheets("list").Range("a1:b20"), 2, False) If Not IsError(x) Then Me.TextBox6.Value = x Else MsgBox Me.TextBox5.Value & " はリストにありません" End If End Sub 【質問内容】 付け足したいコードは上記の通りですが、どのように付け足せばいいのかが分からず、 困っております。 度々で申し訳ありませんが、テキストボックス5の値を見て、 テキストボックス6に表示させるやり方をご教示お願いいたします。

  • リストボックスからの入力をテキストに貼付

    下記コードではリストボックあ行選択しテキスト1~6に入力後、クリアボタンで消去したあと、か行選択しテキストに入力したら7~貼付けになるクリアボタンで消去後、改めてテキスト1~入力するコードがありますか。どなたか解る方よろしくお願いします。 Private Sub 実行_Click() Static cnt As Integer Dim i As Integer If Listbox.ListIndex = -1 Then Exit Sub For i = 0 To Listbox.ListCount - 1 If Listbox.Selected(i) Then cnt = cnt + 1 If cnt > 10 Then cnt = 1 Me.Controls("TextBox" & cnt).Text = Listbox.List(i) End If Next End Sub Private Sub クリア_Click() Dim tbCont As Control With Me.MultiPage1 For Each tbCont In .Pages(.Value).Controls If TypeName(tbCont) = "TextBox" Then tbCont.Value = Null End If Next tbCont End With End Sub

  • 複数のテキストボックスのカンマ処理

    現在、ユーザーフォームに60個のテキストボックスを設置しています。 数値入力されるとカンマが付くようコードを書いているのですが、まとめて処理できるようなコードはないでしょうか? 現在… Private Sub TextBox1_Change() TextBox1.Text = Format(TextBox1.Text, "#,##0") End Sub Private Sub TextBox2_Change() TextBox2.Text = Format(TextBox2.Text, "#,##0") End Sub Private Sub TextBox3_Change() TextBox3.Text = Format(TextBox3.Text, "#,##0") End Sub これを60個 試しにfor~Nextで書いてみましたが、失敗しました。 Dim c As Integer For c = 1 To 60 Controls("TextBox" & c).Text = Format("TextBox" & c.Text, "#,##0") Next End Sub ご存知の方、お力を貸してください。 ウィンドウズ7のエクセル2013を使用しています。

  • エクセル ユーザーフォームテキストボックスについて

    テキストボックスからセルへの入力について教えていただきたいのですが、 ネットからサンプルを落として勉強しております。 以下のコードを下の画像のように見出しを3から7まで項目を増やしたい場合、 どの部分を書き換えたらいいのでしょうか? よろしくお願いいたします。 Private Sub CommandButton1_Click() Dim LASROW As Long Dim f As Long With Worksheets("Sheet1") 'A列の最終行を取得 LASROW = .Range("A" & CStr(Rows.Count)).End(xlUp).Row 'セルに書き込み For f = 0 To 2 .Range("A" & CStr(LASROW)).Offset(1, f).Value = Me.Controls("TextBox" & f + 1).Value Next End With 'TextBox1,2,3をクリア For f = 1 To 3 Me.Controls("TextBox" & f).Value = "" Next 'TextBox1にフォーカスを移動 Me.TextBox1.SetFocus End Sub

  • エクセル ユーザーフォームでVLOOK

    ユーザーフォームのテキストボックスで、ご教示お願いいたします。 現在、以下のようなコードこちらで教えていただきセルに入力をしております。 テキストボックス5に値を入れ、 listのシートから該当する文字をテキストボックス6に表示させたいと思っております。 ■現在のコード '// Private Sub CommandButton1_Click() Dim LastRow As Long 'ここはキャメル形式やパスカル形式にします/大文字は定数です。 Dim i As Long '/テキストボックスに値があるか調べる For i = 1 To 7 Next i '/セルに書き込み With Worksheets("Sheet1") LastRow = .Cells(Rows.Count, 1).End(xlUp).Row + 1 For i = 1 To 7 .Cells(LastRow, i).Value = Me.Controls("TextBox" & i).Value Next End With '/TextBox1-7をクリア If MsgBox("テキストボックスを空にしてよろしいですか?", vbQuestion + vbYesNo) = vbYes Then For i = 1 To 7 Me.Controls("TextBox" & i).Value = "" Next i End If 'TextBox1にフォーカスを移動 Me.TextBox1.SetFocus End Sub ■付け足したいコード Private Sub textbox5_change() Dim temp, x temp = Me.textBox5.Value If IsNumeric(temp) Then temp = Val(temp) x = Application.VLookUp(temp, Sheets("list").Range("a1:b20"), 2, False) If Not IsError(x) Then Me.TextBox6.Value = x Else MsgBox Me.TextBox5.Value & " はリストにありません" End If End Sub 【質問内容】 付け足したいコードは上記の通りですが、どのように付け足せばいいのかが分からず、 困っております。 度々で申し訳ありませんが、テキストボックス5の値を見て、 テキストボックス6に表示させるやり方をご教示お願いいたします。

  • Excel VBA SetFocus

    環境:Excel 2002です UserForm1での質問です Flame5にTextBox14とTextBox15があります TextBox14とTextBox15のBeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)後 Flame2にあるTextBox1にSetFocusしたいのですがエラーが発生します 実行時エラー 2147467259(800004005) 異なるFlameにSetFocusする方法があるのでしょうか? Flame5の中でTextBox14及びTextBox15のSetFocusはできます TextBox14とのTextBox15のBeforeUpdateのプロシージャです Private Sub TextBox14_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean) If Len(Me.TextBox14.Text) <> 0 Then Dim a As Variant a = 100 - Val(Me.TextBox14.Text) Me.TextBox15.Text = a Dim i As Integer For i = 1 To 4 Me.Controls("TextBox" & i).Enabled = True Me.Controls("TextBox" & i).BackColor = &H80000005 '背景色(白色) Next i End If Me.TextBox1.SetFocus End Sub Private Sub TextBox15_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean) If Len(Me.TextBox15.Text) <> 0 Then Dim a As Variant a = 100 - Val(Me.TextBox15.Text) Me.TextBox14.Text = a Dim i As Integer For i = 1 To 4 Me.Controls("TextBox" & i).Enabled = True Me.Controls("TextBox" & i).BackColor = &H80000005 '背景色(白色) Next i End If UserForm1.TextBox1.SetFocus End Sub ご支援願います

  • テキスト値をExcel反映空欄を無視し連続入力

    テキストボックス1~30に入力した際、テキストの3行目をクリアーした後、実行ボタンを押したらExcelsheet1のABC列に入力できるがテキストに空欄が生じた場合、以下のコードでは空欄以降の値が入力できません。空欄は無視し続けてセルに入力するコード表示はあるのでしょうか、お解りになる方宜しくお願いします。 できればコード追加入力で行いたいのですが。 Private Sub 実行_Click() Dim i As Integer Dim LRow As Long LRow = Range("A" & Rows.Count).End(xlUp).Row For i = 1 To 10 If Me.Controls("TextBox" & i).Text = "" Then Exit For Range("A" & LRow + i).Value = Me.Controls("TextBox" & i).Text Range("B" & LRow + i).Value = Me.Controls("TextBox" & i + 10).Text Range("C" & LRow + i).Value = Me.Controls("TextBox" & i + 20).Text Next End Sub

  • テキストボックスなら空白にする

    フォームにテキストボックス2つとコンボボックス2つを設置して、 規定値に値を設定し、 Private Sub cb_テキストボックスなら空白にする_Click() Dim ctl As Control For Each ctl In Me.Controls If ctl.ControlType = acTextBox Then ctl.Value = Empty End If Next ctl End Sub としたのですが何も起こりません。 空白にするにはどうすればいいでしょうか? あと、 ctl.Valueと打つ時に、 ドットの後に、Valueが一覧に出てきませんでした。 それが原因で空白にならないのでしょうか? ご回答よろしくお願いします。

  • テキストボックス2列の値をシート1AB列に入力

    実行2クリックで2列のテキストボックス1~7の値をsheet1のA列、テキストボックス11~17の値をB列に入力したいのですが下記の方法にどうコード追加していいのかわかりません。どなたかコードが解る方よろしくお願いします。 Private Sub 実行2_Click() For i = 1 To 1000 If Sheet1.Cells(i, 1.Value = vbNullString Then: Exit For Next For Each o In UserForm1.Controls Dim c As MSForms.Control Set c = o If c.Name Like "TextBox*" Then Dim t As MSForms.TextBox Set t = c If t <> vbNullString Then Sheet1.Cells(i, 1.Value = t i = i + 1 t = vbNullString End If End If Next End Sub

  • エクセル VBA OptionButtonからTextBox

    すいません! OptionButtonなら 下記の記述でエラー表示を 簡単にできるのですが これがOptionButtonではなく TextBoxならどのように変化したら 良いのでしょうか? すいません、教えて下さい! Private Sub 記録_Click() Dim i As Integer Dim Cnt As Integer Cnt = 0 For i = 1 To 6 Step 1 If Me.Controls("OptionButton" & i).Value Then Cnt = i Exit For End If Next i If Cnt = 0 Then MsgBox "選択されていません" Exit Sub End If If Me.Controls("Combobox" & Cnt).Value = "" Then MsgBox Me.Controls("OptionButton" & Cnt).Caption & " の内容が選択されていません" Exit Sub End If With 記入フォーム .TextBox5.Value = Me.Controls("OptionButton" & Cnt).Caption .TextBox6.Value = Me.Controls("Combobox" & Cnt).Value End With Unload Me End Sub

専門家に質問してみよう