• 締切済み

エクセルのことで困っています!

エクセル 項目、サイズ、種類のドロップダウンリストを連動させて尚且つドロップダウンリストを選択した時に単価が自動で出るようにしたいです 添付した画像を見て頂けると分かりやすいと思います。 sheet1の項目にsheet2の配管用炭素鋼鋼管と水道用硬質化塩化ビニルライニング鋼管 sheet1のサイズは項目のリストを選択した時にサイズのリストの内容が項目別に変わるようにしたいです sheet1の種類も同じく項目のリストを選択した時に種類のリストの内容が項目別に変わるようにしたいです さらにそのリストで選択した時に単価が自動ででてくるようにしたいのです 色々自分でも調べたのですが、エクセルはどうも疎くてなかなかわからずどうしたらいいか分かりません どなたか分かる方いい方法があるよという方教えて頂けないでしょうか

みんなの回答

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.3

 以下の様な操作を行って、Sheet1のA2~D2の各セルに入力規則を設定し、D2セルとF2セルには関数を入力されると良いと思います。  尚、B2セルやC2セルに設定する下記の入力規則は、A2セルに何も入力されていない場合や、コピー&ペーストを使ってA2セルに正しくない値が入力されている場合には、ドロップダウンリストが現れない様になっています。  まず、A2セルの入力規則の設定方法は以下の様なものになります。 A2セルを選択   ↓ Excelウィンドウの上の方に並んでいるタブの中から[データ]タブを選択してクリック   ↓ 現れた「データツール」グループの中にある[データの入力規則]ボタンをクリック   ↓ 現れた選択肢の中にある[データの入力規則]を選択してクリック   ↓ 現れた「データの入力規則」ダイアログボックスの[設定]タブをクリック   ↓ 現れた「入力値の種類」欄をクリック   ↓ 現れた選択肢の中にある[リスト]を選択してクリック   ↓ 現れた「元の値」欄に次の様に入力 配管用炭素鋼配管,水道用硬質化塩化ビニルライニング鋼管   ↓ 現れた「データの入力規則」ダイアログボックスの[OK]ボタンをクリック  次に、B2セルの入力規則を設定する前に、A2セルをクリックし、現れた選択肢の中のどれでも構いませんので、どれか1つを選択してクリックして下さい。  その上でA2セルに対して入力規則を設定した時と同様の操作を行って、「元の値」欄に入力する内容のみを次の様な数式とした上で、B2セルにも入力規則を設定して下さい。 =IF($A2=Sheet2!$A$1,Sheet2!$A$3:$A$20,IF($A2=Sheet2!$G$1,Sheet2!$G$3:$G$13,))  次に、C2セルの入力規則を設定する前に、A2セルをクリックし、現れた選択肢の中のどれでも構いませんので、どれか1つを選択してクリックして下さい。  その上でA2セルに対して入力規則を設定した時と同様の操作を行って、「元の値」欄に入力する内容のみを次の様な数式とした上で、C2セルにも入力規則を設定して下さい。 =IF($A2=Sheet2!$A$1,Sheet2!$B$2:$F$2,IF($A2=Sheet2!$G$1,Sheet2!$H$2:$J$2,))  次に、D2セルに次の様な関数を入力して下さい。 =IF(OR($A2="",$B2="",$C2=""),"",IF(ISERROR(1/(VLOOKUP($B2,CHOOSE(MATCH($A2,{"配管用炭素鋼配管","水道用硬質化塩化ビニルライニング鋼管"},0),Sheet2!$A$3:$F$20,Sheet2!$G$3:$J$20),MATCH($C2,CHOOSE(MATCH($A2,{"配管用炭素鋼配管","水道用硬質化塩化ビニルライニング鋼管"},0),Sheet2!$A$2:$F$2,Sheet2!$G$2:$J$2),0),FALSE)<>"")),"",VLOOKUP($B2,CHOOSE(MATCH($A2,{"配管用炭素鋼配管","水道用硬質化塩化ビニルライニング鋼管"},0),Sheet2!$A$3:$F$20,Sheet2!$G$3:$J$20),MATCH($C2,CHOOSE(MATCH($A2,{"配管用炭素鋼配管","水道用硬質化塩化ビニルライニング鋼管"},0),Sheet2!$A$2:$F$2,Sheet2!$G$2:$J$2),0),FALSE)))  次に、F2セルに次の様な関数を入力して下さい。 =IF(COUNT($D2,$E2)=2,ROUND($D2*$E2,0),"")  以上です。  尚、いくら入力規則を設定しているとはいえ、例えば、A2セルに一旦「水道用硬質化塩化ビニルライニング鋼管」と入力しておいてから、C2セルには「VB」と入力した後、A2セルの値を「配管用炭素鋼配管」に変更した場合、「配管用炭素鋼配管」には「VB」が存在しないにもかかわらず、入力だけは行う事が出来てしまいます。  その様な場合、もしもD2セルに入力する関数が単純なVLOOKUP関数であった場合には、入力値が「配管用炭素鋼配管」の「VB」という誤った設定値であるのにもかかわらず、あたかもその様な製品が存在するかの様に、単価が表示されてしまいます。  その様な事態になる事を防ぐために、本回答ではD2セルに入力する関数を少々複雑なものとしています。

  • bunjii
  • ベストアンサー率43% (3589/8249)
