2016-04-11 13 views
2

Excelで2つのドロップダウンリストを作成する必要があります。第2のものは第1のものに依存する。だから私は(私は常に変化し、車両やエンジンを持つことになります)動的なデータを持っている:Excel VBAで動的依存リストを作成するにはどうすればよいですか?

enter image description here

私が欲しい最初のドロップダウンは、車両を表示することです。 2台目は、その車両に利用可能なエンジンを表示します。

私はインターネットを見てきましたが、各車両の名前範囲を作成することを提案しましたが、リストを返すようなVlookUpのような優れたソリューションを用意したいと考えていました。

私は名前の範囲に車両やエンジンを取得するには、以下の使用しています:

Private Sub Worksheet_Change(ByVal Target As Range) 
If Intersect(Target, Columns("B:B")) Is Nothing Then Exit Sub 
Dim lRow As Integer 

lRow = Range("B" & Rows.Count).End(xlUp).Row 

Range("B3:B" & lRow).Name = "VehList" 

Range("C3:C" & lRow).Name = "CalList" 
+0

が割り当てられているので、何かがこれを好き? http://stackoverflow.com/questions/36415648/getting-the-value-of-a-listbox-to-dynamically-change-with-worksheets/36435585#36435585 –

答えて

2

を、単純なケースでは、あなたはVBAまたは定義された名前を必要としません。

は考えてみましょう:

enter image description here

我々は果物またはまたはのどちらかを選択するA1のドロップダウンを持っています。 A2にドロップダウンをセットアップして、適切なサブリストを表示する必要があります。これは中で唯一の3つのオプションのためである

=IF(A1="fruit",C1:C4,IF(A1="dog",D1:D4,E1:E4)) 

enter image description here

我々は出典一覧オプションと、次の式でA2とセットアップDVをクリックしてくださいプライマリプルダウン。あなたのケースにプライマリプルダウンで選択肢が多すぎる場合は、IF()のネストが制限される場合があります。

+0

ありがとうございますが、私のリストは常に値を変更しています。私はあなたの提案をどのように適用するかについては理解していません。そして、彼らはいつも私が示した形式になっています。 – peetman

2

リファレンスセル名、ダイナミックリファレンスセル名、および一部のデータ検証リストを使用して、これを実現できます...

例テーブル:

Vehicle      Engines      
V01  V01E01 V01E02 V01E03 V01E04 V01E05 V01E06 V01E07 
V02  V02E01 V02E02 V02E03 V02E04 V02E05 V02E06 
V03  V03E01 V03E02 V03E03 V03E04   
V04  V04E01 V04E02 V04E03 V04E04 V04E05  
V05  V05E01 V05E02 V05E03 V05E04 V05E05 V05E06 
V06  V06E01 V06E02 V06E03 V06E04 V06E05 V06E06 V06E07 
V07  V07E01 V07E02 V07E03 V07E04   
V08  V08E01 V08E02     

車種は、私が最初にドロップダウンを作成し、その後、VE「」としてそれに書かれた「自動車」を持っているセルの名前を水平

垂直述べ、その依存エンジン以下の式を用いて細胞$ C $ 12内のデータ検証を使用してリスト:

=は

(1、COUNTA(OFFSET()1,0,10,1、VE)、1,0、VE)OFFSET

私は、次の式を持っていた 'VItem' と呼ばれるダイナミックレンジという名前の作成:

= INDEX(、VE(1,0,10,1をOFFSET)、MATCH($ C $ 12と、OFFSETを(1,0,10,1、VE)、0))

VItemしたがって、私は、データを使用する2番目のドロップダウンボックスの最初のドロップダウンボックス

で指定された車両を含むセルとして割り当てられます以下の式で再度検証します。

=いくつかNOTES(VItem、0,1,1、COUNTA((VItem、0,1,1,10)をOFFSET))

をオフセットリストは、どのように多くの非依存大きさであります - ブランクセルは、オフセット内の指定された範囲内に存在します(このコードでは、10x1セットのセルが使用されます)。それ自動サイズとしては、車両のリストが縦に連続している必要があると水平に列挙されたエンジンは再び連続し

車名でなければなりませんので、一意である必要があるだろう「VItem」正しく

+0

ご返信ありがとうございます。私は最初のドロップダウンリストを稼働させましたが、2番目のドロップダウンリストは使用できませんでした。私はそれがあなたが水平にエンジンを表示しているからだと思うし、質問に示したように垂直にする必要がある。数式の変更を手伝ってもらえますか?ありがとう – peetman

関連する問題