業務効率化

【Excel・スプレッドシート対応】FILTER関数で1行おき・1列おき・一つ飛ばしの合計を出す方法

スポンサーリンク

ExcelやGoogleスプレッドシートで集計をしていると、「1行おきに合計したい」「1列おきだけを集計したい」「飛び飛びのデータだけを計算したい」といったシーンに出会うことはありませんか?
従来はSUMPRODUCTや複雑な数式を使う必要がありましたが、最新の FILTER関数 を使えば驚くほどシンプルに解決できます。

本記事では、FILTER関数の基本から「1行おき・1列おき・一つ飛ばしの合計」を出す具体例、さらに複雑な条件に応用する方法までを丁寧に解説します。
Excelとスプレッドシート両方のサンプルを交えて紹介するので、初心者の方でもすぐに実践できますよ。


FILTER関数とは?

FILTER関数の基本的な仕組み

FILTER関数は、指定した条件に一致するデータだけを抽出することができる関数です。

構文:

FILTER(array, include, [if_empty])
  • array: データ範囲
  • include: 抽出条件
  • if_empty: 条件に合うデータがない場合の返り値(省略可)

対応バージョン:

  • Excel 2021 / Microsoft 365
  • Googleスプレッドシート

なぜFILTER関数が便利なのか

従来のSUMPRODUCT関数や複雑な配列数式に比べ、FILTER関数はシンプルな構文で柔軟にデータ抽出が可能です。
さらに、動的配列により範囲が自動的に変化するため、最新のExcel/スプレッドシートでは主流になりつつあります。


FILTER関数で1行おき・1列おき・一つ飛ばしの合計を出す方法

1列おき(偶数列/奇数列)の合計例

COLUMN関数を利用して偶数・奇数列を判定します。

偶数列の場合

数式例:

=SUM(FILTER(A1:J1, MOD(COLUMN(A1:J1),2)=0))

解説:

  • COLUMN(A1:J1)
    → A1:J1 の各セルの「列番号」を返します。
      A列は1、B列は2、… J列は10 となります。
  • MOD(COLUMN(A1:J1),2)=0
    → 列番号を 2 で割った余りを求め、余りが 0 であるものを「偶数列」と判定します。
      つまり、B列(2)、D列(4)、F列(6)… といった列が条件に一致します。
  • FILTER(A1:J1, … )
    → 条件に合うセルだけを抽出します。
      ここでは「偶数列にあるセル」だけが残ります。
  • SUM( … )
    → 抽出された偶数列のセルの値をすべて合計します。

使い方のイメージ:

偶数列の合計のサンプル画像

奇数列の場合

数式例:

=SUM(FILTER(A1:J1, MOD(COLUMN(A1:J1),2)=1))

解説:

  • COLUMN(A1:J1)
    → A1:J1 の各セルの「列番号」を返します。
      A列は1、B列は2、C列は3 … J列は10 となります。
  • MOD(COLUMN(A1:J1),2)=1
    → 列番号を 2 で割った余りを求め、余りが 1 であるものを「奇数列」と判定します。
      つまり、A列(1)、C列(3)、E列(5)… といった列が条件に一致します。
  • FILTER(A1:J1, … )
    → 条件に合うセルだけを抽出します。
      ここでは「奇数列にあるセル」だけが残ります。
  • SUM( … )
    → 抽出された奇数列のセルの値をすべて合計します。

使い方のイメージ:

奇数列の合計のサンプル画像

※ Googleスプレッドシートでも同様の構文で利用できます。

1行おき(偶数行/奇数行)の合計例

ROW関数を利用して偶数・奇数行を判定します。

偶数行の場合

数式例

=SUM(FILTER(A1:A10, MOD(ROW(A1:A10),2)=0))

解説:

  • ROW(A1:A10)
    → A1:A10 の各セルの「行番号」を返します。
      1行目は1、2行目は2、… 10行目は10 となります。
  • MOD(ROW(A1:A10),2)=0
    → 行番号を 2 で割った余りを求め、余りが 0 の行を「偶数行」と判定します。
      つまり、2行目・4行目・6行目・8行目・10行目が条件に一致します。
  • FILTER(A1:A10, … )
    → 条件に合うセルだけを抽出します。
      ここでは「偶数行にあるセル」だけが残ります。
  • SUM( … )
    → 抽出された偶数行のセルの値をすべて合計します。

使い方のイメージ:

偶数行の合計のサンプル画像

奇数行の場合

