web-dev-qa-db-ja.com

Excelで動的依存データ検証リストを実装するにはどうすればよいですか

Web上のソースは、依存データ検証リストを実装する方法を示していますが、私が遭遇したものはすべて静的であり、自動的に更新されません。

この質問に答えられる人は誰でも、データ検証リストが専門職学位でどのように機能するかをすでに知っていると思いますが、私のような学習者のために簡単な説明をします(グーグルとユーチューブのビデオでさらに読むことをお勧めします)。

データ検証リストを使用すると、ワークブックに定義済みのデータ構造を作成できます。これらは、ユーザーインタラクションベースを対象としています。ドーナツ、ケーキ、マフィン、クランペットなど、特定のデータのセットのみをワークブックユーザーに挿入する場合は、「スナック」などの名前付き範囲を使用してリストを作成するか、テーブルを作成してテーブルに「スナック」という名前を付けることができます。名が1つの単語である場合(つまり、名にスペースが存在しない場合)

リストを使用することの欠点は、クロワッサンと呼ばれるリストに別のスナックを追加する必要がある場合、最初に作成されたリストを再定義する必要があることです。テーブルは、最後の行から新しい行を追加するか、現在のテーブル行の後に続く行を書き込んでEnterキーを押すことで、テーブルに新しい行を簡単に追加できるという意味で、この非効率性を回避します。

説明が長すぎるため、データ検証については、以下のリンクにアクセスして詳細を公開することをお勧めします。 http://analyticsdemystified.com/Excel-tips/Excel-dropdowns-done-right/

したがって、依存検証リストは、以前の検証リストからユーザーが選択した値に基づくリストです。たとえば、ドーナツタイプには、アイスリング、チョコレートグレーズ、ジャム、カスタードドーナツが含まれます。マフィンの種類には、バナナ、ブルーベリー、チョコレートがあります。ケーキの種類には、レッドベルベット、ニンジン、ココナッツなどがあります。最後に、クランペットの種類には、英語、スコットランド、およびパイクレットが含まれます。

したがって、セルにメインカテゴリリストのドロップダウンがある場合、サブカテゴリに基づいて動的に依存する検証リストをどのように作成しますか。

動的依存検証リストとは、以下に示すように、すべての列リストがテーブルであることを意味します。

Data Lists as Tables

ここで問題となるのは、隣接するセルをどのように実装するかです。たとえば、セルC13にスナックテーブルの検証リストがある場合、ユーザーが選択したC13の入力に基づいてセルD13を検証リストにする方法(つまり、C13がドーナツとして選択されている場合) D13の検証リストの可能な選択は、ドーナツテーブルの列データになります)。

C13の元の検証リストはテーブルであり、名前付き範囲ではないため、INDIRECT関数を使用して作成されていることに注意してください。

2
MrMarho

4つの簡単なステップで簡単に

ステップ1テーブルを作成します:

enter image description here

ステップ2テーブルに名前を付ける:テーブルを選択し、プライマリテーブルの値と一致するように名前を変更しますTable1、例:ヘッダーが「Cakes」のTable2には、Cakeという名前を付ける必要があります。これは、プライマリテーブルTable1の値だからです。 )。
しかし、どうやって?テーブルの隅をクリックして選択し、Table2などと表示されている新しいラベルを入力して、Enterキーを押します。それでも「Table2」などと表示されていても心配しないでください。
注!これはプライマリテーブルには必要ありません(例:Table1。)

enter image description here

ステップ3最初のリストが必要な場所を選択し、[データ]タブに移動してデータ検証に進みます。 「リスト」を選択し、次のように入力します。ソースウィンドウに=INDIRECT("Table1")

enter image description here

ステップ4最初のリストに依存する2番目のリストのセルを選択します。データ検証に戻り、「リスト」を選択して=INDIRECT(K2)と入力します。ここで、「K2」は最初のリストの場所です。

enter image description here

