Visual Basicのテキストボックスとコンボボックスの組み合わせによる簡略化の方法

このQ&Aのポイント
  • Visual Basic 2010を使用して、複数のテキストボックスとコンボボックスを設置し、コンボボックスの組み合わせによって対応するテキストボックスをクリアする方法を簡略化したいと思っています。
  • 現在のコードは複数の条件分岐で、コンボボックスの選択状態によって対応するテキストボックスをクリアしています。しかし、より効率的で簡潔な方法はないでしょうか?
  • 例えば、コンボボックス1が一番目の項目を選択し、コンボボックス2が一番目の項目を選択した場合は、テキストボックス1のテキストをクリアするようにしたいです。同様に、他の組み合わせによって対応するテキストボックスをクリアする方法を教えてください。
回答を見る
  • ベストアンサー

Visual Basicで困っています

Visual Basic 2010でテキストボックスとコンボボックスを複数設置し コンボボックスの選択の組み合わせによって消すテキストボックスを決めたいと思っています。 初心者で下記のようなコードしか思いつかないのですが、これを簡略化できませんか? 例) コンボボックス1で一番目の項目を選択して、コンボボックス2で一番目の項目を選択した場合は テキストボックス1のテキストを消す コンボボックス1で一番上の項目を選択して、コンボボックス2で二番目の項目を選択した場合は テキストボックス2のテキストを消す みたいな感じです。 コード If ComboBox1.SelectedIndex = 0 And ComboBox2.SelectedIndex = 1 Then TextBox1.Clear() ElseIf ComboBox1.SelectedIndex = 0 And ComboBox2.SelectedIndex = 2 Then TextBox2.Clear() ElseIf ComboBox1.SelectedIndex = 0 And ComboBox2.SelectedIndex = 3 Then TextBox3.Clear()     ElseIf ComboBox1.SelectedIndex = 0 And ComboBox2.SelectedIndex = 4 Then TextBox4.Clear() End If わかりづらい文章で申し訳ないですが、わかる方、回答をお願いします。

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

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

もう少し簡略化出来そうですよ ComboBox1はSelectedIndexが0かそれ以外かで処理を振り分ける ComBoBox2はSelectedIndexで どのTextBoxを選択するのかを決める ということであれば dim TargetTextBox as TextBox If ComboBox1.SelectedIndex = 0 then   ' ComboBox1の選択が最初の行なら   select case ComboBox2.selectedIndex   case 1     TargetTextBox = TextBox1   case 2     TargetTextBox = TextBox2   case 3     TargetTextBox = TextBox3   case 4     TargetTextBox = TextBox4   end select   if Not TarextBox Is Nothing then     ' 選択が 2行目から5行目の選択なら     ' 該当するTextBoxをクリアする     TargetTextBox.Clear   end if End if といった具合です ・・・

yamamoripoteto
質問者

お礼

ありがとうございます。 だいぶ簡略化することができました。

その他の回答 (1)

  • uma79
  • ベストアンサー率18% (189/1017)
回答No.2

第一条件が共通なら、その中に第2条件を入れるほうが、見やすい。 If ComboBox1.SelectedIndex = 0 Then    If ComboBox2.SelectedIndex = 1 Then TextBox1.Clear()   If ComboBox2.SelectedIndex = 2 Then TextBox2.Clear()   If ComboBox2.SelectedIndex = 3 Then TextBox3.Clear()   If ComboBox2.SelectedIndex = 4 Then TextBox4.Clear() End if 構造化と言います。

