• ベストアンサー

エクセルでこんなこと出来ますか?

A1からB4までの8個のセルを使用しているとして、、、(A列はタイトル、B列は希望の項目を選択とします) B1で入力規則を使いA,B,Cと選べるようにすると、その下のB2,B3,B4での選択項目が変化するように。 例:A1項目、A2種類、A3大きさ、A4色とあったとした場合、B1でネコを選べば、B2ペルシャネコやチンチラ等が選べ、同時にB3では大、中、小、B4では白や黒が選べるのだが、B1で犬を選べば、B2ではハスキー、チワワワが選べ、同時にB3では特大、大、中、小、極小、B4では赤、黄色、緑が選べるといった具合に。 昔このようになったマクロ?を含んだ表を貰った事があるのですが、私にも出来ますか?詳しくないので分かりやすい説明だと助かります^^; よろしくお願いいたします。

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

  • ベストアンサー
回答No.4

VBAを使わずとも入力規則で出来ますよ。 名前を定義する事が必要です。 結論は エクセル技道場の 縦横可変範囲の名前定義でリスト http://www2.odn.ne.jp/excel/waza/validation.html#SEC5 ですが、 入力規則 http://www2.odn.ne.jp/excel/waza/validation.html ここから読み進んで行くと仕組みがわかります。

参考URL:
http://www2.odn.ne.jp/excel/index.html

その他の回答 (3)

  • web2525
  • ベストアンサー率42% (1219/2850)
回答No.3

IF文でいけるのでは? 入力規制の〔元の値〕に=IF($B$1="ネコ"、ネコの場合の選択肢、犬の場合の選択肢) これで問題ないと思います(マクロは使いません)

  • jindon
  • ベストアンサー率43% (50/116)
回答No.2

VBAよりもむしろ各参照範囲に範囲名を付けて、INDIRECT関数で制御するほうが後の拡張に便利かも... 例えば、 ネコの種類のリストに範囲名 種類ネコ を付ける。 B2の入力規則の元の値に =INDIRECT($A$2&$B$1) B1がネコの時、INDIRECTの中は 種類ネコ になりますね? 同様に 犬 の種類にも範囲名 種類犬 を付ける (同一範囲に別の名前を登録することもできますので、一つの範囲を別名で共有できます) B1が犬の時、INDIRECTの中は 種類犬 になりますね? といった具合に、INDIRECT関数の中身が 範囲名 になるようにしておけば良いのです。 次は 大きさネコ、大きさ犬・・・色ネコ、色犬・・・ 順次INDIRECT関数の中身を($A$3&$B$1),($A$4&$B$1) こうしておいた方が、後に項目、種類等が増えた場合に修正し易いと思います。 最初は少々面倒ですが、いずれにしても入力規則に範囲指定はしなくてはならないので手間は同じようなものですね。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

Bの列には、あらかじめ入力規則が設定してあり、 同じシートにリストすべき項目が入力されているとして Workbook の SheetChange イベントに以下の様に書きます。 Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) If Target.Address = "$B$1" Then If Target.Value = "ネコ" Then Range(Target.Offset(1, 0), Target.Offset(3, 0)).ClearContents With Target.Offset(1, 0).Validation '1コ下のドロップリスト .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="=$I$2:$I$4" '種類リストの範囲 .IgnoreBlank = True .InCellDropdown = True .ShowInput = True .ShowError = True End With With Target.Offset(2, 0).Validation '2コ下のドロップリスト .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="=$J$2:$J$4" '大きさリストの範囲 .IgnoreBlank = True .InCellDropdown = True .ShowInput = True .ShowError = True End With With Target.Offset(3, 0).Validation '3コ下のドロップリスト .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="=$k$2:$k$2" '色リストの範囲 .IgnoreBlank = True .InCellDropdown = True .ShowInput = True .ShowError = True End With End If If Target.Value = "犬" Then Range(Target.Offset(1, 0), Target.Offset(3, 0)).ClearContents With Target.Offset(1, 0).Validation '1コ下のドロップリスト .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="=$I$6:$I$9" '種類リストの範囲 .IgnoreBlank = True .InCellDropdown = True .ShowInput = True .ShowError = True End With With Target.Offset(2, 0).Validation '2コ下のドロップリスト .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="=$J$6:$J$10" '大きさリストの範囲 .IgnoreBlank = True .InCellDropdown = True .ShowInput = True .ShowError = True End With With Target.Offset(3, 0).Validation '3コ下のドロップリスト .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="=$K$6:$K$8" '色リストの範囲 .IgnoreBlank = True .InCellDropdown = True .ShowInput = True .ShowError = True End With End If End If End Sub

piyochun
質問者

お礼

ありがとうございます。 しかし、ちょっと難しすぎるというか、、、 「Workbook の SheetChange イベント」とはどこを指すのでしょうか?まずここで躓いてしまいました^^; どこの部分に書き込めばよいのでしょうか?

