Excelで1列ごと・3列ごとのデータを別シートから連続取得する方法|INDEX関数で自動反映する数式

Excel

Excelで別シートのデータを一定間隔で取得したい場合、単純なセル参照ではコピーしたときに思った位置へ反映されないことがあります。例えば、日経データ側のB列へWEB貼付シートのC列データを1列ずつ取得し、C列へはF列のデータを3列間隔で取得するといった処理では、INDEX関数やCOLUMN関数を組み合わせることでフィルハンドルによる連続コピーが可能になります。この記事では、別シートから規則的な間隔でデータを取得するExcel数式の作り方を解説します。

Excelで一定間隔のデータを取得するときの考え方

別シートからデータを取得する場合、通常は「=WEB貼付!C10」のようなセル参照を使います。しかし、この方法ではコピーすると参照先が1行ずつずれるだけで、3列ごとなど特殊な間隔で取得することはできません。

今回のように、WEB貼付シートのC10、F10、I10のように3列間隔でデータを取得したい場合は、参照する列番号を数式で計算する必要があります。

ExcelではINDEX関数を使うことで、指定した範囲の中から任意の位置のデータを取り出すことができます。さらにCOLUMN関数やROW関数を組み合わせることで、コピーしても規則的に参照先を変更できます。

B6からWEB貼付C10を1列ずつ取得する数式

日経データシートのB6へWEB貼付シートのC10の値を表示したい場合、単純な参照であれば以下のようになります。

=WEB貼付!C10

しかし、下方向へコピーして別の行のデータを取得したい場合は、INDEX関数を利用すると管理しやすくなります。

例えばWEB貼付シートのC10:C70から順番に取得する場合は、以下の数式をB6へ入力します。

=INDEX(WEB貼付!$C$10:$C$70,ROW(A1))

この数式を下方向へコピーすると、B7ではC11、B8ではC12というように自動的に参照する行が変化します。

C6へWEB貼付F10を3列ごとに取得する数式

WEB貼付シートのF10、I10、L10のように3列ずつ間隔を空けて取得する場合は、INDEX関数で列番号を計算します。

C6セルへ以下の数式を入力します。

=INDEX(WEB貼付!$F$10:$BZ$10,1,(COLUMN(A1)-1)*3+1)

この数式を右方向へコピーすると、参照先が以下のように変化します。

コピー位置 参照先
C6 WEB貼付 F10
D6 WEB貼付 I10
E6 WEB貼付 L10

COLUMN(A1)はコピーするごとに1、2、3と増えるため、それを3倍することで3列間隔の参照が可能になります。

行方向に60件程度のデータを取得する場合

1年間分など60行程度のデータを処理する場合でも、基本的な考え方は同じです。INDEX関数で取得範囲を固定し、ROW関数やCOLUMN関数で参照位置だけを変化させます。

例えば、WEB貼付シートのC10:C69まで60件のデータがある場合、以下のように設定できます。

=INDEX(WEB貼付!$C$10:$C$69,ROW(A1))

この数式を60行分コピーすれば、自動的に順番にデータを取得できます。

大量のデータを扱う場合は、元データの範囲を絶対参照($記号)で固定しておくことが重要です。固定しない場合、コピー時に参照範囲がずれてしまいます。

数式をコピーするときによくある失敗例

別シート参照の数式を作成するときによくある失敗は、参照範囲を固定していないことです。

例えば、=INDEX(WEB貼付!C10:C70,ROW(A1))のように$記号を付けずにコピーすると、数式を移動した際に参照範囲もずれてしまいます。

そのため、データ範囲は$C$10:$C$70のように絶対参照にしておくと、フィルハンドルで連続コピーしても安定して動作します。

まとめ|INDEX関数を使えば規則的なデータ取得を自動化できる

Excelで別シートから1列ごと、または3列ごとにデータを取得したい場合は、INDEX関数とROW関数・COLUMN関数を組み合わせることで簡単に自動化できます。

B6でWEB貼付のC列データを順番に取得する場合はINDEX関数とROW関数、C6以降でF列から3列間隔で取得する場合はINDEX関数とCOLUMN関数を利用すると、フィルハンドルで連続コピーできます。

データ量が60行程度あっても、一度正しい数式を作成すれば手作業で入力する必要はありません。Excelの参照機能を活用して、定期的なデータ更新作業を効率化しましょう。

コメント

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