- 締切済み
エクセルで条件を組み合わせて値を求める方法
お知恵をお貸しください。 求めたいのは質量です。 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 条件式を用て行ってみたのですが複雑になりうまくいきません。 どうかよろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- imogasi
- ベストアンサー率27% (4737/17069)
(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) (注)☐は四角記号文字です。 ーー 式の後半のVLOOKUP以右は、密度を求める部分。 siki のVLOOKUPは形状のタイプ=式のタイプを示す部分 sikiのVLOOKUPの後の第2引数は、式を入れている行番号を示していて、これを関数sikiの引数として渡している。 ーーー 結局VBA的になった。 ユーザー関数が増えるたびに、Case 4以下に、式を追加できるVBAの知識が要る。 ーーーーー IF文を使う泥臭い方法でない、式の選択が一般化できる方法の回答が出ることを待つ。
- kuma56
- ベストアンサー率31% (1423/4528)
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に比べて軽すぎませんか??
お礼
回答をありがとうございました。 kuma56さんがおっしゃたように関数を入れることでできました。 発想を変えることも必要ですね。 助かりました。
お礼
回答をありがとうございました。 VBAとなるとちょっと引いてしまって。