エクセルVBAで計算の繰り返し処理を簡素化する方法

このQ&Aのポイント
  • エクセルのVBAを使用して、フォーム内のテキストボックスの値を変更することで計算の結果を表示したいです。
  • 現在は50個以上の計算ラベルがあり、各テキストボックスの値が変更されるたびに同じ計算処理を繰り返しています。
  • 簡素化するためには、テキストボックスの値が変更されるたびに一つの計算処理を実行し、結果を対応するラベルに表示するようにコードを改良する必要があります。
回答を見る
  • ベストアンサー

エクセルVBA 計算の繰り返し処理?

エクセルのVBA フォーム内にて 下記、各テキストボックスの数値を変更することにより Label27にLabel28*TextBox12+TextBox13+TextBox14 Label33にLabel34*TextBox16+TextBox17+TextBox18 Label27、Label33に計算の答えを書き込みたいため 下記のように書き込みました。 Private Sub TextBox12_Change() Label27.Caption = Val(Label28.Caption) * Val(TextBox12.Value) _ + Val(TextBox13.Value) + Val(TextBox14.Value) End Sub Private Sub TextBox13_Change() Label27.Caption = Val(Label28.Caption) * Val(TextBox12.Value) _ + Val(TextBox13.Value) + Val(TextBox14.Value) End Sub Private Sub TextBox14_Change() Label27.Caption = Val(Label28.Caption) * Val(TextBox12.Value) _ + Val(TextBox13.Value) + Val(TextBox14.Value) End Sub Private Sub TextBox16_Change() Label33.Caption = Val(Label34.Caption) * Val(TextBox16.Value) _ + Val(TextBox17.Value) + Val(TextBox18.Value) End Sub Private Sub TextBox17_Change() Label33.Caption = Val(Label34.Caption) * Val(TextBox16.Value) _ + Val(TextBox17.Value) + Val(TextBox18.Value) End Sub Private Sub TextBox18_Change() Label33.Caption = Val(Label34.Caption) * Val(TextBox16.Value) _ + Val(TextBox17.Value) + Val(TextBox18.Value) End Sub 計算は出来るのですが計算ラベル50程あるため、修正を考えて ももう少し簡素化して書き込みたいため 調べましたがヒント項目がずれているせいか回答を検索できませんでした。 どのようにすれば宜しいかご教示の程宜しくお願いいたします。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

とりあえず整理統合だけでもしてみましょう。 Private Sub TextBox12_Change()  mycalc 27,28,12,13,14 End Sub Private Sub TextBox13_Change()  mycalc 27,28,12,13,14 End Sub  : private sub MyCalc(a1, a2, a3, a4, a5)  with UserForm1   .controls("Label" & a1).caption _   = val(.controls("Label" & a2).caption) * val(.controls("TextBox" & a3).value) _   * val(.controls("TextBox" & a4).value ) + val(.controls("TextBox" & a5).value)  end with end sub あとはまぁ次のステップとして,ネットで「vba コントロール配列」などで検索して活用してみてください。 http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_100_040.html

77TAKETAKA
質問者

お礼

有難うございました。 ずいぶんとすっきりしました。

