- ベストアンサー
一つのセルに条件によって数式を変化させたい
エクセル2000を使ってます。 仕事で、使用した材料の価格を計算する計算書を作っています。 材料の種類をリストから選択すると、それに対応した計算式で計算させた 結果をセルに表示させたいのですが、材料の種類によって計算式が違うため どのような方法をとったらよいのかわかりません。 複数の計算式を条件によって変化させることは可能ですか? その方法があるようでしたらご教授願います。 なお、種類が多くIF関数では足りないので他の方法あれば教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
#3です。 5つの計算式にそれぞれ1~5の番号をつけ、 別のシートの一覧表に、材料ごとに使用するする計算のタイプを番号で入力しておいて、 VLOOKUPで【数量】・【単価】・【計算タイプの番号】が返るようします。 以下、数量・単価・計算タイプを返す数式をそれぞれ【数量】,【単価】,【タイプ】と表記します。 また、【タイプ】は、紙のとき1,ロープのとき2,木材のとき3が返るようにしたとします。 =CHOOSE(【タイプ】,B1*C1*【単価】*【数量】,(B1*【単価】+10)*【数量】,B1*7*3/1000*【単価】*【数量】,【タイプ4の計算式】,【タイプ5の計算式】) こんな感じにしておけば、 紙のときは、B1*C1*【単価】*【数量】 ロープのときは、(B1*【単価】+10)*【数量】 木材のときは、B1*7*3/1000*【単価】*【数量】 で計算されます。
その他の回答 (3)
・計算式がどのように変化するのか (計算に使う値が違うのか、計算のやり方が違うのか) ・材料の種類がどの程度あるのか によって話が違ってきます。 計算式の定数や係数部分が材料によって違うということであれば、VLOOKUP等を使って別表から引くことになります。 計算式の構造自体が材料によって違う場合、材料の種類が30未満であれば 下記のようにIFの代わりにCHOOSEを使って振り分けることもできます。 =CHOOSE(MATCH(A1,{"材料1","材料2","材料3","材料4","材料5","材料6","材料7","材料8","材料9"},0),数式1,数式2,数式3,数式4,数式5,数式6,数式7,数式8,数式9)
- imogasi
- ベストアンサー率27% (4737/17069)
関数式のタイプぐらいを書かないと、質問になりません。 よう書かないならこんな質問コーナーに質問すべきではありません。 関数式の引数はセル番地が多いのですが、そのどの部分で変化し、 その中身は業務的に何なのか書かないと。 あるいは関数式のタイプなどが全然別の場合は、必ず1式にまとめられるという証明も、絶対できないと否定もできないでしょう。 ーー それ(式のタイプ)が書けない(できない)なら文章で (文章1)*(文章2) とか A列の会社名で決まる単価*数量(数量により単価など決まる) とか、文章でかけないですか。 得意先ごとに品物ごとに割引率が違うという2次元ぐらいまでで それ以上は、データベースを精緻に作るより他ないでしょう。 プロに任せる世界です。 ーー 何やかや言っているが、VLOOKUP関数(TRUE型やFALSE型)で済むような問題でないかと思いますが。 ーー ほんとに材料により、ガラリと計算式が違う場合は、個別に考えざるを得ないでしょう。 ーー >材料の種類によって計算式が違うため 表面的には違うのは違うが、見るセルが違う、とういう型ではないですか。 この点(型)に持っていくのが、エクセル関数でもプログラムでも、一番大事なスキルです。
補足
ご回答いただきありがとうございます。 ご指摘の通り、内容が不十分でわかりにくかった点大変申し訳ありませんでした。お詫びいたします。 補足説明させていただきます。 A列 B列 C列 D列 E列 F列 1行目 紙 50 20 1 2行目 ロープ 3 2 省略 50行目 木材 40 1 A1:A50の一つ一つのセルにリストが設定してあり、 30種類の中から選択できるようになっています。 B列~D列は使用量を入力します。 (1行目で言うとB1→50cm C1→20cm) B列~D列が入力されるのはB列だけだったりB~D列全部使ったりです。 (数値を入れるセルを3つ用意いている) E列は数量です。 B列~D列の数値を元に下記のような計算をして、F列に各行毎の計算結果が出るようにしたいのです。 紙=B1×C1×単価×数量 ロープ=((B1×単価)+10)×数量 木材=B50×7×3÷1000×数量×単価 (ロープの"10"、木材の7×3÷1000は固定です。) リストで材料を選択するたびに計算式を変えていくことができるのかわからなかったので質問させていただいた次第です。 なお、材料の種類は30より増える可能性があります。 (別のシートに一覧表があります。) また、式は上記の他2つあり、合計5種類あります。 実際にはこの計算シートをそのままアウトプットして提出するため、 現状は電卓で計算した結果を転記して使ってます。 この補足説明で大丈夫か自信ありませんが、よろしくおねがいいたします。
- x0000x
- ベストアンサー率52% (67/127)
条件が見えないので具体的な回答ができませんが、 VBAによるユーザ定義関数をセルから呼び出せます。 セルの式=UserFnc(値,値) ユーザ定義関数は、標準モジュールに以下の様に記述します。 Public Function userfnc(argA, argB) As Double If argA < 100 Then userfnc = argA * argB ElseIf argB < 200 Then userfnc = argA * argB + 10 ElseIf 条件 Then 式 End If End Function ※ argA,argBなどの引数や、IF条件、式をいくつでも記述できます。
お礼
早速のご回答ありがとうございました。 VBAは始めたばかりで私にはむずかしかったですが 勉強して使えるようにしたいと思います。
お礼
deus_ex_machina さん 回答ありがとうございました。 やりたかったことが完全解決できました。 少しむずかしく考えすぎていたようです。 choose関数はあまり使ったことがなかったですが 今後は覚えたことを応用させていきたいと思います。