ここから本文です

Excelの関数について。 添付している表の、厚さ、縦、横以内のサイズ(cm)なら、 ...

アバター

ID非公開さん

2018/9/2900:29:53

Excelの関数について。
添付している表の、厚さ、縦、横以内のサイズ(cm)なら、
送料500円、そうでなければ55555円という式を作成したいです。

例えば、
厚さ(セルA2)1.6 縦(セルB2)24 横(セルC2)10 → 送料(セルD2)500円
厚さ(セルA3)1.6 縦(セルB3)55 横(セルC3)10 → 送料(セルD3)55555円


If関数で、and関数をネストさせ、厚さ、縦、横以内なら500、そうでなければ、また別の厚さ、縦、横以内なら500、そうでなければ…をひたすら25回繰り返したらいいのですが、
もっと便利な方法はないかと四苦八苦しています。

例えば、If関数にVlookup関数の検索方法をtrueで近似値を出す方法だと、
検索値(厚さ)が1.6の場合、厚さ1 縦33 横24 の行が返ってしまいます。

そこで、検索値(厚さ)1.6に1を足して2.6とする方法も考えましたが、検索値(厚さ)が1や9.5などぴったりの場合は、厚さ2の行を返してしまいますが、そのままの厚さ1の行の答えが返ってほしいです。

そのため、If関数にVlookup関数で検索方法を完全一致のfalseで返す分をネストし、それにIserror関数やNot関数をネストし、エラーではなければ、and関数で(セルA,B,Cの)厚さ,縦,横が、Vlookup関数で行指定した各列の添付の表以下の数値であれば、500、そうでなければ、近似値のVlookup 関数で同様のことをし合致すれば500、そうでなければ55555など試してみましたが、
完全一致しない時のエラーが、論理式に入った時、うまくいかず断念。
(分かりにくい過ぎてすみません…)

さらには、Index関数やMatch関数も試しましたがうまくいきません。

と、ここまで苦労しなくても、厚さ、縦、横を25行分If関数で指定していけばいいのにとは思うのですが、どうにかして、簡易な関数に出来ないかと思っています。

どなたか、どうぞよろしくお願い致します(>人<;)

VLOOKUP関数,近似値,セルA B C,ISERROR関数,IF関数,A2,VLOOKUP

閲覧数:
72
回答数:
3
お礼:
250枚

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

2018/9/2906:37:51

表計算ソフトの検索系関数は「x以上」の基準で探すのが基本なので、今回のように「x以下」な表はあまり良く無いんです。どうしてもやりたければ、表の並び方を降順にしてmatch関数で検索の型を-1に指定します。
match(A2, 厚さの範囲, -1)

で、厚さに対応した長さと幅の限界値を配列で取り出します。
index(長さと幅の範囲, match(A2, 厚さの範囲, -1), 0)

自分の長さと幅が限界値を超えているかを調べ、超えちゃった数を返します。
sumproduct((index(長さと幅の範囲, match(A2, 厚さの範囲, -1), 0)<自分の長さと幅)*1)

その結果が0なら500で0以外なら55555ですよね。

=if(上の式, 55555, 500)

表計算ソフトの検索系関数は「x以上」の基準で探すのが基本なので、今回のように「x以下」な表はあまり良く無いんです。...

  • アバター

    質問者

    ID非公開さん

    2018/10/512:17:46

    ご回答ありがとうございます。
    sumproductかー!ありがたいーと思っていたのですが、
    試してみたところ、厚さが24の場合はエラーになります。
    ですので、sumproduct関数の前に、if(A2>$A$4,55555,if(sumprodact~),500,55555)
    みたいな感じになりますでしょうか?

    合ってるか自信がなく念のため質問させていただきました…。

  • その他の返信(2件)を表示

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

アバター

質問した人からのコメント

2018/10/5 15:08:14

分かりやすく丁寧に教えてくださいました。ありがとうございました。

ベストアンサー以外の回答

1〜2件/2件中

並び替え:回答日時の
新しい順
|古い順

lun********さん

2018/9/2903:03:05

次の表の場合
D2セルに
=IF(COUNT(A2:C2)<3,"",IF(AND(B2<=VLOOKUP(A2,$A$4:$C$28,2,1),C2<=VLOOKUP(A2,$A$4:$C$28,3,1)),500,5555))

<、<=のちがいで
=IF(COUNT(A2:C2)<3,"",IF(AND(B2<VLOOKUP(A2,$A$4:$C$28,2,1),C2<VLOOKUP(A2,$A$4:$C$28,3,1)),500,5555))
かも?

次の表の場合
D2セルに...

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

jsu********さん

2018/9/2902:02:11

質問者様の添付された表が見出しを除いてG2:I26に設定されていると仮定します。

作業用としてE列を使用し、
セルE2=IF(AND(A2>9,A2<=9.5),9.5,INT(A2+(COUNTIF(G$2:G$26,A2)=0)))

セルD2=IFERROR(IF(OR(VLOOKUP(E2,G$2:I$26,2,FALSE)<B2,VLOOKUP(E2,G$2:I$26,3,FALSE)<C2),5555,500),5555)

以上でいかがでしょうか

VLOOKUP関数の検索値としてE列を使用します。
表にある厚さの値に合わせてあるので完全一致で値を取得しています。

質問者様の添付された表が見出しを除いてG2:I26に設定されていると仮定します。

作業用としてE列を使用し、...

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる