• ベストアンサー

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内の処理は同じなのですが テキストボックスが増えた場合、修正することも考えて 簡素化したいのですが、どのように行なえばいいでしょうか?

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.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 '---------------------------------------------

77TAKETAKA
質問者

お礼

返答が遅れてすみません。 ありがとうございます。 上記のWendy02様の思うように テキストボックスがどんどん増える場合が ありますので、上記のようにサブルーチンを使うと 見やすくなり、修正も楽になります。 助かりました。

その他の回答 (1)

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

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

77TAKETAKA
質問者

お礼

返答が遅れてすみません。 ありがとうございます。 プログラムが見やすくなり、修正箇所なども わかりやすくなりました。

関連するQ&A