- ベストアンサー
VBA 同様処理の簡素化?
エクセル VBAで下記のようにテキストボックスの処理を 書き込みました。 Private Sub TextBox24_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) '注文合計数 Sukei = O If KeyCode = 13 Then For Kasan = 18 To 34 Soukei = Val(Controls("TextBox" & Kasan).Text) Sukei = Sukei + Soukei Next Kasan Label41.Caption = Sukei '見込合計数 MSukei = O For MKasan = 35 To 51 MSoukei = Val(Controls("TextBox" & MKasan).Text) MSukei = MSukei + MSoukei Next MKasan Label42.Caption = MSukei '総合計数 Label39.Caption = Val(Label41.Caption) + Val(Label42.Caption) End If End Sub Private Sub TextBox25_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) '注文合計数 Sukei = O If KeyCode = 13 Then For Kasan = 18 To 34 Soukei = Val(Controls("TextBox" & Kasan).Text) Sukei = Sukei + Soukei Next Kasan Label41.Caption = Sukei '見込合計数 MSukei = O For MKasan = 35 To 51 MSoukei = Val(Controls("TextBox" & MKasan).Text) MSukei = MSukei + MSoukei Next MKasan Label42.Caption = MSukei '総合計数 Label39.Caption = Val(Label41.Caption) + Val(Label42.Caption) End If End Sub テキストボックス24、25内の処理は同じなのですが テキストボックスが増えた場合、修正することも考えて 簡素化したいのですが、どのように行なえばいいでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 >テキストボックスが増えた場合、修正することも考えて もしかして、テキストボックスが、1~51以上もあるということではないでしょうか? 単に、TextBox24とTextBox25 ぐらいなら、#1さんの内容と重複していますが、以下のようにすればよいのですが、もしかしたら、50以上のテキストボックスが同じような働きを持つということではないでしょうか?そうしたら、このようなコードとは違うインスタンスを作る必要があります。 もし、そうでしたら、改めて、レスをつけてください。 '----------------------------------- Private Sub TextBox24_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) '注文合計数 If KeyCode = 13 Then Call sSukei End If End Sub 'TextBox25 も同様 '--------------------------------------------- Private Sub sSukei() 'サブルーチン i Label41.Caption = CStr(fSuKei(18, 34, "TextBox")) '見込合計数 Label42.Caption = CStr(fSuKei(35, 51, "TextBox")) '総合計数 Label39.Caption = CStr(Val(Label41.Caption) + Val(Label42.Caption)) End Sub '--------------------------------------------- Private Function fSuKei(iFrom As Integer, iTo As Integer, objName As String) 'ユーザー定義関数 Dim i As Integer Dim Soukei As Double Dim Sukei As Double For i = iFrom To iTo Soukei = Val(Controls(objName & i).Text) Sukei = Sukei + Soukei Next i fSuKei = Sukei End Function '---------------------------------------------
その他の回答 (1)
- hana-hana3
- ベストアンサー率31% (4940/15541)
Private Sub TextBox25_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) If KeyCode = 13 Then Call Syuukei End Sub Sub Syuukei() '注文合計数 Sukei = O For Kasan = 18 To 34 Soukei = Val(Controls("TextBox" & Kasan).Text) Sukei = Sukei + Soukei Next Kasan Label41.Caption = Sukei '見込合計数 MSukei = O For MKasan = 35 To 51 MSoukei = Val(Controls("TextBox" & MKasan).Text) MSukei = MSukei + MSoukei Next MKasan Label42.Caption = MSukei '総合計数 Label39.Caption = Val(Label41.Caption) + Val(Label42.Caption) End Sub
お礼
返答が遅れてすみません。 ありがとうございます。 プログラムが見やすくなり、修正箇所なども わかりやすくなりました。
お礼
返答が遅れてすみません。 ありがとうございます。 上記のWendy02様の思うように テキストボックスがどんどん増える場合が ありますので、上記のようにサブルーチンを使うと 見やすくなり、修正も楽になります。 助かりました。