Excelで単一セル内で2段階リスト表示する方法はある?

このQ&Aのポイント
  • Excelのリストが長い場合、二段階方法(「セル範囲に名前をつける」のと「INDIRECT関数」)がありますが、これだと項目を2つに分けなければなりません。
  • しかし、単一のセル内で2段階のリスト表示をする方法はあるのでしょうか?たとえば、47都道府県をひとつのリスト内で表示して、マウスポインタを乗せると都道府県名の下に市町村名が表示されるような方法です。
  • ネット上ではよく見かけますが、Excelで実現する方法があるのか知りたいです。
回答を見る
  • ベストアンサー

単一セル内での2段階リスト表示は可能ですか?

Excelのリストが長い場合、二段階方法(「セル範囲に名前をつける」のと「INDIRECT関数」)がありますが、これだと項目を2つに分けなければなりません。 そうではなく、ひとつのセルで、リストが2つでてくる方法はあるのでしょうか? たとえば47都道府県をすべてひとつのリスト内でくくると探すのが大変です。 前者の場合「地方名」という項目には以下リスト「関東」「中部」…を作成します。 1項目目で関東選択すると、2項目では「東京」「神奈川」…というようにグループ分けされた下位カテゴリのリストが表示されます。 以上の方法の例↓ https://office-hack.com/excel/pulldown-menu-interlock/ しかし目的はこのような方法ではなく、あくまでも単一セル内でのことです。 たとえば1段階目は「関東」というセルにマウスポインタを乗せると、自動で2段階目のカテゴリ「東京」「神奈川」等のリスト一覧がでてくる…という作成方法ができるのでしょうか? ネットなどではよく見かけますが…。

  • frau
  • お礼率54% (2371/4387)

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

一般機能ではできませんので、マクロ処理です。 下図のように、Sheet2のA列に地方名が、B列に都道府県名が列記されているとします。 1.A1:A6に「地方名」という名前をつけています。 2.B1:B7に「北海道・東北」という名前をつけています。 3.B8以下にも、ブロックごとに該当するA列の名前がついています。 ↓ Sheet1のA1に、Sheet2のA1:A6を元の値(=地方名)とした入力規則のリストを設定します。 以上を仮定した場合の一例です。 Sheet1のシートタブを右クリックし、メニューにある"コードの表示"から開くウィンドウに以下を記述したら、そのウィンドウを閉じます。 ------- Private Sub Worksheet_Change(ByVal Target As Range)  Dim chk As Range, Area As String  If Target.Address(0, 0) <> "A1" Then Exit Sub  Set chk = Worksheets("Sheet2").Range("地方名").Find(Target.Value)  If chk Is Nothing Then   Area = "=地方名"  Else   Area = "=" & Target.Value  End If  With Target.Validation   .Delete   .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _         Operator:=xlBetween, Formula1:=Area  End With End Sub ------- Sheet1のA1で地方名を選択すると、同じA1のリスト内容が対応する都道府県名になり、都道府県を選択すると、元の地方名リストに変わります。

frau
質問者

お礼

補足について、勘違いしておりました。 添付画像のとおりに試したところ、成功しました! たとえば「関東」(地方名)を選択して固定表示させたあと、再度「▽」をクリックすると、下位カテゴリ(都道府県名)がでてくるということですね。 ネットではポインタをたとえば関東に乗せると、自動で下位カテゴリがでてきてそれを選択しますが、そこまでできないということでしょうか。 ちょっとイメージとは違っていたのですが、おおむね満足しております。

frau
質問者

補足