関連するQ&A

  • エクセルについて

    VLOOKUP関数で、プルダウンで選択されたものを返すことはできるのでしょうか? 「シート1」には100人分の名簿 「シート2」には10人分の名簿 「シート1」の「X列」に固有番号があり、「Y列」にはプルダウンで「大、中、小」の3つが選べるとします。 「シート2」の「A列」にVLOOKUP関数を組み込み、そこに固有番号を手入力することによって、「B列」に「シート1のY列」のプルダウンで選択された「大、中、小」のいずれかが自動で返ってくるようにしたいのです。 よろしくお願いします。

  • スプレッドシートやエクセルで

    A列=項目(大) B列=項目(小) で、それぞれプルダウンメニューを作成します A列に 食費 日用品 子ども費 小遣い 医療 とするとします A-1で「食費」を選んだら B-1では「野菜,果物,主食,肉・肉加工品,魚介,調味料・油.」 と出てくる(そのなかから選択) 同様に Aで「子ども」を選んだら Bで「学校月謝,学用品,塾・習い事,子ども雑費」 がでてくる(そのなかから選択) という仕組みは作れるでしょうか? プルダウンが無理でしたら、関数かなにか別の方法がないでしょうか

  • UWSCで文字列を検索する

    FireFoxでHTMLのセレクトメニューの中の文字列を認識してそこにカーソルを移動させる事は出来ますか? 画像認識は分かるのですが文字列の認識が分かりません。 ブラウザについている検索機能ではセレクトメニュー内の文字はヒットしませんでした。   文字認識が出来る場合やりたい事は セレクトメニューに「小」「中」「大」という3つの項目があります(この3つは消える事はない) --OKボタンを押して戻るボタンを押して元のページに戻ります-- これを繰り返しているとたまーに「特大」という項目が出現します 普段は「大」を選択しますが「特大」が出現した場合は「特大」を優先して選択する [1.セレクトメニュー右の▼を押して一覧を表示する 2.その中から「特大」を検索する 3.「特大」が見つからなければ「大」を検索してそこにカーソルを移動させる]   このような感じです

  • エクセルのデータベース関数について

     DSUMなどのデータベース関数の条件(クライテリア)の指定において,複数の条件を指定できるのでしょうか?  例えば,布について,フィールドに色(黒,白,赤,黄,緑),値段,大きさ(大,中,小)があるデータベースの中から,色が黒と白,大きさが大のものの値段の和を求める場合,セルに   A B 1 色 大きさ 2 黒 大 3 白  というような,クライテリアの指定ができるのでしょうか?このとおり指定しても,上手く計算されてこないのですが?Aで色を黒と白と複数指定できないのでしょうか?

  • エクセルの質問をさせて下さい!

    今、帳票を作成するのに行き詰ってしまっています・・・。 画像を添付しますが、ABC(D)EF列とあって、 A列は数字/B列はアルファベット(大)/C列はひらがな/D列はなし/E列は 記号(もしくは漢字など)+アルファベット(大)+ひらがな+アルファベット(小)/F列は 空欄となっています。 E列にある文字の中で、B列にある「アルファベット(大)」&C列にある「ひらがな」が 合致しているものは、F列にA列の数字を返す、、、という事をしたいのです。 ※実際はB列の「アルファベット」・C列の「ひらがな」のそれぞれも1文字ではなく前後に  漢字等が入っていたりしますが、合致するキーワードで抽出出来れば。。。 分かりづらくて申し訳ありませんが、検索データが多く困ってしまっています。 (一つずつ照らし合わせていくのも時間がかかってしまって・・・) 宜しくお願いします!!!

  • エクセルVBA 集計

    事情がありピボットテーブルを使用しないで実現したいです シート1のドロップダウンリストで集計したい項目を2つ選択(15項目中) 例えば、項目1が色、項目2が形と選択 シート2に500件程(数が増える)のデータがあり、シート3へ集計 (シート3)  A | B | C | D |・・・・・・ 1|色|数|形|数|・・・・・・ 2|赤|30|○|10| 3|青|20|△|20| 4|白|40|□|30| 5|黄|40| ・ ・ シート1で設定した項目1でシート3の1行目を参照し、合致したデータをシート4のA列、B列に貼り付け シート1で設定した項目2でシート3の1行目を参照し、合致したデータをシート4の1行目、2行目に貼り付け 数値は例えばC3なら赤で○のものを表示 (シート4)  A | B | C | D |・・・・・・ 1| |   形  |・・・・・ 2| | |○|△|□| 3| |赤|20|10|16| 4|色|青|10|15|23| 5| |白|14|15|35| 6| |黄|17|15|35| ・ ・ このような感じでシート4を作るVBAをご伝授ください。 シート1、シート2、シート3は出来ているので大丈夫です。 稚拙な説明ですいません。 よろしくお願いいたします。

  • エクセルの関数での処理方法

    下記のようなデーターベースがあります  列 A   B   C  D   E    F 行  4/1 4/10 4/20 1   青  100 青 1100 青 11000 2  黄色  200 黄色 1200 黄色 12000 3 緑  300 緑 1300 緑 13000 4  赤  400 赤 1400 赤 14000 5  紫  500 紫 1500 紫 15000 6  黒  600 黒 1600 黒 16000 7  白  700 白 1700 白 17000 8  茶  800 茶 1800 茶 18000 9  水色  900 水色 1900 水色 19000 10 朱色 1000 朱色 2000 朱色 20000 上の図では分かりにくいかも知れませんが、 A列には上から4/1、青、黄・・・ B列には上から空白、100、200・・・  C列には上から4/10、青、黄・・・ D列には上から空白、1000、2000・・・  E列には上から4/20、青、黄・・・ F列には上から空白、10000、20000・・・と並んでます。 4/1の項目は4/9までの値段 4/10の項目は4/19までの値段 4/20の項目は4/30までの値段になります。 4/5、4/10/、4/15、4/25の白の値段を調べるにはどのようにすればいいでしょうか? 4/5、4/10、4/15、4/25のそれぞれに VLOOKUP関数の式を入れて調べるんではなく ひとつの式を入れて調べる日付のセルの値だけが 変わるだけで 全部同じ式で反映されるようにしたいんですが・・・ できますか? VOOLUP関数やIF関数を組み合わせてやってるんですが うまくいきません。 それともマクロでないとできないですか? よろしくお願いします。

  • エクセルの使い方を教えてください

    下記のような表をエクセル2007で作成したいのですが、可能でしょうか。 (画像を参照ください) (1)エクセルのA1セルから、縦に0001、0002・・と昇順に数字を入力します(A1000セルまで)。 (2)エクセルのB1セルから、縦に2012/8/12(任意の日付)、2012/8/13・・と昇順に日付を入力します(B1000セルまで)。ただし、日付が欠けている場合もありますし、同じ日が続けて入力される場合もあります。 (3)毎週月曜日に、B列の日付がその1週間前の月曜から前日の日曜に該当する同じ行のA列のセルに自動的に色を付けます。例えば、今日が2012/8/20(月)としたら、B列の日付が2012/8/13(月)から2012/8/19(日)に該当する同じ行のA列のセルを自動的に黄色に塗りつぶします。そして、次の週の2012/8/27(月)が来たら、同様にB列の日付が2012/8/20(月)から2012/8/26(日)に該当する同じ行のA列のセルを自動的に黄色に塗りつぶします。そして次の週の月曜も同様です(以下、繰り返し)。 (4)作成したエクセルは毎日開きますが、次の月曜日が来るまでは、同じ場所に黄色が塗られた状態を維持します。例えば2012/8/21(火)~2012/8/26(日)に毎日エクセルを開いた時もB列の日付が2012/8/13(月)から2012/8/19(日)に該当する同じ行のA列のセルが自動的に黄色に塗りつぶされた状態を維持します。 いろいろ考えてはみたのですが、わかりませんでした。どうかお知恵をよろしくお願いいたします。 ●画像の文章が見づらいので、こちらに書いておきます (例) 2012/8/20(月)にB列が2012/8/13(月)~2012/8/19(日)に該当するA列の0002~0008が自動的に黄色に塗りつぶされる。2012/8/21(火)~2012/8/26(日)の毎日このエクセルを開いても0002~0008が黄色に塗りつぶされた状態が維持される。           ↓ 2012/8/27(月)にB列が2012/8/20(月)~2012/8/26(日)に該当するA列の0009~0015が自動的に黄色に塗りつぶされる。 2012/8/28(火)~2012/9/2(日)の毎日このエクセルを開いても0009~0015が黄色に塗りつぶされた状態が維持される。 (以下、月曜日毎に繰り返し)

  • エクセルにて

    A列には日付が入力してあります。(2001/7/17) その日付から3日間経過してもC列のその行に何も入力されなければ、 B列のそのセルを黄色に表示する。 更に7日間経過しても入力なければ赤に表示するようにしたいのですが!? C列に入力されればB列のそのセルは青色表示にしたいのですが!     A      B     C 1 2000/7/10   赤 2 2000/7/11   青   2001/7/16 2 2001/7/13   黄   

  • エクセル2000で教えて下さい。

    エクセル2000で 例えばシート1の A5、B5、C5、D5、E5に数値なり文字なりが入っているとして C5には「大」「中」「小」のいずれかが入るとします。 大が入った場合は シート2にのA~Eにそれぞれ同じものがコピーされて入り、中、又は小が入った場合は シート3のA~Eに同じものが入るようにしたいのですが、どうすれば良いの でしょう? シート2とシート3のスタートは5行目からで上から詰めた状態に入れていきたいのです。 さらに可能であれば例えばシート1のC5に大が入ったとしてシート1のA~Eの中でCDEのみを シート2へそれぞれC→E、D→C、E→A のように反映させる事は可能ですか?

専門家に質問してみよう