- ベストアンサー
ExcelVBA テキストボックスについて
フォーム上100個のテキストボックスがあります このテキストボックスに入力制限を加えたいのですが、どのように書けばよろしいでしょうか? ・半角数字だけしか入力できない(計算に使う) ・入力すると、1,234,567のような表示になり、右詰め ・10桁までしか入力できない ・予定の計算結果だと、10億を超えない ・計算結果は数字が入力されるたびLabel1に表示される 私の作ったマクロだと、全てのテキストボックスに同じようなマクロを登録する結果になってしまい、これってもっと短くかけるのでは?と思い、質問いたしました よろしくおねがいします
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
クラスモジュールを使いますが、以下のような感じでしょうか。 新規ブックにユーザーフォーム(オブジェクト名:UserForm1、TextBox1~10、Label3)、 クラスモジュール(Class1)、標準モジュールを挿入してテストしてみて下さい。 クラスモジュールのコード Option Explicit Public WithEvents formTxtBox As MSForms.TextBox Private Sub formTxtBox_Change() Me.formTxtBox.Text = Format(Me.formTxtBox.Text, "#,##0") 計算 End Sub Private Sub formTxtBox_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) If KeyAscii < Asc(0) Or KeyAscii > Asc(9) Then KeyAscii = 0 End Sub ユーザーフォームのコード Option Explicit Private cls(1 To 10) As New Class1 Private Sub UserForm_Initialize() Dim i As Integer For i = 1 To 10 Set cls(i).formTxtBox = Me.Controls("TextBox" & i) cls(i).formTxtBox.MaxLength = 10 Next End Sub 標準モジュールのコード Option Explicit Sub 計算() Dim gokei As Long, i As Integer gokei = 0 With UserForm1 For i = 1 To 10 If .Controls("TextBox" & i).Text <> "" Then _ gokei = CLng(.Controls("TextBox" & i).Text) + gokei Next i .Label3.Caption = Format(gokei, "#,##0") End With End Sub
その他の回答 (1)
- ForestRain
- ベストアンサー率63% (14/22)
こんにちは。 回答ではありませんが、 >私の作ったマクロだと、全てのテキストボックスに同じようなマクロを登録する結果になってしまい、 >これってもっと短くかけるのでは?と思い、質問いたしました マクロは既に出来ているがもっと短くしたいということですよね。 でしたら、今出来ているコードをアップしないと回答がつかないような気がします。 jobvbaさんのコードがどんなコードかわからなければ、回答するほうも 短くしようがないと思います。 コードを出してもらっても私が回答できるとは限りませんが、可能ならば現在のコードを出してみませんか?
補足
すみません!その通りです あと100個ではなく、10個でした。訂正します コードはこんな感じですが、長くなりすぎてしまうので、同じようなコードは省略します Sub 計算() Dim gokei As Long, i As Integer gokei = 0 For i = 0 To 9 If Controls(i).Text <> "" Then If Len(Controls(i).Text) = 11 Then Controls(i).Text = Left(Controls(i).Text, 10) Controls(i).Text = Format(Controls(i).Text, "#,##0") gokei = CLng(Controls(i).Text) + gokei End If Next i Label3.Caption = Format(gokei, "#,##0") End Sub Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) If KeyAscii < Asc(0) Or KeyAscii > Asc(9) Then KeyAscii = 0 End Sub Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) If KeyAscii < Asc(0) Or KeyAscii > Asc(9) Then KeyAscii = 0 End Sub 略 Private Sub TextBox9_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) If KeyAscii < Asc(0) Or KeyAscii > Asc(9) Then KeyAscii = 0 End Sub Private Sub TextBox10_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) If KeyAscii < Asc(0) Or KeyAscii > Asc(9) Then KeyAscii = 0 End Sub Private Sub TextBox1_Change() 計算 End Sub Private Sub TextBox2_Change() 計算 End Sub 略 Private Sub TextBox9_Change() 計算 End Sub Private Sub TextBox10_Change() 計算 End Sub
お礼
できました!かなりスッキリしました! ありがとうございました!