• ベストアンサー

エクセル ドロップダウンリストについて

A,B,C,D列にドロップダウンリストを設定し連動できるかお教え下さい。 A列のリストに値を複数設定し、B列のリストの値をA列の値によって変化させるまでは過去の回答にて確認しました。そのB列の値によってC列もドロップダウンリストを設定し、さらにD列も同様に・・というのは 可能なものでしょうか。

  • a-123
  • お礼率25% (7/27)

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

  • ベストアンサー
  • vista2446
  • ベストアンサー率46% (131/279)
回答No.2

リストに名前を付けることで可能です。 C列に表示させるリストを選択して、B列で選択される値を名前として付けます。名前は、リストを選択して[挿入]→[名前]→[定義]で付けてください。 C列でドロップダウンを設定する時に[元の値]でINDIRECT関数を使います。「=INDIRECT(B1)」(B1セルの値を反映させる場合)と記述してください。 C列で選択された値を名前とするリストを、D列でドロップダウンさせることができます。

a-123
質問者

お礼

ありがとうございました。できました。かなり効率がよくなります。 感謝します!!

その他の回答 (3)

回答No.4

No.3です。 マクロの改良版を作ってみました。もしよろしければ、お試し下さい。 【使い方】 ・リスト項目は、シート名を「リスト項目」としたシートに全て入力して下さい。 ・例えば、ルートの下に「AA」「BB」「CC」、「AA」の下に「AAA-1」「AAA-2」「AAA-3」、「AAA-1」の下に「aaa-1」「aaa-2」というツリー構造となっている場合、以下のように入力して下さい。 (1) 「ルート」「1」「AA」「BB」「CC」 (2) 「AA」「1」「AAA-1」「AAA-2」「AAA-3」 (3) 「AAA-1」「4」「aaa-1」「aaa-2」 等々 ・「 」は1つ1つのセルを表わします。ここでは横方向に書きましたが、全て縦方向(行方向)に入力下さい。入力に使えるエリアは"A1:Z1000"としてあります。 ・上記エリア内であれば、使用する位置に制約はありません。また(1)~(3)のような書き方でツリー構造を把握する方法なので、一連項目の入力順序(位置)とツリー構造とを対応させる必要もありません。 ・ただし、(1)~(3)のような一連の項目は1行も空けずに続けて入力下さい。一連項目と別の一連項目との間には最低1行の空行を入れて下さい(空行が何行続いても構いません)。 ・ツリーの一番上に当たる項目リストは、必ず"ルート"(全角)として下さい。 ・項目名は、重複がないようにして下さい。 ・(1)~(3)のように、2番目には必ず自然数を入れて下さい。この数字はその項目が使用するセル数です。例えば「サイズ」「重量」という選択肢の場合、「サイズ」の記入用に3セル使用するのであれば、4として下さい。「サイズ」「10cm」「20cm」「30cm」の4セルという意味です。「重量」を選んだときは、1セルしか使わないと思いますが、最もたくさんセルを使用する項目に合わせて下さい。従って、「重量」「5kg」「」「」という感じになってしまい、カッコ悪いかもしれませんが、ご容赦下さい。 ・ツリーの一番下に来る項目には必ず「備考」という項目を付けて下さい。ツリーの一番下に来る項目が100個あったら、大変お手数ですが、一連のセルの組を100セットご入力頂くことになります。どんくさい仕組みで申し訳ありません。以下のような感じです。 ・「aaa-1」「2」「備考」 ・「AAA-3」「2」「備考」 等々 ・実際の入力作業は、入力を開始したいセルを選択後、マクロを実行させて下さい。 ・データ入力の開始を、B列としました。もし変更の必要がある場合には、プログラムを次のように書き換えて下さい。プログラムの上の方にある 「Retsu_Start = 2 ' 入力シートの入力開始列:B列 = 2」 の「Retsu_Start = 2」の"2"をA列なら1、B列なら2、C列なら3、D列なら4、E列なら5、‥‥として下さい。 ・選択するセルは必ずしも行の先頭(今のままならB列)である必要はありません。次のような場合、既に入力済みのデータを消さずに「*」のセルを選択すれば、そこから開始されます。ただし、2番目のような場合に「*」ではなく「10cm」等を選択すると誤動作します。 ・「AA」「AAA-1」「*」 ・「AA」「AAA-1」「aaa-2」「10cm」「20cm」「30cm」「*」 ・マクロの終了は「備考」の入力(何も入力せずOKでも可)後に、作業を続けるかどうかを聞いてきますので、ここで「いいえ」をクリックして下さい。 【マクロ】 No.3が残っているとマクロ選択時に間違う恐れがあるので、新規ブックにマクロ内容をコピーし、試してみて下さい。 Option Explicit '---------------------------------------------------------------- ' リスト化 改良版 '---------------------------------------------------------------- Sub リスト化_改() Dim Item_Cnt_0 As Integer, Item_Cnt_1 As Integer, Item_Max As Integer Dim Item(500, 500) As Variant, Item_List As String, Komoku As Variant, Naiyo As Variant Dim Gyo_Max As Integer, Retsu_Max As Integer, Retsu_Start As Integer, Retsu_Offset As Integer Dim Gyo As Integer, Retsu As Integer, i As Integer, j As Integer, k As Integer, m As Integer Dim Nyuryoku_Sheet As String, Response As String, Cell_Su As Integer Gyo_Max = 1000 ' Sheet("リスト項目")の使用行数。Excel上限:65536 Retsu_Max = 26 ' Sheet("リスト項目")のA列~Z列を使用。 Retsu_Start = 2 ' 入力シートの入力開始列:B列 = 2 Nyuryoku_Sheet = ActiveSheet.Name Gyo = ActiveCell.Row Retsu = ActiveCell.Column ' リスト項目取得 Sheets("リスト項目").Select Item_Cnt_0 = 0 For i = 1 To Retsu_Max Item_Cnt_1 = 0 For j = 1 To Gyo_Max If Cells(j, i).Value = Empty Then Item_Cnt_1 = 0 Else If (j = 1) Or (Cells(j - 1, i) = Empty) Then Select Case Cells(j, i).Value Case "ルート" k = 0 Case Else Item_Cnt_0 = Item_Cnt_0 + 1 k = Item_Cnt_0 End Select End If Item_Cnt_1 = Item_Cnt_1 + 1 Item(k, 0) = Item_Cnt_1 Item(k, Item_Cnt_1) = Cells(j, i).Value End If Next j Next i Range("A1").Select ' リスト項目検索 Sheets(Nyuryoku_Sheet).Select Retsu_Offset = -1 Label1: Select Case Retsu Case Retsu_Start m = 0 Case Else If Retsu = Retsu_Start + 1 Then Retsu_Offset = 1 End If Select Case Retsu_Offset Case -1 For j = 1 To Retsu - Retsu_Start For i = 1 To Item_Cnt_0 If Item(i, 1) = Cells(Gyo, Retsu - j) Then m = i GoTo Label2 End If Next i Next j Case Else For i = 1 To Item_Cnt_0 If Item(i, 1) = Cells(Gyo, Retsu - Retsu_Offset) Then m = i GoTo Label2 End If Next i End Select End Select Label2: ' 入力作業 Cell_Su = Item(m, 2) Item_List = 1 & ":" & Item(m, 3) For i = 4 To Item(m, 0) Item_List = Item_List & "、 " & i - 2 & ":" & Item(m, i) Next i Label3: If Item(m, 0) = 3 Then Komoku = 1 Else Cells(Gyo, Retsu).Select Let Komoku = InputBox(Item_List & " から数字を選んで下さい。", "項目指定") Komoku = Val(Komoku) If (Komoku = Empty) Or (Komoku < 1 Or Item(m, 0) - 2 < Komoku) Then GoTo Label3 End If End If Cells(Gyo, Retsu) = Item(m, Komoku + 2) If Cell_Su >= 2 Then For i = 1 To Cell_Su - 1 Cells(Gyo, Retsu + i).Select Let Naiyo = InputBox("「" & Item(m, Komoku + 2) & "」の内容を入力して下さい。", Item(m, Komoku + 2)) Cells(Gyo, Retsu + i) = Naiyo Next i End If If Item(m, Komoku + 2) = "備考" Then Response = MsgBox("作業を続けますか?", vbYesNo, "続行/終了") If Response = vbYes Then Gyo = Gyo + 1 Retsu = Retsu_Start GoTo Label1 End If Else Retsu = Retsu + Cell_Su Retsu_Offset = Cell_Su GoTo Label1 End If End Sub

