image

データ検証を使用して、ワークシートにカスケードドロップダウンを作成する方法を知っています。しかし、VBAユーザーフォームにカスケードコンボボックスドロップダウンを作成するにはどうすればよいですか。これは基本的なニーズの1つです。この記事では、VBAで依存コンボボックスを作成する方法を学習します。 === VBAの依存コンボボックスのロジックVBAで依存コンボボックスを作成するには、ソース要素のイベントでコンボボックスを初期化する必要があります。たとえば、コンボボックスがラジオボタングループに依存している場合、依存するコンボボックスをロードするコードは、誰かがラジオボタンを選択した直後に実行する必要があります。または、コンボボックスが別のコンボボックスに依存している場合は、コンボボックスの値が変更されるたびに、コンボボックスに依存してロードする必要があります。

十分な理論。例に飛び込んで、それがどのように機能するかを見てみましょう。

別のコンボボックスに依存するComboBox2つのコンボボックスを作成します。最初に、国の名前をいくつかリストする必要があります。

もう1つは、選択した国の州の名前をリストする必要があります。ユーザーが最初のコンボボックスで国を変更した場合、2番目のコンボボックスのリストを変更する必要があります。

国と州のラベルが付いた2つのコンボボックスと、入力を送信するためのコマンドボタンを持つフォームを作成しましょう。

image

最初のコンボボックスには国の名前がリストされている必要があり、値に依存しません。したがって、基本的なコンボボックスの初期化の場合と同様に、form_intializeイベントにロードします。

ユーザーフォームをダブルクリックします。 UserFormオブジェクトのコーディング領域が開きます。次に、左側のドロップダウンメニューからユーザーフォームを選択します。次に、右側のドロップダウンメニューから[初期化]を選択します。

image

空のサブ名UserForm_Initialize()が挿入されます。このサブに記述されたものはすべて、ユーザーフォームが表示される前に実行されます。

そこで、ここにコンボボックスの初期化コードを記述します。

Private Sub UserForm_Initialize()

countries = Array("India", "Nepal", "Bhutan", "Shree Lanka")

UserForm1.ComboBox1.List = states

End Sub

最初のコンボボックスが初期化されました。ユーザーフォームをロードするたびに、最初のcomboxに国の名前が表示されます。

次に、2番目のコンボボックスをロードするには、最初のコンボボックス1で選択されている値を確認し、combobox1が値を変更するたびにコードを実行する必要があります。このために、Combobox_AfterUpdateイベントを使用します。

左側のドロップダウンから、combobox1を選択します。右側のドロップダウンメニューから、[AfterUpdate]を選択します。 Changeイベントを使用することもできますが、記事ではAfterUpdateに固執します。

次に、次のコードを記述します。

Private Sub ComboBox1_AfterUpdate()

Select Case ComboBox1.Value

Case "India":

states = Array("Delhi", "UP", "UK", "Gujrat", "Kashmir")

Case "Nepal":

states = Array("Arun Kshetra", "Janakpur Kshetra", "Kathmandu Kshetra",_

"Gandak Kshetra", "Kapilavastu Kshetra")

Case "Bhutan":

states = Array("Bumthang", "Trongsa", "Punakha", "Thimphu", "Paro")

Case "Shree Lanka":

states = Array("Galle", "Ratnapura", "Colombo", "Badulla", "Jaffna")

End Select



ComboBox2.List = states



End Sub

image

ここでは、selectcaseステートメントを使用しました。 select caseステートメントは、多くの値からどの値が選択されているかを確認する場合に適しています。 「link:/ general-topics-in-vba-vba-select-case-alternative-of-nested-if-else-if-statements [ここで詳細]」と説明しました。

ユーザーが挿入した値を保存するには、送信ボタンを使用します。コマンドボタンsubmitに以下のコードを記述して、ユーザーが選択した国と州をワークシートに保存します。

Private Sub CommandButton1_Click()

country = ComboBox1.Value

State = ComboBox2.Value

ThisWorkbook.Worksheets("sheet1").Range("G1") = country

ThisWorkbook.Worksheets("sheet1").Range("H1") = State

Unload Me

End Sub

ここでユーザーフォームを表示するには、ワークシートにボタンを挿入し、以下のコードを記述します。または、単純なモジュールを使用してユーザーフォームを表示することもできます。

Sub load_userform()

UserForm1.Show

End Sub

次に、load_userformコードを実行します。

image

どのように機能しますか?

コードuserform.showを持つサブを実行すると、VBAはuserform.showコマンドを実行した直後にuserform_initializeイベントを実行します。 userform_intializeイベントでは、国のリストを持つ最初のコンボボックスを初期化しました。その後、フォームがユーザーに表示されます。

