
ベストアンサーにさせて頂いた方のやり方で別な問題点が出てきたので再び同じ質問です。
画像の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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで、Scroll Lockと同じ...
-
表計算ソフトでの様式の呼称
-
エクセルでフィルターした値を...
-
【画像あり】【関数】指定した...
-
エクセルシートの見出しの文字...
-
【マクロ】【画像あり】4つの...
-
【関数】3つのセルの中で最新...
-
【マクロ】excelファイルを開く...
-
【マクロ】【画像あり】❶ブック...
-
【マクロ】【画像あり】ファイ...
-
エクセルに写真が貼れない(フ...
-
【関数】=EXACT(a1,b1) a1とb1...
-
Excelに貼ったXのURLのリンク...
-
【マクロ】既存ファイルの名前...
-
LibreOffice Clalc(またはエク...
-
Dir関数のDo Whileステートメン...
-
空白のはずがSUBTOTAL関数でカ...
-
【マクロ】【画像あり】4つの...
-
セルにぴったし写真を挿入
-
EXCELのVBAで複数のシートを追...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【マクロ】実行時エラー '424':...
-
エクセルのVBAで集計をしたい
-
Office2021のエクセルで米国株...
-
【画像あり】オートフィルター...
-
vba テキストボックスとリフト...
-
他のシートの検索
-
【マクロ】【相談】Excelブック...
-
【マクロ】【配列】3つのシー...
-
【マクロ】元データと同じお客...
-
【マクロ】数式を入力したい。...
-
【マクロ】左のブックと右のブ...
-
エクセルの関数について
-
エクセルのリストについて
-
【マクロ】変数に入れるコード...
-
エクセルシートの見出しの文字...
-
【マクロ】excelファイルを開く...
-
【関数】3つのセルの中で最新...
-
エクセルの複雑なシフト表から...
-
【マクロ】【画像あり】❶ブック...
-
LibreOffice Clalc(またはエク...
おすすめ情報