数式例

=SUM(FILTER(A1:A10, MOD(ROW(A1:A10),2)=1))

解説:

  • ROW(A1:A10)
    → A1:A10 の各セルの「行番号」を返します。
      1行目は1、2行目は2、… 10行目は10 となります。
  • MOD(ROW(A1:A10),2)=1
    → 行番号を 2 で割った余りを求め、余りが 1 の行を「奇数行」と判定します。
      つまり、1行目・3行目・5行目・7行目・9行目が条件に一致します。
  • FILTER(A1:A10, … )
    → 条件に合うセルだけを抽出します。
      ここでは「奇数行にあるセル」だけが残ります。
  • SUM( … )
    → 抽出された奇数行のセルの値をすべて合計します。

使い方のイメージ:

奇数行の合計のサンプル画像

一つ飛ばしの合計例(行でも列でも応用可能)

一つ飛ばしの方法は、範囲内の先頭セルを基準に「1つ飛ばし(1行おき/1列おき)」に合計したい場合に使います。
たとえば「1行目が見出し、2行目からデータが1行おきに入っている」などのケースで便利です。

偶数行/偶数列との違いは、偶数は「シート全体の行番号・列番号」が基準ですが、一つ飛ばしは「指定した範囲の中の相対位置」が基準になります。

1列おき、一つ飛ばしの場合

数式例

=SUM(FILTER(A1:J1, MOD(COLUMN(A1:J1)-COLUMN(A1),2)=0))

解説:

  • COLUMN(A1:J1)
    → A1:J1 の各セルの列番号を返します。
      A列は1、B列は2、… J列は10 です。
  • COLUMN(A1)
    → 範囲の先頭セル(ここではA1)の列番号を返します。
      この例では 1 です。
  • COLUMN(A1:J1)-COLUMN(A1)
    → 各列番号から「範囲の先頭列の番号」を引いて、範囲内での相対位置を計算します。
      例えば、A列なら 1-1=0、B列なら 2-1=1、C列なら 3-1=2 となります。
  • MOD(...,2)=0
    → 相対位置を 2 で割った余りが 0 なら「一つ飛ばしの対象」と判定します。
      この場合、A列(0)、C列(2)、E列(4)… といった列が選ばれます。
  • FILTER(A1:J1, … )
    → 条件に合うセル(A列・C列・E列…)だけを抽出します。
  • SUM( … )
    → 抽出されたセルの値を合計します。

使い方のイメージ:

1列おき、一つ飛ばしの合計のサンプル画像

1行おき、一つ飛ばしの場合

数式例

=SUM(FILTER(A1:A10, MOD(ROW(A1:A10)-ROW(A1),2)=0))

解説

  • ROW(A1:A10)
    → A1:A10 の各セルの「行番号」を返します。
      1行目は1、2行目は2、… 10行目は10 です。
  • ROW(A1)
    → 範囲の先頭セル(ここではA1)の行番号を返します。この場合は 1 です。
  • ROW(A1:A10)-ROW(A1)
    → 各行番号から「範囲の先頭行の番号」を引くことで、範囲内での相対的な位置を求めます。
      例えば、1行目なら 1-1=0、2行目なら 2-1=1、3行目なら 3-1=2 となります。
  • MOD(...,2)=0
    → 相対位置を 2 で割った余りが 0 になる行を「合計対象」と判定します。
      この場合、1行目・3行目・5行目・7行目・9行目が選ばれます。
  • FILTER(A1:A10, … )
    → 条件に合うセル(1行おきのセル)だけを抽出します。
  • SUM( … )
    → 抽出されたセルの値をすべて合計します。

使い方のイメージ:

1行おき、一つ飛ばしの合計のサンプル画像

【応用例】もっと複雑なパターンにも対応する方法

2行/2列飛ばしの場合

「1行おき」だけでなく、2行ごとや3行ごとにデータを合計したい場合です。

数式例

=SUM(FILTER(A1:A10, MOD(ROW(A1:A10),3)=0))

解説

  • ROW(A1:A10)
    → A1:A10 の各セルの「行番号」を返します。
      1行目は1、2行目は2、… 10行目は10。
  • MOD(ROW(A1:A10),3)
    → 行番号を 3 で割った余りを求めます。
    • 3行目 → 余り 0
    • 6行目 → 余り 0
    • 9行目 → 余り 0
      つまり「3の倍数の行」が判定対象になります。
  • =0
    → 余りが 0 の行、つまり 3行目・6行目・9行目 を抽出する条件です。
  • FILTER(A1:A10, … )
    → 条件に一致した行(3, 6, 9行目)のデータだけを取り出します。
  • SUM( … )
    → 抽出されたセルを合計します。