ご回答ありがとうございます。 sheet2 B列 1 青森県 2 岩手県 3 宮城県 4 秋田県 5 山形県 6 福島県 7 東京 8 神奈川 9 茨木 10 栃木 11 群馬 12 埼玉 と入力。 ↓ A1~A6を選択し、「名前の定義」で「北海道・東北」とつけた。 ↓ A7~A13を選択し、「名前の定義」で「関東」とつけた。 ↓ Sheet1のA1に、Sheet2のA1:A6を元の値(=北海道・東北)とした入力規則のリストを設定した。 ↓ Sheet1のA1に、Sheet2のA7:A12を元の値(=関東)とした入力規則のリストを設定した。 このような設定をしたところ、確かにシートのA2、A3はそれぞれ「青森」等、「東京」等のリストが作られました。 しかしA列はには何を入れるのでしょう? B1~B6は北海道・東北ですので、A1~A6すべて「北海道・東北」と入力するのでしょうか? ちなみにこの時点でマクロは入っています。

その他の回答 (3)

回答No.4

>アプリケーション定義またはオブジェクト定義のエラー プロシージャ内のどの行でエラーが起きるのでしょうか。 >二段階目のリストを出そうと、リストの一つをクリックしたところ 入力規則(リスト)を設定したセルは、複数あるのでしょうか。

frau
質問者

お礼

すいません、NO.2へのお礼に書いてしまいましたが、 ↓ Set chk = Worksheets("Sheet2").Range("地方名").Find(Target.Value) ワークシートの名前を正しいものに入れ替えたところ、正常にできました。 誠にありがとうございました!

回答No.3

>入力規則設定セルをD10にして >If Target.Address(0, 0) <> "A1" Then Exit Sub >を >If Target.Address(0, 0) <> "D10" Then Exit Sub >にしたが、2段階の部分は表示されない。 こちらでは、対象をどのセルにしても、この部分の変更だけで、問題なく動作していますが‥‥ それ以外の設定も正しくされていると思いますので、なぜ動作しないのか、わかりません。

frau
質問者

補足

リスト自体はつくれましたが、二段階目のリストをだそうと、リストの一つをクリックしたところ 実行時エラー 1004 アプリケーション定義またはオブジェクト定義のエラー とでます…。

回答No.2

マウスポインタの位置を取得することはVBAでもできるようですが、デスクトップの左上端を起点としたピクセル値をExcelウィンドウ内のセル位置に置き換える処理は、かなり難しそうですし、私にそのスキルはありません。 なお、入力規則ではなくAxtiveXのコンボボックスでしたら、次のような記述で、ポインタがコンボボックス上に当てられた時点でドロップダウンさせることはできますので、工夫すれば何とかなるかも知れませんね。 ------- Private Sub ComboBox1_MouseMove _ (ByVal Button As Integer, ByVal Shift As Integer, _ ByVal X As Single, ByVal Y As Single)  ComboBox1.DropDown End Sub

frau
質問者

お礼

Set chk = Worksheets("Sheet2").Range("地方名").Find(Target.Value) ワークシートの名前を正しいものに入れ替えたところ、正常にできました。 誠にありがとうございました!

frau
質問者

補足

ありがとうございます。 回答1についてのマクロなのですが、都道府県は例です。 今後、この構文を使って同じタスクに利用したいと思いますが、リスト内容とワークシート上での位置が変わる場合、リスト内容は Set chk = Worksheets("Sheet2").Range("地方名").Find(Target.Value)  If chk Is Nothing Then   Area = "=地方名" ↑の"=地方名"を入れ替えればよいと思いますが、リストを作りたい位置については、 If Target.Address(0, 0) <> "A1" Then Exit Sub の"A1"のところを、差し替えればよいと思いますが、二段階目にならず今困っております。 sheet2のリスト候補をsheet1の「D10」に呼び出すとき、 If Target.Address(0, 0) <> "D10" Then Exit Sub としたのですが、2段階の部分は表示されません…。

