doodle-on-web

自分で調べたことや、仕事の中で質問されたことなどをまとめています。

Excelで1行おき(奇数行・偶数行)を一発抽出する方法|FILTER関数で解決

スポンサーリンク

Excelで表を扱っていると、「奇数行だけを取り出したい」「偶数行のデータだけを集計したい」という場面が出てきます。1行おきに色を付けたい、隔週のデータだけを比較したい、といったケースですね。

手作業でコピーしていくのは現実的ではありません。実は、たった1つの数式を入れるだけで、条件に合う行だけを別の場所へ一気に抽出できます。この記事ではMODROWFILTERという3つの関数を組み合わせ、1行おきの抽出をスマートに実現する方法を、つまずきポイントも含めて解説します。

Excelで1行おき(奇数行・偶数行)を一発抽出する方法|FILTER関数で解決のサンプル ▲ Excel サンプル

仕組みの中心は「ROW」と「MOD」

まずは考え方の土台になる2つの関数を押さえましょう。

ROW関数:行番号を取り出す

ROW関数は、指定したセルの行番号を返します。

=ROW(A2)  → 2
=ROW(A5)  → 5

引数を省略して=ROW()と書くと、その数式が入っているセル自身の行番号を返します。これが「今、何行目を処理しているのか」を知る手がかりになります。

MOD関数:割り算の余りで奇数・偶数を判定

MOD関数は、割り算の「余り」を返します。

=MOD(7, 2)  → 1
=MOD(8, 2)  → 0

ある数を2で割った余りが 1なら奇数0なら偶数 です。つまりROWで取り出した行番号を2で割れば、その行が奇数か偶数かを判定できます。

=MOD(ROW(), 2)

この数式が「1」を返せば奇数行、「0」を返せば偶数行、という具合です。

FILTER関数で一気に抽出する

Microsoft 365 や Excel 2021 以降なら、FILTER関数を使うのが最も簡単です。データがA2:C11に入っているとして、まずは基本形を見てみましょう。

=FILTER(A2:C11, MOD(ROW(A2:A11), 2) = 1)

※注意:この式は「シート上の実際の行番号」を基準にします。 データがA2始まりのため、抽出されるのはシートの3・5・7・9・11行目、つまり「表の2件目・4件目…」です。「表の1件目から数えて奇数」を期待していると結果がズレて見えるので、その場合は次の「表の1件目を基準にしたいとき」を使ってください。

条件を= 0に変えれば偶数行(シート行基準)になります。

=FILTER(A2:C11, MOD(ROW(A2:A11), 2) = 0)

数式を1つ入れるだけで、該当行がスピル(自動的に下方向へ展開)されて表示されます。元データを並べ替えたり削除したりせずに済むのが大きなメリットです。

見出し行がある場合の扱い

実務では1行目に見出しがあることがほとんどです。抽出範囲に見出し行を含めないのがコツです。上の例のようにデータ本体(A2以降)だけを範囲に指定すれば、見出しが混ざったりズレたりする心配はありません。抽出結果の上に、別途手入力やセル参照で見出しを置くと表として整います。

表の1件目を基準にしたいとき

「表の中で1件目・3件目…を奇数扱いしたい」という場合は、開始位置を引いて番号を振り直します。

=FILTER(A2:C11, MOD(ROW(A2:A11) - ROW(A2) + 1, 2) = 1)

ROW(A2:A11) - ROW(A2) + 1で、表の先頭を1とした連番{1; 2; 3; …}が作れます。これを使えば、データがどの行から始まっていても「表としての奇数・偶数」で抽出できます。直感どおりの結果がほしいときは、こちらを主役にすると安心です。

FILTERが使えない環境での代替策

古いバージョンのExcelにはFILTERがありません。その場合は「作業列」を用意する方法が確実です。

  1. データの隣に空いた列(例:D列)を用意します
  2. D2に判定用の数式を入れます
=MOD(ROW(), 2)
  1. 下までコピーすると、各行に0か1が並びます
  2. D列にオートフィルターをかけ、1だけにチェック すれば奇数行、0だけ なら偶数行が表示されます

表示された結果をコピーすれば、別シートに貼り付けられます。関数が苦手な方にも扱いやすい方法です。

実務での応用例:N行おきの抽出

割る数を変えるだけで「N行おき」の抽出が可能です。使う場所によって式の形が違うので、文脈に合わせて選んでください。

作業列に入れる場合(各セルに1つずつ):

=MOD(ROW()-1, 3)   ← 3行おき。0になった行が対象
=MOD(ROW()-1, 5)   ← 5行おき

FILTER内で使う場合(範囲に対して判定):

=FILTER(A2:C11, MOD(ROW(A2:A11)-ROW(A2), 3) = 0)   ← 3行おき
=FILTER(A2:C11, MOD(ROW(A2:A11)-ROW(A2), 5) = 0)   ← 5行おき

アンケートデータから一定間隔でサンプリングしたい、大量のログから間引いて確認したい、といった場面で役立ちます。

まとめ

奇数行・偶数行の抽出は、次の3ステップで理解すると簡単です。

  1. ROWで行番号を取り出す
  2. MOD(行番号, 2)で奇数(1)か偶数(0)かを判定する
  3. FILTERでその条件に合う行だけを取り出す

その際、ROWが返すのはシート上の実際の行番号だという点だけ意識しておきましょう。「表の1件目から数えたい」ときは- ROW(先頭セル)で番号を振り直せば、直感どおりに抽出できます。「2で割った余り」というシンプルな発想さえ押さえれば、N行おきの抽出まで自在にこなせます。ぜひ日々の作業に取り入れてみてください。


関連記事

あわせてチェック