• ベストアンサー

excelで左のセル項目にあわせた複数選択可能なプルダウンボックスを表

excelで左のセル項目にあわせた複数選択可能なプルダウンボックスを表示させたい。 添付のようなイメージのものを作成したいと考えています。 B列はプルダウンで選べる様になっており、B列の内容により、C列の選択肢を変更 したいのです。 ちなみに、今C列はリストボックスになっていますが、チェックボックスなど、 リストから複数選べるようになれば問題ありません。 このようなものは、VBAなどを組まないとできないのでしょうか。 よろしくお願いいたします。

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

  • ベストアンサー
  • suzusan7
  • ベストアンサー率64% (22/34)
回答No.7

値を利用することで考えていました。 リストボックスは選んだ表示だけで良くて、 あとはB列のリストボックスの変更に合わせて リストボックスの項目が変われば良いということですね。 すると、一例としてはこんな感じでしょうか? セルB2かセルB3の値変更があった場合、 セルの内容(例では魚屋、果物屋、八百屋)に応じて、 リストボックスの内容を変更するマクロです。 設定は下記の通りとしています。 ・セルB2、B3はセルE7~E9のリスト選択 ・セルB2またはB3の内容に合わせてセルE14~セルG16の  データをリストに表示する ・2行目にあるリストボックスを“ListBox1”  3行目にあるリストボックスを“ListBox2”としています。 ・リストボックスのListFillRangeは空白にしておく。 以下をVBAで操作を行うシートに貼りつけてみてください。 Excel2002ですが、セルB2を変更すると、リストボックス1の表示内容が セルB3を変更すると、リストボックス2の表示内容が変わります。 たた、表示内容が変わったときは何も選択していない状態になります。 シートの値を参照していますが、VBA内での記載でもできると思います。 Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) Dim MyRng As Range, isect As Range, i As Long 'セル変更箇所の確認 Set isect = Application.Intersect(Target, Range("B2:B3")) If isect Is Nothing Then Exit Sub End If 'リストボックスの範囲設定 Select Case Target.Value Case "魚屋" Set MyRng = ActiveSheet.Range("F14:F16") Case "八百屋" Set MyRng = ActiveSheet.Range("E14:E16") Case "果物屋" Set MyRng = ActiveSheet.Range("G14:G16") End Select 'リストボックスの設定 If isect.Address = Range("B2").Address Then ListBox1.List = MyRng.Value ElseIf isect.Address = Range("B3").Address Then ListBox2.List = MyRng.Value End If End Sub

norida_man
質問者

お礼

いろいろと考えて頂きありがとうございます。 今回は、B列の項目により、入力させたいセルの色を変えて、 チェックボックスにチェックを入れるような形で、勧めようと 思います。 使用者から使いづらいという声があったら、改修をかけようと思いますので、 その際、またこちらでお世話になりましたら、よろしくお願いいたします。

その他の回答 (6)

  • ASIMOV
  • ベストアンサー率41% (982/2351)
回答No.6

>10~20個ほどの量となるため、なるべく一行で収めたかったのです 一行であれば、列は複数でも良いのでしょうか? C列から右に商品名を並べておき、 セル毎にチェックBOXを貼り付けておく..とか 商品名をダブルクリックすると色が変わるマクロを設定しておく..とか

norida_man
質問者

お礼

ありがとうございます。 ご教示いただいた内容は私の方でも考えついた内容となります。 他に方法がありましたらご教示いただけると幸いです。

  • suzusan7
  • ベストアンサー率64% (22/34)
回答No.5