関連するQ&A

  • 2段階リストでリストに記号も含ませたい

    たとえばこのような表を作ります。 ・元データ(元の値)はシート1にある。 ・元データを反映するのはシート2である。 ・元データは、1段階目(上位カテゴリ)としてたとえば「東京都」「神奈川」「静岡」・・・と続き、それぞれの2段階目(下位カテゴリ)に東京は「中央区」「港区」、神奈川は横浜市、横須賀市・・・と続きます。 ・上、下いずれも「-」という記号をリストに含める。 ・つまり、1段階目で「-」を選択したとき2段階目でも「-」と呼び出す。 このようにしたいのですが、他の語は正常に反映されますが、この記号のときだけ、2段階目には反映されません。 OFFSET関数でできるそうですが、当方、関数についてまったく無視なので、式を教えてください。よろしくお願いします。

  • 2段階リストで記号は使えない?

    2段階リストを作成するための、1段目のリストに「-」という記号を含めるのが目的です。 1段目のセルはA1とします。 2段目はA2とし、1段目のセルを指定することで (たとえば「=INDIRECT(A1)」) 2段目のリストを作ります。 このやり方で、リストを呼び出すための「名前の定義」を作ります。 1段目のリストは、たとえば「あ行、い行、-」とします。 1段階目で「あ行」を選択すると、「あ」から始まる住所が2段目のリストに並びます。以下同様ですが、住所がない場合には記号「-」を対応させます。 しかし実際、上記のやり方で2段階リストを作りますと、「あ行」他については成功したのですが、「-」の場合、2段目には何もリストが表示されません。 この解決方法を教えてください。 Excel2019利用です。

  • 2段階のドロップダウンリストについて

    2列に渡って、2段階のドロップダウンリストを作成します。 1列目である項目をリストから選び、2列目に移ったら1列目で選んだ 項目に匹敵する項目のリストから選べるようにしたいと思っています。 名前の定義とINDIRECTを使って作成している所です。項目には頭に数字 をふりたいのですが、名前の定義は数字が使えず、丸数字を使おうとも 思ったのですが21個では足りません。アルファベットも数が足りませ ん。 何か良い方法があったらヨロシクお願い致します。

  • 2段階リストのコピーができません

    2段階リストを作成したセルはコピーして使うと、2段目のリストが使えません。 原因として、 2段目のリストは1段目のセルで設定したリストから呼び出すように =INDIRECT($C$10) というように設定しました。つまり絶対値のせいだと思います。 2段階リストをコピーして使うようにする方法を教えてください。 参考にしたのは↓の解説の項目「2段目プルダウンリスト作り」 https://excel-komarigoto.com/%E3%83%89%E3%83%AD%E3%83%83%E3%83%97%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AA%E3%82%B9%E3%83%88/excel%EF%BC%92%E6%AE%B5%E9%9A%8E%E3%83%97%E3%83%AB%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AA%E3%82%B9%E3%83%88%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9/ ですが、どの説明でも1段目リストのセルをコピーします。 しかし、実際ではなぜか絶対値になりません。 正しくは、↓のようになるはずです。 「=INDIRECT(B1)」 Excel2019利用です

  • INDIRECT関数でプルダウン表示させたい

    目的は、テーブルで作ったリストを、INDIRECT関数でプルダウン表示させたいのですが、以下のような条件があります。 ①リストのセルと、関数を設定するセルは別シートにある。 ②リストは、テーブル化されており、名前がついている。 ②関数設定のとき、名前で呼び出すが、名前は手入力ではなく、クリックでその項目名を指示したい。 たとえば、シート1にあるA1セルには、トップ項目「東京都」があり、下位カテゴリに「中央区」「港区」などと続く、リストが続きます。 シート2のA1に、「東京都」を呼び出しドロップダウンリスト表示させるが、名前の指定の際、手入力ではなくクリックで行う。ということです。 Excel2019利用です。

  • 入力規則のリストの使い方

    エクセル2003を使っています。 入力規則のリストをこのように使える方法はないでしょうか? A1セルに東北、関東、近畿、中国、四国、九州 と選択リストを作る A2セルは、A1で東北を選べば青森、秋田、岩手。四国を選べば高知、愛媛、香川、徳島 と選択できるようにする。 どうでしょうか?何かいい方法があればご教授ください。 現在選択リストを作成したところ200項目ほどあって選択するのが大変になるので困っています。どうぞ宜しくお願いします。

  • リスト表示について教えて下さい

    見積書の作成をしております。 商品名の入力の際に、入力規則のリストを使用しております。 「商品名リスト」が100を超えているので、選ぶのが 大変になってきました。 入力規則のリストで、一気に30項目程、表示出来ればいいな~と思い 色々調べたのですが、どうもそのような事が、出来ない みたいなので困っております。 (表作成状況) 「B1:E8」に表を作っています。 (実際にはB1:E1000) 「Sheet2!A1:A14」に「商品名リスト」作成。 (実際には、Sheet2!A1:A1000) 「Sheet2!B1:B14」に「単価リスト」作成。 (実際には、Sheet2!B1:B1000) 「B2」には、入力規則のリストで「商品名」を選ぶようにしております。 「C2」=IF(B2="","",VLOOKUP(B2,Sheet2!$A$2:$B$1000,2,FALSE)) 「D2」は個数を入力 「E2」=C2*D2 B列の商品名を入れたいセルをクリックすると、リストが30項目程出てきて、その中から選ぶというのは、やはり無理なのでしょうか? 教えて頂けませんか。 よろしくお願いします。

  • Excel セルをクリック⇒リスト⇒選択できる方法?

    『Excel セルをクリックして、すでに登録されているリストが表示される。そのリストから一つ選択するとその項目がセルに入力される。(例:セルを選択すると、セルの右に飲み物のリストが表示され、その中から一つ選択すると、セルに選択した項目が入力される)』このようなシートを一度みたことがあり、使用したいと考えのたのですがその設定方法がわからず困っています。よろしくお願い致します。

  • エクセルのリスト作成について

    エクセルで入力規則からリストを作成する項目があると思いますが、 私の知っている使い方だと、1つの範囲を選択してその範囲内で項目を決めるものだと思います。 そこでですが、1つのリストを作成して項目を決定した後、新たに他のリストで1つ目のリストのものに連動して他のリストが選択できるようにはできないのでしょうか。 すみません、わかりづらいかもしれませんがイメージとしてはokwaveの投稿カテゴリーにあるように、大きな範囲のカテゴリからどんどん項目を絞っていくようなイメージにできればと思っています。 なにか手段があるとおもうのですが、どうすればいいでしょうか。わかる方、教えてください(>_<)

  • エクセル VBA 複数あるセルの中身を1つのセルに表示させる2

    前回とほぼ同じ質問なのですが、宜しくお願いします。 複数のセルに書かれている日付を 1つのセルにまとめて表示させたいと考えています。 日付は、 10/3,トマト,長野(,で別セルとします) 4/5,トマト,長野 5/7,トマト,神奈川 5/6,レタス,千葉 3/4,レタス,東京 1/3,レタス,東京 のように縦に並んでいまして、 下の行(1/3)から1つのセルに入れていき 3/4,レタス,東京,1/3・3/4と [1/3・3/4]を1つのセルに入れ、 しかも出来れば「・」を間に入れて 1つのセルに表示させたいのです。 そして、同様にトマトにおいても行い、 最終的には、 10/3,トマト,長野,4/5・10/3 4/5,トマト,長野 5/7,トマト,神奈川,5/7 5/6,レタス,千葉,5/6 3/4,レタス,東京,1/3・3/4 1/3,レタス,東京 と表示させたいと思っております。 一致材料は2つあり、 品物と産地が一致することが必要です。 このとき、レタスとトマトの個数は数えなければ わかりません。 ここで教えていただいたことを、実際には 6個の項目が一致して始めて日付を1セルに まとめたいと思っています。しかも間には 判断とは関係ない列も含まれ、6項目が 横に連続はしていません。 配列を使えば良いみたいですが、勉強不足です。 大変難しいかと思いますが、 ぜひお知恵を貸して頂ければ幸いです

専門家に質問してみよう