使い方のイメージ:

2行飛ばし(3行ごと)の合計のサンプル画像

特定の条件で合計する場合(他関数との組み合わせ例)

100以上のデータのみ 1行おきに合計の場合

数式例

=SUM(FILTER(A1:A10, (MOD(ROW(A1:A10),2)=0)*(A1:A10>=100)))

解説

  • ROW(A1:A10)
    → 各セルの行番号を返します。
      1行目は1、2行目は2、…10行目は10。
  • MOD(ROW(A1:A10),2)=0
    → 行番号を2で割った余りが0 → 偶数行(2,4,6,8,10行目)を判定します。
  • A1:A10>=100
    → 各セルの値が100以上かどうかを判定します。
      100以上ならTRUE、それ以外はFALSEになります。
  • (条件1)*(条件2)
    → ここが重要なポイントです。
      Excel/スプレッドシートでは、TRUE=1、FALSE=0 として扱われます。
    • 両方TRUE → 1×1=1(条件を満たす)
    • 片方FALSE → 1×0=0 or 0×1=0(条件を満たさない)
    • 両方FALSE → 0×0=0(条件を満たさない)
      つまり、掛け算によって「AND条件(かつ)」を表現しています。
  • FILTER(A1:A10, … )
    → 上記の2条件を満たしたセルだけを抽出します。
  • SUM( … )
    → 抽出されたセルの値を合計します。

使い方のイメージ:

100以上のデータ、1行おきの合計のサンプル画像

注意点とよくあるミス

FILTER関数が使えないバージョンの場合

Excel 2019以前ではFILTER関数は利用できません。
その場合は、SUMPRODUCT関数などを活用してください。

範囲指定ミスに注意

範囲を指定する際には、いくつか注意点があります。
まず、列全体や行全体をそのまま指定してしまうと、ヘッダー行や本来集計に含めたくないデータまで計算対象になってしまう可能性があります。
そのため、必要なデータだけを正確に範囲指定することが大切です。

さらに、数式をコピーして使う場合などは「絶対参照」と「相対参照」の指定を誤ると、意図しない範囲が参照されてしまいます。
セル参照の形式を正しく使い分けることも忘れないようにしましょう。

動的配列が意図しない形になる場合の対処法

FILTER関数を使う際には、元のデータに空白やエラー値が含まれていると、動的配列が思った通りに展開されず、意図しない結果になることがあります。
こうした場合には、必要に応じて IFERROR 関数でエラーを処理したり、ISNUMBER 関数で数値かどうかを判定したりすることで、安定した集計結果を得ることができます。

例:
=SUM(FILTER(A1:A10, ISNUMBER(A1:A10))) → 数値セルだけを合計。


よくある質問(FAQ)

Q
FILTER関数はExcelのどのバージョンで使えますか?
A

Excel 2021、Microsoft 365で利用可能です。
Excel 2019以前では利用できません。

Q
Googleスプレッドシートでは同じ方法が使えますか?
A

使えます。
スプレッドシートはFILTER関数が標準対応しています。
動作は基本的にExcelと同じですが、スピル範囲(自動展開)や空白セルの扱いなど一部細かな挙動が異なる場合があります。

Q
FILTER関数とSUMPRODUCT関数の違いはなんですか?
A

FILTER関数は条件に合うデータを抽出する関数、SUMPRODUCT関数は条件に合うデータを集計する用途に使われることが多いです。
FILTERはより柔軟な操作が可能です。

Q
FILTER関数でさらに複雑な条件もできますか?
A

可能です。
複数条件を掛け合わせたり、他の関数(例えばIF、ISNUMBER、ANDなど)と組み合わせることでさらに柔軟な使い方ができます。


まとめ

FILTER関数は、ExcelとGoogleスプレッドシートのどちらでも利用できる便利な関数です。
1行おきや1列おき、さらには一つ飛ばしの合計といった操作も、シンプルな数式で簡単に実現できます。
応用すれば、より複雑な条件に合わせた柔軟な集計も可能です。
また、もしFILTER関数が利用できないバージョンを使用している場合でも、代わりにSUMPRODUCT関数を使うことで同様の集計を行うことができます。

タイトルとURLをコピーしました