これで、ユーザーが最初のコンボボックスから任意の値を選択すると、イベントcombobox1_AfterUpdateイベントが実行されます。このイベントには、combobox1でユーザーが選択した値を確認するコードが含まれており、その値に基づいて、states配列を設定し、combobox2の値をstates配列で初期化します。

そうですね、これがVBAユーザーフォームでカスケードコンボボックスを作成する方法です。私は十分に説明的であり、記事がその目的を果たしたことを願っています。この記事またはVBAトピックについて疑問がある場合は、以下のコメントセクションで質問してください。

関連記事:

link:/ applications-word-outlook-in-vba-getting-started-with-excel-vba-userforms [Excel VBAUserForms入門] | * Excelでフォームを作成する方法と使用方法を説明しますVBAツールボックス、ユーザー入力の処理方法、そして最後にユーザー入力の保存方法。これらのトピックについて、1つの例とステップバイステップガイドを使用して説明します。

link:/ general-topics-in-vba-vba-variables-in-excel [ExcelのVBA変数] | * VBAはVisualBasic forApplicationsの略です。

これは、Microsoftのプログラミング言語です。これは、MSExcel、MS-Word、MS-AccessなどのMicrosoft Officeアプリケーションで使用されますが、VBA変数は特定のキーワードです。

link:/ general-topics-in-vba-excel-vba-variable-scope [Excel VBA Variable Scope] | *すべてのプログラミング言語には、定義された変数にアクセスできる場所を定義する変数アクセス指定子があります。 ExcelVBAも例外ではありません。 VBAにもスコープ指定子があります。

link:/ cells-ranges-rows-and-columns-in-vba-what-is-the-difference-between-byref-and-byval-arguments-vba-interview-question [ByRef and ByVal Arguments] |引数がByRef引数として別のサブまたは関数に渡されると、実際の変数の参照が送信されます。変数のコピーに加えられた変更は、元の引数に反映されます。

link:/ files-workbook-and-worksheets-in-vba-delete-sheets-without-confirmation-prompts-using-vba-in-microsoft-excel [MicrosoftExcelのVBAを使用して確認プロンプトなしでシートを削除する] | VBAを使用してシートを削除しているので、何をしているのかがわかります。

この警告を表示せず、いまいましいシートを削除しないようにExcelに指示します。

link:/ files-workbook-and-worksheets-in-vba-add-and-save-new-workbook-using-vba-in-microsoft-excel [Microsoft Excel2016でVBAを使用して新しいブックを追加および保存する] |このコードでは、最初にワークブックオブジェクトへの参照を作成しました。次に、新しいワークブックオブジェクトで初期化しました。このアプローチの利点は、この新しいワークブックの操作を簡単に実行できることです。保存、閉じる、削除などのように `link:/ menus-toolbars-status-bar-in-vba-display-a-message-on-the-statusbar-using-vba-in-microsoft-excel [Display A Message On ExcelVBAステータスバー*] `| Excelのステータスバーはコードモニターとして使用できます。 VBAコードが長く、VBAを使用していくつかのタスクを実行する場合、画面のちらつきが表示されないように、画面の更新を無効にすることがよくあります。

link:/ general-topics-in-vba-turn-off-warning-messages-using-vba-in-microsoft-excel [Microsoft Excel2016でVBAを使用して警告メッセージをオフにする] | *このコードはVBAを無効にするだけではありませんアラートだけでなく、コードの時間効率も向上します。方法を見てみましょう。

人気の記事:

link:/ keyboard-formula-shortcuts-50-excel-shortcuts-to-increase-your-productivity [生産性を高めるための50のExcelショートカット] |あなたの仕事をより速くしてください。これらの50のショートカットにより、Excelでの作業がさらに高速になります。

link:/ forms-and-functions-introduction-of-vlookup-function [ExcelのVLOOKUP関数] |これは、さまざまな範囲やシートから値を検索するために使用される、Excelの最も使用され人気のある関数の1つです。 link:/ Tips-countif-in-microsoft-excel [COUNTIF in Excel 2016] |この驚くべき関数を使用して、条件付きの値をカウントします。特定の値をカウントするためにデータをフィルタリングする必要はありません。

ダッシュボードを準備するには、Countif関数が不可欠です。

link:/ excel-formula-and-function-excel-sumif-function [ExcelでSUMIF関数を使用する方法] |これは、ダッシュボードのもう1つの重要な機能です。これは、特定の条件で値を合計するのに役立ちます。