ExcelのIF関数を使って短くまとめる方法

このQ&Aのポイント
  • ExcelのIF関数を使って、D2~7とF2~7の値を比較し、小さい方を合計する方法を教えてください。
  • 現在の式は長すぎて編集が難しいため、より簡潔な式を知りたいです。
  • また、D2~7にはC2~7を使った式が入っています。
回答を見る
  • ベストアンサー

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

ベストアンサーにさせて頂いた方のやり方で別な問題点が出てきたので再び同じ質問です。 画像のB2セルに入る数式を短くまとめたいのです。。 今のところは下記のような式で上手くいっていますが、長すぎて編集する際困ってます。 =IF(D2="",0,IF(D2<4.5,D2,4.5))+IF(F2="",0,IF(F2<4.5,F2,4.5))… +IF(D3="",0,IF(D3<3.5,D3,3.5))+IF(F3="",0,IF(F3<3.5,F3,3.5))… +IF(D4="",0,IF(D4<4.5,D4,4.5))+IF(F4="",0,IF(F4<4.5,F4,4.5))… +IF(D5="",0,IF(D5<3.5,D5,3.5))+IF(F5="",0,IF(F5<3.5,F5,3.5))… +IF(D6="",0,IF(D6<4.5,D6,4.5))+IF(F6="",0,IF(F6<4.5,F6,4.5))… +IF(D7="",0,IF(D7<3.5,D7,3.5))+IF(F7="",0,IF(F7<3.5,F7,3.5))… D2~7にはC2~7を使った式が入っています。 つまり、D,F,H,J,L,N,P,R,T,V,X列をA列の数値と比較したときに 小さい方を合計として出したいのです。 どなたか分かる方いらっしゃいましたらよろしくお願いいたします。

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

  • ベストアンサー
  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.8

こんにちは。お邪魔します。 扱い易さ優先で、B2セルだけで完結する配列数式(※後述の◆手順◆を参考にしてください)です。 =SUM(IF(ISNUMBER(C2:X7)*ISEVEN(COLUMN(C2:X7)),CHOOSE(1+(C2:X7>A2:A7),C2:X7,A2:A7))) C2:X7、A2:A7、は、絶対参照 ↓ にした方がいいかも知れませんが、そちらの都合で↑↓選んでください。 =SUM(IF(ISNUMBER($C$2:$X$7)*ISEVEN(COLUMN($C$2:$X$7)),CHOOSE(1+($C$2:$X$7>$A$2:$A$7),$C$2:$X$7,$A$2:$A$7))) 4.5、2.5、3.5、といった直値は避け、 "D,F,H,J,L,N,P,R,T,V,X列をA列の数値と比較"して、"小さい方"の合計を求めます。 セル参照を C2:X7 A2:A7 の2種類に纏めて、編集し易さも考慮しました。 参照先の変更は置換機能で2種類を書き換えるようにします。 指定したC2:X7の内、偶数列だけを比較・合計の対象にするように、ISEVEN()関数を使っています。 参照先の変更の際、もし、奇数列を比較・合計の対象に代える必要がある場合は、 ISEVEN()関数をISODD()関数に換えることも必要になります。 数値の場合だけ合計を求めるので、万が一文字列が混じっていても、 (例えば、D,F,H,J,L,N,P,R,T,V,X列のセルが =IF(条件,数値,"") のような数式だった場合などでも) 計算から除外し(※誤ってA列の値を加算することもなく)、エラーにもなりません。 もし、D,F,H,J,L,N,P,R,T,V,X列の計算対象が、確実に数値であるならば、 数式の中の ISNUMBER(C2:X7)* の部分は省略可能です。 =SUM(IF(ISEVEN(COLUMN(C2:X7)),CHOOSE(1+(C2:X7>A2:A7),C2:X7,A2:A7))) 参照先のセルでのエラー値は計算から除外した合計を返します。 ◆手順◆としては、 0)一旦、B2セルの結合を解除。 1)B2セルに上記何れかの数式を入力。 2)CtrlキーとShiftキーを同時に押しながらEnterキーを押して数式を確定。 3)B2セル選択時の数式バーを確認して数式が中括弧で挟まれて {=......} いたら、   正しく配列数式として確定できています。 必要なら セルの結合を適用し直してください。 #気を付けたつもりですが、もし検証漏れがあったりしたら、ごめんなさい。  ご指摘あれば、対応するようにします。 試してみて、何かあったら補足欄にでも書いてみてください。 以上です。

