• 締切済み

EXCEL コンボボックスを使ってツリー状に選択

  ABC 1 あ       左のようなセルを使ってツリー状にした表から 2  AAA    別シートにコンボボックスを横に3つ作成して 3  BBB    ”あ”を選択したら隣のボックスに”AAA” 4   111   と”BBB”の選択肢が現れ、”BBB”を選 5   222   択したらその隣のボックスに”111”と”222” 6 い       の選択肢が現れる といったことが出来ないでしょ 7  aaa    うか? 8   333    9  bbb    説明がやっかいだと思いますので、「こんな本で見た」           という覚えがある方がいらっしゃいましたら是非教えて           下さい。お願いします。

みんなの回答

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.3

質問通りの縦型の表を元に入力規則で対応してみました。実際行ってみて、1つの深さに3列要していますので数十の深さまでは対応できそうですね。(Excel97で確認) Sheet1のどこか3つのセルに、DATA1、DATA2、DATA3の名前を付けます。 ここに入力規則のダイアログを表示します。 質問と同じ形式の表をSheet2のA1から3列を使って作成します。 Sheet2に次の算式をコピーします。 (※は表のデータがある最後の行までコピーします。)  E1:=MAX(MATCH("",A:A,-1),MATCH("",B:B,-1),MATCH("",C:C,-1)) ※F1:=COUNTA($A$1:A1) ※G1:=COUNTA($B$1:B1) ※I1:=IF(A1<>"",$E$1-ROW()+1,0) ※J1:=INDEX(A:A,MATCH(LARGE(INDIRECT("$I$1:$I$"&$E$1),ROW()),I:I,0),0)  K1:=MATCH(DATA1,A:A,0) ※L1:=IF(B1<>"",IF(INDEX(F:F,$K$1,1)=F1,$E$1-ROW()+1,0),0) ※M1:=INDEX(B:B,MATCH(LARGE(INDIRECT("$L$1:$L$"&$E$1),ROW()),L:L,0),0)  N1:=MATCH(DATA2,INDIRECT("B"&(K1+1)&":B"&E1),0)+K1 ※O1:=IF(C1<>"",IF(INDEX(G:G,$N$1,1)=G1,$E$1-ROW()+1,0),0) ※P1:=INDEX(C:C,MATCH(LARGE(INDIRECT("$O$1:$O$"&$E$1),ROW()),O:O,0),0)  E3:=COUNTA(J:J)-COUNTIF(INDIRECT("J1:J"&E1),"=0")  E4:=COUNTA(M:M)-COUNTIF(INDIRECT("M1:M"&E1),"=0")  E5:=COUNTA(P:P)-COUNTIF(INDIRECT("P1:P"&E1),"=0") 挿入→名前→定義で名前の定義ダイアログボックスを出して、名前を3つ定義します。 1つ目、名前:List1、参照範囲:=OFFSET(Sheet2!$J$1,0,0,Sheet2!$E$3,1) 2つ目、名前:List2、参照範囲:=OFFSET(Sheet2!$M$1,0,0,Sheet2!$E$4,1) 3つ目、名前:List3、参照範囲:=OFFSET(Sheet2!$P$1,0,0,Sheet2!$E$5,1) Sheet1で入力規則を設定します。 DATA1を選択して、データ→入力規則で、入力値の種類にリスト、元の値に =List1 DATA2を選択して、データ→入力規則で、入力値の種類にリスト、元の値に =List2 DATA3を選択して、データ→入力規則で、入力値の種類にリスト、元の値に =List3 Sheet2は項目数がわからないので縦方向で考えています。質問通りの形式で入力します。 A列が異なり、B列が同じでC列が異なるようなパターンも考慮しているつもりです。 ただ、3つの入力をした後、修正する場合、他に関係なく修正できます。この点を考慮してみましたが、長くなるので省略しています。 また、3つの入力箇所を3列(3列の入力規則)に増やしてみましたが、こういう意味の質問でした?こちらのほうが入力の省力化ができますね。 入力規則ではなく、VBAのコンボボックスで動かすには、  ListFillRangeをList1、LinkedCellをDATA1 とかにします。 何を行っているかじっくり見ると、飛び離れたデータを1つにまとめているだけの算式でした。 汚い算式ですが、ご参考に。

  • daiju3000
  • ベストアンサー率29% (21/72)
回答No.2

 いつだったか、このサイトで似た質問を見たことがあります。かなり感動した記憶があります。 参考URLを見て下さい。

参考URL:
http://www.okweb.ne.jp/kotaeru.php3?q=161673
noname#1523
noname#1523
回答No.1

以下の様な方法で如何でしょうか 【A】選択肢の設定   Sheet名を『TBL』と仮定して以下の様に指定します ___ A列 B列 C列 D列  E列  F列  G列  H列  I列  1行目 __ __ __ あ   い   AAA BBB aaa bbb 2行目 あ  式1 式1 AAA aaa 000 111 333 555 3行目 い  式1 式1 BBB bbb 999 222 444 666 4行目 う  式1 式1 5行目 え  式1 式1 ・・・ ・・・ 1)A2~Anセルに最初に表示する値を入力します 2)B2セルに以下の式を入力してB2~Cnの全セルに式をコピー    =IF(OFFSET($D$1,ROW()-1,MATCH(OFFSET(A$1,A$1,0,1,1),$D$1:$I$1,0)-1,1,1)="","",OFFSET($D$1,ROW()-1,MATCH(OFFSET(A$1,A$1,0,1,1),$D$1:$I$1,0)-1,1,1))     ●OFFSET関数:OFFSET(基準セル,行変位,列変位,抽出行数,抽出列数)        基準セル:入力情報の先頭のセル($D$1)に固定        行変位:現在行-1        列変位:OFFSET関数でA1からA1の値分下の行のセルを抽出し            その値でD列以降の1行目の値を検索し            何番目の列かを決定        抽出行数:単独セルを取り出すので1        抽出列数:同上     ●範囲の指定:$D$1:$I$1        選択肢を入力した列の範囲の1行目を指定します     ●参照結果のセルが空白の時の処理        IF(OFFSET(~)="","",OFFSET(~))として空白時には        空白をセットします(この処理をしないと0が返ります) 3)D列以降に以下の要領で入力    1行目:第一・第二のコンボボックスに表示する選択肢の値    2行目以降:選択肢の値区分名(あああAAAやBBB)に表示される値を入力 【コンボボックスの設定】 1)第一のコンボボックス 入力範囲:$A$2:$A$n リンクするセル:$A$1 2)第ニのコンボボックス 入力範囲:$B$2:$B$n リンクするセル:$B$1 3)第三のコンボボックス 入力範囲:$C$2:$C$n リンクするセル:$C$1

関連するQ&A