エクセルでの商品単価比較リスト作成方法

このQ&Aのポイント
  • エクセルを使用して、複雑な条件の商品単価比較リストを作成する方法について質問があります。
  • 具体的には、商品の単価を入力し、特定の条件に基づいて採用単価を計算する方法を知りたいです。
  • 現在、一部の条件に対してエラーが発生しているため、正しい式を求めています。
回答を見る
  • ベストアンサー

エクセルでの関数について

お世話になります。 仕事で各商品の単価を比較するためのリスト作成を頼まれたのですが、条件が複雑なため、 関数で悩んでいます。画像を参考に、順を追って説明させて下さい。 1.まずリストに、各商品の単価を入力 2.入力された単価は作業列(1)~(3)に反映されます。このセルに入っている計算式は、   セルG6 =IF(C6="","",C6)   セルH6 =IF(D6="","",D6)   セルI6  =IF(E6="","",E6)   が入っています。 3.ここからが分からないところなのですが、採用単価に入る式で迷っています。条件は、  (1)A資料があれば、A資料が優先的に採用単価になる  (2)B資料とC資料の2つがあれば、平均の値(1円未満切捨て)が採用単価になる  (3)空白の欄には何も入れない  とのことです。 試しに(セルJ6の場合) =ROUNDDOWN(IF(G6="",AVERAGE(H6:I6),G6),0)  を入れてみましたら、(1)と(2)の条件はクリアしたように見えますが、空欄のある所はエラーの #DIV/0!が出てしまいました。 式自体が違うのか、それとも式に何か追加するのか分かりません。 分かりにくい説明かと思いますが、どうぞお知恵をお貸し下さい。宜しくお願いします。       

質問者が選んだベストアンサー

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

>式自体が違うのか、それとも式に何か追加するのか分かりません。 G列~I列の値が全て空欄("")のときにエラーになりますので、それを回避する処理を行えばよいでしょう。 Excel 2007以降のバージョンではIFERROR関数は使えますので、それが最も簡単です。 =IFERROR(ROUNDDOWN(IF(G6="",AVERAGE(H6:I6),G6),0),"") Excel 2003以前用には次の式が良いと思います。 =IF(COUNT(G6:I6)=0,"",ROUNDDOWN(IF(G6="",AVERAGE(H6:I6),G6),0)) 式の各関数でどの関数がエラーになっているか分かり難いケースです。

mikano
質問者

お礼

分かりやすい計算式でとても助かりました。こちらを使わせて頂き、本日の業務で無事にリストが作成できました。ありがとうございました。

その他の回答 (4)

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

 まず無い事とは思いますが、万が一、A資料の所に金額ではなく、何らかの文字列(例えば「-」や空白スペース等)が入力されていた場合には、A資料の値を表示するのではなく、B資料とC資料の平均の値(1円未満切捨て)を表示させる様にするために、次の様な関数とした方が無難かも知れません。 =IF(ISNUMBER($C6),$C6,IF(COUNT($D6:$E6),ROUNDDOWN(AVERAGE($D6:$E6),0),""))

mikano
質問者

お礼

ご回答ありがとうございます。助かりました。

回答No.3

画像がよく見えず、間違ってたら申し訳ないのですが、 =IF(G6<>"",G6,IF(AND(H6<>"",I6<>""),ROUNDDOWN(AVERAGE(H6:I6),0),"")) 'B資料とC資料の二つがあれば'→'資料B,Cのどちらか片方でも欠けたらNG' と解釈しました。 A資料がなく、かつ、B資料とC資料のうちどちらか一方、またはその両方がない場合には空欄、という式になっています。

mikano
質問者

お礼

無事にリストが作れました。ありがとうございました。

mikano
質問者

補足

ご回答ありがとうございます。 説明が不足しておりましたが、(2)B資料とC資料の2つがあれば~ですが、場合によってはB資料だけ、C資料だけという時があります。その時は入力されている方が採用単価となります。(例:A資料がなく、B資料だけ入力されている→B資料が採用単価)

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.2

