エラーの内容
FILTERの数式を入力してEnterキーを押すと、Sheetsが次のエラーを返します:
FILTER has mismatched range sizes. Expected row count: 100, column count: 1. Actual row count: 50, column count: 1.
数字はデータによって変わりますが、問題の本質は変わりません。フィルター対象の範囲と条件範囲のサイズが一致していないのです。
根本原因
FILTER(range, condition1, [condition2, ...])には厳格なルールがあります。すべての条件配列は、データ範囲とまったく同じ次元でなければなりません。データがA2:C100(99行)であれば、すべての条件も99行にまたがっている必要があります。例外はありません。
このエラーがほぼ毎回発生する4つのケースを紹介します:
- 条件が別のシートや名前付き範囲を参照しており、その行数が少ない。
D2:D50のような範囲をハードコードしているが、データは100行目まで続いている。- 条件として使用している補助列が後から追加され、途中までしか入力されていない。
- ネストされた
ARRAYFORMULAなど、計算された2つの配列が異なる長さを返している。
修正手順
ステップ1 — ROWS()でサイズの不一致を確認する
何かを変更する前に、実際にサイズの不一致があるか確認しましょう。空のセルに次の2つの数式を入力します:
=ROWS(A2:A100) // データ範囲
=ROWS(D2:D50) // 条件範囲
異なる数値(例:99と49)が返ってきた場合、それが原因です。
ステップ2 — 両方の範囲を同じサイズに合わせる
直接的な修正方法:条件範囲をデータ範囲に合わせて拡張します。
修正前(エラーあり):
=FILTER(A2:C100, D2:D50="Yes")
修正後(正常):
=FILTER(A2:C100, D2:D100="Yes")
両方の範囲が2〜100行目をカバーしました。それぞれ99行です。サイズが一致し、エラーが解消されます。
ステップ3 — 終端を指定しない範囲に切り替える
最終行をハードコードすると脆弱になります。データが増えても数式は対応できず、エラーが再発します。終端を指定しない範囲を使えば、この問題を恒久的に解決できます:
=FILTER(A2:C, D2:D="Yes")
行番号を省略すると、Sheetsは両方の範囲をデータの末尾まで自動的に拡張します。A2:CとD2:Dは行数を追加しても常に同じ長さになります。
ステップ4 — 数式で構築された条件を修正する
条件がセルの直接参照ではなく、計算された配列の場合もあります。その場合でも、両方の配列が同じ行数を返す必要があります。
エラーあり — 配列の長さが異なる:
=FILTER(A2:C, ARRAYFORMULA(LEN(B2:B50)>3))
修正後 — 範囲を統一する:
=FILTER(A2:C, ARRAYFORMULA(LEN(B2:B)>3))
修正の考え方は同じです。条件側にも終端を指定しない範囲を使います。
ステップ5 — 複数条件を重ねる場合
複数条件のFILTERでは、すべての条件がデータ範囲と一致している必要があります。1つでも一致していないとエラーが発生します。
=FILTER(A2:C, D2:D="Yes", E2:E>100, F2:F<>"")
E2:Eが80行しかカバーしていないのにデータが99行あれば、それだけでエラーになります。各条件に対して個別に=ROWS()を実行し、どれがずれているか特定しましょう。
ステップ6 — 別シートへの参照
別のシートから条件を取得するのは、見落としやすい原因のひとつです。Sheet2の行数が現在のシートと異なる場合があり、エラーが出るまで気づかないことがあります。
// 誤り: Sheet2のステータスデータは50行しかない
=FILTER(A2:C100, Sheet2!B2:B50="Active")
// 修正: 両側とも終端を指定しない範囲を使う
=FILTER(A2:C, Sheet2!B2:B="Active")
簡易診断チェックリスト
=ROWS(データ範囲)と=ROWS(条件範囲)を実行して、数値が一致しているか確認する。- 条件として使用している補助列はあるか?最後のデータ行まで入力されているか確認する。
- 条件として名前付き範囲を使用しているか?データ → 名前付き範囲で実際のサイズを確認する。
- 一方の範囲が、行数の異なる別シートから取得されていないか?
- 条件の中で
ARRAYFORMULA、MAP、REDUCEをネストしているか?先に数式を単独のセルでテストし、出力サイズを確認する。
予防策
いくつかの習慣を一貫して実践するだけで、このエラーの発生率をほぼゼロにできます:
- デフォルトで終端を指定しない範囲を使用する(
A2:A100ではなくA2:A)。データ引数と条件引数の両方に適用する。 - 補助列を条件として追加する際は、
FILTERに組み込む前に列全体を入力しておく。 ARRAYFORMULAを使った条件は、まず別のセルでテストする。条件として使用する前に、期待通りの行数が返ってくることを確認する。- 別シートや名前付き範囲を混在させる場合は、数式を確定する前に両側で
=ROWS()を使って素早く確認する。
修正の確認
数式を更新した後に行う3つの簡単な確認:
- セルにエラーではなくフィルター結果が表示されているか確認する。
- 件数をチェックする:
=ROWS(FILTER(A2:C, D2:D="Yes"))がデータに対して妥当な数値を返すか確認する。 - 末尾に新しい行を追加し、フィルターがその行を拾うか確認する。拾えていれば、終端を指定しない範囲が正しく機能しています。

