変数とループを使ったマクロについて

このQ&Aのポイント
  • マクロに変数とループを使用していますが、問題が発生しています。質問文章全体は非常に長いので、要約しましょう。
  • 変数とループを使用したマクロを作成していますが、うまくいかず困っています。どのように変数とループを使用するかの具体的な例が欲しいです。
  • 変数とループを使用してマクロを作成していますが、長くなってしまいました。簡単に変数とループを使用して纏める方法はありますか?
回答を見る
  • ベストアンサー

変数とループを使ったマクロについて

恐縮ですが、ご教示をお願い致します。 comboboxの値を空白のtextboxに貼り付けるものです。 本を片手にマクロを作成していたのですが、上手くいかず困っております。 作成したマクロ Private Sub CommandButton100_Click() '入力値のチェック If ComboBox1 = "" Or ComboBox2 = "" Then GoTo 998 '空白ボックスを検索しデータ入力 If TextBox11 = "" And TextBox12 = "" Then TextBox11 = ComboBox1 TextBox12 = ComboBox2 GoTo 999 End If If TextBox21 = "" And TextBox22 = "" Then TextBox21 = ComboBox1 TextBox22 = ComboBox2 GoTo 999 End If If TextBox31 = "" And TextBox32 = "" Then TextBox31 = ComboBox1 TextBox32 = ComboBox2 GoTo 999 End If ↓ ↓  以下50個あります。 ↓ If TextBox501 = "" And TextBox502 = "" Then TextBox501 = ComboBox1 TextBox502 = ComboBox2 GoTo 999 End If 998 MsgBox "入力値に誤りがあります 999 End Sub とてつもなく長くなってしまいました。 変数をループを使って色々やってみたのですが、どうにもならず。。。 簡単に変数及びループを使用して纏める事は出来る物なのでしょうか? よろしくお願いいたします。

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

  • ベストアンサー
  • akina_line
  • ベストアンサー率34% (1124/3287)
回答No.1

こんにちは。  VBAと仮定して回答します。VBAでは、VBと違い、コントロール配列が使えないので、コレクションを使ってループ処理するようです。   http://okwave.jp/qa1383448.html   また、GOTO文は使わないようにしましょう。「構造化プログラミング」(古いですね。。。)で検索すると代替する方法が見つかると思います。 では。

kanican1kg
質問者

お礼

早々のご教示ありがとうござました。 まずは、お礼まで。 リンクに飛んで、試して参ります。