関連するQ&A

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

  • VBAの計算について教えてください。

    お世話になります。 VBA超初心者です。 教えて頂けると助かります。 ユーザーフォームにテキストボックス1、2、3を作成し、それらを計算させて テキストボックス4に表示をさせたいと考えています。 テキストボックスに入力するパターンは以下の2種類です。 (1)すべてのテキストボックスに数値が入る (2)テキストボックス3のみに数値が入る 行いたい計算は、“(テキストボックス1 × テキストボックス2) + テキストボックス3”です。 曲りなりに作成してみましたが、テキストボックス3の数値を変えた時や削除した時などに、 テキストボックス4に入っている数値が残っていたりと、思うようにできません。 作成したものを掲載しておきます。 何卒よろしくお願いします。 テキストボックス1を変更したとき 1、3に数値が入っていれば、以下の計算を。 それ以外は“0”をテキストボックス4へ Private Sub TextBox1_Change() If TextBox1.Value = True And TextBox3.Value = True Then TextBox4 = Val(TextBox1.Text) * Val(TextBox2.Text) + Val(TextBox3.Text) Else TextBox4 = 0 End If End Sub テキストボックス2を変更したとき 2、3に数値が入っていれば、以下の計算を。 それ以外は“0”をテキストボックス4へ Private Sub TextBox2_Change() If TextBox2.Value = True And TextBox3.Value = True Then TextBox4 = Val(TextBox1.Text) * Val(TextBox2.Text) + Val(TextBox3.Text) Else TextBox4 = 0 End If End Sub テキストボックス3を変更したとき 1、2、3に数値が入っていれば、以下の計算を。 1か2に数値がなく、3に数値があれば、3の数値をテキストボックス4へ。 それ以外は“0”をテキストボックス4へ Private Sub TextBox3_Change() If TextBox1.Value = True And TextBox2.Value = True And TextBox3.Value = True Then TextBox4 = Val(TextBox1.Text) * Val(TextBox2.Text) + Val(TextBox3.Text) ElseIf TextBox1.Value = False or TextBox2.Value = False And TextBox3.Value = True Then TextBox4 = Val(TextBox3.Text) Else texbox24 = 0 End If End SubEnd Sub

  • excel 2003 マクロですっきりさせたい

    お世話になります。 ユーザーフォーム上の テキストボックス 商品名_1の値が空白になったら ラベルも空白にするというマクロを組みました。 ラベルがたくさんあり、何かすっきりとできる方法があれば 教えてください!>< よろしくお願いします。 Private Sub 商品名_1_Change() If 商品名_1.Value = "" Then Label1_1.Caption = "" Label1_2.Caption = "" Label1_3.Caption = "" Label1_4.Caption = "" Label1_5.Caption = "" Label1_6.Caption = "" Label1_7.Caption = "" End If End Sub

  • VBA 年月日から日曜日に当たる日の文字を赤くする

    よろしくお願いします。 TextBox2に年号(西暦) ComboBox1に月 TextBox7に日 を、入力します。 入力方法は、Label1からLabel31を押下して日付けを入れます。 したときに各Labelの内、日曜日に該当するLabelならCaptionの文字を赤くする。 Private Sub Label1_Click() TextBox7.Value = 1 ’もし1日が日曜日ならLabel1のCaptionの文字を赤くする End Sub Private Sub Label2_Click() TextBox7.Value = 2 End Sub Private Sub Label3_Click() TextBox7.Value = 3 End Sub ~ Private Sub Label29_Click() TextBox7.Value = 29 End Sub Private Sub Label30_Click() TextBox7.Value = 30 End Sub Private Sub Label31_Click() TextBox7.Value = 31 End Sub 追 ComboBoxで日付けをダウンリスト表示したかったのですが、1列表示で 長くなってしまいます。 ※2列に表示する方法を知らないもので、Labelで2列表示にしました。 もし、ダウンリストを2列表示できるのであれば、ぜひともご教示をお願いします。 無識なものですみません。 何卒宜しくお願い致します。

  • VBA DoEvents関数の働きと使い方を知りたい

    下記のような UserForm上の Module コードを書いてももらったのですが、DoEvents の働きが分からないのです。どなたか分かりやすく説明していただけませんでしょうか? Private i As Integer Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) If Me.TextBox1.Value = Me.Label1.Caption Then Me.Label2.Caption = "正解です" Else Me.Label2.Caption = "不正解です" End If DoEvents If i < 20 Then i = i + 1 Label_Up Me.TextBox1.Value = "" Cancel = True Else MsgBox "終了です" End If End Sub Private Sub UserForm_Initialize() i = 1 Label_Up End Sub Private Sub Label_Up() Me.Label1.Caption = Sheets("Sheet1").Range("A1:A20").Cells(i).Value DoEvents End Sub

  • VB初心者です

    計算結果が"7"の時に限り、「当たり!」と表示される、ちょっと意味不明な計算機を作っています。 現在、下記のように書いてますが、何故かうまくいきません。(当たりが表示されない 何故でしょうか?お助けください。。m(_ _)m Private Sub Command1_Click() Label1.Caption = Str(Val(Text1.Text) + Val(Text2.Text)) Label3.Caption = "+" Label4.Visible = False '画像を隠す。 'いずれかの数字が「7」のとき、メッセージを表示する。 If Label1.Caption = "7" Then Label4.Visible = True End If End Sub Private Sub Command2_Click() End End Sub Private Sub Command3_Click() Label1.Caption = Str(Val(Text1.Text) * Val(Text2.Text)) Label3.Caption = "*" End Sub Private Sub Command4_Click() Label1.Caption = Str(Val(Text1.Text) - Val(Text2.Text)) Label3.Caption = "-" End Sub Private Sub Command5_Click() Label1.Caption = Str(Val(Text1.Text) / Val(Text2.Text)) Label3.Caption = "/" End Sub

  • エクセルVBA「型が一致しません。」

    エクセルVBA「型が一致しません。」 ユーザーフォームの実行時に上記エラーが出ます。おそらく関係ありそうなコードが以下です。 ちなみにTextBoxはスピンボタンと併用して使用しています(そちらのコーディングには問題なし) Private Sub TextBox1_Change() Me.TextBox3.Value = Me.TextBox1.Value * Me.TextBox2.Value End Sub Private Sub TextBox2_Change() Me.Textbox3.Value = Me.TextBox1.Value * Me.TextBox2.Value End Sub Private Sub UserForm_Initialize() Me.TextBox3.Value = Me.TextBox1.Value * Me.TextBox2.Value 立て続けに質問してしまい申し訳ないですが何せ急いでいるもので・・・お願い致します

  • LabelとTextboxの自動計算を希望

    ComboBox2のリスト選択で連動でlabel2とlabel12の数字変更 TextBox2には数字入力 Label12(数字) x TextBox2(数字) = Lavel22(乗算合計)で Label12変えないで、TextBox2の数字変えた時はLabel22の合計変動 Label12の数字変えて、TextBox2の数字変ない時はLabel22の合計変わらない現状です。 Private Sub TextBox2_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) Select Case True 'TextBox2かLabel12が空白の時Label22空白 Case TextBox2.Value = "" Or Label12.Caption = "" Label22.Caption = "" Case Else 'TextBox2とLabel12が数字の時Label22はTextBox2の数字とLabel12数字を乗算する If IsNumeric(TextBox2.Value) And IsNumeric(Label12.Caption) Then _ Label22.Caption = TextBox2 * Label12 'Label22に数字がある時Label29に合計表示 Label29.Caption = Label22 End Select End Sub ComboBox2_change()作って、TextBox2_KeyUp書いてる内容を書けば動くでしょうが・・・ 同じ内容2つ書かないで動く方法があれば非常に助かります。 いい方法無さそうならComboBox2_change()作って書こうかな・・・と思ってます

  • エクセルVBA「スピンボタン」について

    エクセルVBA「スピンボタン」について スピンボタンとテキストボックスを組み合わせて Private Sub SpinButton1_Change() Me.TextBox1.Value = Me.SpinButton1.Value End Sub Private Sub UserForm_Initialize() With Me.SpinButton1 .Min = 1 .Value = .Min End With Me.TextBox1.Value = Me.SpinButton1.Min End Sub というコードを書きました。 「1、2、3、・・・10、11、・・・」という数の増加を「01、02、03・・・10、11・・・」という風にしたいのですがどのようにコーディングすればよいのでしょうか?お願いします。.

  • Excel VBAについて

    Excel VBAにおいて、Sheetの選択した行によって値を表示するUserFormを変更したいと思っています。 現在以下のようにしたのですが、実行すると「SubまたはFunctionが定義されていません」というエラーが表示されます。 「Controls("UserForm" & x).Label1.Caption =」のところをどのようにしたらよいのでしょうか。 Private Sub CommandButton1_Click()   If ActiveCell.Row = 5 Then     UserForm1.Show     x = 1   ElseIf ActiveCell.Row = 6 Then     UserForm2.Show     x = 2   End If End Sub Private Sub Worksheet_Selection Change(Byval Target As Range)   Controls("UserForm" & x).Label1.Caption = ・・・

専門家に質問してみよう