• ベストアンサー

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

明けましておめでとうございます。 新年早々質問なのですが(^^;、次の場合の式はどのようにすればよろしいでしょうか。 セルA1が10000円以上の場合、A1*30% セルA1が10000円未満9000円以上の場合、A1*30% セルA1が9000円未満8000円以上の場合、A1*28% セルA1が8000円未満7000円以上の場合、A1*27.5% セルA1が7000円未満6000円以上の場合、A1*27% セルA1が6000円未満5000円以上の場合、A1*26% セルA1が5000円未満4000円以上の場合、A1*24% セルA1が4000円未満3000円以上の場合、A1*23% セルA1が3000円未満2000円以上の場合、A1*22.5% セルA1が2000円未満1000円以上の場合、A1*20% セルA1が1000円未満0円以上の場合、A1*10% ~%は例題として適当にランダムに設定しました。 IF関数の中にIF・・・とやっていくとネストは7つまでですので、どうしてもすべてを満たす数式を作ることができません。 上記の例題につきまして、詳しい方にアドバイスいただければ幸いです。 よろしくお願いいたします。

  • paochi
  • お礼率32% (130/406)

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

  • ベストアンサー
  • comv
  • ベストアンサー率52% (322/612)
回答No.2

こんばんは! 本来のデータや以上未満の境が、不規則であれば  =A1*LOOKUP(A1,{0,1000,2000,3000,4000,5000,6000,7000,8000,9000,10000;10,20,22.5,23,24,26,27,27.5,28,30,30})% 書式としては  =A1*LOOKUP(A1,{値1,値2,・・・,値n;返値1,返値2,・・・,返値n}) 値部分は ○○以上~××未満 の ○○ の値を昇順に記載 返値部分は、それに対応した結果(今回の場合~%の数値部分) 値配列と返値配列との区切りは「;」セミコロン 例記のように区切り桁が 000円単位であれば 検索値A1を1000で割ることで  =A1*LOOKUP(A1/1000,{0,1,2,3,4,5,6,7,8,9,10;10,20,22.5,23,24,26,27,27.5,28,30,30})%  多少短くなります 完全に1000円単位(一定増値)であれば  CHOOSE() 関数も使えます。

paochi
質問者

お礼

こんばんは! アドバイスありがとうございました。 他の方からのアドバイスをすべて試してみました。 その中で、今の自分でも理解できるこちらの数式を選択させていただきました。 めちゃめちゃわかりやすい!(笑) それにしてもいろんな方法があるんですね~。 今回、いくつかの関数を知るきっかけとなり、 大変感謝しています。 ありがとうございました。 また何かありましたらよろしくお願い致します。

その他の回答 (3)

  • arata
  • ベストアンサー率49% (139/279)
回答No.4

同じ回答ではつまらないので、マクロを使った方法を紹介します。 1.メニューの[ツール]-[マクロ]-[マクロ...]を選択 (または、ALT+F8) 2.マクロ名に適当な名前をつける。 ここでは、Keisanとします。 3.マクロの保存先を「作業中のブック」にします。 4.作成ボタンを押します。 5.Microsoft Visual Basic と言うウィンドウが開きますので、右側のウィンドウ内の Sub Keisan() End Sub となっているのを Function Keisan( vRange As Variant ) As Variant End Function に修正します。 6.あとは、下記のように、Function ~ End Function の間を修正してください。(コピー&ペーストでOKです。) Function Keisan(vRange As Variant) As Variant If IsNumeric(vRange) = False Or IsNull(vRange) Or IsEmpty(vRange) Then Keisan = "" Exit Function End If Select Case vRange Case Is >= 10000 Keisan = vRange * 0.3 Case Is >= 9000 Keisan = vRange * 0.3 Case Is >= 8000 Keisan = vRange * 0.28 Case Is >= 7000 Keisan = vRange * 0.275 Case Is >= 6000 Keisan = vRange * 0.27 Case Is >= 5000 Keisan = vRange * 0.26 Case Is >= 4000 Keisan = vRange * 0.24 Case Is >= 3000 Keisan = vRange * 0.23 Case Is >= 2000 Keisan = vRange * 0.225 Case Is >= 1000 Keisan = vRange * 0.2 Case Else Keisan = vRange * 0.1 End Select End Function 使い方は、Excelの関数と同じです。 =Keisan(A1) のようにセルに入力すれば、OKです。

paochi
質問者

お礼

アドバイスありがとうございました。 他の方からのアドバイスをすべて試してみました。 その中で、今の自分でも理解できる数式を選択しました。 マクロを触るのは初めてで、コピペしてみましたが ちょっとうまくいきませんでした(^^; うまくパーセンテージが反映されなかったり。 自分の力が至りませんでした。すみません。 でも、マクロを触る機会ができて本当によかったです。おもしろそうですよね。 大変感謝しています。 ありがとうございました。

  • ARC
  • ベストアンサー率46% (643/1383)
回答No.3

VLookupを使うのがいいかな。 まず、適当な位置に金額とパーセンテージの表を作ります。 例えば、C列,D列に以下のような表を作成します 0  10% 1000 20% 3000 22.5%  :  : 10000 30% で、B1のセルに =A1 * VLOOKUP(A1,$C$1:$D$12,2,TRUE) などと記述すればOKだと思います。 尚、「2」はデータ範囲(C列,D列)の2列目(つまりD列)の値を取ってくる事を示します。 Trueは今回のように、検索する値がデータ範囲の値に厳密に一致しない場合に使います。

paochi
質問者

お礼

アドバイスありがとうございました。 他の方からのアドバイスをすべて試してみました。 その中で、今の自分でも理解できる数式を選択しました(ちょっとこの方法は自分には難しかったです^^;)。 それにしてもいろんな方法があるんですね~。 今回、いくつかの関数を知るきっかけとなり、 大変感謝しています。 ありがとうございました。

  • kbonb
  • ベストアンサー率51% (254/492)
回答No.1

こんにちは  以下の手順でいかがでしょうか? 1.A10:B19に以下を入力 0 10.0% 1000 20.0% 2000 22.5% 3000 23.0% 4000 24.0% 5000 26.0% 6000 27.0% 7000 27.5% 8000 28.0% 9000 30.0% 2.セルB2に =A1*VLOOKUP(A1,A10:B19,2) と入力

参考URL:
http://www2.odn.ne.jp/excel/
paochi
質問者

お礼

アドバイスありがとうございました。 他の方からのアドバイスをすべて試してみました。 その中で、今の自分でも理解できる数式を選択しました。 それにしてもいろんな方法があるんですね~。 今回、いくつかの関数を知るきっかけとなり、 大変感謝しています。 ありがとうございました。

関連するQ&A

  • Excel IF関数を短くする式を教えて下さい。

    ExcelのIF関数が長くなりすぎて困っています。 短くする方法あれば教えてください。 =IF(A1="",0,IF(A1<4.5,A1,4.5))+IF(B1="",0,IF(B1<4.5,B1,4.5)) のように"4.5より数が小さい場合はセルの値を返し、 4.5より大きい場合は4.5を返す"というのを繰り返し合計していきます。 60セル以上を合計したいのですが、それだと数式が長すぎて・・・ 何か短くする良い式があれば教えて下さい。 よろしくお願いします。

  • if関数を使ったエクセルの式について

    A1セルには毎月ランダムな金額が入ります。ex 14,000円とか。 B1セルに以下の条件の数式をいれるにはどのような数式になりますか。 ①A1セルが15000円より少なかったらその差額分をB1セルに入れる。 ②A1セルが2万円を超えていたらその差額分をC1セルに入れる。 以上よろしくお願い申し上げます。

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

    関数の作成についてお伺いします。 エクセルの関数を使って、単価に対する合計を出したいのです。 A1セルにランダムな数字が入っているとして その数値が1~2999までの単価が25円 3000以上4999以下なら単価22円 5000以上で単価19円 で合計を計算したいのです。 たとえば、A1セルの数値が5500なら 3000*25=74975 2000*22=43978 500*19=9500 で128453 という合計を出せるようにしたいのです。 よろしくお願いいたします。

  • 一つのセルでIF関数を二つ使いたい

    二つのセルの値を割って、%を表示させるために、三つ目のセルには 「=1-(B1/A1)」を入れていたのですが、そこに、二つのセルが空白の時にはエラー表示にならないようにIF関数を使い、三つ目のセルは 「=IF(ISBLANK(A1),"",(1-(B1/A1)))」 という数式にしました。 その数式にさらに、もし二つのセルの値が「0」の時には、結果を「0%」として表示させたくて、三つ目の数式の中にもうひとつのIF関数を同時に使いたいのですが、 一つのセル内に、IF関数を使って結果をうまく表示させるには、どのような数式にすれば良いでしょうか??

  • IFとVLOOKUP関数を組み合わせて

    IFとVLOOKUP関数を組み合わせて条件に一致させた数値を出したいのですが引数の記述がわかりません具体的にはセルB5の値が2以上10未満の時は4,100を10以上15未満の時は6,500を15以上25未満の時は11,300を25以上35未満の時は16,100を35以上45未満の時は20,900をセルD5に標示させたい時はどんな記述をすればよろしいでしょうか?IF関数VLOOKUP関数を用いて別のセルにこの参照をさせる表(セルA7に2,B7に4,100 A8に10,B8に6,500 A9に15,B9に11,300…)を作成するすればできると思うのですが…

  • エクセル 複数条件のIF関数 

    0から360の数字がランダムに入力されているA列があります。この数字を以下の条件でB列に入力したいのです。 (1)288以上なら280を引く (2)144以上なら144を引く (3)72以上なら72を引く (4)72未満ならその数字のまま入力 結果として、72未満の数字がB列に入力されることになります、 IF関数を使えばできるのかなと思いますが、違う方法でもよいです。 4万セルくらいを処理するので一番簡単な方法を教えてください。 よろしくお願いいたします。

  • IF関数教えてください><

    IF関数で、 売上金額が500,000未満の場合は「○」で、500,000以上、1,000,000未満の場合は「△」 1,000,000以上の場合は「×」にしなさい。 という問題の場合ってどういう式を作ればいいんですか。 ※売上金額の欄が仮にAの欄に書いてあるとする。 ※セルに直接式を入力する場合のやり方でお願いします。

  • エクセルのif関数で

    エクセルのif関数でこれができるのかわかりませんが、 C1~C10の中の文字列の中にA1と同じ文字列があればB1に「1」を入れ、なければ「2」を入れるということをやりたくて B1のセルに IF(OR(C$1:C$10=A1),1,2) という計算式を入れました。 関数の引数の中の数式の結果では、正しい結果が表示されてるのですが、B1のセルには間違った結果が表示されます。 また、B2以下B20まで計算式をコピーするとB11以下は#VALUE!になってしまいます。 一つ一つを見てみると、どうやらセルに正しく表示されるのはAの行とCの行が=だった場合のみのようです。 #VALUE!が表示されているセルも含めて、数式の結果では正しい結果が出ているのにセルの表示が違っているのが納得できませんが、おそらく何かが間違っているのでしょう。 間違いを教えてください。 よろしくお願いします。

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

    IF関数について、皆様に質問です。 セルに入力された数値xがある数値yと同じか大きい場合は"NG"と表示し、数値aがある数値bと同じか小さい場合は"NG"と表示させたいと考えております。 IFを使って式を作成したのですが、『数式が多すぎる』というエラーになってしまいます。 具体的には、 セルB25に入力している数値が8.980の場合、 8.991と同じまたは大きい場合は"NG"と表示させたい。 同じセルB25で、8.969と同じまたは小さい場合は"NG"と表示させたい。 これをこのような式にしてみました。 =IF(B25<=9.991,"NG","",IF(B25>=9.969,"","NG")) これで『数式が多すぎる』というエラーになっています。 教えてgooで調べたのですが、解決には至っていません。 どなたかご教示いただけますでしょうか。

  • エクセルのif関数で8つ以上ある場合について教えて下さい。

    エクセルのif関数で8つ以上ある場合について教えて下さい。 バージョン:エクセル2002 以下のような場合       1,000未満 → A 1,000以上 1,500未満 → B 1,500以上 2,000未満 → C 2,000以上 2,500未満 → D 2,500以上 3,000未満 → E 3,000以上 3,500未満 → F 3,500以上 4,000未満 → G 4,000以上 4,500未満 → H 4,500以上 5,000未満 → I 5,000以上       → J 現在のエクセルバージョンでは、 if関数の7レベルを超えてしまい、Lookup関数では一致した値しか拾ってくれません。 このような場合、以上、未満などの比較演算子を使用した範囲内の数値の分岐結果を取得するには どのようにすればよいのでしょうか? 現在は、次のように表を作成して行っております。     A     B   C  ←セル列  1        1,000  A  2  1,000   1,500  B  3  1,500   2,000  C  4  2,000   2,500  D  5  2,500   3,000  E  6  3,000   3,500  F  7  3,500   4,000  G  8  4,000   4,500  H  9  4,500   5,000  I  10  5,000        J  ↑ セル行 別の関数などを使用してできる場合(VBA不可)などでも構いませんので、 どなたかご教授願います。 宜しくお願いします。

専門家に質問してみよう