なんでもエクセル(Nandemo Excel)

何でもエクセルでやってしまう そこのあなた。ようこそ

Power Query:n行飛ばしでデータを読み込む

たまに整形されていないテーブルから何行か飛ばして抽出したいと思うことがあるかもしれない。「何行飛ばし」みたいな抽出の仕方は、ずれるととんでもないことになるので可能な限りは避けたいものである。とはいえフラグが無ければしょうがない。

上の画像では3行ごと(2行飛ばし)で データを抜き出している。

よくある方法はインデックス列を追加して剰余を作り、それを抽出する方法。まずはそっちからやってみる。最初は連番列の追加から。


[列の追加]→[インデックス列の追加]

つづいて連番から剰余を算出する。連番はもういらないので、剰余は「変換」から実施したほうがいい。「列の追加」から実施すると1列余分に増えてしまう。


[変換]→[標準]→[剰余]

今回は3行ごとに抜き出したいので、商の値は「3」を指定。

剰余が計算できたら、そこから「0」の値だけを抽出する。

これでおしまい。後はいらなくなったインデックス列を削除する。

これでいいといえばいいけど、データ量が多いと「抽出」の処理が重くなる。マウスの操作中心で解決したい気持ちは分からんではないけど、数式を直接記述したほうがいい。

という訳で別案。テーブルを読み込んで型の変更が終わったところから。ステップを直接編集して追加していこう。


最後のステップ「変更された型」を右クリック[後にステップの挿入]

挿入されたステップ名は自動で「カスタム」になるので、分かりやすいよう都度名称を変更しておいたほうがいい。


ステップ名を右クリック「名前の変更」(もしくは F2キー)

続いて数式バーから数式を編集する。

テーブルの分割(編集)


「変更された型」を「Table.Split(変更された型, 3)」に変更

これでテーブルを指定行で分割することができた。

テーブルの分割(結果)

「Table」の少し横あたりを選択(文字をクリックするとドリルダウンしてしまう)するとプレビューが下に表示される。今の状態は分割されたテーブルに3行ずつデータが入っている状態なので、ここからリスト編集をかけて先頭の行だけを残してやる。

先頭行のみ残す

    = List.Transform(テーブルの分割, each Table.FirstN(_, 1))

ここまでできたら後はテーブルを結合してやるだけでいい。

テーブルの結合

    Table.Combine(先頭行のみ残す)

リスト編集も含めて慣れてしまえばなんてことはないので、忌避せず直接入力にチャレンジしてみて欲しい。