- ベストアンサー
エクセルIF文を使って値に応じた判定を行う方法
- エクセルのIF文を使って、特定の条件に基づいて値の判定を行いたい場合、ROUNDUP関数を使うことで短く記述することができます。
- 指定された条件に従って、値が減少していく場合は、ROUNDUP関数を使用して値を切り上げることで、3の倍数で値が減少する仕組みを作成することができます。
- ただし、記述した式が動作しない場合は、特に条件式の部分に問題がある可能性があります。式の正しい動作を確認するために、個々の条件を確認し、必要に応じて修正する必要があります。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
http://okwave.jp/qa/q7201524.html こちらの質問でNo.2の回答を書いた者です。 新しく質問を投稿しなおすのであれば、前の質問は締め切ってください。 >I列とO列は500件程度のデータが入っているんですよね。 >シート2のE3に判定結果とおっしゃいますが、その判定とは500件のデータ1件1件に対して個別に判定を行うのか、500件すべての合計や平均などから判定を行うのかがまずわかりません。 と書いたのですが、今回の質問を見てもその点は明確ではありませんね。 >=IF('シート1'!I:I=0,“ “, ROUNDUP(シート1!O:O/-5,0)*3) このような式をE3に入力した場合、一見I列やO列全体を参照する式のようにみえますが、実際には式が入っているセルと同じ行の値、つまりI3とO3しか参照しません。 思うような結果が得られていない原因は、そのあたりにある可能性もあります。 それと他の方も指摘されていますが、 ・Oの値がちょうど-5のときは0なのか3なのか? ・Oの値がちょうど-10のときは3なのか6なのか? など、Oが範囲の境目ちょうどの値の場合にどちらになるかが不明瞭です。 こういう場合は、片方を<ではなく≦で表していただいた方が明確になります。
その他の回答 (6)
- don9don9
- ベストアンサー率47% (299/624)
セルの値の範囲ごとに一定の値を返したい場合は、検索関数が使いやすいと思います。 検索関数については参考URLをご覧ください。 以下、LOOKUP関数を使った方法になります。 シートを一つ追加します。(名前を「シート3」とします) このシート3のA1:B8に、以下のデータを入れます。 A1に-40、B1に21 A2に-35、B2に18 A3に-30、B3に15 A4に-25、B4に12 A5に-20、B5に9 A6に-15、B5に6 A7に-10、B7に3 A8に-5、B8に0 E3の式は =IF(シート1!I:I=0,"", IF(シート1!O:O<-40,24,LOOKUP(シート1!O:O,シート3!A:A,シート3!B:B))) となります。 LOOKUP関数はリストから検索値を昇順に見ていくため、リストの最初の値(この場合はA1セルの値)より小さい値が来ると#N/Aエラーを返します。 ですから、O列の値が-40より小さい場合は24を返し、それ以外の場合はLOOKUP関数でシート3のリストを昇順に見て該当する値を返す、という式にしています。 この場合、O列の値が-5より大きい場合はすべて0を返します。
お礼
複数のシートを使うこと、Lookup関数を使うとよいことはわかってきました。整理してもう少しシンプルにしていきます。ご教授感謝します。
- mt2008
- ベストアンサー率52% (885/1701)
I列、O列の値の何を対象とするんでしょうか。 500件程度有る列の話しでありながら結果をE3セルと指定しているので、何をしたいのか良く判りません。 ・同じ行のI列、O列が対象ですか?(E3セルならI3、O3) ・O列の合計値または最小値、最大値を見れば良いのですか? 前者でしたら↓こんな感じです。 =IF(シート1!I3="","",-3*ROUNDDOWN(MAX(-40,シート1!O3)/5,0)*(シート1!O3<0)) -5、-10丁度などの時にどうするのか不明でしたので-35<=O<-40 で21となるようにしました。 あと、カテゴリの見直しもお勧めします。
お礼
同じ行のI列、O列が対象です。 本来この話はC列とOI列2つの条件に対して500件のデータ1件1件、個別に突合させ、判定結果をR列に表示させるというものだったのでした。 それを部分的に切り取ったため、また一つのシートで処理しきれず、2つのシートを使おうとしたために、このように他者にとって意味不明な質問となってしまいました。 まずやりたいことを明確にしたいと思います。 ご指摘感謝します。
- KURUMITO
- ベストアンサー率42% (1835/4283)
難しく考えてしまったようですね。 =IF(Sheet1!I:I=0,"",IF(SUM(Sheet1!I$1:I$1000)<=0,IF(SUM(Sheet1!I$1:I$1000)<-40,24,-1*ROUNDDOWN((INT(SUM(Sheet1!I$1:I$1000))+1)/5,0)*3),""))
お礼
一つのセル式に関数が4つも入ってるのは見たことがありません。 でもひるんではいけないですね。ご指摘感謝します
- KURUMITO
- ベストアンサー率42% (1835/4283)
シート2のE3セルには次の式を入力してはどうでしょう。 =IF(SUMPRODUCT((Sheet1!I$1:I$1000<>"")*(Sheet1!O$1:O$1000))<=0,IF(SUMPRODUCT((Sheet1!I$1:I$1000<>"")*(Sheet1!O$1:O$1000))<-40,24,-1*ROUNDDOWN((INT(SUMPRODUCT((Sheet1!I$1:I$1000<>"")*(Sheet1!O$1:O$1000)))+1)/5,0)*3),"") なお、-40より小さかったら24の意味は-41になって24で、-40では21という意味になりますがそれでよいのですね。
お礼
細かいところまでまだ注意がいってないということがよくわかりました。感謝します
- tomtzr
- ベストアンサー率41% (7/17)
=IF('シート1'!I:I=0,"",IF('シート1'!O:O<-40,24,(ROUNDDOWN('シート1'!O:O/5,0)*-3)))) で如何でしょうか
お礼
この形が正解に近いということは理解できて来ました。感謝します
- pentium100
- ベストアンサー率45% (689/1517)
-40より小さかったら24 -40より大きかったら21 は分かりますが、 「-40ちょうど」の時はどうなるのか書いていませんね。 -40のときは24でいいのかな?(つまり-40以下の時、24) とりあえず仮定して、こう書いてみました。 =IF('シート1'!I:I=0,"",IF('シート1'!O:O>=0,0,ROUNDDOWN('シート1'!O:O/5,0)*-3))
お礼
じっくり考えて作ってないということがよくわかりました。 整理します
お礼
OKWAVEで質問したものが、こちらにも表示されたようですね。申し訳ありません 500件のデータ(-40から50までの値がランダムに入っている)1件1件に対して個別に判定を行います 本来同一シート状でOI列の値に応じて、判定結果をR列に表示させたかったのです。 ところが、OI列の値で判定する前に、まずC列(1から14の値がランダムに)の値で判定するために、シートを2つ使うという複雑なことになっていました。 2つの条件に対し、500件のデータ一つ一つを突合させるやり方、また不等号の境界線を明確にさせる やりたいことが整理されていません ご指摘感謝します。