都道府県穴埋めゲーム

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

添付のようなイメージのものを作成したいと考えています。
B列はプルダウンで選べる様になっており、B列の内容により、C列の選択肢を変更
したいのです。
ちなみに、今C列はリストボックスになっていますが、チェックボックスなど、
リストから複数選べるようになれば問題ありません。

このようなものは、VBAなどを組まないとできないのでしょうか。

よろしくお願いいたします。

「excelで左のセル項目にあわせた複数選」の質問画像

A 回答 (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
「excelで左のセル項目にあわせた複数選」の回答画像7
    • good
    • 0
この回答へのお礼

いろいろと考えて頂きありがとうございます。

今回は、B列の項目により、入力させたいセルの色を変えて、
チェックボックスにチェックを入れるような形で、勧めようと
思います。

使用者から使いづらいという声があったら、改修をかけようと思いますので、
その際、またこちらでお世話になりましたら、よろしくお願いいたします。

お礼日時:2010/01/26 13:05

>10~20個ほどの量となるため、なるべく一行で収めたかったのです



一行であれば、列は複数でも良いのでしょうか?

C列から右に商品名を並べておき、
セル毎にチェックBOXを貼り付けておく..とか
商品名をダブルクリックすると色が変わるマクロを設定しておく..とか
    • good
    • 0
この回答へのお礼

ありがとうございます。
ご教示いただいた内容は私の方でも考えついた内容となります。

他に方法がありましたらご教示いただけると幸いです。

お礼日時:2010/01/26 13:01

こんにちわぁ



入力規制では複数選択ができないので、別の方法を。
ちなみに、動作確認は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」に変更してみてください。

この回答への補足

こんにちは。ご回答いただきありがとうございます。

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

以上、よろしくお願いいたします。。

補足日時:2010/01/25 17:24
    • good
    • 0

>各店舗最大で8こ選ぶことができるようにしたいです。


>セルの行数を各店1行でなんとかしたいのですが

これについて、もっと詳しい説明が必要です
選んだ後、8個商品をどうするのか?..
選んだ結果のイメージを示してください

この回答への補足

ご回答いただきありがとうございます。

実際使用する項目は商品名ではありません。
わかりやすくするために、上げておりました。

内容としては、依頼者に商品最大8個を選んだのち、
それを元に別の管理ツールに入力するためのメモみたいなものです。

依頼者が依頼してくる数は、店名や商品名の組み合わせにより、
10~20個ほどの量となるため、なるべく一行で収めたかったのです。

この説明でわかるでしょうか。

選んだ結果のイメージとしては、「選べていればいい」という状態になります。
そこからデータを加工して何かをするわけではありません。

よろしくお願いいたします。

補足日時:2010/01/25 17:06
    • good
    • 0

こんにちは!


B列の入力規則でリストはちゃんと表示出来ているとしての方法です。
当方使用のEXCEL2003の場合ですが、

まず、「八百屋」のリスト候補にしたい品目(りんご・ばなな・もも・・・等々)を範囲指定
→ メニュー → 挿入 → 名前 → 名前定義 で「八百屋」と名前定義します。
同様に「さかなや」のリスト候補にしたいものを範囲指定 → 「さかなや」 と名前定義

他にも業種がある場合は同様にすべて名前定義しておきます。
(範囲指定した後に、名前ボックスに直接入力しても構いません)

そして、C列のリスト表示させたいセル(C2以降)を範囲指定し、
メニュー → データ → 入力規則 → リスト から
「元の値」の欄に
=INDIRECT(B2) として完了です。

これでB列でリスト表示させたものがC列のリスト表示の候補になります。

以上、長々と書きましたが、参考になれば幸いです。m(__)m

この回答への補足

ご回答いただきありがとうございます。

上記方法では、1つしか選択することができず、
複数選択させるとなると、行を大幅に使ってしまいます。

1行で複数個を選択したいのです。

よろしくお願いいたします。

補足日時:2010/01/22 14:10
    • good
    • 1

も少し補足が必要でしょう。



例えば
各店に対して選択できる商品の最大数はいくつでしょうか。
これにより、各店のセルの高さが変ってきますが、それは考慮されてますか?
八百屋では3つ選択し、さかなやでは、10選択した場合など。

もし、各店の最大商品選択数が、”同じ”なら、以下の方法もありかと。
各店とも商品選択最大数が”5つ”だとした場合

各店ごとに、5行ずつ使う
八百屋は、 2~6行
さかなやは、7~11行
  以下同様

こうすると、商品のセルは、
 B2~B6
 B7~B11
となるので、
それぞれに、入力規則を設定すると
各店ごとに、5つの商品を選択できることになる

以上です。
 

この回答への補足

回答いただきありがとうございます。

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

よろしくお願いいたします。

補足日時:2010/01/22 14:08
    • good
    • 0

http://oshiete.coneco.net/qa1892891.html

過去に同じ質問が何度も有ります

参考
http://officetanaka.net/excel/function/tips/tips …

このサイトの中ほどに有る、「[元の値]を動的に変化させる」という項目にも詳しく解説されています

この回答への補足

回答いただきありがとうございます。
この方法では、プルダウンの中から1つしか選ぶことができません。

C列で出てきた選択肢を複数選択できるようにしたいのです。

よろしくお願いいたします。

補足日時:2010/01/22 13:00
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報