エクセルでn列おき・n行おきにデータを参照する方法|INDEX・OFFSETで簡単抽出&合計!

エクセルでn列おき・n行おきにデータを参照する方法|INDEX・OFFSETで簡単抽出&合計!

エクセルで別シートのデータを整理するときに、「3列おきにある情報だけを抜き出したい」「一つ飛ばしでデータを参照したい」と思ったことはありませんか?
特に、Googleフォームの回答結果やAccessなどと連携した横長の表では、見たい情報が決まった間隔で並んでいることがよくあります。

しかし、こうした「n列おき」「n行おき」のデータを一つひとつ手動で参照設定するのは手間がかかりますし、修正も大変ですよね。

本記事では、エクセルでn列おき・n行おきにデータを参照・抽出・合計する方法を初心者向けにわかりやすく解説します。
関数を使った効率的なやり方から、操作例・注意点まで丁寧に紹介していきますので、ぜひ参考にしてください。

目次

n列おき・n行おきの参照や抽出が必要になるシーンとは?

●横長すぎる表から必要な情報だけ抜き出したい

横長データの例

 

Googleフォームやアンケート結果などでは、各質問項目が横方向に並ぶ「横長の表」になることが多いです。
たとえば、「設問1の回答」「設問2の回答」…といった形式ですね。

必要な情報が3列おき、5列おきなど決まった間隔で配置されている場合、特定の列だけを抜き出して整理できれば、視認性も格段に上がります。


●Accessや他システムと連携したデータの見づらさ対策

Accessなどとの連携(仕入れデータの例)

工場やオフィス業務では、Accessや業務システムと連携したエクセルデータを扱うことも多いのではないでしょうか。
そのような場合、データ形式が固定されていて、列が多すぎて必要な情報にたどり着けないことがあります。

n列おきに並んだデータを抜き出して別シートに表示することで、作業効率が大きく向上します。


●n列おき・n行おきの操作でよくあるお悩み

「3列おきに参照したいけれど、1つずつセルを指定していたらキリがない…」
「オートフィルしてもうまく増えてくれない…」

このように、一定間隔での参照や抽出は意外と面倒な作業になりがちです。
でも、関数を使えば意外と簡単に実現できます!

次章では、具体的にどのようにn列おき・n行おきのデータ参照や合計を行うかを、実践的な例を交えて解説していきます。

エクセルでn列おき・n行おきに参照・抽出・合計するテクニック


●COLUMN関数 × INDEX関数でn列おきに参照

n列おきにセルを参照したいときは、INDEX関数COLUMN関数を組み合わせるのがおすすめです。

たとえば、別シートのデータが横方向に並んでいて、3列ごとのデータ(A列、D列、G列…)を順番に抜き出したい場合、以下のような数式になります。

=INDEX(Sheet2!$A1:$Z1, (COLUMN(A1)-1)*3+1)

COLUMN関数 × INDEX関数でn列おきに参照例

この数式では、COLUMN(A1)が1、COLUMN(B1)が2…と増えることを利用して、**3列おき(+3)**で参照先をずらしていきます。

補足:

  1. COLUMN()の引数をA1から始めることで、数式を右方向にコピーするだけで自動的に3列おきのデータを抜き出せます。
  2. 範囲指定の `$A1:$Z1` のように `$` を付けると「絶対参照」になり、関数を横方向にコピーしても参照範囲がズレません。
    一方で、`COLUMN(A1)`のようなセル参照は「相対参照」なので、右へコピーすると自動的に `A1 → B1 → C1…` と変化し、3列おきの参照が実現できます。
  3. 行方向(縦方向)にn行おきのデータを抜き出したい場合は、`COLUMN`関数の代わりに `ROW` 関数を使えば同じような仕組みで対応できます。たとえば、以下のように書くと `A1` を基準に2行おきに参照できます:
    =INDEX(Sheet2!A$1:A$100, (ROW(A1)-1)*2+1)

    INDEX関数については以下の記事もご参考ください。
    INDEX・MATCH関数の使い方とVLOOKUPとの違い|柔軟な検索をやさしく解説!


●OFFSET関数で柔軟にn行・n列おきに参照

OFFSET関数は、指定した基準セルから「何行」「何列」ずらした位置のセルを参照できる関数です。
n列おきやn行おきのデータを抽出したいときに便利です。

たとえば、基準セル A1 から3列右(D列)を参照したい場合は、次のように書きます。

=OFFSET(A1, 0, 3)

この式では、A1から0行下・3列右にあるセル(つまりD1)を参照します。
ただしこの式のままだと、どこにコピーしても常に3列右にあるセルを参照してしまうため、「3列おきに動かす」といった使い方はできません。

OFFSET関数単体で参照した場合


3列おきに参照先を変化させたい場合は?

COLUMN()関数を組み合わせて、コピー先に応じて動的に列数を計算するのがポイントです。
以下のような式にすると、右にコピーするたびに3列ずつ先のセルを参照できるようになります。

=OFFSET(Sheet2!$A1, 0, (COLUMN(A1)-1)*3)

