Excelで指定した行から特定のステップ行ごとにデータを抽出する方法

Excelで指定した行から特定のステップ行ごとにデータを抽出する方法

Excelはデータの分析や整理に非常に有用なツールですが、特定のパターンに基づいてデータを抽出する際には少々複雑な操作が必要になることがあります。例えば、「配列や範囲から指定した行から特定のステップ数ごとに行を抽出する」というタスクは、通常のフィルター機能では実現が難しいものです。しかし、新しい関数のCHOOSEROWS関数SEQUENCE関数を組み合わせることで、このような特定の抽出が簡単に実現できます。さらに「テーブル」と組み合わせるとより強力な抽出システムとなります。

この記事の前に(奇数 or 偶数行・レコードを抽出)

この記事では3飛び、10飛び、など自在なステップで行抽出を行う方法を紹介します。

ただ単に奇数行・偶数行の抽出をしたい場合は、このページで紹介する手順より簡単な方法があります。次のリンクではその式を紹介しています。

奇数行のみを抽出

Excelで範囲から奇数行・奇数レコードを取り出す計算式の使い方
Excelで範囲から奇数行を取り出す計算式の使い方ExcelのCHOOSEROWS関数とSEQUENCE関数は、データセットを操作し、特定の条件に基づいてデータを選択する際に非常に強力なツールです。これらの関数を組み合わせることで、特定の範...

偶数行のみを抽出

Excelで範囲から偶数行・偶数レコードを取り出す計算式の使い方
Excelで範囲から偶数行を取り出す計算式の使い方Excelのデータ分析では、特定の条件に合ったデータ行を効率的に抽出することが重要です。この記事では、CHOOSEROWS関数とSEQUENCE関数を組み合わせて、指定された範囲から偶数行の...

解説: 自在なステップで行を抽出する際に使用する関数

自在なステップで行を抽出する方法には、主に以下の二つの新しい関数を使用します。

  1. CHOOSEROWS(配列, 行番号○): 指定した配列から特定の行を選択します。ただし規則正しい行番号をたくさん入力するのは手間がかかります。そこで次のSEQUENCE関数を使って適切な数列を生成します。

    配列から「2,4,6,8」行目を抜き出す設定の例

  2. SEQUENCE(行, 列, 開始, 目盛り): 指定された数値シーケンス(連続データ)を生成します。目盛りはステップ間隔です。

    10個(10×1)の連続データを作成する設定例。初期値は2、ステップ間隔は3の例。

具体的な式の説明

行抜き出しを実現する式は以下のように構成されます。

=CHOOSEROWS(配列, SEQUENCE((ROWS(配列) - 最初の行) / ステップ数 + 1, 1, 最初の行, ステップ数))

この式の各部分を詳細に説明します。

  1. ROWS(配列): これは指定された配列の総行数を返します。ROWS関数は配列内の行数を取り出します。
  2. 最初の行: ここから抽出を開始したい行番号です。
  3. (ROWS(配列) - 最初の行) / ステップ数 + 1: この計算で、生成されるシーケンス(連続数値)の長さが決定されます。
    • ROWS(配列) - 最初の行は、最初の行から配列の終わりまでの行数を計算します。
    • これをステップ数で割り、1を加えることで、必要な行数が求まります。
    • 本来はこの数値を切り捨て処理すべきです。しかしSEQUENCE関数の行や列では自動的に端数処理が考慮されるので、処理を省略できます。
  4. SEQUENCE(...): この関数は、上記の計算に基づいて数値のシーケンスを生成します。このシーケンスはCHOOSEROWS関数によって使用される行番号を表します。
  5. CHOOSEROWS(配列, ...): 最後に、この関数が指定された配列から、SEQUENCE関数によって生成された行番号に対応する行を抽出します。

事例1: サンプルテーブルでの取り出し例(標準:拡張なし)

サンプルテーブルA2:E32を使用して、実際にこの式を適用する例を考えてみましょう(1行目は見出しなので抽出しない)。

商品番号商品分類価格メーカーカラー
10001カラープリンター52000CEIROアイボリー
10002デスクパソコン53000HERTブラック
10003デスクパソコン58000HERTアイボリー
10004モノクロプリンター27000HERTブラック
10005カラープリンター17000CEIROアイボリー
10006ノートパソコン21000THOMグレー
10007モノクロプリンター53000CEIROアイボリー
10008ノートパソコン39000HERTブラック
10009デスクパソコン39000HERTブラック
10010フルカラースキャナー58000HERTアイボリー
10011モノクロプリンター46000HERTグレー
10012ノートパソコン38000HERTブラック
10013カラープリンター61000THOMグレー
10014カラープリンター63000THOMブラック
10015モノクロプリンター21000HERTブラック
10016モノクロプリンター16000CEIROグレー
10017カラープリンター42000CEIROホワイト
10018ノートパソコン61000THOMグレー
10019カラープリンター36000THOMグレー
10020カラープリンター35000HERTホワイト
10021ノートパソコン54000HERTホワイト
10022モノクロプリンター48000THOMホワイト
10023デスクパソコン63000HERTブラック
10024ノートパソコン22000THOMブラック
10025カラープリンター41000HERTブラック
10026フルカラースキャナー52000HERTグレー
10027モノクロプリンター21000CEIROアイボリー
10028ノートパソコン30000CEIROホワイト
10029フルカラースキャナー63000CEIROブラック
10030フルカラースキャナー45000HERTブラック
10031フルカラースキャナー45001HERTブラック

例えば、7行目から始めて8行ごとにデータを抽出したい場合、式は以下のようになります。

=CHOOSEROWS(A2:E32, SEQUENCE((ROWS(A1:E32) - 7) / 8 + 1, 1, 7, 8))

この式をテーブルに適用すると、7行目、15行目、23行目、31行目のデータが抽出されます。

事例2: サンプルテーブルでの取り出し例(動的・自動拡張)

リストを「テーブル」として登録しておくと、レコードを増やした際に抽出結果へも反映されるようになります。また「最初の行」や「ステップ数」をセルへ入力しておけばより使いやすくなります。

たとえば「テーブル名:テーブル商品」「最初の行→セルH1」「ステップ数→セルH2」とするならば以下の式になります。

=CHOOSEROWS(テーブル商品,SEQUENCE((ROWS(テーブル商品)-H1)/H2+1,1,H1,H2))

上記の式はテーブルを元にしているので、リストの拡張にも動的に対応します。

コメント