こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

投稿日時 - 2008-02-22 14:43:20

QNo.3799252

困ってます

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

こんばんは。

>テキストボックスが増えた場合、修正することも考えて

もしかして、テキストボックスが、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
'---------------------------------------------

投稿日時 - 2008-02-22 20:51:31

お礼

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

投稿日時 - 2008-03-10 09:31:42

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.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

投稿日時 - 2008-02-22 15:33:21

お礼

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

投稿日時 - 2008-03-10 09:27:36

あなたにオススメの質問