この式では:

  • $A1:常にA列を基準とする(絶対参照)

  • COLUMN(A1):コピー元の列番号(A列=1、B列=2…)

  • -1:最初が0列ずれから始まるよう調整

  • *3:3列ごとに参照先を変化させる

たとえばこの式をA1セルに入力して右にコピーすると…

セル位置 COLUMN値 計算式 参照先
A1 1 (1-1)×3 = 0列先 A1
B1 2 (2-1)×3 = 3列先 D1
C1 3 (3-1)×3 = 6列先 G1

と、3列おきにデータを取り出すことができます。

n列おきに参照するには?

先ほどは「3列おきにデータを参照する方法」を紹介しました。
ここでは、任意のn列おきにデータを取得する方法をまとめておきます。

たとえば、基準セルが Sheet2!A1 の場合、n列おきに参照するには以下のような式を使います:

=OFFSET(Sheet2!$A1, 0, (COLUMN(A1)-1)*n) 

この式の「n」の部分に3や5などの任意の列数を入れることで、3列おき、5列おき…といったように、好きな間隔でデータを参照できます。

2行おきにデータを参照するには?

次に、「2行おき」にデータを参照したい場合の方法を紹介します。
列を基準に参照する場合は COLUMN 関数を使いましたが、行を基準にする場合は ROW 関数を使います。

たとえば、Sheet2!A4 を基準とする場合、以下のように書きます:

=OFFSET(Sheet2!A$4, (ROW(A1)-1)*2, 0)

OFFSET関数ROW関数で2行ごとに参照

ここではA$4の「行」部分を絶対参照にしておくことで、コピーしても基準が変わらず、2行おきに正しく参照されるようになります。

n行ごとに参照する場合は?

「2行おき」の式を応用すれば、n行おきにデータを取り出すことも可能です。
以下のように書けば、行数を自由に調整できます:

=OFFSET(Sheet2!A$4, (ROW(A1)-1)*n, 0)

「n」の部分に好きな数(例:3、5 など)を入れれば、3行おき、5行おき…といった間隔でデータを抽出できます。


●n列おき・n行おきの合計にはSUMPRODUCTが便利

n列おきの数値を合計したい場合、単純なSUM関数ではうまくいきません。
このようなときはSUMPRODUCT関数INDEXMOD関数の組み合わせが有効です。

▼たとえば:3列おきにある売上データを合計

以下のように、売上データが3列おきに並んでいる場合:

A B C D E F G
日時 担当 売上① 日時 担当 売上②

このような表で売上①・売上②・売上③…だけを合計したいときは、以下のような配列数式が使えます:

=SUMPRODUCT(--(MOD(COLUMN(A2:I2)-COLUMN(A2),3)=2), A2:I2)

MOD(...)=2の部分で「3列おきの3列目(売上の列)」だけを抽出して合計しています。

SUMPRODUCT関数利用例

補足

この数式は、3列おきにある「売上」列だけを抜き出して合計するためのものです。

=SUMPRODUCT(--(MOD(COLUMN(A2:I2)-COLUMN(A2),3)=2), A2:I2)

式の構造と考え方
部分 意味
COLUMN(A1:I1) 各列の番号を取得(A=1, B=2, …, I=9)
COLUMN(A1) 基準列(A列)の番号=1
MOD(...,3) 各列番号と基準との差を3で割った余りを計算
=2 「3列ごとの3列目(売上列)」だけを抽出(例:C列, F列, I列)
--(...) TRUE/FALSE を 1/0 に変換(掛け算できるようにする)
A2:I2 合計したい対象行の範囲(売上以外も含まれているが、フィルターで除外)

結果としてどうなるか?
  • 売上列だけに 1 が掛けられ、他の列は 0 になる

  • 実際に加算されるのは「売上1」「売上2」「売上3」だけ

  • 担当者名や日付などの文字列は無視され、数値だけを安全に合計できます


なぜ --(条件) が必要?

MOD(...) = 2 の結果は「TRUE / FALSE」になります。
そのままでは掛け算できないので、-- を使って「1 / 0」に変換します。

この書き方は、論理条件で必要な列だけを選んで集計するときの基本テクニックです。


●FILTER関数で3行おきに抽出(365以降)

Excel365以降で使えるFILTER関数を活用すれば、3行おきにデータを抜き出すことも可能です。

たとえば、行番号が奇数のデータだけ抽出したい場合は、MOD関数と組み合わせて次のように書きます。

=FILTER(A2:B100, MOD(ROW(A2:A100)-ROW(A2),3)=0)

この式では、「3行おき(0,3,6…)」に該当する行だけを抽出しています。
スピル機能を使って、一覧を自動展開できるのもポイントです。

FILTER関数を利用して3行ごとに参照する例


●コピー・貼り付けでもn行おきに処理したい場合

関数ではなく、「コピペ」でn行おきにデータを貼り付けたいときもありますよね。

たとえば、「1行おきに空白行を挟みながらコピーしたい」などの場合は以下のような方法があります。

▼手動で貼り付ける方法:

  1. コピー元のデータを選択

  2. 貼り付けたい範囲で1行飛ばしに選択(Ctrl+クリック)

  3. Ctrl+Vで貼り付け
    1行おきのデータを手動でコピー・貼り付け

