- ベストアンサー
エクセルで2段階コンボボックスを作成
エクセルのシート上にコンボボックスを2つ作成して Aのコンボボックスの内容を選択するとBのコンボボックスの値が変わるというものを作成したいです。 エクセルのプルダウンで最初は考えていましたが、プルダウンだと三角の矢印が常に表示されない為あきらめました。 なのでコンボボックスの作成の仕方を教えて下さい。 例として野菜とくだものをあげます コンボボックスAで選択するもの→ 野菜、くだもの コンボボックスBで選択するもの→ 【野菜の場合】キャベツ、にんじん、トマト 【くだものの場合」バナナ、りんご、みかん 以上です。よろしくお願いいたします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
(全2葉、その2) ===== 'ボタン'設定手順■ 1、(既述の準備手順で)[リスト]を設定したSheet1の2つのセル を、同時に #セル範囲選択# 2、Excelウィンドウ下部の[シートタブ]にて[Sheet1]タブを右クリック→[コードの表示] 表示された画面上、の最も大きな子ウィンドウ(空白)に 以下の記述(<この下の行から>~<この上の行まで>)を コピーして貼付け ' ' ===== <この下の行から> ===== Private Sub okw8930355() Dim c As Range Dim oCB As OLEObject Dim dummy As Long For Each c In Selection dummy = 0 On Error Resume Next dummy = c.Validation.AlertStyle On Error GoTo 0 If dummy <> 0 Then With c(1, 2) Set oCB = Me.OLEObjects.Add(ClassType:="Forms.CommandButton.1", _ Link:=False, DisplayAsIcon:=False, _ Left:=.Left - 0.5, Top:=.Top + .Height - 13.5, _ Width:=13.5, Height:=13.5) End With oCB.PrintObject = False With oCB.Object .Font.Size = 4 .Caption = "▼" .TakeFocusOnClick = False End With Debug.Print sScript(oCB.Name) End If Next Set oCB = Nothing End Sub Private Function sScript(Cname As String) As String ' okw8930355 sScript = "Private Sub " & Cname & "_Click()" & vbLf sScript = sScript & vbTab & Cname & ".TopLeftCell.Select" & vbLf sScript = sScript & vbTab & "Application.SendKeys ""%{DOWN}""" & vbLf sScript = sScript & "End Sub" & vbLf End Function ' ' ===== <この上の行まで> ===== 3、手順2で貼り付けされた子ウィンドウ上のテキストの dummy = 0 辺りの行を適当にクリックしてから、[F5]キーを押す。 →'ボタン'の配置が済み、VBAコード生成が済み (手順1が出来ていなければ、何も起こりません) 4、[Ctrl]+[G]キーを同時に押す [イミディエイト]ウィンドウが表示される(アクティブになる)ので そのまま、[Ctrl]+[A]キーを同時に押す→[イミディエイト]全選択状態 そのまま、[Ctrl]+[C]キーを同時に押す→[イミディエイト]テキスト全コピー状態 5、手順2で貼り付けてあった最も大きな子ウィンドウのテキスト上を適当にクリック そのまま、[Ctrl]+[A]キーを同時に押す→子ウィンドウ全選択状態 そのまま、[DEL]キーを押す→手順2で貼り付けた子ウィンドウ上のテキスト全消去 そのまま、[Ctrl]+[V]キーを同時に押す→[イミディエイト]テキストを子ウィンドウに 6、貼付けられた内容を確認 ' ' ============================ Private Sub CommandButton1_Click() CommandButton1.TopLeftCell.Select Application.SendKeys "%{DOWN}", True End Sub ' ' ============================ 以上の記述の数字部分だけが違うものが2つ VBA編集画面の最も大きな子ウィンドウに。貼付けられていればOK 7、[Alt]+[F11]キーを同時に押す→Excel画面に戻る 8、シート上で実際に'ボタン'を押して[リスト]が表示されるか挙動を確認 9、ブックを[名前を付けて保存] 必ず、 [ファイルの種類]で [Excel マクロ有効ブック(*.xlsm)]を選択して 保存する 以上で、'ボタン'設定手順■完了 以上で、すべての手順完了 ===== 全23ステップになりましたが、 ひとつひとつの手順を確認しながら、今何をしているのか意識しながら、 実戦にも応用出来るようにしてください。 '元テーブル'については、上記の例では各項目最大20件まで追加可能で、 各行(データ)数に応じて[リスト]のサイズが自動的に最適化されます。 こういうことをプログラム無しで実現できるのが、 [データの入力規則][リスト]の便利な処で最大のメリットです。 (コンボボックスではVBAに頼るしかありませんので。) 以下、その他のメンテについて参考にしてください。 ===== 'ボタン'調整方法■ 1、[リスト]を設定していないセルを #セル範囲選択# 2、[Alt]+[F11]キーを同時に押す 表示されたVBA編集画面 上部ツールバー [デザインモード]アイコン(三角定規+ペン のアイコン)を押す。 [デザインモード]ボタンを押す度に、(アイコン表示が凸→←凹切り替わり) [デザインモード]→←[実行モード]が切り替わります。 [デザインモード]中の'ボタン'は、クリックしてもボタンとして機能せず、 各種設定や位置、サイズ等の変更が可能になります。 調整が済んだら[デザインモード]を終えて'ボタン'機能回復させることも忘れずに。 3、[Alt]+[F11]キーを同時に押す→Excel画面に戻り 調整したい'ボタン'をクリックして選択状態にする →調整 位置やサイズの調整は、[方向]ボタンやマウスをドラッグすることで可能です。 微調整やその他各種設定については 'ボタン'を右クリック→[プロパティ]を表示して行います。 4、[Alt]+[F11]キーを同時に押す 表示されたVBA編集画面 上部ツールバー [デザインモード]アイコン(三角定規とペン様のアイコン)を押す。 5、[Alt]+[F11]キーを同時に押す→Excel画面に戻る。 →'ボタン'機能回復 以上で、'ボタン'調整方法■完了 ※[リスト]のセルに'ボタン'(の左上端)が 少しだけ掛かるような位置に配置していますが この関係を維持しないと、正しく機能しなくなります。 列幅の変更や'ボタン'位置の調整時には注意して、必要なら再調整を。 ===== 結構な手数で大変でしょうけれど、頑張ってください。 一通りできるようになったら、また新たな仕様要求が出てくるかも知れませんし、 場合によっては仕様に不満が出てくることもあるかも知れません。 それらへの手だては必ずVBAによるものになりますから、 先を急がず、今出来る事を確かにすることを優先させるようにしてください。 手順中に不明な点や困ったことでもあれば、補足にはお応えします。 ===== 以上です。 (全2葉、以上完結)
その他の回答 (3)
- real beatin(@realbeatin)
- ベストアンサー率82% (174/211)
(全2葉、その1) こんにちは。 ニーズを整理すると ●1●2つの選択リストを用意して、 1つめの選択リストでの選択に応じて、 2つめの選択リスト内容を、変更したい ●2●2つの選択リストに共通して、 常に[ドロップダウンボタン]が表示されている状態を維持したい。 以上の2点が実現出来れば十分で、方法は選ばない、と理解しています。 ===== > ...コンボボックスの作成の仕方を教えて下さい。 コンボボックスは、扱った経験が全く無い?ということだと思いますが、 初めて扱うにしては、今回の課題では、高度な応用力を求められますから、 覚えなければならないことが多過ぎて、かなりの困難が予想されます。 ご質問を読んだ印象では、きっと簡単に出来るものと思っていたのしょう。 [データの入力規則][リスト]とは大きく違い、 <最初に'元テーブル'範囲や数式を設定しておけば済む>ような 簡単なものではありません。 手順を尽くして実現できたとしても、自力でメンテ出来ないことには、 困った時に適切な手助けを授けてくれる人に出会える確率も低いです。 「自力で実現する」為には「何を勉強すればいいですか?」 というような質問だったなら、応えてくれる人は沢山いたと思います。 [ActiveXコントロール]や[VBA(マクロ)]の扱いについて、 入門から初級レベルのことを一通りクリアしないと難しいでしょう。 コンボボックスをシート上に配置することだけなら簡単ですが、 リストを設定したり、それを運用するシステムを、 デザインしてプログラム書いてメンテして、、、 という全体的な取組みが難しいのです。 一度に一から教える、ということも難しい、というより無理が求められます。 それでも実現したい、という強い意思をお持ちなら、 提供して貰うのでなく、学習をサポートして貰う、という主旨で、 改めて質問し直してみたら宜しいかと思います。 その際には、「どこまで出来ていて」「何を知るべきか」 ご自身でも整理した上で他人にも伝えられるように努めてみてください。 ここではコンボボックスに代る案を提示します。 ===== > エクセルのプルダウンで最初は考えていましたが、プルダウンだと三角の矢印が常に表示されない為あきらめました。 ということは、 「プルダウン」(以下、[データの入力規則][リスト]を略して[リスト]) を使った方法では、 ●1●は出来ている。 ●2●が出来ないから不採用にした。 というのが、現在の状況ですね? [データの入力規則][リスト]の[ドロップダウンボタン]を 常に表示しているように見せる疑似的な方法で●2●を実現するのが 現状から考えられる中で最も簡単な方法です。 以下、内容、やり方、手順、メンテ方法を説明します。 ===== 設計■ ・[リスト]の[ドロップダウンボタン]に 位置とサイズを合わせた [ActiveXコントロール]の[コマンドボタン] (以下、略して'ボタン') を配置する(なるべく外観も似せたものにする)。 ・'ボタン'を押すと、[リスト]を設定したセルが選択され 続けて[リスト]が表示される (2度目に押した時は[リスト]が非表示になり [リスト]の[ドロップダウンボタン]が最前面に表示される) ようにマクロを設定しておく。 ===== Excelを普通に知っていれば解る表現で、必要最低限、過不足ない短い手順 を、目指して書き上げています。 以下の手順はサンプルとして、 新しいブックで、 ひとつひとつの手順を確認しながら、 ただ手順に書かれていることだけを 書かれている通りに進めるようにしてください。 ※書き終えた後で手順を2回実践して確認しています。 ※こちらで手順を確認する為に試した環境は、Win7xl2010x64です。 他の環境では、当然、各種タブや項目に付いた名前等が異なります。 ===== Sheet1のA1に 1つめの[リスト] Sheet1のどこかのセルに 2つめの[リスト](リスト変動) Sheet2のA1:C21に '元テーブル' という構成です。 準備■ ・●1●'元テーブル'の[名前の定義]と[データの入力規則][リスト]を構築 <準備手順> 1、添付画像と同等の'元テーブル'を作成する。 (Sheet2にて。A1:C1=分類項目、A2:A21、B2:B21、C2:C21、に各テーブル) 2、Sheet2のA1:C1(分類項目{野菜,くだもの,肉})#セル範囲選択# 3、[数式]タブ→[名前の定義] [新しい名前]ダイアログが表示されたら [名前]欄に 分類 と入力 [OK] 4、Sheet2のA2:A21(野菜テーブル、追加用のセルを含めて大き目に)#セル範囲選択# 5、[数式]タブ→[名前の定義] [新しい名前]ダイアログが表示されたら [名前]欄に 野菜 と入力 [OK] 6、Sheet2のB2:B21(くだものテーブル、追加用のセルを含めて大き目に)#セル範囲選択# 7、[数式]タブ→[名前の定義] [新しい名前]ダイアログが表示されたら [名前]欄に くだもの と入力 [OK] 8、Sheet2のC2:C21(肉テーブル、追加用のセルを含めて大き目に)#セル範囲選択# 9、[数式]タブ→[名前の定義] [新しい名前]ダイアログが表示されたら [名前]欄に 肉 と入力 [OK] 以上で'元テーブル'範囲の[名前の定義]完了 10、1つめの[リスト]を設定するセル(Sheet1のA1)を#セル範囲選択# 11、[データ]タブ→[データの入力規則]→[データの入力規則] [データの入力規則]ダイアログ[設定]タブが表示されたら [入力値の種類]欄にて [リスト]を選択 表示された[元の値]欄に =分類 と入力(イコールを必ず付ける!) [OK] →実際にA1で適当な分類項目{野菜,くだもの,肉}を選択して表示しておく 12、2つめの[リスト]を設定するセル(Sheet1のセルならどこでもいい)を#セル範囲を選択# 13、[データ]タブ→[データの入力規則]→[データの入力規則] [データの入力規則]ダイアログ[設定]タブが表示されたら [入力値の種類]欄にて [リスト]を選択 表示された[元の値]欄に =OFFSET(INDIRECT($A$1),0,0,COUNTA(INDIRECT($A$1))) と入力(この数式の$A$1は、1つめの[リスト]を設定したセルを指す) [OK] 14、以後、列幅を変更すると'ボタン'がズレて調整に一手間掛かるので、 事前に、'ボタン'表示がセル表示の邪魔にならないように 列幅や文字の横配置を調整しておく 以上で[リスト]設定完了 以上で、準備■完了 (全2葉、次の投稿へつづく)
- mshr1962
- ベストアンサー率39% (7417/18945)
Bの内容を =INDIRECT(Aのセル座標) とすれば出来ます。 詳細は下記URLを参照 ・エクセルのプルダウンリストで選択した値に対して、別のプルダウンリストを連動させる方法 http://www.excelist.net/faq/10.html
- aokii
- ベストアンサー率23% (5210/22062)
データセルに名前を付けてみてください。
補足
基本的な設定などはエクセルのプルダウンと同じなのでしょうか? 設定の仕方自体がわからないのです。 よろしくお願いいたします。
お礼
試してみました。 私はできましたが、実際にはこのエクセルを多数の方が使用する為、VBAの使用はあきらめることにしました。 本当に丁寧に一から教えていただきありがとうございました。