
ベストアンサーにさせて頂いた方のやり方で別な問題点が出てきたので再び同じ質問です。
画像の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列の数値と比較したときに
小さい方を合計として出したいのです。
どなたか分かる方いらっしゃいましたらよろしくお願いいたします。

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セル選択時の数式バーを確認して数式が中括弧で挟まれて {=......} いたら、
正しく配列数式として確定できています。
必要なら セルの結合を適用し直してください。
#気を付けたつもりですが、もし検証漏れがあったりしたら、ごめんなさい。
ご指摘あれば、対応するようにします。
試してみて、何かあったら補足欄にでも書いてみてください。
以上です。
すごい、完璧です!
表のレイアウトを変えることなく、数式だけ短くまとめて下さり
編集のし易さと正確さからcj_moverさんをベストアンサーにさせて頂きます。
ありがとうございました。大変、助かりました。
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キーで確定しても問題ありません。

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
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))
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の値を使用するのか記載しているセル値を使用するのか目視で確認出来る方法をとったほうが間違いは減るし、修正も楽だと思います。
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)を合計をしています。
以上、お試し下さい。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Formulaプロパティーを使ってセルに数式を組んだのですが簡潔にしたい。 3 2022/08/21 20:51
- Excel(エクセル) 表示形式、文字列セル(列)に数式を入力するには マクロ 1 2022/09/18 10:53
- Visual Basic(VBA) ExcelVBAでDo Until loopのネスト、IF文を使って一致する物と一致しない物としたい 11 2022/12/24 17:46
- Excel(エクセル) エクセル VBA For Next 繰り返しの書き方を教えてください 6 2022/09/01 14:11
- 会計ソフト・業務用ソフト Excel IF構文内の計算式を有効にする方法 2 2023/03/22 11:27
- Excel(エクセル) IFERROR(IF()IF())のような形の構文が作れません 2 2023/02/05 17:51
- Excel(エクセル) アウトラインの小計のやり方 1 2023/03/20 11:51
- Visual Basic(VBA) VBAの繰り返し処理について教えてください。 3 2022/08/02 13:21
- Excel(エクセル) Excelで睡眠時間をもとに判定したい 6 2022/08/19 13:47
- Excel(エクセル) マクロを簡潔にしたい 6 2022/09/16 10:37
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルの関数について
-
Excelで4択問題を作成したい
-
エクセル
-
エクセル GROUPBY関数について...
-
エクセルの複雑なシフト表から...
-
エクセルシートの見出しの文字...
-
Amazonでマイクロソフトオフィ...
-
エクセルについて
-
勤怠表について ABS、TEXT関数...
-
グループごとの個数をカウント...
-
グループごとの人数のカウント
-
グループごとの人数のカウント
-
エクセルのリストについて
-
【マクロ】変数に入れるコード...
-
エクセルの表で作業してます。 ...
-
【マクロ】別ファイルへマクロ...
-
【マクロ】左のブックと右のブ...
-
【マクロ】【相談】Excelブック...
-
9月17日でサービス終了らし...
-
【マクロ】WEBシステムから保存...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
9月17日でサービス終了らし...
-
エクセル
-
【マクロ】WEBシステムから保存...
-
エクセルの循環参照、?
-
エクセル ドロップダウンリスト...
-
エクセルのdatedif関数を使って...
-
特定のセルだけ結果がおかしい...
-
【マクロ】A列にある、日付(本...
-
【マクロ】EXCELで読込したCSV...
-
【マクロ】アクティブセルの時...
-
【エクセル】期限アラートについて
-
iPhoneのExcelアプリで、別のシ...
-
【関数】同じ関数なのに、エラ...
-
Excelの新しい空白のブックを開...
-
【マクロ】3行に上から下に並...
-
【マクロ】宣言は、何のために...
-
VBA チェックボックスをオーバ...
-
Excelについての質問です 並べ...
-
【マクロ】アクティブセルの2...
-
【関数】不規則な文章から●●-●●...
おすすめ情報