[〜#〜]完了[〜#〜]

2番目のリストに応じて3番目のリストについては、手順4を繰り返し、代わりに2番目のリストを参照してください。幸運を!

2

これが機能するという事実について私の言葉を理解する必要がありますが、私はこの正確な目的のために(非常に厄介なスパゲッティコード)マクロを作成しました。残念ながら、コードはまったくエレガントではありませんが、機能します。彼らが言うように...「それを機能させ、正しくし、速くしなさい」。

ステップ1:VBAコード

次の3つが必要です。

  1. Chip Pearsonの配列モジュール ---実際のVBAコードは終わりに近づいています。

  2. Chip PearsonのSortingモジュール -実際のVBAコードも最後に向かっています。

  3. 私のひどく組織化されたマクロ

これらをブックのVBAモジュールに貼り付けるには、を押します。 Alt+F11、プロジェクトエクスプローラーでプロジェクトを見つけ、[モジュール]フォルダーを右クリックして、[モジュールの挿入]を選択します。上記の3つのリンクのそれぞれからのコードを別々のモジュールに貼り付けます。

enter image description here

VBAエディターを使用しているときに、[参照]ダイアログボックスを開きます(Alt+T その後 Enter)そして「MicrosoftScriptingRuntime」をチェックします。

enter image description here

ステップ2:データを構造化する

それが邪魔にならないように、今必要なのは、適切に構造化されたデータベースであるかのように、データ(たとえば、「データ」と呼ばれる)を含むシートです。これが私がそれをする方法です:

enter image description here

さらに2枚のシートを作成したことに注意してください。 1つは、ドリルダウン検証ロジックが実行される場所のValidationと呼ばれ、もう1つは、エンドユーザーにとって重要な実際のコンテンツのMainと呼ばれます。

ステップ3:メインシート

データシートに移動して、次の構造を設定しましょう。

enter image description here

セル_C2_を選択し、_Snack.Selected_という名前を付けます。セルに名前を付けるには、セルを選択してから AltMMD、次に、画像が示すように、表示されるダイアログに名前を入力します。今のところ、次のステップがより意味をなすように、「Cake」などの値を入力します。

先に進み、セルに_C3_ 'Type.Selected`という名前を付けますが、今は空のままにしておきます。

ステップ4:データシートのテーブルから値を取得する

検証シートに移動し、次の構造を設定します。

enter image description here

スクリーンショットでわかるように、セル_B3:B20_を選択し、次の数式を入力する必要があります。これは、私のマクロが実際に機能する場所です。

=MultiLookup("Data","Snack",TRUE,TRUE)

これは 配列数式 であるため、Enterキーを押す代わりに、Ctrl + Shift + Enterキーを押します。

宣伝どおりに機能する場合は、スナックのリストに続いていくつかの#N/Aエラーが表示されます。エラーが予想されます-_B3:B20_のサイズに基づいて予想していたよりもスナックが少ないことを意味します。

式のパラメーターの説明:

  1. データが配置されているシート(「データ」)
  2. そのシートから必要なフィールド(「スナック」)
  3. 重複を削除しますか(つまり、グループ化されますか)? (TRUE)
  4. アルファベット順に並べ替えましたか? (TRUE)

さて、それはほとんど価値のない多くの作業のように思えますが、ここにグランドフィナーレがあります。セル_C3:C20_に、次の数式を配置します。

=MultiLookup("Data","Type",TRUE,TRUE,"Snack",Snack.Selected)

これにより、使用可能なケーキの種類が表示されます。これは、前の手順でメインシートに入力した値です。覚えていますか?

これは、数式に2つの引数を追加することで機能します。

  1. フィルタリングするフィールド(「スナック」)
  2. (Snack.Selected)に等しい値のみを選択します

したがって、メインでデータを変更すると、[タイプ]列が自動的に更新されます。

ステップ5:検証のまとめ

まとめとして、_Snack.Choices_と_Type.Choices_の名前を作成して、データ検証を終了しましょう。検証では、セルにそれぞれ_B1_と_C1_という名前を付けてください。この小さなボックスに入力して、セルに名前を付けることもできます。

enter image description here

セル_B1_に、次の数式を配置する必要があります。

="Validation!"&CELL("address",B3)&":"&CELL("address",OFFSET(B$2,COUNTIF(B3:B50,"*"),0))

enter image description here

これは、検証へのテキスト参照を作成することです!$ B $ 3:$ B $ 6は、スナックの選択肢が配置されている場所です。その式を右にコピーすれば完了です!

メインシートに戻り、スナックとタイプの検証ルールでこれらのセルを参照しましょう。

セル_C2_およびkbd> Altを選択します AVV データ検証を作成します。 「リスト」を選択し、ソースを=INDIRECT(Snack.Choices)に設定します。 _Snack.Choices_の前後に引用符がないことに注意してください

enter image description here

セル_C3_でも同じことを行いますが、ソースを=INDIRECT(Type.Choices)に設定します。

_Snack.Choices_と_Type.Choices_の値はワークブックの範囲への間接的な(つまりテキストの)参照であるため、INDIRECT()を使用します。

次に、検証オプションを試して、すべてが実際に動作していることを確認します。

ご不明な点がございましたらお知らせください。

0
airstrike