- ベストアンサー
エクセルで3行おきの集計
以下のような表で、3行おきの集計がしたいのですが どんな関数を使ったらいいのかわかりません。 1月 2月 ・・・ 12月 純売 350 850 1020 A 粗利 222 551 669 率 63% 65% 純売 500 900 B 粗利 352 450 率 ・ ・ Z 純売だけの当月の計と、粗利だけの当月の計を表の一番下に表示させたいのです。「純売・粗利・率」という2列めのサイクルは、表の一番下まで全く同じです。 結構大きな表なので、数字の入っているセルをピックアップして、足し算するのにも限界があります(・・・最初はそうしていました・・・泣) 当方、恥ずかしながらエクセル初級レベルですので・・・どうか皆さんの力を貸してください。お願いします!
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
普通は上級者の問題として、配列数式を使った解が載っています。 (例データ)A1:A9 1 2 34 2 34 56 3 43 23 (関数式)2,5、8行を合計 =SUM(IF(MOD(ROW(A1:A9),3)=2,A1:A9,0)) と入れて、SHIFTキーとCTRLキーを押しつつ ENTERキーを押す。 先頭と後尾に{ }がつき(配列数式) 結果は79になります。 #2のお答えとよく似ているが最後と「SHIFTキーとCTRLキーを押しつつENTERキーを押す。」が書いてないので別解でしょう。 MOD(ROW(A1:A9),3)=2の2を1や0に変えて他の行の合計を求められます。
その他の回答 (4)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
#1の方と同じく、私も単純にSUMIFでいいと思います 純売 =SUMIF($A$1:$A$6,"純売",B$1:B$6) 粗利 =SUMIF($A$1:$A$6,"*粗利",B1:B6) =SUMIF(項目を調べる範囲,調べる項目,合計する範囲) で、項目を調べる範囲は、絶対参照で固定して、式を横にコピーします。 あと、それとは、別に飛ばし合計する関数を作ってみました。 Public Function sumstep(c As Integer, r As Integer, range As range) Dim s,i,j s = 0 For i = 1 To range.Rows.Count Step r + 1 For j = 1 To range.Columns.Count Step c + 1 s = s + range.Cells(i, j) Next j Next i sumstep = s End Function 標準モジュールに貼り付けて使います。 使い方 =sumstep(列方向にとばす数,行方向にとばすかず,範囲) 純売 =sumstep(0,2,B1:B6) 粗利 上の式を下にコピー
お礼
うわ~すごいですね~ 皆さん、尊敬します・・・(感激) おもしろそうなので、月末のバタバタが終わったら、ちょっとトライしてみます。 ありがとうございました!
- taocat
- ベストアンサー率61% (191/310)
A B C D 1 項目 1月 2月 3月 2 純売上 100 150 200 3 粗利益 30 50 80 4 利益率 5 純売上 6 粗利益 7 利益率 8 純売上 9 粗利益 10 利益率 ------------------------------------------- 11 (売計) 12 (粗計) 13 (率) このような表(簡単の為に行を少なくしてあります)だとして 今回の場合は純売上とか粗利益とかキー項目があるので 面倒な配列数式は使わなくてもできます。 B11(1月純売上合計)セルに =SUMIF($A$2:$A$10,"純売上",B2:B10) 又は =SUMPRODUCT(($A$2:$A$10="純売上")*B2:B10) B12(1月粗利益合計)セルに =SUMIF($A$2:$A$10," 粗利益",B2:B10) 又は =SUMPRODUCT(($A$2:$A$10="粗利益")*B2:B10) 1月計が終わったら、「1月計」セルのフィルハンドルを、2,3,4月・・・と列方向にドラッグして式をコピーする No1の回答にもありますが、今回のように、「純売上」等の「キー項目」がある場合は、2行置き(3行置きは間違い)とかは考える必要はありません。 以上です。
お礼
そうなんですね! 間があいている事を気にしすぎて、難しく考えすぎたようで・・・ SUMIFは、キー項目の隣の列に数字がないと使えないのかと勘違いしてました。 しかし、いろいろな回答があって、どれも正解!って、面白いですね~がんばってエクセル覚えます!
- s_yoshi_6
- ベストアンサー率73% (1113/1519)
C2:C100に合計したいデータで、純利がC2、C5…、粗利がC3、C6…として 純利合計:=SUM(IF(MOD(ROW(C2:C100),3)=2,C2:C100)) 粗利合計:=SUM(IF(MOD(ROW(C2:C100),3)=0,C2:C100)) SUM(IF(MOD(ROW(C2:C100),3)=2,C2:C100)) は、「行番号を3で割ったときに2余るセルを合計する」という意味なので、行がずれたら「=2」の2の部分が0または1に変わる場合があります。 下記ページを参考にしてみて下さい。 http://www.h3.dion.ne.jp/~fukusima/waza/ura063.html
お礼
ありがとうございます! ROWやMODなんて、使ったことありませんが、がんばってやってみます!
- radio98
- ベストアンサー率18% (16/88)
SUMIF関数でいけそうな気がします。 "純売り" という言葉がある行のある列を合計するという感じです。 3行おきと考えてしまうと難しいですけどね。
お礼
SHIFT+Ctrl+Enterがミソですね! この式の意味をよく理解して、どんどん活用したいと思います。 ありがとうございました!