
StackOverflow でこの質問をしたところ、ここにリダイレクトされました。重複して申し訳ありません。
Sheet1 にコンボ ボックスがある Excel ワークシートがあり、その入力範囲プロパティを介して Sheet2 の動的名前付き範囲からデータが設定されます。正常に動作し、VBA は必要ありません。
Sheet2 のデータは実際には Excel テーブルにあります (すべてのデータは XLS ファイルにあり、外部データ ソースはありません)。わかりやすくするために、コンボ ボックスの入力範囲に構造化されたテーブル参照を使用したいのですが、機能する構文が見つからないようです (例: myTable[[#Data],[myColumn3]])。
コンボ ボックスが構造化されたテーブル参照を受け入れるという兆候は見つかりませんが、なぜ受け入れないのかはわかりません。
質問は 2 つあります。1. コンボ ボックスの入力範囲プロパティでテーブル列参照を使用できますか (VBA を使用せずに)。2. 方法は?
答え1
これはかなり古い質問だとは思いますが、私と同じように同じ質問の解決方法を探している人が偶然この質問に遭遇した場合に備えて... ScottieB さんと同じように、私も dav さんの回答をうまく利用できませんでした。Excel 2013 で解決した方法を次に示します。
コンボ ボックスの選択肢の垂直リストを作成します。テーブルではなく (まだ)、見出しなしで (まだですが、見出し用のスペースは残しておきます)、ドロップダウンに必要なものだけを列に並べます。
通常の Sheet1!$A$1:$A$2 表記を使用して、リストの名前を作成/定義します。
入力範囲に作成した名前を使用して、コンボ ボックス フォーム コントロールを挿入します。
ここまでは順調です。コンボ ボックスは機能しますが、垂直リストの下部 (名前付き範囲のすぐ下であっても) に追加された新しいオプションはドロップダウン リストに追加されません。ドロップダウンのベースとなる名前付き範囲は動的に拡張されません。
さて、良い部分です。
- 垂直リストに戻り (名前付き範囲の周囲に追加したものはすべてクリアして、手順 2 で残した状態のままにしてください)、その上に見出しを追加します。任意のテキストでかまいません。これは選択肢のリストを識別するためのラベルにすぎません。
(または、追加しないでください。許可すれば、次の手順で Excel が自動的に追加します。)
- 見出しを選択した状態で、Ctrl+T または [挿入] | [表] を使用します。Excel が検出した範囲を受け入れ、[表に見出しを付ける] チェックボックスをオンにして、[OK] をクリックします。必要に応じて、表の名前を変更できます。名前は重要ではありません。
(注: ヘッダーを追加しなかった場合は、Excel でヘッダーを作成するために [テーブルにヘッダーがある] チェックボックスをオンにしないでください。)
これで、どうやら元の名前付き範囲がテーブル定義の一部になったため、垂直リストの下部に新しい行を追加すると、テーブル定義が自動的に拡張されるだけでなく、元の名前付き範囲の定義も拡張され、コンボ ボックスの選択肢リストに新しいオプションが表示されます。魔法のようです!
答え2
まだテーブルを作成していない場合は、XL 2013 に関する Nick の回答で問題ありません。
しかし、実際はもっと簡単です。テーブル列を指す名前を定義します。次に、最初の名前を指す別の名前を作成します。入力範囲で 2 番目の名前を使用すれば、問題なく動作します。
答え3
Excel 2010 でもこれを行うことができますが、2 つの手順から成るプロセスです。
- テーブル構造化参照を使用して名前付き範囲を作成します (例: myrange=mytable[myColumn3])。
- 名前付き範囲をコントロールの入力範囲として使用します。
そして、予想どおり、コントロール フィールドはリストの変更に応じて更新されます。コントロール内で直接参照を使用できない理由はわかりませんが、Excel についてはまだ理解していないことがたくさんあります。
編集: 名前マネージャーのテーブル参照から @ 記号を削除することを忘れないでください。そうしないと、検証セットの対応する行の値のみが取得されます (例: [myColumn3] ではなく [@myColumn3])。