pekoouao
質問者

お礼

すごい、完璧です! 表のレイアウトを変えることなく、数式だけ短くまとめて下さり 編集のし易さと正確さからcj_moverさんをベストアンサーにさせて頂きます。 ありがとうございました。大変、助かりました。

その他の回答 (7)

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

>つまり、D,F,H,J,L,N,P,R,T,V,X列をA列の数値と比較したときに小さい方を合計として出したいのです。 集計範囲が飛び飛びになっているので1つの配列として扱えないのが難点です。 C、E、G、I、K、M、O、Q、S、U、Wの各列に数字以外の文字列が無ければ1つの配列として集計できます。 =SUM((C2:X7>A2:A7)*C9:X9*A2:A7,(C2:X7<A2:A7)*C2:X7*C9:X9) この式は配列値を扱いますので数式バーへ入力後、Ctrl+Shift+Enterで確定してください。 尚、結合セルには配列式を入力できませんのでセルの結合を解除してから入力してください。 式を入力した後でセルの結合は可能です。 式中のC9:X9には 0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1 のように列選択用のパラメーターをセットしています。 C9:X9のセルは別のセルでも良いのですが値の並びとセルの数が同じにしてください。 代替案としてSUMPRODUCT関数を使った次の式も使えます。 =SUMPRODUCT((C2:X7>A2:A7)*C9:X9*A2:A7+(C2:X7<A2:A7)*C2:X7*C9:X9) この式は通常のEnterキーで確定しても問題ありません。

pekoouao
質問者

お礼

分かりやすく画像まで載せて頂きありがとうございました。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.6

こんばんは! 手っ取り早くVBAでやってみました。 画面左下の操作したいSheet見出し上で右クリック → コードの表示 → VBE画面(カーソルが点滅しているところ)に ↓のコードをコピー&ペースト → Excel画面に戻りマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub Sample1() 'この行から Dim i As Long, j As Long, k As Long, lastRow As Long, myVal lastRow = Cells(Rows.Count, "A").End(xlUp).Row If lastRow > 1 Then Range(Cells(2, "B"), Cells(lastRow, "B")).ClearContents End If For i = 2 To lastRow Step 6 For k = i To i + 5 For j = 4 To 24 Step 2 If Cells(k, "A") > Cells(k, j) Then myVal = myVal + Cells(k, j) Else myVal = myVal + Cells(k, "A") End If Next j Next k Cells(i, "B") = myVal myVal = 0 Next i End Sub 'この行まで ※ 関数でないので、データ変更があるたびにマクロを実行する必要があります。 お望みの方法でなかったら無視してください。m(_ _)m

pekoouao
質問者

お礼

ありがとうございました。

  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.5

ちょっと長くなるけど =SUMPRODUCT(ISEVEN(COLUMN($C$2:$X$7))*(($C$2:$X$7>0)*($C$2:$X$7<=$A2:$A7)*$A2:$A7+($C$2:$X$7>$A2:$A7)*$C$2:$X$7))

pekoouao
質問者

お礼

ちょっと上手くいきませんでした。。 でもありがとうございました。

noname#203218
noname#203218
回答No.4

各行でA列数値以上の場合の集計とA列数値以下の集計をY列以降にします。 ここではY列、Z列に数式を挿入するものとします。 Y2式=SUMPRODUCT((MOD(COLUMN(D2:W2),2)=0)*(D2:W2>=A2))*A2 Z2式=SUMPRODUCT((MOD(COLUMN(D2:W2),2)=0)*(D2:W2<A2)*(D2:W2>0)*(D2:W2)) Y2、Z2式をY7,Z7までコピペ B2式=sum(Y2:Z7) Y2式はD2~W2の偶数列かつ、数値がA2以上のセル数をカウントしA2の値を掛ける Z2式はD2~W2の偶数列かつ、数値が0以上A2未満のセル数の数値を集計 Y2とZ2は似ていますが、条件に当てはまるセルの個数を計算しているのか、数値を合計しているのかの違いがありますのでお待ちがないように。 エクセルの関数はバージョンによって利用できる関数が違いますので質問するときには必ずバージョンを記載するようにして下さい。 このような集計がある場合は1列置きに集計するような作表は不利です。 列数を増やすのではなく行数を2倍にする方が計算はしやすくなりますので、作表自体を工夫されたほうが良いかと思います又、全ての数式を纏める必要も無いでしょう。 今回のような比較し、数値を変動されるのであれば別表でifでA2の値を使用するのか記載しているセル値を使用するのか目視で確認出来る方法をとったほうが間違いは減るし、修正も楽だと思います。