関連するQ&A

  • Excel ユーザーフォーム呼び出し時エラー

    WindowsVista HomePremium Excel 2007 Microsoft Visual Basic 6.5 です。 Excelでユーザーフォーム(UserForm1)を作り、   Sub Auto_Open()     UserForm1.Show   End Sub で起動時に呼び出すようにしました。 確認のため、一度Excelを閉じ起動し直したところ正常に動作しました。 もう一度確認のため同じように再起動をすると、  実行時エラー '2110': コントロールが表示されていない、利用できない、またはフォーカスを持てないため、そのコントロールにフォーカスを移すことはできません。 と出て、それ以降何度やっても動作しなくなってしまいました。 解決法か原因がわかる方いらっしゃいましたら、ぜひご教授ください。よろしくおねがいします。 ユーザーフォーム関係のコードを以下に書いておきます。(内容は小遣い帳のようなものです。) ―――――――――――――――――――― Private Sub CommandButton1_Click() Dim NUM As Integer If TextBox1.Text = "" Then MsgBox "概要が記入されていません。" TextBox1.SetFocus GoTo 100 ElseIf TextBox2.Text = "" Then MsgBox "収支が記入されていません。" TextBox2.SetFocus GoTo 100 ElseIf ComboBox1.ListIndex = -1 Then MsgBox "収支の種類が選択されていません。" ComboBox1.SetFocus GoTo 100 End If Range("F6").Select NUM = 0 Do While ActiveCell.Offset(NUM, 0) <> "" NUM = NUM + 1 Loop ActiveCell.Offset(NUM, 0).Select ActiveCell = TextBox1.Value If CheckBox1 = True Then TextBox2 = -TextBox2 End If If ComboBox1.ListIndex = 0 Or ComboBox1.ListIndex = 1 Then ActiveCell.Offset(0, ComboBox1.ListIndex + 1) = TextBox2.Value Else ActiveCell.Offset(0, ComboBox1.ListIndex + 2) = TextBox2.Value End If TextBox1 = "" TextBox2 = "" CheckBox = Falses ComboBox1.ListIndex = -1 100 End Sub ―――――――――――――――――――― Private Sub CommandButton2_Click() Dim NUM As Integer If TextBox3.Text = "" Then MsgBox "移動金額が記入されていません。" TextBox3.SetFocus GoTo 100 ElseIf ComboBox2.Text = "" Then MsgBox "移動元が選択されていません。" ComboBox2.SetFocus GoTo 100 ElseIf ComboBox3.ListIndex = -1 Then MsgBox "移動先が選択されていません。" ComboBox3.SetFocus GoTo 100 End If Range("F6").Select NUM = 0 Do While ActiveCell.Offset(NUM, 0) <> "" NUM = NUM + 1 Loop ActiveCell.Offset(NUM, 0).Select ActiveCell = "移動" If ComboBox2.ListIndex = 0 Or ComboBox2.ListIndex = 1 Then ActiveCell.Offset(0, ComboBox2.ListIndex + 1) = -TextBox3.Value Else ActiveCell.Offset(0, ComboBox2.ListIndex + 2) = -TextBox3.Value End If If ComboBox3.ListIndex = 0 Or ComboBox3.ListIndex = 1 Then ActiveCell.Offset(0, ComboBox3.ListIndex + 1) = TextBox3.Value Else ActiveCell.Offset(0, ComboBox3.ListIndex + 2) = TextBox3.Value End If TextBox3 = "" ComboBox2.ListIndex = -1 ComboBox3.ListIndex = -1 100 End Sub ―――――――――――――――――――― Private Sub CommandButton3_Click() Unload Me End Sub ―――――――――――――――――――― Private Sub CommandButton4_Click() Unload Me End Sub ―――――――――――――――――――― Private Sub UserForm_Initialize() myarray1 = Array("収支", "クレジット", "郵便局", "机", "500", "1") For i = 0 To 5 ComboBox1.AddItem myarray1(i) ComboBox2.AddItem myarray1(i) ComboBox3.AddItem myarray1(i) Next i TextBox1.SetFocus End Sub

  • エクセルのマクロでループ処理

    エクセルのマクロで、ループを使っています 下の様な感じです。 sub TEST() a: re=re+1 if ○○=○▲ THEN GOTO b: 処理・・・ goto a: b: end sub() ですが、これの書き方はDo WhileやDo Untilを使った方が 早く処理できるのでしょうか? また、書き方等もお教え下されば助かります。

  • マクロにおける条件文の作成の件

    以下の様に条件付きの計算式を作成しました。CommandButton3を押しても 計算しなかったり、TextBox3.Value > TextBox1 ではないときでもエラー メッセージが出ます。どこに欠点があるのか教えて下さい。 Private Sub CommandButton3_Click() Dim row As Integer If TextBox1.Value = Empty Then MsgBox ("Aが空欄です") Exit Sub End If If TextBox2.Value = Empty Then MsgBox ("Bが空欄です") Exit Sub End If If TextBox3.Value = Empty Then MsgBox ("Cが空欄です") Exit Sub End If If TextBox4.Value = Empty Then MsgBox ("Dが空欄です") Exit Sub End If If TextBox3.Value > TextBox1.Value Then MsgBox ("Cの値をAの値より小さくしましょう!") Exit Sub End If If TextBox4.Value > TextBox2.Value Then MsgBox ("Dの値をBの値より小さくしましょう!") Exit Sub End If TextBox5 = Round(TextBox1 * TextBox2 - (TextBox1 - TextBox3) * (TextBox2 - TextBox4) / 2, 0) End Sub

  • 12個のCommandbuttonをスマートに

    はじめまして 2003 XP UserFormにCommandbuttonが12個あります。 Private Sub CommandButton1_Click() If Me.MultiPage1.Value = 0 Then TextBox3.Value = TextBox3 & "1" Else: TextBox1.Value = TextBox1 & "1" End If End Sub Private Sub CommandButton2_Click() If Me.MultiPage1.Value = 0 Then TextBox3.Value = TextBox3 & "2" Else: TextBox1.Value = TextBox1 & "2" End If End Sub Private Sub CommandButton3_Click() If Me.MultiPage1.Value = 0 Then TextBox3.Value = TextBox3 & "3" Else: TextBox1.Value = TextBox1 & "3" End If End Sub Private Sub CommandButton4_Click() If Me.MultiPage1.Value = 0 Then TextBox3.Value = TextBox3 & "4" Else: TextBox1.Value = TextBox1 & "4" End If End Sub Private Sub CommandButton5_Click() If Me.MultiPage1.Value = 0 Then TextBox3.Value = TextBox3 & "5" Else: TextBox1.Value = TextBox1 & "5" End If End Sub Private Sub CommandButton6_Click() If Me.MultiPage1.Value = 0 Then TextBox3.Value = TextBox3 & "6" Else: TextBox1.Value = TextBox1 & "6" End If End Sub Private Sub CommandButton7_Click() If Me.MultiPage1.Value = 0 Then TextBox3.Value = TextBox3 & "7" Else: TextBox1.Value = TextBox1 & "7" End If End Sub Private Sub CommandButton8_Click() If Me.MultiPage1.Value = 0 Then TextBox3.Value = TextBox3 & "8" Else: TextBox1.Value = TextBox1 & "8" End If End Sub Private Sub CommandButton9_Click() If Me.MultiPage1.Value = 0 Then TextBox3.Value = TextBox3 & "9" Else: TextBox1.Value = TextBox1 & "9" End If End Sub Private Sub CommandButton10_Click() If Me.MultiPage1.Value = 0 Then TextBox3.Value = TextBox3 & "0" Else: TextBox1.Value = TextBox1 & "0" End If End Sub Private Sub CommandButton11_Click() If Me.MultiPage1.Value = 0 Then TextBox3.Value = TextBox3 & "00" Else: TextBox1.Value = TextBox1 & "00" End If End Sub Private Sub CommandButton12_Click() If Me.MultiPage1.Value = 0 Then TextBox3.Value = TextBox3 & "000" Else: TextBox1.Value = TextBox1 & "000" End If End Sub  これをもっとスマートに出来ないでしょうか? 宜しくお願いします。

  • マクロのフォームから。。。

    マクロのフォームから。。。 マクロのフォームからシートの最終行に入力ができるようにしたいのです。 マクロは下記になります。今の状態ですと、新規入力ボタンを押してデータ登録ボタンを押すと、途中の行に登録がされてしまいます。 暫く考えていましたがどうしてもわからず、また初心者の為できればわかりやすく教えてもらえると幸いです。どうかよろしくお願い致します。 Private Sub CommandButton3_Click() 入力結果 = MsgBox("データを登録しますか", vbYesNo) If 入力結果 = 6 Then If ToggleButton1.Value = True Then 表示行 = Cells(2, 10).Value + 1 Else 表示行 = Cells(1, 10).Value End If If ToggleButton1.Value = True Then データクリア TextBox1.Value = Cells(表示行, 1).Value + 1 Else データ表示 End If 表示行 = Cells(1, 10).Value Cells(表示行, 1).Value = TextBox1.Value Cells(表示行, 2).Value = TextBox2.Value Cells(表示行, 5).Value = TextBox3.Value Cells(表示行, 6).Value = TextBox4.Value Cells(表示行, 7).Value = TextBox5.Value Cells(表示行, 4).Value = ComboBox1.Value If OptionButton1.Value = True Then Cells(表示行, 3).Value = "男" Else Cells(表示行, 3).Value = "女" End If データ表示 End If End Sub ※ 表の範囲:a1:g5(1行目はタイトル) j1:表示行 j2:最終行(counta)

  • VBA ユーザーフォームのコードについて

    下記の2つのコードの意味について教えて下さい。 Private Sub CommandButton1_Click() If ComboBox1 = "" Then ComboBox1.SetFocus・・・・・1 Exit Sub End If Application.Run (ComboBox1.List(ComboBox1.ListIndex))・・・2 End Sub 1と2がわかりません。 Private Sub UserForm_Initialize() TB = Array("マクロ1", "マクロ2", "マクロ3") Me.ComboBox1.List = TB End Sub 「Private Sub UserForm_Initialize()」と「Array」がわかりません。 よろしくお願いします。

  • UserFormのTextBoxに入力した値を保存する方法がありますか

    UserFormのTextBoxに入力した値を保存する方法がありますか? 具体的には、UserFormのTextBoxに2010/6/10と入力したときに シートのセルT13に表示されるように以下のマクロを作成しました。 Private Sub CommandButton1_Click() Range("T13").Value = 日付.Value If CloseMode = vbFormControlMenu Then Cancel = True Me.Hide End If End Sub 再度UserFormを開くと前の入力内容があるのですがExcelを保存 して閉じて再度シートを開くと空白になってしまいます。 UserFormを開いたタイミングで出力させたT13の値を返すという ようなマクロにするにはどうしたらよいでしょうか。 初心者なので詳しく教えていただけませんか。

  • テキストボックス 空白確認

    エクセル VBAで コマンドボタンをクリックすると テキストボックスに空白があった場合 空白のテキストボックスにセットフォーカスしたいのですが 下記のように少ない場合は まだいいですが 多くなってきたとき見易さの面でも簡単にしたいのですが VBだとコントロール配列のインデックス値をループ処理 すればよいと思いますがVBAだとどのようにすればいいのでしょうか? Private Sub CommandButton3_Click() If TextBox2 = "" Then TextBox2.SetFocus ElseIf TextBox3 = "" Then TextBo3.SetFocus ElseIf TextBox4 = "" Then TextBox4.SetFocus ElseIf TextBox5 = "" Then TextBox5.SetFocus End If 御願いします。

  • エクセルマクロ セル内の値の抜き出しと入力の値との

    すみません、ハマっております。 下記マクロにて、A2セル内にある(例)「111-22222-5555-666-1」の中のと入力した5555とのマッチングのマクロを作っているのですが、どうしてもA2値がemptyになってしまいうまくマッチングできません。どうしたらよいでしょうか?お力お貸しください。 Private Sub CommandButton1_Click() Unload 番号入力 Dim OdrNum As String If TextBox1.Value = "" Then Exit Sub Else OdrNum = TextBox1.Value While Mid(A2, 11, 4) <> OdrNum '該当番号の欄になるまで不要行削除 If Mid(A2, 11, 4) = "" Then MsgBox "該当番号はありませんでした。" Exit Sub Else End If Rows("2:2").Select Selection.Delete Shift:=xlUp Wend MsgBox "処理終了" End If End Sub

  • エクセルマクロによる条件の条件の件

    エクセルで以下のマクロを作成しました。 Private Sub UserForm_Initialize() ComboBox1.AddItem "SS400,SGP" ComboBox1.AddItem "SUS304" ComboBox1.AddItem "PVC,VP" If ComboBox1.Value = "SS400,SGP" Then ComboBox2.AddItem "丸棒" ComboBox2.AddItem "等辺山形鋼" End If End Sub ComboBox1で SS400,SGP を選択してもComboBox2では何も出ません。どうすれば出るようになるのか教えて下さい。

専門家に質問してみよう