(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文を使う泥臭い方法でない、式の選択が一般化できる方法の回答が出ることを待つ。
お礼
回答をありがとうございました。 VBAとなるとちょっと引いてしまって。