こんにちわぁ 入力規制では複数選択ができないので、別の方法を。 ちなみに、動作確認はExcel 2002です。 ツールバーの「コントロールツールボックス」から リストボックスを押してください。シートにリストボックスが 表示されます。 もし「コントロールツールボックス」がわからなければ、 ツールバー付近で右クリックを押すと「コントロールツールボックス」を 表示させることができます。 「コントロールツールボックス」の「デザインモード」をクリックし、 リストボックスを右クリックすると「プロパティ」という項目が 見つかりますので、これを選んでください。 なお、リストボックスの大きさ等、変更を行う場合は デザインモードにする必要があります。 プロパティの中に 「ListFillRange」という項目を探してここに、リストボックスに表示したい 文字が入力されているセルを記載してください 例:A1:A8 複数選択への対応はプロパティの中に 「MultiSelect」という項目を探して、 「1-fmMultiSelectmulti」か「2-fmMultiSelectExtended」 に設定してください。 1と2の違いは、1はシングルクリックで選択・キャンセルを行い、 2は複数選択をする場合はshiftキーかctrlキーを使います。 複数選択をした場合はプロパティのLinkedCellで値を返すことができません。 ですので、VBAになります。 先ほどの手順でプロパティの代わりに「コードの表示」を選択します。 そして以下のコードに書き換えてみてください。 Private Sub ListBox1_Change() Dim i As Long, j As Long Const trg As String = "D1" '選択値を書き込む最初のセルアドレス With ListBox1 ActiveSheet.Range(trg).Resize(.ListCount).ClearContents For i = 0 To .ListCount - 1 If .Selected(i) Then ActiveSheet.Range(trg).Offset(j, 0).Value = .List(i) j = j + 1 End If Next i End With End Sub 必要な変更箇所は ListBox1_Click() → ListBox_Change() D1から書き始めることにしていますので、必要に応じて変更 リストボックスの個数分は値をクリアしますので 必要な分だけ、書き出す範囲を確保してください。 アクティブシートでの作業として書いていますので、 違うシートに記載するのであれば、変更が必要です。 おまけですが、リストボックスで選択をチェックボックス形式にしたい場合は プロパティの「ListStyle」を「1-fmListStyleoption」に変更してみてください。

norida_man
質問者

補足

こんにちは。ご回答いただきありがとうございます。 教えていただいたものですと、結果的にはセルを複数使ってしまうので、 私のやりたいことにはつながりませんでした。 また、B列の選択しにより、C列のリストボックスの内容を変化させたいのです。 以上、よろしくお願いいたします。。

  • ASIMOV
  • ベストアンサー率41% (982/2351)
回答No.4

>各店舗最大で8こ選ぶことができるようにしたいです。 >セルの行数を各店1行でなんとかしたいのですが これについて、もっと詳しい説明が必要です 選んだ後、8個商品をどうするのか?.. 選んだ結果のイメージを示してください

norida_man
質問者

補足

ご回答いただきありがとうございます。 実際使用する項目は商品名ではありません。 わかりやすくするために、上げておりました。 内容としては、依頼者に商品最大8個を選んだのち、 それを元に別の管理ツールに入力するためのメモみたいなものです。 依頼者が依頼してくる数は、店名や商品名の組み合わせにより、 10~20個ほどの量となるため、なるべく一行で収めたかったのです。 この説明でわかるでしょうか。 選んだ結果のイメージとしては、「選べていればいい」という状態になります。 そこからデータを加工して何かをするわけではありません。 よろしくお願いいたします。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.3

こんにちは! B列の入力規則でリストはちゃんと表示出来ているとしての方法です。 当方使用のEXCEL2003の場合ですが、 まず、「八百屋」のリスト候補にしたい品目(りんご・ばなな・もも・・・等々)を範囲指定 → メニュー → 挿入 → 名前 → 名前定義 で「八百屋」と名前定義します。 同様に「さかなや」のリスト候補にしたいものを範囲指定 → 「さかなや」 と名前定義 他にも業種がある場合は同様にすべて名前定義しておきます。 (範囲指定した後に、名前ボックスに直接入力しても構いません) そして、C列のリスト表示させたいセル(C2以降)を範囲指定し、 メニュー → データ → 入力規則 → リスト から 「元の値」の欄に =INDIRECT(B2) として完了です。 これでB列でリスト表示させたものがC列のリスト表示の候補になります。 以上、長々と書きましたが、参考になれば幸いです。m(__)m

norida_man
質問者

補足

