• 締切済み

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

  • Excelでコンボボックスが沢山必要なときは

    お世話になります。 オラクルからコードと値を取ってきて、エクセルのシート上で表示や 選択をさせたいと思います。(一番左のセル) このときセルにアクティブXのコンボボックスを貼り付けて、表示は できたのですが、データが1000件くらいあるようで、それぞれに 1000個もコンボボックスを貼り付けるのが大変です。 何かよい方法はありませんか。 よろしくお願いします。

  • VBA コンボボックス

    VBAコンボボックスで AAAを選択→処理A BBBを選択→処理B CCCを選択→処理C としている場合、 AAAを選択→処理Aの後、コンボボックスで再度AAAをクリックしても次の処理Aにいきません。いったんBBBをクリックしてしてAAAをクリックすると処理Aに行きますが、連続AAAをクリックして処理Aはできないでしょうか。 何か方法はありませんか? Private Sub ComboBox1_Change() If ComboBox1.Value = "AAA" Then   ’処理Aへ ElseIf ComboBox1.Value = "BBB" Then   ’処理Bへ Else   ’処理Cへ End If End Sub

  • Excelのコンボボックス選択方法

    VB初心者です。宜しく御願いします。 ExcelのコンボボックスをVBから選択したいのですが、上手くいきません。 AAAというコンボボックスで中身が「111」「222」「333」の場合、 objXlsSeet.Range("AAA").Select = "222" としたのですが、実行時エラー'1004' アプリケーション定義またはオブジェクト定義のエラーです。 となります。 ご教授御願いします。宜しくお願い致します。

  • エクセルVBAで、コンボボックスのリストを変更したい

    Excel97を使用しています。 フォーム上にコンボボックスを2個配置しています。 リストで使うシートは下記のようになっています。   A列 B列   D列 1 aa BBB  AAA 2 bb CCC  BBB 3 cc CCC  CCC 4 dd AAA   5 ee BBB   初期化した時に、RowSourceとしてComboBox1にはA1:A5、ComboBox2にはD1:D3を設定しています。 ComboBox2で、例えば「BBB」を選択した時に、ComboBox1のリストが、B列に「BBB」と入力されている内容のみ(この場合「aa」と「ee」)がリストにセットされるようにはできませんでしょうか? ComboBox1の内容とB列のセルの内容が一致したら、そのセルの1つ左のセルの内容をリストに追加する、というようなコードを書いたのですが「予期しないエラー」と出てしまいました。 ご存知の方、どうぞよろしくお願いいたします。

  • セル結合のコンボボックスの選択方法

    エクセル2003を使用しています。 2シートのブックを使用しており、 シート1:売上一覧(コンボボックスでシート2から品名を選択) シート2:品名と価格の表       A1     B1  品名 いちご    50円      ばなな   100円        ・     ・ となっています。 シート1のコンボボックスで いちごを選択したら、 いちごの隣のセルに価格を自動入力させたいと思っています。 シート1のコンボボックスは、20個あり、 コンボボックス1は、A1A2B1B2セルを結合して 結合セル一杯にコンボボックスを1つ作成しています。 どのようにしたらいいでしょうか? VLOOKUP関数を教えていただきましたが、 よろしくお願いいたします。

  • エクセルVBA コンボボックスからの選択

    コンボボックスにある選択項目を選択した後、 エクセルの指定されたセルへ選択した項目を 貼り付けたいのですが、どのように指示したら よいのでしょうか? 例えば コンボボックス内の選択項目が A・B・Cとあったとします、その項目の 中からAを選択したら、作業中のsheetの A1のセルへAと表示させるにはどうしたら よいのでしょうか? アドバイスお願い致します。

  • excel2003 コンボボックスについて

    いつもお世話になります。 excel2003でコンボボックスを始めて使いたいと思います。 それで、下記のような事は出来ますか? 出来るのでしたら、その一番簡単な方法をお教え頂きたいです。 二つのコンボボックスを使って、 下記のようなデータを選びたいのです。 01 東京 aaa 東京タワー bbb 皇居 ccc 国会議事堂 02 大阪 aaa 通天閣 bbb 新地 ccc 漫才 03 名古屋 aaa キシメン bbb エビフライ ccc ミソカツ まず、最初のコンボボックスで 01 02 03を選び、 次のコンボボックスでは、例えば最初のコンボボックスで、 01 東京を選べば、 次のコンボボックスでは、01に関する下記だけが選べるようになる。 aaa 東京タワー bbb 皇居 ccc 国会議事堂 と言う具合には、出来ませんか? 上記のようになれば、 必ずしもコンボボックスを使わなくても良いのです。 なにぶん、初心者なので、申し訳ありません。 よろしくお願い致します。

  • コンボボックスの貼りつけ excel

    vba初心者です。excel帳簿を作っております。 科目選択時にリストが28個あるプルダウンを使っておりましたが選択するのが大変だったのでコンボボックスにしたら28個全て表示されるようになり選択が楽になりました。 このコンボボックスのLinkedCellはD4です。 コンボボックスをD4の上に表示してD4セルにピッタリはめ込んでいる感じに見えます。 D4以下150個、D列にコンボボックスを貼りつけたいです。 コピーして貼り付けてもLinkedCellはD4のままですので、貼りつけたコンボボックスのプロパティを150回変えないといけないのかと思うと気が遠くなります。 このコンボボックスを何か登録して、「コードの表示」あたりで何かやれば何とかなるのではないかと思ったのですが、何か手立てがあれば教えてください。 このコンボボックスを同じブックの別のシートにも使いたいと思っております。

  • エクセルのコンボボックスについて

    シート「データ」に   A  B 1 い  東京 2 ろ  千葉 3 は  埼玉 上記内容が記載されています。 それを別のシートで参照できるようにリストを作って入力規則でコンボボックスを作りました。 しかし、コンボボックスには選択肢がひとつしか表示されません。 「い、ろ、は」だけが表示されています。 でも本当は「東京、千葉、埼玉」をコンボボックスで表示し、セルには「い、ろ、は」のどれかを表示するようにしたいのです。 これをマクロを使わないでできるでしょうか?

  • access コンボボックス初期表示について

    ACCESS VBA コンボボックス 初期表示について。質問します。m(__)m 教えてください。 VBAのフォームロードでコンボボックスに初期表示 させたいのですが、初期表示させいたい内容というのが、テーブルにある例えば列名AAA、列名BBBがあるとして  列名AAAの中で「3」を持っている、列名BBBの名前を初期表示させたいのです。 テーブル名 CCC AAA...BBB. ...1 ......あ.... ...2.......い.... ...3.......う.... ...4 ......え... このテーブル「CCC」でいえば3を指定して、「う」をフォームロードでコンボボックスに初期表示させたいのですがどうやればいいのでしょうか? いまの状態はコンボボックスに「あ・い・う・え」の順番で取っきていて「あ」が初期表示になっています。 コードの書き方がわかりません。教えてください テーブルCCCはフォームのプロパティのコントロールソースでつなげてあります。 ↑という風に質問させていただいて 回答していただいた内容は //何番目のデータを初期表示したいか決め、FORM LOAD時にその値をLISTINDEXにセットすれば良いのでは? //即ち //Private Sub Form_Load() //Combo1.ListIndex = 2 //End Sub //のようにプログラムを書けば良いと思います。但し、初期値は”0”なので注意が必要です。 としていただいたのですが、私の質問が説明が足りていなくて改めて質問させていただきます。 テーブルの中身はそのときそのときで入れ替わります。 テーブル名 CCC  AAA...BBB..........................................AAA..BBB ...1 ......あ....左の並びのときもあれば.......3.......か ...2.......い....右のように並びが変わる.......1.......け  ...3.......う......時があります。....................2.......さ ...4 ......え................................................4.......な このときに「3」を指定して、3に対応するBBBの行をフォームロードでコンボボックスに初期表示させたいのですがどうやればいいのでしょうか?

専門家に質問してみよう