▼もっと効率的にやるには:

  • フィルターで偶数/奇数行だけ表示して貼り付け
    例えばROW関数とMOD関数を利用して偶数/奇数行を判別する列を作成し、フィルターで絞りこみする方法があります。
    一行飛ばしフィルター関数で絞りこみ

  • VBAマクロでループ処理して自動化

まとめ:エクセルでn列おき・n行おきの参照は関数で効率化しよう

n列おき・n行おきにデータを参照・抽出・合計したい場面は、アンケートやシステム連携データなど、実務で意外とよくあります。

こうした操作も、以下のような関数を使うことで、手間をかけずにスマートに対応することができます。

操作内容 おすすめ関数 特徴
n列おきに参照 INDEXCOLUMN 列番号を計算して自動的に参照先をずらせる
n行おきに参照 INDEXROW、またはOFFSET 行方向への柔軟な参照が可能
n列おきに合計 SUMPRODUCTMODCOLUMN 条件を満たす列だけを抽出して合計できる
n行おきに抽出 FILTERMODROW(365以降) スピルで間引き抽出に対応(表示がきれい)
貼り付けなどの操作 手動選択 or VBA シンプルな場合は手動でも対応可能

特に、「等間隔で並んでいるけど一部だけ抜き出したい」といったケースでは、関数を使った参照テクニックが大きな時短につながります。

最初は慣れが必要かもしれませんが、一度仕組みを理解してしまえば応用も簡単です。
ぜひ今回の内容を参考に、日々の作業をもっと快適にしていってくださいね。

よくあるエラーとその対処法

n列おき・n行おきの参照や抽出で関数を使うと、思わぬエラーが出ることもあります。
ここでは、よくあるミスやトラブルの原因と、その対処法を紹介します。


●#REF! エラー:参照先が範囲外になっている

原因:
INDEXOFFSET関数で指定した行・列番号が、範囲を超えてしまっている場合に発生します。

INDEX関数REFエラーの例

対処法:

  • INDEX関数では範囲の最大サイズを確認し、ずれすぎていないか確認しましょう

  • COLUMN(A1)-1)*3+1 などの計算式で値が大きくなりすぎていないか見直してください


●#VALUE! エラー:数式の指定方法が合っていないときに出る

原因:

たとえば
=MOD(A2:A100, 3)
のように、セルの範囲(複数セル)をまとめて使おうとしたとき、関数の使い方によってはエラーになります。

これは、「配列(複数の値)をそのまま使っていいかどうか」が関数ごとに違うためです。

また、新しいExcelでは自動で複数の結果を表示してくれますが、古いバージョンでは配列数式として特別な入力が必要になります。


よくあるエラー例:

=MOD(A2:A4, 3)

この書き方は、環境によってはエラーになります。


対処法①:スピル対応の関数を使う

たとえば、ROW(A2:A4) のように行番号を使って配列を作ると、MOD関数と組み合わせて正しく動作します。

=MOD(ROW(A2:A4), 3)

この場合は、A2~A4の行番号(2, 3, 4)に対して MOD をかけるので、正常に結果が出ます。


対処法②:古いExcelでは「Ctrl + Shift + Enter」で確定する

Excel 2019以前では、スピル(自動展開)の機能がありません。

そのため、配列を使った計算をしたいときは、

Ctrl + Shift + Enter

で数式を確定する必要があります。

すると、数式が次のように波かっこ {} で囲まれます:

{=MOD(A2:A4, 3)}

この形式でないと、複数セルの範囲をうまく扱えずにエラーになることがあります。


配列数式とスピルってなに?

  • 配列数式:複数の値(セル範囲など)をまとめて計算する数式

  • スピル:計算結果が自動で複数のセルに広がって表示される仕組み(Excel 365/2021以降)


Excelのバージョンによって動作が異なります

Excelのバージョン スピル機能 =MOD(A2:A4,3) の動作
Excel 365 / 2021以降 あり 結果が自動で縦に並んで表示される
Excel 2019以前 なし エラーになる、または1個しか結果が出ない

ご自身のExcelがどのバージョンかを確認して、対応した書き方にすることが大切です。


●意図しないセルを参照している

原因:
COLUMN()ROW()関数の基準セル(例:A1)をそのままコピペしていて、参照開始位置がずれてしまうパターンです。

対処法:

  • COLUMN(A1)ROW(A2) の **「基準セルの位置」**を見直し、想定通りに増加しているか確認しましょう

  • 位置がずれると、n列おき・n行おきの計算結果が変わってしまいます


●スピルがうまくいかない(FILTER関数など)

原因:
出力先のセルにすでに何か入力されていて、スピルの展開が邪魔されている状態です。
FILTER関数スピルエラーの例

対処法:

  • スピルを使う関数の出力先が空いているかを確認しましょう

  • セルの結合や、隣接セルの入力が影響していないかもチェックしてみてください


こうしたエラーは、一度経験しておくと次回からすぐに気づけるようになります。
トラブル時は、「どの部分の引数が意図通りに動いていないか?」を分解して確認するのがコツです。

【関連記事】

※外部リンク※