• 締切済み

単一セル内に3段階プルダウンを作成したい

お疲れ様です。 単一セル内に3段階プルダウンを作成したいのです。 大、中、小としてまず大の名前をつけ連動させたい中に大の名前をつけて、連動させたい小に大中と名前をつける。 適切に名前を設定した後、入力規則で =if(A2="" indirect("大",indirect(A2)) を入れると2段階は出来るのですが、3段階は出来ません。エクセル初心者なので、3段階用の入力式を教えて下さい。よろしくお願いします。

みんなの回答

  • HohoPapa
  • ベストアンサー率65% (455/693)
回答No.7

>元の値: =OFFSET(分類!B$1,MATCH(A2,分類!F:F,0)-1,,COUNTIFS(分類!B:B,"?*",分類!F:F,A2))】が >エラーになってしまいます。 私の提案は、 入力規則、設定タブの入力値の種類でリストを選択したときの 元の値に埋める計算式は以下です。 =IF(A2="",INDIRECT("大"),INDIRECT(A2))

  • HohoPapa
  • ベストアンサー率65% (455/693)
回答No.6

>単一セル内に3段階プルダウン というのは、次のような動作を期待していますか? ・A2が空欄なら、A2の候補群に大分類を表示 ・大分類が選択されている場合は、   その中分類を候補群に表示 ・中分類が選択されている場合は、   その小分類を候補群に表示 であれば、添付画像のように範囲名を設定すればイケると思います。 色付けしたセルが範囲名です。 いかがでしょうか? なお、弘前を選択後、沼田に変更したい場合は A2のセルをいったん空に変更し、 大分類、中分類、小分類と選択しなおす必要があります。 あるいは、 中分類の候補群に大分類の候補群たちを 小分類の候補群に中分類の候補群たちを加えることが考えられます。 これらを避けたいのであれば、 VBAを持ち込む必要があります。

BELtoROSHE
質問者

お礼

お忙しい中ありがとうございました。 なかなか試す時間が取れず、ようやく本日試してみましたが、【B2: データの入力規則、リスト 元の値: =OFFSET(分類!B$1,MATCH(A2,分類!F:F,0)-1,,COUNTIFS(分類!B:B,"?*",分類!F:F,A2))】がエラーになってしまいます。 また時間を作って試してみたいと思います。

  • SI299792
  • ベストアンサー率47% (774/1618)
回答No.5

「分類」シートを作ります F~H列にプルダウン用データを入力します A~E列をワークエリアに使います。 A2: =IFERROR(VLOOKUP(ROW()-1,D:F,3,0),"") B2: =IFERROR(VLOOKUP(ROW()-1,E:G,3,0),"") C2: =F2&G2 D2: =D1+(F1<>F2) E2: =IF(F1<>F2,ROW()-1,E1+(G1<>G2)) 纏めて下へコピペ。 プルダウンシート A2: データの入力規則、リスト 元の値: =OFFSET(分類!$A$2,,,MATCH("",分類!A:A,0)-2) B2: データの入力規則、リスト 元の値: =OFFSET(分類!B$1,MATCH(A2,分類!F:F,0)-1,,COUNTIFS(分類!B:B,"?*",分類!F:F,A2)) C2: データの入力規則、リスト 元の値: =OFFSET(分類!$H$1,MATCH(A2&B2,分類!C:C,0)-1,,COUNTIF(分類!C:C,A2&B2))

BELtoROSHE
質問者

補足

ご教示ありがとうございました。 A2: データの入力規則、リスト B2: データの入力規則、リスト C2: データの入力規則、リスト とは単一セルではなくて3列3段階プルダウンでしょうか。よろしくお願いします。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

#3です。 書き洩らしました。大分類のアイテムの設定だけは、 手動で設定してください。私の例では、 「全般」シートのA列で データー入力規則ー元の値で、「東京、千葉、神奈川」に設定してください。 B,C列は、出てきたリストから選択します。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

#1の補足を頂きましたが、当たり前(予想通り)だと思います。 本件全体が、WEB照会もやってなくて、質問しているようだ。 ーー その後、本件でVBAでもできないか、と思ったので、やって見た。 無駄だと思うが、一応紹介する。 でも (1)VBAは未経験、会社として使えない。 (2)推測でモデル例を考えたが、応用できるかどうかもわからない。   この質問以は解決のタイプだけ書いてあるだけ。会社の内情を出したくないのだろうが。   だから、例データは、推測になった。当面の問題では、もっと複雑で使えないかも。 (3)大・中の中間選択結果はシートの列に持つ。省けない。 (4)VBAコードも、イベントなどを使ったりして、すっきりしないが、他のやり方を知らない。 (5)選択肢が各々20程度以下なら使えると思うが、何十、何百になれば、使いずらいだろう。    そういう場合は、エクセル向けの課題ではないと言いたい。専門家に頼むしかない。   VBAでやるとすれば、巧拙は別として、およその行数がわかるだろう。 ーー 住所を県、市、町名を順次コンボで入力者が選択して決める例にした。 シートは、全般、県内市名、県別ー市別ー町名リスト(対象とする県の数だけ複数・個別)作る。 全般シート  ==>完成後のデータ状況。作業のスタート時点最初は空白です。 県名 市名 町名 東京 三鷹市 井口 千葉 千葉市 赤井町 東京 三鷹市 下連雀 神奈川 熱海市 伊豆山 千葉 浦安市 北栄 千葉 浦安市 当代島 神奈川 川崎市 浅野町 千葉 浦安市 当代島 (県別の)市名シート 1列1県 東京 千葉 神奈川 武蔵野市 千葉市 横浜市 三鷹市 浦安市 鎌倉市 調布市 柏市 川崎市 国分寺市 熱海市 東京都シート 1都市1列 武蔵野市 三鷹市 調布市 国分寺市 吉祥寺 下連雀 入間町 泉町 吉祥寺北町 井口 菊野台 北町 吉祥寺東町 新川 国領町 吉祥寺南町 小島町 御殿山 佐須町 柴崎 下石原 深大寺東町 千葉県シート 千葉市 浦安市 柏市 青葉町 猫実 青葉台 赤井町 当代島 旭町 北栄 市場町 堀江 稲荷町 富士見 亥鼻 神奈川県シート 横浜市 鎌倉市 川崎市 熱海市 青葉台 稲村ケ崎 浅田 熱海 市ヶ尾 岩瀬 浅野町 伊豆山 旭町1・2丁目 池上新町 池上町 を前もって作っておく。 VBA 主題は、エクセルの、入力規則ーリストの利用を自動化している点です。 VBEのSheet1(全般)のシートモジュールに下記のコードを作る。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Not Intersect(Target, Worksheets("全般").Range("B2:B10")) Is Nothing Then Target.Validation.Delete MsgBox Target.Offset(0, -1) clm = Worksheets("市名").Range("A1:F1").Find(Target.Offset(0, -1)).Column MsgBox clm dt = "" For Each cl In Worksheets("市名").Range(Worksheets("市名").Cells(2, clm), Worksheets("市名").Cells(10, clm)) dt = dt & "," & cl Next Target.Validation.Add Type:=xlValidateList, Formula1:=dt End If '=== If Not Intersect(Target, Worksheets("全般").Range("C2:C10")) Is Nothing Then Target.Validation.Delete ken = Target.Offset(0, -2) city = Target.Offset(0, -1) MsgBox ken & "=" & city Set clm = Worksheets(ken).Range("A1:F1").Find(city) MsgBox clm.Column clmc = clm.Column dt = "" For Each cl In Worksheets(ken).Range(Worksheets(ken).Cells(2, clmc), Worksheets(ken).Cells(10, clmc)) dt = dt & "," & cl Next Target.Validation.Add Type:=xlValidateList, Formula1:=dt End If End Sub テストが終われば、不要と思えば、MsgBoxの部分は削除する。

BELtoROSHE
質問者

お礼

ご教示ありがとうございました。 難しそうではありますが、試してみたいと思います。

  • SI299792
  • ベストアンサー率47% (774/1618)
回答No.2

プルダウン元をどう並べるかて作り方が変わります。 前に2種類作ったものをとりあえず上げます。 https://1drv.ms/x/s!AnfEM367OeSdjUZjjE3CCiG0IrOi?e=uZnqBc https://1drv.ms/x/s!AnfEM367OeSdjUXreZXb2Oj7oP7Q?e=0ilhnx どっちがいいか変身していただければ、説明します。 また、どのようにデータが並んでいるか説明していただければ、それに合わせます。

BELtoROSHE
質問者

補足

回答ありがとうございます! 3段縦に並べています。 よろしくお願いいたします。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.1

エクセルの話だろう。エクセル関数では中間作業データの保存がうまく行かないので、大中の中間結果を保持するセル(列)が必要だろう。 ー 元々この課題は、データベースソフト(アクセスや、SQL(大と中の2条件検索)など)を使い、プログラムの中の変数で、大区分、中区分を保持して(2条件にして)、それらを使って小区分を出すような課題と思う。 ーー 2次元の表を引くとすれば、3段階が最大だろう。 まず大区分で行をきめ(探し)、中区分で列を探すと言った仕組かな。 表が膨大になる恐れはある。出来てもキワモノになるだろう。 ーー 「入力規則」では、そこまでは、予想してない仕組みだろう。 ただし「入力規則 3段階」「プルダウン 3段階」で照会してみたか?多数の記事があることはある。たまに質問が出る。

BELtoROSHE
質問者

補足

ご回答ありがとうございます。 「入力規則 3段階」「プルダウン 3段階」で照会しましたが、いずれも3列に3段階のようです。 今回は1列1つのセルで完結させたいので、見つける事が出来ませんでした。

関連するQ&A