関連するQ&A

  • テキストボックスの表示について

    visual basic2010を使用しています。 コンボボックスAの選択が1~4だった時、コンボボックスB、C、Dの選択された結果を、ボタンクリックを経てテキストボックスに表示させるにはどうすればいいでしょうか? If ComboBox1.Text = "1" Then TextBox1.Text = (ComboBox2.Text) TextBox1.Text = (ComboBox3.Text) TextBox1.Text = (ComboBox4.Text) ElseIf ComboBox1.Text = "2" Then TextBox2.Text = (ComboBox2.Text) TextBox2.Text = (ComboBox3.Text) TextBox2.Text = (ComboBox4.Text) ElseIf ComboBox1.Text = "3" Then TextBox3.Text = (ComboBox2.Text) TextBox3.Text = (ComboBox3.Text) TextBox3.Text = (ComboBox4.Text) Else TextBox4.Text = (ComboBox2.Text) TextBox4.Text = (ComboBox3.Text) TextBox4.Text = (ComboBox4.Text) End If 実行した結果、ComboBox4のみの結果がテキストボックスに表示されてしまいました。 '変数を使った場合 If ComboBox2.Text = "1" Then Dim st As String st = (ComboBox3.Text),(ComboBox4.Text),(ComboBox5.Text) textbox1.Text = st ElseIf ~~~~~~~~~~^ こちらは「ステートメントの終わりを指定してください」と出て動作しませんでした。 以上、宜しくお願い致します。

  • If,Forを使ってカレンダー・スケジュールを作成

    visual basic 2010を使用しています。 「コンボボックス1でAが選択されている場合、コンボボックス2のアイテムをテキストボックス1へ、コンボボックス1がBの場合はテキストボックス2へ……」 というコードを書きました。 If CombBox1.Text = "A" Then TextBox.Text = ComboBox2.Text ElseIf ComboBox.Text = "B" Then TextBox2.Text = ........................... ............................. これに追加して日付の概念を入れるにはどうすればいいでしょうか。 「日付が今日で、なおかつコンボボックス1でAが選択されている場合、コンボボックス2のアイテムをテキストボックス1(今日のAのテキストボックス)へ」 ということです。 「日付が1日後だった場合~」 「日付が2日後だった場合~」 と、1週間後まで繰り返したいです。 ・DateTimePicker ・Dim a As Integer = DateAndTime.day(Now) この二つはフォーム、コードに設置しています。 これらとif,for、もしくはその他の関数を使って効率の良いプログラムの書き方を教えて頂けないでしょうか。 分かりやすいように、手書きで申し訳ないですが、画像も載せておきます。 以上、宜しくお願い致します。

  • EXCEL VBA ユーザーフォーム内のテキストボックスを一括処理する方法について

    EXCEL VBAのユーザーフォームについて質問があります。 ユーザーフォームを作り、その中にコンボボックスを1個、テキストボックスを100個設置する。 コンボボックスの値が1のときはテキストボックス1~テキストボックス50までのEnabledをFalseに設定し、 コンボボックスの値が2のときはテキストボックス1~テキストボックス100までのEnabled をFalseに設定する。 このとき、TextBox1.Enabled = False、TextBox2.Enabled = False・・・と一つ一つ書いていくのではなく、 セルを処理するときと同様に、テキストボックスの番号を変数にして処理することは可能でしょうか。 Private Sub ComboBox1_Change()  Dim i As Integer   If ComboBox1.Value = 1 Then   For i = 1 To 50   TextBox(i).Enabled = False   Next i   ElseIf ComboBox1.Value = 2 Then   For i = 1 To 100   TextBox(i).Enabled = False   Next i   End If End Sub というような処理をイメージしているのですが、うまくいきません。どうぞよろしくお願いいたします。

  • コンボボックスのクリア方法について教えて下さい(vb6.5)

    コンボボックスのクリア方法について教えて下さい(vb6.5) ComboBox1で選択したものによって、 ComboBox2で表示するものを変えたいと思っています。 ただ、一度ComboBox1で選択した後にComboBox2を開くと、 ComboBox2は前回のものがどんどん足されていきます。 コンボボックスのクリア方法について、 どの様にすればよいかご教示のほど、 宜しくお願い致します。 Private Sub ComboBox1_Change() UserForm1.ComboBox2.RemoveItem (0) If ComboBox1.Text = 1 Then UserForm1.ComboBox2.AddItem "A" UserForm1.ComboBox2.AddItem "B" UserForm1.ComboBox2.AddItem "C" ElseIf ComboBox1.Text = 2 Then UserForm1.ComboBox2.AddItem "D" UserForm1.ComboBox2.AddItem "E" UserForm1.ComboBox2.AddItem "F" Else UserForm1.ComboBox2.AddItem "G" UserForm1.ComboBox2.AddItem "H" UserForm1.ComboBox2.AddItem "I" End If End Sub -------------------------------------- Private Sub UserForm_Initialize() UserForm1.ComboBox1.AddItem "1" UserForm1.ComboBox1.AddItem "2" UserForm1.ComboBox1.AddItem "3" End Sub

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

    恐縮ですが、ご教示をお願い致します。 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 とてつもなく長くなってしまいました。 変数をループを使って色々やってみたのですが、どうにもならず。。。 簡単に変数及びループを使用して纏める事は出来る物なのでしょうか? よろしくお願いいたします。

  • エクセル VBA if構文

    毎度お世話になります。 下記プログラミングですが、 シャーペンまたはボールペンがコンボボックス1で 選択された場合はコンボボックス2で10束または50束の選択肢となり 消しゴムまたはシャー芯がコンボボックス2で 選択された場合はコンボボックス2で100コまたは1000コの選択肢としたいのですが 他の方法がありますでしょうか。 宜しくお願い致します。 If Me.ComboBox1.Value = "シャーペン" Or Me.ComboBox1.Value = "ボールペン" Then ComboBox2.Style = fmStyleDropDownCombo ComboBox2.RowSource = "" ComboBox2.Clear ComboBox2.AddItem "10束" ComboBox2.AddItem "50束" ComboBox2.ListIndex = -1 End If If Me.ComboBox1.Value = "消しゴム" Or Me.ComboBox1.Value = "シャー芯" Then ComboBox2.Style = fmStyleDropDownCombo ComboBox2.RowSource = "" ComboBox2.Clear ComboBox2.AddItem "100コ" ComboBox2.AddItem "1000コ" ComboBox2.ListIndex = -1 End If

  • 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

  • ExcelVBA初歩的な質問

    ExcelのVBAについてです。 ネットのサイトなどを参考に勉強しはじめたばかりなので、非常に初歩的な質問かと思いますが、よろしくお願いいたします。 ユーザーフォームにコンボボックスとテキストボックスを用意しました。 それぞれコンボボックスは「combobox1」、テキストボックスは「textbox1」とします。 コンボボックスからプルダウンで項目が選択できるよう Private Sub UserForm_Initialize() With combobox1 .AddItem "りんご" .AddItem "ぶどう" .AddItem "みかん" .AddItem "もも" End With End Sub としました。 各項目が選択されたときに、テキストボックス「textbox1」にはそれぞれの固定値が入るようにしたいです。 (例えばりんごなら1、ぶどうなら3、みかんなら10、ももなら25といったような感じで) Private Sub combobox1_Click() Dim listno As Long listno = combobox1.ListIndex With textbox1 Select Case para Case 0 .Text = 1 Case 1 .Text = 3 Case 2 .Text = 10 Case 3 .Text = 25 End Select End With End Sub としました。 しかし、実行してみると、最初選択したときはtextbox1には数値が入るのですが、その後違う項目を選択してもtextbox1の値は変わりません。 どのようにしたらよいのでしょうか? また、根本的なことなのですが、なぜ .Additem "りんご" ではメソッド(.Additemってメソッドですよね?)ではメソッドと値を並べて記述するのに、 case 0 .text = 1 では =で結ぶのでしょうか?(.textもメソッドですよね?)

  • Excel VBAのコンボボックス

    お世話になります。 コンボボックス1と2と3は選択されますが コンボボックス4には何の表示もされません。 選択して条件設定は4つ以上できないのでしょうか? Dim ITE As Variant Dim flg As Variant Private Sub ComboBox3_Change() 'ComboBox4セット Dim ico As Long ico = 1 With ThisWorkbook.Worksheets("data") KEY = Me.ComboBox1.Text KEY2 = Me.ComboBox2.Text KEY3 = Me.ComboBox3.Text Me.ComboBox4.Clear Do While .Cells(ico, 1) <> "" If .Cells(ico, 1) = KEY And .Cells(ico, 2) = KEY2 And .Cells(ico, 3) = KEY3 Then ITE = .Cells(ico, 4).Value flg = 0 For I = 0 To Me.ComboBox4.ListCount - 1 If ITE = Me.ComboBox4.List(I) Then flg = 1 Next If flg = 0 Then Me.ComboBox4.AddItem ITE End If ico = ico + 1 Loop End With Me.ComboBox4.SetFocus End Sub

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

    エクセル 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 御願いします。