• 締切済み

エクセルで条件を組み合わせて値を求める方法

お知恵をお貸しください。 求めたいのは質量です。 A列に材質 鉄、アルミ、樹脂 B列に形状 ○、◎、□ C列~E列にそれぞれ寸法が入っています。(○の場合はC列が直径とD列が長さ) G1~G3に鉄(3.8)、アルミ(2.7)、樹脂(1.4)とそれぞれの密度が入力されています。 条件式により たとえば鉄の場合で形状が□の場合、C×D×E×$G$1として計算     アルミの場合で形状が○の場合 (C/2)^2×3.14×$G$2として計算 というようにA列の条件、B列の条件の組み合わせにより計算式を変えてそれぞれの質量をF列に出したいと思っています。 以下のように値は入力されています。 A1 鉄   B1 □  C1 10 D1 50 E1 5  A2 鉄   B2 ○  C2 16 D2 380 A3 アルミ   B3 ○  C3 12 D3 125 A4 樹脂  B4 □  C4 5  D4 8  E4 4 条件式を用て行ってみたのですが複雑になりうまくいきません。 どうかよろしくお願いします。

みんなの回答

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

(1)式 形状が 四角の場合 たてx横x高さ 円筒      半径の2乗xパイ ◎?      ??? ーーー (2)密度 密度は=VLOOKUP(A1,"{"鉄",3.8;"アルミ",2.7;"樹脂",1.4},2,FALSE) で求められる。 本当はG1-G3に鉄、アルミ、樹脂、H1-H3に3.8、2.7、1.4の表を作ることが望まれる。 ーーーー 質量=(1)x密度 だから 質量は=(形状ごとの式)x((2)の式) ーーー IF関数で場合分けするのでなく!、形状ごとに、式を選択できれば良い。式は沢山の型(式)があるとして 選択を一般化した式にしたい。 しかしこれは難しいと思う。ユーザー関数定義に逃げ込んだ。 ーーーー 標準モジュールに Public Const pi As Double = 3.1419 Function siki(n, m) Select Case n '式のタイプと具体的な式 Case 1 siki = Range("C" & m) * Range("D" & m) * Range("E" & m) Case 2 siki = (Range("C" & m) / 2) ^ 2 * pi Case 3 End Select End Function ーーー テスト 例データ A列  B列   C列  D列   E列  F列(結果) 鉄 ☐ 3 2 1 22.8 鉄 ○ 5 74.620125 アルミ ○ 10 212.07825 樹脂 ☐ 6 3 2 50.4 ーー F1の式 =siki(VLOOKUP(B1,{"☐",1;"○",2;"◎",3},2,FALSE),ROW())*VLOOKUP(A1,{"鉄",3.8;"アルミ",2.7;"樹脂",1.4},2,FALSE) (注)&#9744は四角記号文字です。 ーー 式の後半のVLOOKUP以右は、密度を求める部分。 siki のVLOOKUPは形状のタイプ=式のタイプを示す部分 sikiのVLOOKUPの後の第2引数は、式を入れている行番号を示していて、これを関数sikiの引数として渡している。 ーーー 結局VBA的になった。 ユーザー関数が増えるたびに、Case 4以下に、式を追加できるVBAの知識が要る。 ーーーーー IF文を使う泥臭い方法でない、式の選択が一般化できる方法の回答が出ることを待つ。

ZEBRRA
質問者

お礼

回答をありがとうございました。 VBAとなるとちょっと引いてしまって。

  • kuma56
  • ベストアンサー率31% (1423/4528)
回答No.1

G1~G3欄の密度(比重?)をこの三か所だけにしないで、G列そのものにIF関数式 =IF(A1="鉄",3.8,IF(A1="アルミ",2.7,1.4)) を入れておいて、鉄なら3.8、アルミなら2.7、樹脂なら1.4と表示するようにしておいて、F列の式には$G$1や$G$2といった固定セルを指定しないで、各々の行のG列の値を掛けるようにする。 そうすればあとは、B列が○か□かのIF関数式を入れるだけでいいのでは?? =IF(B1="□",C1*D1*E1*G1,(C1/2)^2*3.14*G1) 余談だけど、鉄の3.8って、アルミの2.7に比べて軽すぎませんか??

ZEBRRA
質問者

お礼

回答をありがとうございました。 kuma56さんがおっしゃたように関数を入れることでできました。 発想を変えることも必要ですね。 助かりました。

関連するQ&A