明けましておめでとうございます。
新年早々質問なのですが(^^;、次の場合の式はどのようにすればよろしいでしょうか。

セル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つまでですので、どうしてもすべてを満たす数式を作ることができません。
上記の例題につきまして、詳しい方にアドバイスいただければ幸いです。
よろしくお願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (4件)

こんばんは!



本来のデータや以上未満の境が、不規則であれば

 =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() 関数も使えます。
    • good
    • 0
この回答へのお礼

こんばんは!
アドバイスありがとうございました。
他の方からのアドバイスをすべて試してみました。
その中で、今の自分でも理解できるこちらの数式を選択させていただきました。

めちゃめちゃわかりやすい!(笑)

それにしてもいろんな方法があるんですね~。
今回、いくつかの関数を知るきっかけとなり、
大変感謝しています。
ありがとうございました。

また何かありましたらよろしくお願い致します。

お礼日時:2002/01/07 15:58

同じ回答ではつまらないので、マクロを使った方法を紹介します。



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です。
    • good
    • 0
この回答へのお礼

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

お礼日時:2002/01/07 15:57

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は今回のように、検索する値がデータ範囲の値に厳密に一致しない場合に使います。
    • good
    • 0
この回答へのお礼

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

お礼日時:2002/01/07 15:54

こんにちは



 以下の手順でいかがでしょうか?

1.A10:B19に以下を入力

010.0%
100020.0%
200022.5%
300023.0%
400024.0%
500026.0%
600027.0%
700027.5%
800028.0%
900030.0%

2.セルB2に

=A1*VLOOKUP(A1,A10:B19,2)

と入力

参考URL:http://www2.odn.ne.jp/excel/
    • good
    • 0
この回答へのお礼

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

お礼日時:2002/01/07 15:53

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q【EXCEL】数式=SUM(A1*B1+A2*B2+・・・+A100*B100)を簡略化したい

お世話になります。

今Excelで、A1~A100とB1~B100まで数値が入っています。
セルC1に「=A1×b1」、C2に「=A2*B2」…C100に「=A100*B100」と入力しました。
そしてセルC101に「SUM(C1:C100)」と入力して合計を出しました。
(実際はもっと複雑な計算なのですが、説明の為に簡略化しています)

そうすると、計算結果セルが多く発生するためファイルサイズが莫大になってしまうのと、それを数千行×6列以上を一気に計算するとXPのリソースが足りないと出て計算できません。
なので2~3列ずつ何回も数式コピペを繰り返すことになっています。

そこで【別セルに掛け算をしてから全部SUMで足す】のではなく【1つのセルに掛け算とSUMを組み込む】という事を考えて
=SUM(A1*B1+A2*B2+・・・+A100*B100)を
を入力しようとしたのですが、数式が長すぎて四苦八苦です。

この式、なんとか簡略化できませんか?

Aベストアンサー

積の合計なら
=SUMPRODUCT(A1:A100,B1:B100)
でいいのでは?

Q5000以上10000未満 10000万以上30000未満 …

金額が0~999999までの数字がA列に入っています。
これをB列で、5000未満・10000未満・30000未満・50000未満・50000以上の5グループにして表示したいのですが、どの様な関数で出来るのでしょうか?
どうぞ宜しくお願い致します。

Aベストアンサー

=CHOOSE(SUM(A1<5000,A1<10000,A1<30000,A1<50000,1),"50000以上","50000未満","30000未満","10000未満","5000未満")

こんな形も

QA1セルにAと入力すると、A2セルに3000A3セルに2000A4セルに1000と表示させたい。

A1セルに「A」と入力する1回だけで、
A2セルに「3000」
A3セルに「2000」
A4セルに「1000」
A5セルに「合計数字」を表示させたいのですが、
式をご教授願いたいです。

よろしくお願いします。

Aベストアンサー

D1:G3
A500030001000
B500300130
C1200800300
A1にA,B,Cのどれかを入れる。
A2に =VLOOKUP($A$1,$D$1:$G$2,ROW(),FALSE)と入れて、
A4まで(G-D-1列数だけの行数)式を複写する。
結果
A1がBの場合A1:A4は
B
500
300
130

A1の空白の場合に対処して
=IF(A1="","",VLOOKUP($A$1,$D$1:$G$2,ROW(),FALSE))
が良いでしょう。
(既回答とほぼ同じ式ですが、1箇所違うところがあります。)

Q~円以上 円未満は5%と表示したい

エクセルの関数の質問です。

A1のセルが1.950.000円以上3.300.000円以下なら、5%とでるような関数を作成したいのですがどのようにしたら良いでしょうか??

初歩的な質問で申し訳ありませんがよろしくお願いします。

Aベストアンサー

一例です。
金額範囲が複数になる場合、VLOOKUP関数等を使用された方が良いと思います。
=VLOOKUP(検索値,検索範囲,対応列番号,検索の型)⇒=VLOOKUP(A1,$C1$:$D$3,2,TRUE)
検索範囲は事前に昇順で作成しておく必要があります。仮に以下の様に設定したとします。
  C    D
1 0     0
2 1950000  5%
3 3300000  7.5%
因みに数式結果としては、そのセルの表示形式に作用さますので(通常は標準なので、0.05と表示)、セルの書式設定→表示形式タブでパーセンテージを設定して下さい。

QSUMPRODUCT($A$1:$A$10,$B$1:$B$10)とSUMPRODUCT($A$1:$A$10*$B$1:$B$10)

エクセルのSUMPRODUCT関数についてお尋ねします。

=SUMPRODUCT($A$1:$A$10,$B$1:$B$10)

=SUMPRODUCT($A$1:$A$10*$B$1:$B$10)
の違いは何でしょうか?
両者とも同じ答えを返しますが、いろいろ試したところ、前者は範囲内に文字列があってもそれを無視して計算し、後者は文字列があればエラーになるようですが、その理解で正しいでしょうか?
正しいとすれば、なぜでしょうか?

Aベストアンサー

こんばんは。

配列計算をしているのは言うまでもありませんが、この、SUMPRODUCT は、必ず、内部のひとまとまりから計算するという性質を持っています。ただ、VBAのように左から時系列かどうかは、言語が違いますから、分かりません。しかし、この引数は、パラメータ配列になっています。そして、その引数それぞれの有効値を調べて、それを演算出来る値かどうか調べます。

文字列を入れてもエラーにならないのは、元々、そこに注釈などを入れるために考えられたものです。値を文字列か数値かを精査して演算するように出来ています。最初、SUM関数に対し、そのように作られました。プログラムとしては、初歩的なものですが、そのアイデアは、今日まで、踏襲しているようです。このオリジナルの仕組みを考えたのは、VisiCalc の開発者、ブルックリン氏です。昔々、本で読んだことがあります。 PRODUCT関数とも共通です。3つの関数は、同じような仕様を持っています。

こちらが、本来の使い方です。

=SUMPRODUCT($A$1:$A$10,$B$1:$B$10)

つまり、
$A$1:$A$10 と $B$1:$B$10 の値を別々に取得しています。

では、
=SUMPRODUCT($A$1:$A$10,$B$1:$B$11)

とすると、なぜ、エラーが出るかというと、$B$11 に対応する数値が、NULL値(有効な値がない)だからです。それは、全体に反映させてしまいます。(理由は分かると思いますが、プログラムが途中で、エラーで止まってしまうからです)

ところが、こちらは、

=SUMPRODUCT($A$1:$A$10*$B$1:$B$10)

$A$1:$A$10*$B$1:$B$10 は、分割出来ません。したがって、この数式の中でのエラーは、そのまま、元の数式に反映されます。

ご自分で、ユーザー定義関数を作ってみれば分かります。VBAでも、同じように作ることが可能です。一度、試してみるとよいです。

こんばんは。

配列計算をしているのは言うまでもありませんが、この、SUMPRODUCT は、必ず、内部のひとまとまりから計算するという性質を持っています。ただ、VBAのように左から時系列かどうかは、言語が違いますから、分かりません。しかし、この引数は、パラメータ配列になっています。そして、その引数それぞれの有効値を調べて、それを演算出来る値かどうか調べます。

文字列を入れてもエラーにならないのは、元々、そこに注釈などを入れるために考えられたものです。値を文字列か数値かを精査して演算...続きを読む


人気Q&Aランキング

おすすめ情報