=IF(C6<>"",C6,IF(COUNT(D6:E6),ROUNDDOWN(AVERAGE(D6:E6),0),"")) でいいです。 G,H,I列は使いませんが、作らなきゃいけないなら勿論あなたの式で置いておいてかまいません。

mikano
質問者

お礼

ご回答ありがとうございます。助かりました。

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

2.の式3つともIFである必要は無さそう。 単に代入しても同じ値っぽい。 3. > =ROUNDDOWN(IF(G6="",AVERAGE(H6:I6),G6),0) =IF(G6=””, ROUNDDOWN(AVERAGE(H6:I6), 0), G6) では? どこか一つのセルだけなら良いが、単価の3セル(2.の3つ)が固定なら コピーする前に$G$6とかのように$を付けることが必要かも。

mikano
質問者

お礼

ご回答ありがとうございます。助かりました。

関連するQ&A

  • エクセルの関数を教えてください

    エクセル初心者です。 上司から下記のシートをもらいました  A   B    C    D        E    F    G   H   I    1場所 床材 平米数  洗浄  ワックス   場所  床材  平米数  洗浄 2 廊下 塩ビ  150  ○   ○      階段   塩ビ  20   ○     3 この表から、E2のセルに○がある場合に、C2のセルにある8を、 また、I2セルの隣にJ2セルもあり、そこにも○がありますが、H2のセル20をA3に合計したいとのことです。 if関数の他に、関数を組み合わせるのではないかを思いますが、 良い式が思い浮かびません。 どうか、ご教授ください。よろしくお願いします。

  • EXCELのIF関数の入れ子について

    すみませんよろしくお願いします。 EXCELでセル(A1)~(L1)までに不特定の文字列が入力されており、(M1)に「もし(L1)が入力されていたら(L1)の値を表示、もし(L1)がブランクなら(K1)の値を表示、もし(K1)がブランクなら(J1)の値を表示、もし(J1)がブランクなら(I1)の値を表示・・・・」といった具合で関数を作成したいのです。また、(A1)~(L1)のセルで穴あき状態で入力されていた場合は最も(L1)寄りのセルを表示させたいです。 EXCEL2003のIF関数だと、 =IF(L2="",IF(K2="",IF(J2="",IF(I2="",IF(H2="",IF(G2="",IF(F2="",IF(E2="","",E2),F2),G2),H2),I2),J2),K2),L2) で最後の(A1)までの入れ子を作ることができせん。 EXCEL2007を使用すると、 =IF(L2="",IF(K2="",IF(J2="",IF(I2="",IF(H2="",IF(G2="",IF(F2="",IF(E2="",IF(D2="",IF(C2="",IF(B2="",IF(A2="","",A2),B2),C2),D2),E2),F2),G2),H2),I2),J2),K2),L2) と作成できます。 EXCEL2003で作成するいい方法はありますでしょうか? ご指南の程よろしくお願いします。

  • エクセルでif関数を組んだのですが。。。

    エクセルでif関数を使って式を造ったのですが、上手く条件を選択 しません。何がおかしいのか分からない状態でこまっています。  どなたかお詳しい方、教えて下さい。 詳細は添付資料にあります。 a1 20 b1 1 c1 -1 d1 合 e1 19.5 =if((a1-abs(c1))<=e1<=(a1+b1),"合","不合") この式を入れると d1は不合になってしまいます。

  • エクセルで困ってます。

    今、データ処理をしているのですが、関数がわかりません。よろしくお願いします。 ++++++++++++++++++++++++++++ セルD2(D2:D583)の数値を 0         a 0以上5未満    b 5以上10未満   c 10以上20未満  d 20以上30未満  e    ・    ・    ・ 90以上100未満 f 100       g 言う感じに分類したいので、 IF(D2=0,"a",IF(D2<5,"b",IF(D2<10,"c",IF(D2<20,"d",IF(D2<30,"e",IF(D2<40,"f",IF(D2<50,"g",IF(D2<60,"h")))))))) という関数を書きました。hまではうまくいったのですが、h以降つまり「60以上70未満をiと表示する」 というところを書くと「入力した式にはエラーがあります」とでてきてしまいます。なぜでしょう? 若しくはもっと良い関数があれば教えてください。 よろしくお願いします。

  • VLOOKUP関数の使い方について

    以前コード番号を入力すると自動的に商品番号が出るようにしたいと質問させていただきました。 教えていただいた方法を使い おかげさまでコード番号を入力すると隣のセルに商品番号が出るようになりました。 ただ一緒に単価も入力させたいのですがそれができません。 入力本体は(シート名 「仕入れ表」) E列 コード番号 F列 商品名 G列 数量 H列 単価 I列 小計(G*H) という構成になっています。 (A~C列は他の項目が入っています) 参照するシート名「cade」 同じブック内にあります。 A列コード番号 B列商品名 C列単価 が入っておりA~C列までを名前の定義で 「cade表」としてあります。 「仕入れ表」のI列(小計) の二行目より =IF(E2<>"",G2*H2,"") の数式がコピーしてあります。 同じく 「仕入れ表」のF列には =IF(E2<>"",VLOOKUP(E2,cade表,2,FALSE),"") と数式を入れました。 結果コード番号を入力すると商品名は出ますが 単価は入力されません。 単価も同時に入力する為にはどのようにしたらよろしいでしょうか? どなかた教えていただけると助かります。 宜しくお願い致します。

  • エクセル 表検索した合計の出し方について

    既出でしたらすいません。 いろいろ検索していみたのですが見つかりませんでしたので、教えて下さい。というかできないのですかね? エクセル2007を使っているのですが、商品、単価、入り値を一覧の表にしてVLOOKUPでその一覧の番号から表検索して別の一覧を作れるようにしました。その新しい表の最後の行に単価と入り値の合計を出したいと思っています。ただ、その最後の行は一定ではなくどこになるかわかりません。(違う場所に合計用のセルを作るのではなくすでに関数がある場所に付け足したいのですが。。。) 以下がそのセルに入っている関数の例です。 =IF(I6="","",ROUNDDOWN(I6*F6+I6*IF(G6<10,G6/10,IF(G6<100,G6/100,G6/1000)),0)) I6にVLOOKUPで検索した単価が入るように関数を入れてあります。 F6、G6は数量を入力するようにしてあります。単価と数量の合計 この関数に付け加えるか、もしくは新しい関数でもいいので 「もし、A6に合計の文字列が入れば、I1~I5(合計の文字列が入る前のセル)までを足す」 というようなことができますでしょうか?

  • エクセルの関数について

    こんにちは エクセルを使ってあるものの集計をしました。 H13というシートの中で、Cの列が「リンゴ」で、 なおかつDの列が「陽光」であるセルの数がいくつあるか? と言う関数を作りました。  {=SUM(IF('H13'!C1:C300="りんご",IF('H13'!D1:D300="陽光"1,0)))} 一応これで数は返されたのですが、 この間数をコピーしてH14にしようとしてセルをいじくると、 最初と最後の{}が勝手に消えてしまい、それでも数式としてはあっているようで、 実際返ってきて欲しい数ではなく、0が返ってきます。 で、{}をつけてみると、今度はそのまま式が表示されます。 そもそもこの式が一番最適なのかも教えていただきたいのですが、 なぜ{}が消えてしまうのか?どうしたらよいのかを教えてください。 よろしくお願いします。

  • Excelで二つの関数をヒトツの関数に収めたい

    =IF(AND(T$3>=$D9,T$3<$E9),1,"")という式と =IF(AND(T$3>=$F9,T$3<$G9),-1,"")という式をヒトツにまとめたいです。 ちなみにD9は出勤時間、E9は退勤時間、F9は休憩始めの時間、G9は休憩終わりの時間 そしてT3には時刻が入力されており、塗りつぶす事によってグラフになるようになっています。 現在は1つ目の式のみを使い、条件式書式にて「1と等しい時にセルを塗りつぶす」としています。 これに休憩時間の間はグラフを塗りつぶさないという条件をプラスしたいと思っています。 補足としては、他のセルにてCOUNT関数を使っており、その時間に何人が働いているか表示出来るようにしています。 二つ目の式の真の場合の-1に深い意味はありません。 結果、何人働いているか表示出来ればと思っての数字です。 よろしくお願いします。

  • エクセル関数(SUMPRODUCT関数で空白表示をしたい!)

    QNo.2876482に関連してしまいますが、解決しきれないまま自分で締め切ってしまったので、新規で質問させて頂きます。 「A列に商品名、B列にNET(g)、C列に単価の入った単価表があります。 その単価表を範囲選択して、別の表の規定の列にA列の商品名と B列のNET(g)が合致すればC列の単価が返されるという計算式を作りたいと思っています。 VLOOK関数を使えばできるのかと考えましたが、数式の作り方が分かりません。 教えて下さい。」 というのが、QNo.2876482 の私の質問でした。 回答頂いた方の中から、 =SUMPRODUCT(($A$2:$A$3=E2)*($B$2:$B$3=F2)*($C$2:$C$3)) 別途参照表 -- A ------ B ---- C -- 1. 商品名--- (g) -- 単価 2. -- i ---- 100 --- 50 3. -- p ---- 50 ---- 100 元の表 ---- E ------ F --- G --- 1. - 商品名 -- (g) - 単価 2. --- i ----- 100 3. --- p ----- 50 4. --- p ----- 120 5. --- i ------ 200 と、ご指導頂き、解決しました。 解決できたのでご回答を締め切ったのですが、空欄表示にしたい場所(例えばG5まで入力しているが、表はG50まであり、G6~G50にも計算式を入れておきたい)に0と表示されます。 その時にはif関数を使うような書き方をされていたのですが・・・ その計算式を教えて下さい。お願いします。

  • この関数の意味を教えて下さい。

    31歳の男です。 関数についてはド素人ですが、下記の関数について調べています。 お知恵を貸して頂けないでしょうか? (シート1) 下記のように条件をどんどんリストから選択して行き、結果を出すシート (シート2) 元データが入っているDBみたいなモノ        (条件) ・セルE6→申告元は?(例 NOC) ・セルE7→場所は?(例 NOC) ・セルE8→何によって検知した?(例 運用管理端末) ・セルE9→発生箇所は?(例 サーバ) ・セルE10→何が起きている?(例 警告メッセージ) ・セルE11→条件は【その1】?(故障部位又はリソース) (例 ネットワーク機器) ・セルE12→条件は【その2】?(障害状況と処理)(例 事象が復旧している)  (結果) ・セルE16→影響は? (例 運用への影響はなし) ・セルE17→即応措置の要否は? (例 継続調査)  (条件式) ・セルG6→=IF(E6="NOC","NOC_申告元",E6) ・セルG7→=IF(E7="NOC","NOC_場所",E7) ・セルG9→=IF(OR(E9="サーバ",E9="NW機器",E9="その他"),CONCATENATE(E9,"_発生箇所"),E9) ・セルG10→=IF(E10="その他","その他_故障内容",E10 ) ・セルG11→=IF(OR(E11="サーバ",E11="NW機器",E11="その他"),CONCATENATE(E11,"_故障部位"),E11) ・セルG12→=E12  (結果式) ・セルE16→=IF(G12=0,"",VLOOKUP(G12,リスト!$B$91:$D$118,2,0)) ・セルE17→=IF(G12=0,"",VLOOKUP(G12,リスト!$B$91:$D$118,3,0)) (質問) ・この条件式と結果式の意味(訳)を教えてもらえないでしょうか?  例  一行目→もしE6の値が"NOC"の場合は"NOC_申告元"を返す???   すいません、意味が分かっておりません。 ・条件次第では、結果が「False」や「#N/A」と出てしまいます。  この場合、エラー値を表示しないようにするにはどうしたら良いでしょうか?      以上、宜しくお願いします。    

専門家に質問してみよう