回答No.3

a-123さんのご希望に合っているかどうか、全く自信はありませんが、簡単なマクロを作ってみました。どんくさい内容で恐縮ですが、もしよろしければ、お試し下さい。 ・このマクロは、実行前に選択したセルの左隣の列にある文字列等の項目に対して、取得・ソート・重複削除を行い、リスト項目とします。そして実行前に選択したセル及びその下のセルを、リスト化します。 ・入力開始行から100行目までを対象としていますが、それ以上必要な場合は、プログラム中に2箇所ある"100"を適切な数値に書き換えて下さい。 【例】 ・リストがA2から下に入っている場合は、B2を選択しマクロを実行させて下さい。B2から下がリスト化(ドロップダウンリスト化)されます。 ・マクロ実行前にB4を選択すると、A4から下がリスト項目になり、B4から下がリスト化されます。 【マクロ内容】 (マクロの貼り付けの際、字下げのスペースが削除されてしまいました。また_による改行もしていません。大変見にくい申し訳ありませんが、ご容赦頂ければ幸いです) Option Explicit '---------------------------------------------------------------- ' リスト化 '---------------------------------------------------------------- Sub リスト化() Dim Item_Cnt_0 As Integer, Item_Cnt_1 As Integer, Item_Max As Integer Dim Item(100) As Variant, Item_List As String, Kari As Variant Dim Kaishi As Integer, Retsu As Integer, i As Integer, j As Integer Item_Max = 100 Retsu = ActiveCell.Column Kaishi = ActiveCell.Row If Retsu = 1 Then MsgBox "リスト化はB列以降で実行可能です。" End End If ' データ取得 Item_Cnt_0 = 0 For i = 0 To Item_Max - 1 If Cells(i + Kaishi, Retsu - 1).Value <> Empty Then Item_Cnt_0 = Item_Cnt_0 + 1 Item(Item_Cnt_0) = Cells(i + Kaishi, Retsu - 1).Value End If Next i If Item_Cnt_0 = 0 Then Kari = MsgBox("左側の列に何も入力されていません。リスト化を解除する場合は「はい」、現状のままの場合は「いいえ」をクリックして下さい。", vbYesNo, "未入力時の処理") If Kari = vbYes Then Range(Cells(Kaishi, Retsu), Cells(Kaishi + Item_Max, Retsu)).Select Selection.Validation.Delete End If End Cells(Kaishi, Retsu).Select End End If ' ソート i = Item_Cnt_0 Do While i >= 1 j = Item_Cnt_0 - 1 Do While j >= Item_Cnt_0 - i + 1 If Item(j) > Item(j + 1) Then Kari = Item(j) Item(j) = Item(j + 1) Item(j + 1) = Kari End If j = j - 1 Loop i = i - 1 Loop ' 重複削除 Item_Cnt_1 = 1 Item(Item_Cnt_1) = Item(1) For i = 2 To Item_Cnt_0 If Item(Item_Cnt_1) <> Item(i) Then Item_Cnt_1 = Item_Cnt_1 + 1 Item(Item_Cnt_1) = Item(i) End If Next i ' 文字列の連結 Item_List = Item(1) For i = 2 To Item_Cnt_1 Item_List = Item_List & "," & Item(i) Next i ' リスト化 Range(Cells(Kaishi, Retsu), Cells(Kaishi + Item_Max, Retsu)).Select With Selection.Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=Item_List .IgnoreBlank = True .InCellDropdown = True .ErrorMessage = "リストから選択して下さい" .IMEMode = xlIMEModeNoControl .ShowInput = True .ShowError = True End With Cells(Kaishi, Retsu).Select End Sub (注) マクロを全くご存じなければ、以下の操作をしてみて下さい。 「ツール」「マクロ」「マクロ」を選択し、マクロ名のところに、(例えば)"リスト化"を入力して下さい。次に「作成」をクリックすると、下のような画面が出てくると思いますので、上記のように修正して下さい。作業が完了したら、「デバッグ」「VBAProjectのコンパイル」を選択して下さい。ここでもしエラーが出てしまったら、近くの詳しい方に教えて頂くのが賢明です。無事コンパイルが終了したら、(このままでも動くのですが)「ファイル」「終了してMicrosoft PowerPointへ戻る」を選択して下さい。実行は「ツール」「マクロ」「マクロ」で実行するマクロ名を選択し「実行」をクリックして下さい(シート上にボタンを作成しクリックすれば実行できるようになるのですが、説明がやや複雑になるので今回は省略します)。なおファイルを保存後に再度開く際は「マクロを有効にする」をクリックして下さい。何も表示が出ず、ファイルが開いてしまう等の場合は、「ツール」「オプション」タブ「セキュリティ」タブ「セキュリティレベル」で「中」を選択して下さい。 Option Explicit Sub リスト化() ' ' マクロ作成日 : ●●/●●/●● 作成者 : ●● ' End Sub