pekoouao
質問者

お礼

ありがとうございました。

  • jcctaira
  • ベストアンサー率58% (119/204)
回答No.3

pekoouao さん 配列数式を使用すればできるかと思います。 =SUM(IF(D2:F7>=4.5-MOD(ROW(D2:F7),2),4.5-MOD(ROW(D2:F7),2),D2:F7)) を入力後、『Enter』 ではなく 、『Ctrl』+『Shift』+『Enter』と3つのキーを同時に押して下さい。 そうすれば、式の両方に大カッコ { } が表示されると思います。 {=SUM(IF(D2:F7>=4.5-MOD(ROW(D2:F7),2),4.5-MOD(ROW(D2:F7),2),D2:F7))} 簡単に説明しますと  ・D2やF6等偶数行は4.5 D3やF5等奇数行は3.5を最大としています。   4.5-MOD(ROW(D2:F7),2) の式で4.5or3.5になるようにしています。  ・後は全ての配列(D2:F7)を合計をしています。 以上、お試し下さい。

pekoouao
質問者

お礼

ちょっと希望通りにはいきませんでした。。 でもありがとうございました。

回答No.2

やりたいことがぼやけていて良く分かりません… 結局、合計を出したいのですか?それとも比較したいのですか? 上記に示している式では、合計を出しているようにしか見えません。 最小値を出したい、とのことでしたら =MINで良いのではないでしょうか?

pekoouao
質問者

お礼

比較した上で最小値の合計を出したかったのです。

  • Picosoft
  • ベストアンサー率70% (274/391)
回答No.1

どれくらい短くまとめたいのでしょうか? IF(D2="",0,IF(D2<4.5,D2,4.5))   ↓ MIN(N(D2),4.5) と置き換えていくと半分くらいの長さになりますが…… ※A列の数値と比較したいならMIN(N(D2),N(A2)) さらに短く、となるとユーザ定義のワークシート関数を作るとか、隠し行を作るとかになるかと。

pekoouao
質問者

お礼

ありがとうございました。

