Web上のソースは、依存データ検証リストを実装する方法を示していますが、私が遭遇したものはすべて静的であり、自動的に更新されません。
この質問に答えられる人は誰でも、データ検証リストが専門職学位でどのように機能するかをすでに知っていると思いますが、私のような学習者のために簡単な説明をします(グーグルとユーチューブのビデオでさらに読むことをお勧めします)。
データ検証リストを使用すると、ワークブックに定義済みのデータ構造を作成できます。これらは、ユーザーインタラクションベースを対象としています。ドーナツ、ケーキ、マフィン、クランペットなど、特定のデータのセットのみをワークブックユーザーに挿入する場合は、「スナック」などの名前付き範囲を使用してリストを作成するか、テーブルを作成してテーブルに「スナック」という名前を付けることができます。名が1つの単語である場合(つまり、名にスペースが存在しない場合)
リストを使用することの欠点は、クロワッサンと呼ばれるリストに別のスナックを追加する必要がある場合、最初に作成されたリストを再定義する必要があることです。テーブルは、最後の行から新しい行を追加するか、現在のテーブル行の後に続く行を書き込んでEnterキーを押すことで、テーブルに新しい行を簡単に追加できるという意味で、この非効率性を回避します。
説明が長すぎるため、データ検証については、以下のリンクにアクセスして詳細を公開することをお勧めします。 http://analyticsdemystified.com/Excel-tips/Excel-dropdowns-done-right/
したがって、依存検証リストは、以前の検証リストからユーザーが選択した値に基づくリストです。たとえば、ドーナツタイプには、アイスリング、チョコレートグレーズ、ジャム、カスタードドーナツが含まれます。マフィンの種類には、バナナ、ブルーベリー、チョコレートがあります。ケーキの種類には、レッドベルベット、ニンジン、ココナッツなどがあります。最後に、クランペットの種類には、英語、スコットランド、およびパイクレットが含まれます。
したがって、セルにメインカテゴリリストのドロップダウンがある場合、サブカテゴリに基づいて動的に依存する検証リストをどのように作成しますか。
動的依存検証リストとは、以下に示すように、すべての列リストがテーブルであることを意味します。
ここで問題となるのは、隣接するセルをどのように実装するかです。たとえば、セルC13にスナックテーブルの検証リストがある場合、ユーザーが選択したC13の入力に基づいてセルD13を検証リストにする方法(つまり、C13がドーナツとして選択されている場合) D13の検証リストの可能な選択は、ドーナツテーブルの列データになります)。
C13の元の検証リストはテーブルであり、名前付き範囲ではないため、INDIRECT関数を使用して作成されていることに注意してください。
4つの簡単なステップで簡単に
ステップ1テーブルを作成します:
ステップ2テーブルに名前を付ける:テーブルを選択し、プライマリテーブルの値と一致するように名前を変更しますTable1、例:ヘッダーが「Cakes」のTable2には、Cakeという名前を付ける必要があります。これは、プライマリテーブルTable1の値だからです。 )。
しかし、どうやって?テーブルの隅をクリックして選択し、Table2などと表示されている新しいラベルを入力して、Enterキーを押します。それでも「Table2」などと表示されていても心配しないでください。
(注!これはプライマリテーブルには必要ありません(例:Table1。)
ステップ3最初のリストが必要な場所を選択し、[データ]タブに移動してデータ検証に進みます。 「リスト」を選択し、次のように入力します。ソースウィンドウに=INDIRECT("Table1")
:
ステップ4最初のリストに依存する2番目のリストのセルを選択します。データ検証に戻り、「リスト」を選択して=INDIRECT(K2)
と入力します。ここで、「K2」は最初のリストの場所です。
[〜#〜]完了[〜#〜]
2番目のリストに応じて3番目のリストについては、手順4を繰り返し、代わりに2番目のリストを参照してください。幸運を!
これが機能するという事実について私の言葉を理解する必要がありますが、私はこの正確な目的のために(非常に厄介なスパゲッティコード)マクロを作成しました。残念ながら、コードはまったくエレガントではありませんが、機能します。彼らが言うように...「それを機能させ、正しくし、速くしなさい」。
次の3つが必要です。
Chip Pearsonの配列モジュール ---実際のVBAコードは終わりに近づいています。
Chip PearsonのSortingモジュール -実際のVBAコードも最後に向かっています。
これらをブックのVBAモジュールに貼り付けるには、を押します。 Alt+F11、プロジェクトエクスプローラーでプロジェクトを見つけ、[モジュール]フォルダーを右クリックして、[モジュールの挿入]を選択します。上記の3つのリンクのそれぞれからのコードを別々のモジュールに貼り付けます。
VBAエディターを使用しているときに、[参照]ダイアログボックスを開きます(Alt+T その後 Enter)そして「MicrosoftScriptingRuntime」をチェックします。
それが邪魔にならないように、今必要なのは、適切に構造化されたデータベースであるかのように、データ(たとえば、「データ」と呼ばれる)を含むシートです。これが私がそれをする方法です:
さらに2枚のシートを作成したことに注意してください。 1つは、ドリルダウン検証ロジックが実行される場所のValidationと呼ばれ、もう1つは、エンドユーザーにとって重要な実際のコンテンツのMainと呼ばれます。
データシートに移動して、次の構造を設定しましょう。
セル_C2
_を選択し、_Snack.Selected
_という名前を付けます。セルに名前を付けるには、セルを選択してから AltMMD、次に、画像が示すように、表示されるダイアログに名前を入力します。今のところ、次のステップがより意味をなすように、「Cake」などの値を入力します。
先に進み、セルに_C3
_ 'Type.Selected`という名前を付けますが、今は空のままにしておきます。
検証シートに移動し、次の構造を設定します。
スクリーンショットでわかるように、セル_B3:B20
_を選択し、次の数式を入力する必要があります。これは、私のマクロが実際に機能する場所です。
=MultiLookup("Data","Snack",TRUE,TRUE)
これは 配列数式 であるため、Enterキーを押す代わりに、Ctrl + Shift + Enterキーを押します。
宣伝どおりに機能する場合は、スナックのリストに続いていくつかの#N/Aエラーが表示されます。エラーが予想されます-_B3:B20
_のサイズに基づいて予想していたよりもスナックが少ないことを意味します。
式のパラメーターの説明:
さて、それはほとんど価値のない多くの作業のように思えますが、ここにグランドフィナーレがあります。セル_C3:C20
_に、次の数式を配置します。
=MultiLookup("Data","Type",TRUE,TRUE,"Snack",Snack.Selected)
これにより、使用可能なケーキの種類が表示されます。これは、前の手順でメインシートに入力した値です。覚えていますか?
これは、数式に2つの引数を追加することで機能します。
したがって、メインでデータを変更すると、[タイプ]列が自動的に更新されます。
まとめとして、_Snack.Choices
_と_Type.Choices
_の名前を作成して、データ検証を終了しましょう。検証では、セルにそれぞれ_B1
_と_C1
_という名前を付けてください。この小さなボックスに入力して、セルに名前を付けることもできます。
セル_B1
_に、次の数式を配置する必要があります。
="Validation!"&CELL("address",B3)&":"&CELL("address",OFFSET(B$2,COUNTIF(B3:B50,"*"),0))
これは、検証へのテキスト参照を作成することです!$ B $ 3:$ B $ 6は、スナックの選択肢が配置されている場所です。その式を右にコピーすれば完了です!
メインシートに戻り、スナックとタイプの検証ルールでこれらのセルを参照しましょう。
セル_C2
_およびkbd> Altを選択します AVV データ検証を作成します。 「リスト」を選択し、ソースを=INDIRECT(Snack.Choices)
に設定します。 _Snack.Choices
_の前後に引用符がないことに注意してください
セル_C3
_でも同じことを行いますが、ソースを=INDIRECT(Type.Choices)
に設定します。
_Snack.Choices
_と_Type.Choices
_の値はワークブックの範囲への間接的な(つまりテキストの)参照であるため、INDIRECT()
を使用します。
次に、検証オプションを試して、すべてが実際に動作していることを確認します。
ご不明な点がございましたらお知らせください。