【最大10000ポイント】当たる!!質問投稿キャンペーン!

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

A 回答 (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
'---------------------------------------------
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/03/10 09:31

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
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/03/10 09:27

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


人気Q&Aランキング