関連する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関数について

    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関数も含めて出す方法

    初歩的だと思うのですが・・ 異なった文字が入った各セルの合計を別セルにてIFを使用し、数字を出しながらなおかつ集計する方法がわかりません。  A   B    C   D 1 い   ろ 2     は   に   3 ほ       4 へ   と 5 A列に文字が入ると常に 500 B列に文字が入ると常に 200 C列に文字が入ると常に 100 として、D列にA-Cの合計(何もなければ空欄)を出したいのです。この場合だとD1=700, D2=300, D3=500...となるように。 IF(A1="","",500)+IF(B1="","",200)+IF(C1="","",100) のちゃんとした関数式を教えてください。よろしくお願いします。。

  • Excelセル関数入力

    セルC2の合計がF1の数値と同じになるようにセルB4に数式を入力したいのですが。D列が数式となります。尚、F1の値は都度手入力で変更されます。数式を何度か入れたのですが数値がちぐはぐになりうまくいきません。B4に入力する関数もしくは何か良い方法はないでしょうかよろしくお願いします。

  • EXCELで入力された式の値を求めて自動計算

    A B C D E 1|データNO |数値1| 数値2| 数値3| 2| 1| 0.3 | 0.2 | 0.5 | 3| 2| 0.3 | 0.2 | 0.5 | 4| 3| 0.3 | 0.2 | 0.5 | -------------------------------------------- 10| 2/1| 数式1| 数式2 | 数式3 | 11| 3/2| 数式4| 数式5 | 数式6 | 12| 【求めたい値】 数式1には=C3/C2、数式2には=D3/D2、数式3には=E3/E2 数式4には=C4/C3、数式2には=D4/D3、数式3には=E4/E3 B列の2/1というのをそのまま式にしたいです。 2/1、3/2などは規則性はありません。その都度変わります。 C列の式ではC列の値を、D列の式ではD列の値を用います。 関数で=MATCH(LEFT(D34,SEARCH("/",D34,1)-1),D1:D23,0))と入れ、C3の値を求めようと思いましたが この時点でエラーになりました。=MATCH(2,D1:D23,0)だと大丈夫なのですが・・・。 関数でやるととても式が長くなりそうなので、VBAの方が良いかとも思っています。 どのようにコード、もしくは式を書けば希望の値が得られるでしょうか? VBAの場合は2/1などの数値を入れた時点で自動計算できれば嬉しいです。 よろしくお願いします。

  • Excelの入力式について

    Excelの入力式について教えてください。 たとえば、A1セル~F1セルに数値が入っていて、G1セルA1+B1の値、H列にC1+D1の値 I列にE1+F1の値としたい場合、 G1セルに数式を入れてH列にコピーするとB1+C1になってしまいます。 上手くやる方法はないのでしょうか。 1列ずつわざわざ空白列を作るのは嫌ですし、たくさんあったら数式を打ち込むのも大変です。。。

  • Excel2002 IF関数の組み合わせ

    初歩的な問題ですが、組み合わせ方が他のサイトに例が見つからなかったので質問します。 IF関数で、 D列に、『もしA列が○○なら、B列の数値をもってきなさい。そうでなければC列の数値を持ってきなさい。』 というような単純な数式が入っているとして、ここに別の条件をまた付け加えたくなったので、どうすればよいか 質問させて下さい。 内容は、上記の条件のあとに、『E列が△△なら、F列の数値を持ってきなさい。』 というものです。 式としては IF(A1="大阪",B1,C1) 追加したいのは IF(E1="国語",F1,C1) ということで、全く違う条件を追加したい場合はどのように組み合わせればよいでしょうか?

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

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

  • エクセルで、セルの塗りつぶし色を判別する関数はあるのでしょうか。アドバイス下さい。

    ●特定の色のセルに入っているデータの合計値を求めたいのです。マクロではなく、セルの中に関数(if...のような関数)を埋め込んで、使いたいのです。 ●質問が長くなるので、具体的なことは省略しますが、例えば、セルD30に、「if(セルB30の塗りつぶし色=赤, B30, C30)」のような関数を入れることは、可能なのか、というのが質問です。 ●この式の意図は、セルA30のデータを見て、セルB30とC30のどちらにあるデータを集計に採用するか(人間が感覚的に)判断して、採用する方を赤で塗りつぶしておくことで、セルD30には赤色セルのデータが入るだろう、ということです。(数値的な判断ができない事情があります) ●これが可能なら、D列の下のほうに「=sum(d1:d50)」と入れれば、B列とC列のうち、赤色セルだけを集計できると思います。

  • エクセルのROUND処理について教えて下さい。IF関数で条件指定

    詳しい方、教えて下さい!! エクセルで見積書を作成していて、素人ながら一応数式を入力して金額 が算出できるようにしています。その中で、ROUND処理をIF関数で条件 を指定した中で異なる桁数の数字に行いたいのですが、どうすればよい か分からず試行錯誤しています。 つまり、    A  B  C   D     E    F    G 1  1.0 式 空白 106,300 80% 85,000  85,000 2 89.0 m 1,900 169,100 80%  1,500 133,500 というデータで、 Cのセルには=IF(OR(A1=1,A1="",F1=""),"",ROUND(F1/E1,-2)) Dのセルには=IF(OR(A1="",E1=""),"",IF(A1=1,ROUND(F1/E1,-2),A1*C1)) Gのセルには=A1*F1 の数式の結果がそれぞれ入っています。 見積として客先に提出するため、Aのセルが1の場合はCのセルを空白に してDのセルにのみ数式の結果が出るようにしたいのです。 が、F1のセル(5桁)とF2のセル(4桁)のように数値の桁数が違う場合 に、四捨五入を行う桁数をそれぞれにF1=-2、F2=-1とする方法が分から ず困っています。桁数が違う場合には手入力で四捨五入の桁数を変えれ ばよいのでしょうが、それだと手間がかかる上に桁数の変更を忘れてし まうことがあり、間違いのもとなので、間違いにくい方法で数式を組み たいのです。 詳しい方、解決方法があれば回答お願い致します。

専門家に質問してみよう