a-123
質問者

お礼

ありがとうございます。マクロを試してみました。 ご丁寧に回答いただきましてありがとうございました。 ほぼやりたいことに近い結果が得られましたが、各項目ごとに対応する項目が決まっているのでリストの中身が変わるようにしたいと思っております。説明が不足しておりまして申し訳ございませんでした。 マクロの操作も素人のため初めてやってみました。大変勉強になりました。ありがとうございました。

  • Nouble
  • ベストアンサー率18% (330/1783)
回答No.1

具体的な例を示して頂けませんでしょうか? 宜しくお願い致します

a-123
質問者

補足

具体例がなくすいませんでした。 電話がかかってきた履歴をとりたいと思ってます。 1          2      3     4    5 商品内容問い合わせ  大きさ   10cm  商品名A  赤色 商品内容問い合わせ  大きさ   10cm  商品名A  青色 商品内容問い合わせ  大きさ   10cm  商品名B  青色 商品内容問い合わせ  重さ    10g   商品名C  赤色 営業所場所問い合わせ 東京    渋谷支店  担当    名前 営業所場所問い合わせ 大阪    渋谷支店  担当    名前 操作方法問い合わせ  録音方法  説明済   故障    交換 操作方法問い合わせ  録音方法  説明済   故障    有償 など、というようにそれぞれ「1」~「5」をドロップダウンリストで順番に選択していくだけで入力ミスなどないようにしたいと思っております。「1」~「5」の項目はそれぞれ5~20程度の細かい項目にわかれツリー状になりますので最終的には「1行」の表記パターンは100通り程度になるようなイメージです。