回答No.2

>エクセル 項目、サイズ、種類のドロップダウンリストを連動させて尚且つドロップダウンリストを選択した時に単価が自動で出るようにしたいです Sheet1のA2はSheet2のA1またはG1の2択ですよね? データ入力規則でリストを選択して文字列をカンマ区切りで列記してください。 セルを対象にするときは=Sheet2!A1:G1のように連続したセルで指定しなければなりませんので中間の空白セルもプルダウンに表示されてしまいます。 Sheet1のB2はA2の項目とSheet2のA1と同じのときSheet2のA3:A20をプルダウンの対象とし、その他はSheet2のG3:G13をプルダウンの対象となるように数式で指定します。 =IF(A2=Sheet2!$A$1,Sheet2!A$3:A$20,Sheet2!G$3:G$13) Sheet1のC2はB2と同様にIF関数でプルダウンのリストを切り替えれば良いでしょう。 =IF(A2=Sheet2!A$1,Sheet2!B$2:E$2,H$2:J$2) Sheet1のD2はVOOKUP関数でSheet2のA$3:J$20から抽出できます。 Sheet2のA列のサイズとG列のサイズには行のズレがありませんので検索範囲はIF関数で切り替えなくても抽出に誤りが起こらないはずです。 D2=VLOOKUP(B2,Sheet2!A$3:J$20,MATCH(C2,Sheet2!$A$2:$J$2,0),FALSE) この質問は会社の仕事に使うのですよね? 事務の効率化で人件費が削減されますがそれによって得られる利益は誰に還元されるのですか? 無関係の人から無料で貰ったアイディアで増えた利益は慈善事業に使ってください。 丸儲けは甘えすぎです。 本来ならシステムエンジニアに有償で依頼すべき内容です。

  • mt2015
  • ベストアンサー率49% (258/524)
回答No.1

名前定義とINDIRECT関数を組み合わせることで可能です。単価はDGET関数を使うと良さそうです。 Sheet2の以下の範囲を名前定義します ・A2:F20 を「配管用炭素鋼鋼管_Area」 ・A3:A20 を「配管用炭素鋼鋼管_Size」 ・B2:F2  を「配管用炭素鋼鋼管_Type」 ・G2:J20 を「水道用硬質化塩化ビニルライニング鋼管_Area」 ・G3:G20 を「水道用硬質化塩化ビニルライニング鋼管_Size」 ・H2:J2  を「水道用硬質化塩化ビニルライニング鋼管_Type」 Sheet1の以下のセルに入力規則を設定(入力の種類は全て「リスト」)します ・A2セル 元の値:配管用炭素鋼鋼管,水道用硬質化塩化ビニルライニング鋼管 ・B2セル 元の値:=INDIRECT($A$2&"_Size") ・C2セル 元の値:=INDIRECT($A$2&"_Type") Sheet1の以下のセルに関数を設定します ・D2セル:=IFERROR(DGET(INDIRECT(A2&"_Area"),C2,B1:B2),"")