

基本的なことなのかもしれませんが、方法がわからないので教えてください。
Excelの表で、A1の次はA5、A9というように4行ごとの数字の和を集計したいです。
今は、とても原始的な方法で、「=A1+A5+A9」という具合に足しているのですが、これですと数が増えてくると大変です。
また、A2から4行ごとに足したいこともあり、とても不便です。
そこで、行番号を取得して、4で割り切れるものだけ指定の数まで足していきますよ、という式を組み立てたいと思いました。
sumifと行番号を取得する関数と割り算のあまりを返す関数を組み合わせればできると思うのですが、どのように書くのが簡単でよいでしょうか?
私が、思うのは
=sumif(A1:A100,MOD(ROW(),4))
としているのですが、これでよいでしょうか?
また、A2から4行おきの場合は
=sumif(A2:A100,MOD(ROW()+1,4))でよいのでしょうか?
ほかによい方法があったり、そもそもこの式が間違っているのかよくわかっておりません。
ご指導をお願いいたします。
No.6ベストアンサー
- 回答日時:
こんにちは。
>どうも、sumproductをたくさん使うとエクセルシートの計算が遅くなってしまうように思うのですが、気のせいでしょうか?
キャッシュメモリからスワップが発生して、計算が遅くなってしまう現象だと思います。実際に、だいたい、10~100倍の計算スピードが落ちます。その限界数が、参照される対象計算セルが、5,500個ぐらいのはずです。また、通常の関数は、引数の変更によって、その対象の関数の内部だけが計算するようにできていますが、配列数式の場合は、ひとつの関数の変化が全体に及ぼすので、あまり大量ですと、とても計算に時間が掛かるようになってしまいます。これを参考にしてワークシートを設計する必要があります。
その場合、計算式を分散する、マクロの計算に替える、データベース関数にする、などの措置が行われます。Office 2007 ですと、計算方法が変わりますから、スピードが落ちることは目立たなくなります。
なお、作業列を設けるなら、例えば
H1 ~H100 の範囲まで
=MOD(ROW(A1),4)=1
をコピーして、
このような数式で、解を得られます。
=SUMIF(H1:H100,TRUE,A1:A100)
別に、どちらでもよいと思います。
なお、速い遅いの計算速度は、よほど大量にならないと、秒単位にはなりません。一般の数式は、だいたい、10ms (1000分の1秒)以下ですが、100msぐらいまで、あまり気にならないのですが、500msだと、もう認知できるレベルになります。数秒や数10秒になれば、その都度、再計算が発生してしまうので、使用上の支障が出てしまいます。
No.5
- 回答日時:
[回答番号:No.2この回答へのお礼]へのコメント、
》 計算が遅くなってしまうように思うのですが、気のせいでしょうか?
そう思うのなら、他人に頼らず、自分でストップウォッチ片手に計測してみれば済むことです。
案の定だったか、思い込みだったか、参考までに教えてください。
なお、作業列を設けても構わないのなら、固執される SUMIF が使えます。
なお、配列数式 {=SUM((MOD(ROW(A1:A100),4)=1)*(A1:A100))} でもよろしいかと。でも、「計算が遅くなってしまうように思う」のかな?
ご回答ありがとうございました。
一行のみ利用してみたところ、速度は変わりませんでした。
ただ、ある一定の個数を超えたところから再計算(CPUはCore2Duoの1.6Ghz)で1分を超える時間にかかってしまうようになりました。
セル数で言うと、1万を超えるあたりだと思うのですが、式が複雑担ってくるとある時点で急に遅くなるようです。
No.4
- 回答日時:
=sumif(A1:A100,MOD(ROW(),4))
は良いところまで来ていると思いますが、SUMIF関数だけではROW関数が、式を入れたセルのみになってしまいます。
作業列を利用するか、配列関数を利用するかになります。
例えば、B列に =MOD(ROW(),4) と入れて下までコピィしておけば、0,1,2,3と繰り返し表示されるので
後は SUMIF関数でご希望の集計が出来ると思います。
さて、これを作業列を使わずに処理しようとすると配列関数を使用することになります。
空いているセルに
=SUM((A1:A100)*(MOD(A1:A100,4)=0)) と入れて Ctrl+Shift+Enter で決定します。式が{}で囲まれて配列関数をして認識されます。
A1の値 * MOD(A1,4)=0 の結果(条件が成り立つ場合は 1、違う場合は 0)の計算、それをA1~A100まで繰り返して、それぞれの結果の合計(SUM)というわけです。
別のセルに =SUM((A1:A100)*(MOD(A1:A100,4)=1)) で同様
=SUM((A1:A100)*(MOD(A1:A100,4)=2))
=SUM((A1:A100)*(MOD(A1:A100,4)=3)) でも同様にします。
SUMPRODUCT関数も配列関数の一種ですので同様の考え方です。
作業列に相当する部分をパソコンの内部で処理しますので沢山使用するとある時点で急に作動が遅くなることを感じると思います。
今回の場合、どうしても作業列が必要なので、式を四つ入れて遅くなるようであれば、作業列を準備した方法にしてみてください。
No.3
- 回答日時:
こういう問題はエクセル関数の8合目ぐらいの問題にさしかかったといえよう。
時どき出る有名なパターンの質問なんだ。以下は、4行おきを1,4、7行・・を足す問題と捉えてやっています。
3つやり方があって
(1)4行ごとにサイン(コード)をつける。作業列を使う。
空き列を使うが素直な考えで、関数も簡単なものSUMIFが使える。
A。関数で
=IF(MOD(ROW()-1,3)=0,1,"")を入れて、下方向に式複写
B。複写で
例えば空き列D列D1:D3に
1
空白
空白
のデータを入れて、D1:D3をコピーし、D4:D100(データの終わりまで)範囲指定して貼り付け
そしてSUMIF関数でD列の1の行の目的の数のある列の数字をを足せばよい。=SUMIF(D1:D30,1,B1:B30)
===
(2)行が3の倍数ということを条件にして加える。
SUMIFは条件部にMOD(ROW()-1,3)=0は使えないので、SUMPRODUCT関数を使う。条件付き加算にSUMPRODUCT関数を使うのは定石。本来は内積を
出すものだが。
=SUMPRODUCT((MOD(ROW(A1:A30)-1,3)=0)*(B1:B30))
=====
(3)配列数式を使う
=SUM(IF(MOD(ROW(A1:A30)-1,3)=0,B1:B30),0)
と入れてSHIFT,CTRL,ENTERキーを同時に押す。
B列うお足すとして1-30の連続数が入っている例だと、いずれの方法でも145
ーー
ほかにVBAとかでも簡単に(3-4行のコードで)出来る。
No.2
- 回答日時:
=SUMPRODUCT((MOD(ROW(A1:A100),4)=1)*(A1:A100))
これが4行おき A1 からの場合。A2、A3、A4 からの場合は上式中の =1 をそれぞれ =2、=3、=0 に置き換えればOK。
5行おきは上式中の 4 を 5 に置き換え、かつ、A4、A5 からの場合が それぞれ =4、=0 になります。
ご回答ありがとうございました。
sumifではなく、sumproductを利用しないとうまくいかないのでしょうか?
どうも、sumproductをたくさん使うとエクセルシートの計算が遅くなってしまうように思うのですが、気のせいでしょうか?
No.1
- 回答日時:
ツールバーの[Σ](オートSUM)を使うと便利です。
和(合計)の機能です。http://www.eurus.dti.ne.jp/~yoneyama/Excel/nyumo …
Excel2007なら
http://www.eurus.dti.ne.jp/~yoneyama/Excel2007/e …
A5にA1~4の合計式を作ったら
A5をコピーして合計式を入力するセルに貼り付けてます。
コピー:
A5を選択して「Ctrl」を押しながら「C」のキーボードを押します。
貼り付け(ペースト):
式を入力するセルを選択して「Ctrl」を押しながら「V」
を繰り返します。
今後、質問される時はExcel2007とかExcel2003など
Excelの種類を明記した方が良いでしょう。
(Excel2007とExcel2003以前ではかなり違ってきます。)
書店でご利用のExcelの解りやすそうな図の多い入門書を購入することをお勧めします。
Web上にも
http://www.eurus.dti.ne.jp/~yoneyama/
http://www.aoten.jp/snack/index.html
http://kokoro.kir.jp/excel/index.html
http://www.geocities.jp/office_inoue/main.htm
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) SUMIF関数について 4 2023/06/14 13:13
- Excel(エクセル) エクセルの関数に関しての質問です。 5 2022/10/07 11:17
- Excel(エクセル) エクセル 関数について質問です。 2 2022/10/03 11:14
- Excel(エクセル) Excelで数式をそのままコピーしたい どうすればいいですか? 4 2022/09/16 02:16
- Excel(エクセル) エクセルの数式で教えてください。 1 2023/02/09 14:54
- Excel(エクセル) If関数に関する質問です。(再掲) 3 2022/10/01 20:51
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
- Excel(エクセル) Excelの空文字判定について 7 2023/01/06 13:25
- Excel(エクセル) エクセルVBAでセルに表示されているとおりの数値を取得したい(時間の計算結果) 1 2022/03/30 17:52
- その他(Microsoft Office) 従業員増減対応で当番種類の増減対応な当番表 21 2022/07/19 07:30
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで極大値を拾うには
-
エクセルVBAで別BOOKに「名前の...
-
Excelで数行間隔で離れているデ...
-
【Excel】4行ごとの和を集計し...
-
1.5以上2.5未満の個数を求める...
-
SUMIF関数の合計範囲を広くする...
-
Kingsoft(Excel)の計算...
-
EXCELで2つの数値のうち大きい...
-
Excelで隣のセルと同じ内容に列...
-
エクセルで二つの数字の小さい...
-
PowerPointで表の1つの列だけ...
-
エクセルで、2種類のデータを...
-
EXCELで 一桁の数値を二桁に
-
SUMIFとCOUNTIFを合わせたよう...
-
2つのエクセルのデータを同じよ...
-
エクセルで最初のスペースまで...
-
エクセルで文字が混じった数字...
-
Excelで半角の文字を含むセルを...
-
エクセルで特定の文字が入って...
-
エクセル 文字数 多い順 並...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで極大値を拾うには
-
エクセルで各セルそれぞれ四捨...
-
エクセルVBAで別BOOKに「名前の...
-
ネットワーク上のエクセルとリ...
-
【Excel】4行ごとの和を集計し...
-
Excel、sumifはありますが、min...
-
Excelで数行間隔で離れているデ...
-
EXCEL: 数式を含んだΣは可能で...
-
エクセル で一つおきに合計を...
-
条件付のsum,max,min関数の書き方
-
EXCEL IF関数 AND、OR条件
-
1.5以上2.5未満の個数を求める...
-
EXCELで2つの数値のうち大きい...
-
エクセルで二つの数字の小さい...
-
Excelで隣のセルと同じ内容に列...
-
PowerPointで表の1つの列だけ...
-
エクセルで、2種類のデータを...
-
エクセルでオートフィルタのボ...
-
エクセルで特定の文字が入って...
-
エクセルのオートフィルタで最...
おすすめ情報