ご回答いただきありがとうございます。 上記方法では、1つしか選択することができず、 複数選択させるとなると、行を大幅に使ってしまいます。 1行で複数個を選択したいのです。 よろしくお願いいたします。

  • myRange
  • ベストアンサー率71% (339/472)
回答No.2

も少し補足が必要でしょう。 例えば 各店に対して選択できる商品の最大数はいくつでしょうか。 これにより、各店のセルの高さが変ってきますが、それは考慮されてますか? 八百屋では3つ選択し、さかなやでは、10選択した場合など。 もし、各店の最大商品選択数が、”同じ”なら、以下の方法もありかと。 各店とも商品選択最大数が”5つ”だとした場合 各店ごとに、5行ずつ使う 八百屋は、 2~6行 さかなやは、7~11行   以下同様 こうすると、商品のセルは、  B2~B6  B7~B11 となるので、 それぞれに、入力規則を設定すると 各店ごとに、5つの商品を選択できることになる 以上です。  

norida_man
質問者

補足

回答いただきありがとうございます。 各店舗最大で8こ選ぶことができるようにしたいです。 イメージは3つしかないですが… セルの行数を各店1行でなんとかしたいのですが、方法がないのかとおもい、 投稿しました。 よろしくお願いいたします。

  • ASIMOV
  • ベストアンサー率41% (982/2351)
回答No.1

http://oshiete.coneco.net/qa1892891.html 過去に同じ質問が何度も有ります 参考 http://officetanaka.net/excel/function/tips/tips05.htm このサイトの中ほどに有る、「[元の値]を動的に変化させる」という項目にも詳しく解説されています

norida_man
質問者

補足

回答いただきありがとうございます。 この方法では、プルダウンの中から1つしか選ぶことができません。 C列で出てきた選択肢を複数選択できるようにしたいのです。 よろしくお願いいたします。

