地元の役所が公表している「年齢別人口」というデータがあります。(下図)

 

ご覧のように、この地域に住む人口を年齢ごとにまとめた表データであり、5歳ずつでの“小計”も記載されています。
上図では、A列に「0 - 4」「5 - 9」「10 - 14」などと記載される年齢区分の行がそれです。

ちなみに、B7セルには「=SUM(C7:F7)」と入力され、C7セルには「=SUM(C8:C12)」、以下同様にその年齢区分の合計を SUM関数を使って求めています。

この表データを槍玉に上げるつもりはありませんが、この表データのように数行ずつで小計を求めることは他の分野でも見かけます。
今回はこのような複数行ずつの小計を求める方法をいくつかご紹介します。

元となる表データを作り直しておきました。(下図)

 

(1) SUMIF関数を使って

作図の都合で、一時的に C~E列を非表示にしました。
そして、G、H列に作業用の列を設け、I列を集計用の列として使います。(下図)

 

G2セルに「=INT(A2/5)」として最下行までコピーします。
これで、G列には 5歳ずつの年齢区分に対応する値が入ります。
また、H列は単に 0から始まり年齢区分の最終値までの連続データを列記します。

そして、I2セルには「=SUMIF($G$2:$G$122,H2,$B$2:$B$122)」と入力し、H列に対応する分だけコピーします。
これが 5歳ずつの年齢区分の小計となります。

SUMIF関数の書式は次のようになります:
  =SUMIF(検索範囲, 検索条件, 合計範囲)

この例では、第1引数「検索範囲」として G列の年齢区分対応値の範囲を、第2引数「検索条件」として H列の年齢区分対応値を指定し、その条件に合致する B列の数値を合計して返します。

(2) OFFSET関数を使って

ここでも、作図の都合で、一時的に C~E列を非表示にしました。
そして、G列に作業用の列を設け、H列を集計用の列として使います。(下図)

 

G列は単に 0から始まり年齢区分の最終値までの連続データを列記します。

そして、H2セルには「=SUM(OFFSET($B$2,G2*5,,5))」と入力し、G列に対応する分だけコピーします。
これが 5歳ずつの年齢区分の小計となります。

OFFSET関数は、基準とするセルから指定された行数と列数だけシフトした位置にあるセル範囲の参照を返します。
OFFSET関数の書式は次のようになります:
  =OFFSET(基準, 行数, 列数, [高さ], [幅])

この例では、第1引数「基準」とするセルが B2、そこから第2引数「行数」(G2×5)だけシフトしたセルから第4引数「高さ」(5行)の範囲を返します。
ここでは、行方向だけを参照すればよいので、第3引数「列数」、第5引数「幅」は省略しています。
例えば、G3(=1)に対応する「OFFSET($B$2,G2*5,,5)」は「B7:B11」セル範囲を示し、その合計を SUM関数で求めています。

(3) 「小計」機能を使って

表データの左側に年齢区分を表わす表記を入力しました。
ここでも、作図の都合で、一時的に D~F列を非表示にしました。(下図)

 

例えば A2セルには「=INT(B2/5)*5&" - "&INT(B2/5)*5+4」と入力し、最下行までコピーしています。
これは年齢区分を表わせばよいので、上記 (1)の G列のように数列でも構いません。

この表データの任意のセルを選択して、[データ]-[アウトライン]-[小計]をクリックします。
すると「集計の設定」ダイアログが現れます。(下図)

 

「グループの基準」で A列の「年齢区分」、「集計の方法」で「合計」、「集計するフィールド」で「日本人(男)」などを選択し、最下行の「集計行をデータの下に挿入する」にチェックを入れて「OK」します。
いかがでしょう。
下図のように、5歳ずつの年齢区分の小計が求まり、それぞれの年齢区分の下に集計行が挿入されて表示されました。

 

例えば C7セルには「=SUBTOTAL(9,C2:C6)」というように SUBTOTAL関数を使って集計され、また、最下行には「総計」として全体の合計が「=SUBTOTAL(9,C2:C146)」として求められています。

「小計」機能については「Excel アウトラインで小計」記事でご紹介済みですが、ここでのポイントはまとめるための列「年齢区分」を作ることにあります。
元の表データにはこれがなかったため、一工夫が必要だったというわけです。