関連するQ&A

  • エクセルのドロップダウンリスト

    入力規則のドロップダウンリストですが、次のような使い方は可能でしょうか?また可能なら方法を教えて頂けませんか?よろしくお願いします。 A、B列にドロップダウンリストを設定し、A列のリストに値を複数設定し、B列のリストの値をA列の値によって変化させたいのですが・・・。各列とも、複数行にわたってドロップダウンリストを設定しています。

  • エクセル ドロップダウンリスト 色変更

    エクセルのドロップダウンリストを使い、選んだリストによって、 その行もしくは列全てや指定した範囲のセルの色を 変更したいのですが、可能でしょうか? ドロップダウンリスト自体には条件付書式設定によりできたのですが、 ドロップダウンリスト以外のセルの色は変えられません。 具体的には、A1にドロップダウンリストを設定し、 1~10までのリストが選べる状態で、 1を選ぶとA2の色が変わり、 2を選ぶとA3~A5まで色が変わり、 3を選ぶとA6~C6まで色が変わるという感じで、 好きなセルを変えるようにしたいです。 エクセルのバージョンは、97か2000でお願いしますが、 2000以上のバージョンなら可能というようなことがあれば それも教えていただければと思います。 お手数ですが、エクセルにお詳しい方、アドバイスをいただけないでしょうか? よろしくお願いいたします。

  • EXCEL ドロップダウンリストの連動について

    EXCELの質問です。 シートXの行1の、列Aに「チームA」、列Bに「チームB」、列Cに「チームC」と入力し、 この3つに「名前の定義」で「チーム名」と付けました。 続けて、 シートXの列Aの行2~行10まで、チームAのメンバーの名前を入力しました。 同じく、 シートXの列Bの行2~行10まで、チームBのメンバーの名前を入力しました。 同じく、 シートXの列Cの行2~行10まで、チームCのメンバーの名前を入力しました。 次に、シートYの行1の列Aに、入力規則で「リスト」として、「元の値」に「=チーム名」としました。 次に、シートYの行2の列Aに、入力規則で「リスト」として、「元の値」に「=INDIRECT(A1)」としました。 こうして、ドロップダウンリストを連動させました。 ここで、 シートYの行1の列Aで「チームB」を選択すると、 シートYの行2の列Aのドロップダウンリストには「チームB」のメンバーの「名前が出てきますよね。 ここで、「チームB」の3番目の選手(名前を「日本 太郎」とします)を選択した後で、 シートXの列Bの行2~行10まで入力した、チームBのメンバーの名前が全員間違っていたため入力し直した時に(例えば「日本 太郎」を「世界 太郎」に変更したとします)、 選択済みの「日本 太郎」を、自動連動で「世界 太郎」に変更されるようにしたいのですが、方法はあるでしょうか? ドロップダウンリストが連動して、かつ元データを変更したら自動で反映されれば「INDIRECT関数」以外の方法でも構わないです。何か良い方法はないでしょうか?

  • ドロップダウンリストの連動した使い方

    ドロップダウンリスト同士を連動させたいのですが、例えば、カラムA,B,Cにそれぞれドロップダウンリストを作成しておき、カラムAでドロップダウンリストより任意の値を選ぶと、自動的にカラムB,Cも同じ位置の値がセットされるようにしたいのです。同じ位置の意味は、A,B,Cのドロップダウンリストの値を仮に10個設定しておいたら、カラムAで上から3番目を選んだらカラムB,Cでも上から3番目が選ばれセットされるようにしたいのです。 よろしくお願いします。

  • エクセル ドロップダウンリスト 項目作成

    【やりたい事】エクセルで、『ある列の項目(下記例:A列)』から 『条件が一致した(下記例:C列で"肉食")』項目だけドロップダウンリスト『ライオン、トラ、ヒョウ(下記例:A列の名前)』を作成したい。 ドロップダウンリストは、同じsheetの別の列(全て)に表示させてい。 ※A列は、任意に入力します。 ※B列は、意味ここでは意味ない列になります。 ※C列は、別のシートでプルダウンリスト"肉食"、"草食"を選択しています。 ※D列は、現在途中の条件出しを行っていますが、うまくいっていません。 ※Z列に「プルダウンリスト(肉食動物名一覧)」を表示させたい。 ●プルダウンリスト条件  Z列:"肉食"の時、A列の名前だけを表示(※空白は、削除したい) 【エクセル例】 -------------------------------   A列    B列    C列   D列  ...  Z列 1 動物名  地域区別  肉食か?       肉食動物名 2 ライオン アフリカ  肉食   ライオン  [プルダウンリスト] 3 カバ    アフリカ  草食         [プルダウンリスト] 4 シマウマ アフリカ  草食         [プルダウンリスト] 5 トラ    アジア   肉食    トラ   [プルダウンリスト] 6 ヒョウ   アフリカ  肉食    ヒョウ  [プルダウンリスト] 7 うさぎ   いろいろ  草食         [プルダウンリスト] 8 パンダ   中国    草食         [プルダウンリスト] ------------------------------- ※D列は、現在行ったやり方です。 しかし、空白欄(D3,D4,D7,D8)がドロップダウンリストに表示されてしまう。 D列の各行で条件を出しをしている。 現在、[D2]:=IF((C2="肉食"),A2) [D3]:=IF((C3="肉食"),A3) 名前付け:D2:D8を「肉食動物」として、 「データツール」>「データの入力規則」で、 「入力値の種類:リスト」の「空白を無視する」のオフにして、 「元の値」=肉食動物(D2:D8)としていますが、プルダウンリストに「空白」も表示されており、選択しづらいです。 プルダウンリスト(例)では --- ライオン (空白) (空白) トラ <<以下省略>> --- と、空白がでています。 やり方、設定方法を間違っているかもしれません。 何方か、お教えください。

  • エクセルのドロップダウンリスト

    エクセルのドロップダウンリストについて、困っていることがあります。 たとえば、 ・Aシート A列|B列|C列 1|ペン|200 2|鉛筆|100 3|本|200 ・Bシート A列|B列 ペン(ドロップダウンリスト)|200 という風に、Bシートのドロップダウンリストを選択すると、動的に200と隣のセル(B列)に表示するようにするにはどのようにすればいいでしょうか? よろしくお願いします。

  • エクセル、ドロップダウンリストで空白セルを非表示

    エクセル2013です。 Sheet1にドロップダウンリストを作成し、Sheet2のC列を参照したいです。 Sheet2のC列は日々入力され行数が増えていくのでリストの範囲を多めにしたいです。 入力規則 リスト-元の値 =Sheet2!$C$3:$C$20000 にしましたが Sheet2のC列はまだ1,000行くらいしか入力されていない為 ドロップダウンリストでリストを表示すると リスト内にて空白の部分の方が多く、検索が大変です。 NETで調べて 入力規則 リスト-元の値 =OFFSET(Sheet2!$C$3,0,0,SUMPRODUCT((Sheet2!$C$3:$C$20000<>"")*1)) としたのですが ドロップダウンリストには Sheet2のC列のセルC863までしか表示がされません。 Sheet2のC列はC1003まで値が有ります。 この関数のどこがわるいのでしょうか? よろしくお願いします。

  • ドロップダウンリスト??

    Excelで、あるセルに【ドロップダウンリスト】を設定をしております。ドロップダウンリストに候補がない場合、直接文字を入力したいのですが、どうすればいいかお教えください。お願いいたします。

  • 【エクセル】ドロップダウンリストの選択肢によって隣のセルの表示を自動的に変化させたい

    まずA1にドロップダウンリストを作成します。 この中には選択肢としてa,b,c,d,eの5つがあります。 a,b,cを選択するとB1には自動的に○が表示され、 選択肢をdまたはeに変更するとB1の表示が自動的に×になる ような設定ができないでしょうか。 よろしくお願いします。

  • エクセル ドロップダウンリストについて

    Windows エクセル2003SP3を使用しています。 ドロップダウンリスト(入力規則)について質問です。 シート1に  東京  大阪  名古屋 とあり、3つのセルの選択範囲を「地域」と名前をつけました。 で、シート2で、あるセルを選択し、 データ→入力規則→リスト・・・とたどり 「元の値」に「=地域」と入力しました。 すると期待通りのドロップダウンリストが完成。 ためしに「名古屋」を選択しておきます。 で、ここからが質問ですが シート1の選択範囲にある「名古屋」を「福岡」に変えると シート2の表示も変わっているだろう・・・と期待したら変わっていませんでした。 しかし、ドロップダウンリストの中身はきちんと「福岡」になっています。 選択範囲のデータを変更させたら シート2の表示もすべて変更(反映)させることは可能ですか?

専門家に質問してみよう