関連するQ&A

  • エクセル:セルに選択項目が入った選択ボックスをつけたい

    よく見出しのセルにフィルタをつけるとその列の項目を選択ボックスの中から選択きるようになりますが、見出し以外のセルに抽出先を指定してその部分の項目を選択する選択ボックスをつけたいと思うのですがどうやればいいのでしょうか?是非教えてください。宜しくお願いたします。

  • リストボックスの選択項目をテキストボックスへ

    リストボックス1の選択項目7項目を左列のテキストボックス10個のうち7個に反映するコードがわかりません。どなたかご教授のほどよろしくお願いします。

  • VBAリストボックスで複数選んだセルの値を転記

    ActiveXコントロールで、シート内に埋め込み作成したリストボックスを、複数選択できるようプロパティを設定しました。 選択した項目の一番左の数値を、同じシートのB列の一番最後のセルから1個ずつ順番に、転記をしていきたいのです。 ★B列10行目まで埋まっていた場合、  B列 11行目 ←リストボックスで選択した1つめ  B列 12行目 ←リストボックスで選択した2つめ  B列 13行目 ←リストボックスで選択した2つめ 下記ですと、再初に選択したもののみ、転記されてしまい、1個1個入れていくことは可能なのですが、せっかく複数選択できるのに…という状況です。 同様の質問を検索してみて、真似してみたりもしましたが、うまくいきません。また、どうしても埋め込みが良くて、ユーザーフォームを別で作成はしたくはないです。 プロパティとフォームの画像を添付します。 すいません、よろしくお願いします。 Private Sub CommandButton1_Click() Dim n As Integer, s As String With ListBox1 For i = 0 To .ListCount - 1 If .Selected(i) = True Then Cells(Rows.Count, 2).End(xlUp).Offset(1, 0) = .List(i) End If Next i End With End Sub

  • excel(エクセル)で、チェックボックス選択によりセルを埋めたい。

    初めて投稿します。 特定の項目を1日に最大200回ほどチェックします。 チェック回ごとに、チェックした内容が属する区分(番号)を 1つ選択するのですが、その区分が約100個ほどあります。 毎回その区分を全て記入するのも効率が悪いので 最初は入力規則のリスト選択で対応しようとしたのですが、 番号だけでは区分の内容の確認ができないため、結局番号+隣に書いてある内容もチェックしている状態です。 エクセルを使って、 チェック回    セルA     セルB    セルC No.1     直接記入 区分番号 選択ボタン No.2     直接記入 区分番号 選択ボタン ・ ・ ・ と言うシートがあって、 セルCの選択ボタンを押すと 区分の番号・内容が書かれている箇所に飛ぶ・もしくはそのリストをダイアログボックスか何かで表示させ、 そこで1つ区分をチェックすると、その区分の番号をセルBに入れたいです。 緊急度が高めでかなり時間を取られていて困っているので 申し訳ないのですがぜひ方法を教えてください。

  • excelで左のセル項目にあわせたプルダウンボックスを表示させたい

    EXCELで表を作成しておりますが何をつかっていいのか、わからなかったので教えてください!!excelは初心者であまりくわしくないです。 メーカーのセルに複数のメーカー名が記入されていてプルダウンで選べばアイテムの欄にそのメーカーのアイテムがならぶようにしたい。 メーカーのところは、入力規則でプルダウンで項目を選べるようにしています。 たとえばセルDでAというメーカーを選んだらとなりのセルEにはAのメーカー商品群、Bを選んだらBのメーカー商品群という形です。またそのふたつとなりのセル(となりのセルでもいいです)にはvlookupで参照させてそれぞれの商品価格を反映させたいのです 日付 お客様名 担当 メーカー アイテム 支払方法 税金 税抜合計 合計金額 2007/3/18 かきくけこ あああ プロビテメイム #VALUE! カード

  • エクセルVBAで複数選択できるように設定したリストボックスの、選択され

    エクセルVBAで複数選択できるように設定したリストボックスの、選択されている項目の数を取得する方法はないでしょうか?

  • リストボックスから複数行を選択し、その複数のデータをセルに入力したい

    Excel2003でマクロをつくっています。シートのB列を右クリックすると、リストボックスが表示され 任意1行を選択するとシートのB列、C列、D列のセルにデーターが入力されます。 Private Sub ListBox2_Click() With ListBox2 If .ListIndex = -1 Then MsgBox "項目を選択してくだい" Else ’シートが保護されていたら保護を解除 If ActiveSheet.ProtectContents = True Then ActiveSheet.Unprotect End If ActiveCell.Value = ListBox2.List(ListBox2.ListIndex, 0) ActiveCell.Offset(0, 1).Value = ListBox2.List(ListBox2.ListIndex, 1) ActiveCell.Offset(0, 2).Value = ListBox2.List(ListBox2.ListIndex, 2) ActiveSheet.Protect End If End With Unload UserForm3 End Sub このリストボックスから複数の行を選択し、シートのB列、C列、D列のセルにデーターを入力したいのですが、Multiselectプロパティを変更しても、一行のみしか入力できません。 上のコードをどうかえたらよろしいでしょうか。

  • テキストボックスの複数選択(その2)

    前回、ここで教えていただきました。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=1809271 リストボックスで複数選択をして、選択項目を 北海道、青森、新潟というふうに「、」で区切ってセルへ表示の仕方を質問しましたが A1のセルへ北海道 B1のセルは青森 C1のセルへ新潟というふうに表示させる方法を教えてください。 初心者ですので、解説も入れていただけると助かります。 よろしくお願いします。

  • セルのプルダウン項目

    Excelのセルにプルダウンで選択項目を表示させ、選択できるようにするにはどうしたらいいですか?

  • Excelのプルダウンについて

    プルダウンに条件を付けたいのですがやり方を教えていただければと思います。 具体的には添付の写真を参照お願いします。 勤務表の中で備考の列にプルダウンリストとして有給・特休・欠勤があります。 プルダウンの条件としては下記になります。 ①有給を選択すると有給を選択した行のC~Iの列が消去 ②欠勤を選択すると有給を選択した行のC~Iの列が消去 ③特休を選択すると特休を選択した行のIの項目が”食事:無”になる このような条件を付けることは可能でしょうか。わかる方、回答をお願いします。 ※マクロはNGです

専門家に質問してみよう