Excelで「3行おきに1行だけ残して他を削除したい」…そんな間引き作業は、補助列+フィルターを使うと確実です。行番号のズレ対策やMicrosoft 365の数式での抽出まで、手順と注意点をまとめます。
「3行ごとに1行だけ残す」作業が必要になる典型例
Excelの表では、次のような状況で「一定間隔で行を間引きたい」ニーズがよく発生します。
- 1件のデータが3行で構成されていて、3行目だけに必要情報(合計、結果、判定など)がある
- ログやCSVの変換後に「詳細行・補足行・要約行」が繰り返され、要約行だけを残したい
- 定期的に挿入された空行や区切り行を整理したい
- 印刷用に行間を空けた表から、実データ行だけを取り出したい
ポイントは、Excelでの「行削除」は元に戻せない(または戻しにくい)操作になりやすいことです。だからこそ、確実で再現性が高い方法を選ぶのが大切です。
結論:補助列(ヘルパー列)+フィルターが最も確実
3行ごとに1行だけを選択して、他を削除する場合、最も安定するのは「補助列で残す行をTRUE/FALSEで判定し、フィルターで絞り込む」やり方です。
理由はシンプルで、Excel標準機能だけで完結し、途中で並び替えやデータ追加があっても「どの行を残すか」が目で見て確認できるからです。さらに、削除ではなく別シートにコピーする運用にも切り替えやすく、事故が起きにくいのが強みです。
作業前にやっておくべき安全策
削除を伴う操作に入る前に、次のいずれかを必ず行ってください。1分の手間で、取り返しのつかないミスを防げます。
- ブックを別名保存してバックアップを作る(例:
_backupを付ける) - 対象シートを右クリックして「移動またはコピー」→「コピーを作成する」
- 削除ではなく、まずは別シートに抽出して結果を確認する
手順:3行目、6行目、9行目…だけを残す(補助列+フィルター)
ここでは「シート上の行番号が3の倍数の行(3,6,9…)を残す」基本形を説明します。データの開始行がズレるケースは次の章で調整します。
- データ範囲の右側など、空いている列に補助列を1本追加します(例:列Zなど)。
- 補助列の最初のセル(例:Z2など)に、次の式を入力します。
=MOD(ROW(),3)=0
この式は「行番号を3で割った余りが0ならTRUE(=3の倍数)」という意味です。 - 式を下までコピーします(フィルハンドルのダブルクリック、またはコピー&貼り付け)。
- 補助列も含めて表全体にフィルターを付けます。
ショートカット例:Ctrl+Shift+L - 補助列でフィルターを開き、TRUEだけにチェックを入れて絞り込みます。
- 残したい行だけが表示された状態になります。ここで次のどちらかを選びます。
- 安全重視:表示された行だけを別シートにコピーして「残す」
- 時短重視:逆にFALSEを表示して、不要行をまとめて削除する
TRUE/FALSEの挙動は、次のようなイメージです(ヘッダーが1行目にある想定)。
| シート上の行番号 | =MOD(ROW(),3)=0の結果 | 残すか |
|---|---|---|
| 2 | FALSE | 削除対象 |
| 3 | TRUE | 残す |
| 4 | FALSE | 削除対象 |
| 5 | FALSE | 削除対象 |
| 6 | TRUE | 残す |
開始位置がズレるときの調整(ヘッダーやデータ開始行が原因)
よくあるつまずきが、「3行ごと」をシートの行番号で数えるのか、データの先頭行を1行目として数えるのかが混ざってしまうケースです。
たとえばデータがA2から始まり、A2を「1番目」として数えて3行ごとに残したいなら、次のように基準行を引いて調整します。
=MOD(ROW()-ROW($A$2)+1,3)=0
この式は「現在行の行番号 – データ開始行の行番号 + 1」を“データ上の通し番号”として扱い、3の倍数だけTRUEにします。
開始位置の考え方を整理すると、現場では次の表が役に立ちます。
| 目的 | データ開始セル | 残したい行 | 補助列の式(例) |
|---|---|---|---|
| シートの3,6,9行目…を残す | どこでも | 行番号が3の倍数 | =MOD(ROW(),3)=0 |
| A2を1行目として3行ごとに残す | A2 | 3件目、6件目、9件目… | =MOD(ROW()-ROW($A$2)+1,3)=0 |
| A5を1行目として3行ごとに残す | A5 | 3件目、6件目、9件目… | =MOD(ROW()-ROW($A$5)+1,3)=0 |
「どの行を1番目として数えるか」を最初に決めて式を作ると、ズレはほぼ解消できます。
3行目だけでなく「1行目」「2行目」を残したい場合の式
現場では「3行目だけ残す」以外に、「各3行ブロックの1行目だけ」「2行目だけ」を残したいこともあります。考え方は同じで、MODの判定を変えるだけです。
ここでは、データ開始がA2で、A2を1行目として数える前提で例を示します。
| 残したい行(各3行のうち) | 残る行の並び(相対番号) | 式(例:A2開始) | 使いどころ |
|---|---|---|---|
| 1行目 | 1,4,7,10… | =MOD(ROW()-ROW($A$2)+1,3)=1 | 明細の先頭行だけ欲しい |
| 2行目 | 2,5,8,11… | =MOD(ROW()-ROW($A$2)+1,3)=2 | 中段にキー情報がある |
| 3行目 | 3,6,9,12… | =MOD(ROW()-ROW($A$2)+1,3)=0 | 末尾行に集計・判定がある |
「どれを残すか」が変わっても、手順(補助列→フィルター→コピー/削除)は同じなので、式だけ差し替えると運用しやすくなります。
応用:3行おき以外にも使える(n行ごとに1行を残す)
この方法は3行に限らず、「5行ごと」「10行ごと」などにも応用できます。基本形は次のとおりです。
- シート行番号基準:
=MOD(ROW(),n)=0 - データ先頭基準:
=MOD(ROW()-ROW($A$2)+1,n)=k(kは残したい位置)
たとえば「5行ごとに5行目だけ残す」なら、データ先頭基準でn=5、k=0にします。反対に「5行ごとに1行目を残す」ならk=1です。間引き・抽出の仕事が多い人ほど、この考え方を覚えておくと作業が速くなります。
安全に残す:TRUE行だけを別シートへコピーする手順
削除操作が不安な場合は、まず「残す行だけを別シートにコピー」するのが最も安全です。元データが残るので、やり直しも簡単です。
- 補助列でTRUEにフィルターして、残したい行だけを表示します。
- 表示された範囲を選択します(表全体でもOK)。
- 可視セルだけを選択します。
ショートカット例:Alt+;(セミコロン) - コピー(
Ctrl+C)→別シートのA1などに貼り付け(Ctrl+V)。 - 必要なら「値貼り付け」にして数式や参照を固定します。
右クリック→貼り付けのオプション→「値」、またはCtrl+Alt+V。
この方法なら、抽出結果を確認してから元シートを削除する運用にできるため、業務では特におすすめです。
時短で削除:FALSE行だけを表示して、まとめて行削除する手順
残す行が少なく、削除してスッキリさせたい場合は「不要行だけを表示して削除」すると速いです。ポイントは、フィルターで絞った状態で削除すると可視行だけをまとめて消せることです。
- 補助列を作成し、下までコピーします。
- 補助列でFALSEだけをフィルター表示します(=削除対象のみ表示)。
- 表示されている行(可視行)を選択します。行番号(左端の見出し)をクリックして行ごと選択すると確実です。
- 行削除を実行します。
右クリック→「削除」、またはショートカット例:Ctrl+- - フィルターを解除し、TRUE行だけが残っていることを確認します。
- 補助列が不要なら削除します。
削除の失敗を防ぐために、次のチェックを習慣にしてください。
| チェック項目 | 確認ポイント | 理由 |
|---|---|---|
| フィルターの条件 | FALSEのみ表示になっているか | TRUEを消してしまう事故を防ぐ |
| 選択範囲 | 行全体が選択されているか | セルだけ削除すると行が詰まって崩れる |
| ヘッダーの扱い | ヘッダー行が削除対象に入っていないか | 列名が消えると復旧が面倒 |
| フィルター解除 | 削除後にフィルターを解除して全体確認したか | 「消えた」と勘違いして二重に作業しがち |
フィルター削除で表が崩れるときの原因と対処
フィルターで絞って削除したのに、列がずれたり、行が詰まったりする場合は、削除の種類が間違っていることが多いです。よくある原因を整理します。
- 原因:セル範囲だけを選択して削除した
対処:行番号(左端)を選んで「行の削除」を行う - 原因:結合セルが含まれていて行削除が不安定
対処:可能なら結合解除、難しいなら抽出コピー方式で回避 - 原因:表が複数ブロックに分かれていて連続範囲になっていない
対処:作業対象を1つの連続範囲に整えるか、テーブル化してから処理する
削除の前に「別シートにコピーして形が保てるか」を確認しておくと、崩れやすい表を事前に見抜けます。
よくあるズレ・失敗と対策
「式は合っているはずなのに、残る行がずれる」「削除したら表が崩れた」という相談はとても多いです。原因と対策をまとめます。
ヘッダーの行を数に入れてしまった
ヘッダーが1行目にあり、データは2行目から始まる場合、=MOD(ROW(),3)=0はシートの行番号基準で判定します。データの先頭行を基準にしたいなら、ROW($A$2)などで基準行を差し引く式に変更してください。
途中に空行がある、結合セルがある
空行があっても行番号は増えるので、行番号基準の判定では問題ありません。ただし結合セルがあると、行選択やコピーで挙動が不安定になりがちです。可能なら結合を解除してから作業するか、コピー抽出方式で進めるのが安全です。
並び替え(ソート)をしたら結果が変わった
ROW()は「現在の行番号」で判定するため、ソートで行が入れ替わるとTRUE/FALSEも変わります。「元の順番で3行ごとに残す」ことが目的なら、先に通し番号を固定しておくのがおすすめです。例えば補助列に通し番号を値として入れてから(=ROW()-ROW($A$2)+1をコピー→値貼り付け)、その番号で3行ごとの判定をすると、ソートに強くなります。
フィルター列に空白が混じっていて絞り込みが想定と違う
補助列の式が途中で入っていない(空白のまま)と、フィルターに「(空白)」が出てきます。式を下まで入れたつもりでも、途中で途切れることは意外と多いので、フィルターをかける前に補助列の最終行まで数式が入っているか確認してください。
ショートカット早見表(作業スピードとミス防止に効く)
間引き作業は手順が多く見えても、ショートカットを押さえると一気に楽になります。よく使うものをまとめます。
| 操作 | ショートカット例 | 用途 |
|---|---|---|
| フィルターのON/OFF | Ctrl+Shift+L | 絞り込みの開始・解除 |
| 可視セルのみ選択 | Alt+; | フィルター結果だけをコピーするとき |
| 削除 | Ctrl+- | 不要行の削除(行選択で使う) |
| 値貼り付け | Ctrl+Alt+V → V | 抽出結果を固定する |
大量データ・繰り返し作業ならPower Queryで自動化する選択肢
毎月同じ形式のデータを処理する、行数が多くて手作業が怖い、という場合はPower Query(データの取得と変換)を使うと再現性が高くなります。Excelの操作としては少しだけ慣れが必要ですが、一度作れば次回以降は更新ボタンで同じ処理を繰り返せます。
Power Queryで「3行ごとに1行」を残す流れ
- 対象範囲をテーブル化します(
Ctrl+T)。 - データタブ→「テーブルまたは範囲から」 を選び、Power Queryエディターを開きます。
- 「列の追加」→「インデックス列」→「1から」 を選び、連番を作ります(Index=1,2,3…)。
- 「列の追加」→「カスタム列」で、次のような判定列を作ります(例:Keep列)。
=Number.Mod([Index],3)=0 - Keep列でTRUEだけをフィルターします。
- 不要になったIndex列・Keep列を削除します(結果だけ残す)。
- 「閉じて読み込む」でシートに出力します。
Power Queryは「削除」というより「変換して出力」なので、元データを壊しにくいのが利点です。特に定期作業では、補助列+フィルターよりも事故が減り、担当者が変わっても手順がぶれにくくなります。
Microsoft 365の数式で“抽出して表示”する方法(削除ではない)
Microsoft 365(動的配列対応)なら、指定間隔の行だけを別範囲に抽出して表示することもできます。これは「削除して整形する」というより、「抽出結果を使って集計・確認する」用途に向いています。
よく提案される例:LET+FILTER(ただし注意点あり)
例えば単一列の範囲A2:A19から3件ごとに抽出する案として、次のような式が見かけられます。
=LET(r,A2:A19,FILTER(r,MOD(XMATCH(r,r),3)=1))
しかしこの方法は、値が重複しているとXMATCHが最初の一致位置を返すため、意図通りに「3行ごと」にならない場合があります。実務のデータは重複が珍しくないので、注意が必要です。
重複に強い抽出式:SEQUENCEで行番号(相対位置)を作る
重複の影響を避けるなら、値ではなく「行の相対位置」を使って判定するのが堅実です。例えば単一列なら次のように書けます。
=LET(r,A2:A1000, n, ROWS(r), idx, SEQUENCE(n), FILTER(r, MOD(idx,3)=0))
この式は、範囲rの中で1,2,3…という連番(idx)を作り、3の倍数だけを抽出します。値が重複していても、連番は重複しないので安定します。
複数列をまとめて抽出したい場合
行全体(複数列)を抽出したいなら、rを表の範囲に置き換えます。
=LET(r,A2:D1000, n, ROWS(r), idx, SEQUENCE(n), FILTER(r, MOD(idx,3)=0))
抽出結果を最終成果物として固定したいときは、表示された結果をコピーして「値貼り付け」すると、通常の表として扱えます。
VBAでワンクリック処理したい場合の考え方(上級者向け)
手順を完全に自動化したい場合、VBAマクロで「3行ごとに1行だけ残す」処理を組むこともできます。やり方の基本は、下から上へループして、条件に合わない行を削除することです(上から削除すると行番号が変わって判定が狂いやすいため)。
例として、アクティブシートの2行目から最終行までを「データ先頭=2行目」として数え、3件目・6件目…だけ残すイメージのコードは次のようになります。
Sub KeepEvery3rdRow()
Dim firstRow As Long: firstRow = 2
Dim lastRow As Long
Dim r As Long, idx As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
For r = lastRow To firstRow Step -1
idx = r - firstRow + 1
If idx Mod 3 <> 0 Then
Rows(r).Delete
End If
Next r
End Sub
VBAは強力ですが、範囲指定のミスがそのまま大量削除につながります。まずは補助列+フィルターで考え方を固め、バックアップを取った上で導入するのが安全です。
「削除」か「抽出」かで、最適解は変わる
同じ「3行ごとに1行」という目的でも、やりたいことが「元データを整形して提出したい」のか、「必要行だけ取り出して分析したい」のかで、選ぶ手段は変わります。
| 目的 | おすすめ | 理由 |
|---|---|---|
| 元データを間引いてスリムにしたい | 補助列+フィルター→不要行を削除 | 操作が直感的で再現性が高い |
| ミスなく結果だけ作りたい | 補助列+フィルター→別シートにコピー | 元データが残るので安全 |
| 抽出結果を常に更新したい | 動的配列(LET+FILTER+SEQUENCE) | データ追加に追従しやすい |
| 定期処理として固定化したい | Power Queryで変換して出力 | 更新で再実行でき、属人化しにくい |
現場で使える小ワザ:残す行に色を付けて確認する
削除前に「本当に残す行が合っているか」を目視で確認したい場合は、補助列のTRUE/FALSEに条件付き書式を付けると安心です。
- 補助列(TRUE/FALSEが入った列)を選択します。
- ホーム→「条件付き書式」→「新しいルール」。
- 「数式を使用して、書式設定するセルを決定」を選び、
=$Z2=TRUEのようにTRUE行を指定します(列記号は実際の補助列に合わせる)。 - 塗りつぶしなどの書式を設定します。
この確認を挟むだけで、「消してはいけない行を消した」事故をかなり減らせます。
まとめ:Excelで3行おきに行を残すなら、まずは補助列+フィルター
Excelで「3行ごとに1行だけ選択して他を削除」するなら、MOD関数とROW関数で補助列を作り、フィルターで残す行だけを可視化する方法が最も確実です。開始位置がズレる場合は、基準行(例:A2)を差し引く式にすることで調整できます。
削除が不安なら、まずはTRUE行だけを別シートにコピーして確認する運用にすると安全です。Microsoft 365を使っている場合は、動的配列で抽出する方法もありますが、「削除の代替」ではなく「抽出表示」である点と、重複への配慮(XMATCHよりSEQUENCE)を押さえて使い分けましょう。繰り返し作業や大規模データなら、Power Queryで処理を固定化するのも有効です。

コメント