【総力特集】パワークエリで列操作をマスター:選択、変更、移動、削除、結合、分割の詳細解説&実践テクニック!(3/11)

この記事はWindows版ExcelのPower Queryエディターを中心に、列の選択・名前変更・移動・削除・結合・分割を学ぶ第3回です。既存の画像・動画は旧バージョンの画面例なので、現在のExcelとはボタン名や配置が異なる場合があります。操作はクエリの「適用したステップ」に記録され、更新時にも再実行されます。

列ヘッダーをクリックして選ぶ操作と、「列の選択」で出力に残す列を指定する変換は別です。また、Power Query上の列削除は通常、取り込み元ファイルの列そのものを削除する操作ではありません。以下の手順は、練習用ファイルのコピーまたは新規クエリで試してください。

データベースの基本は行と列という2次元の構造になっています。パワークエリについてもこの2次元構造のデータを前提として処理されることになります。第3回目の講座ではパワークエリにおける列の操作を詳しく解説します。

パワークエリのマスターへの道を切り拓く、全11講座を用意しました!こちらは、その第3回目の講座になります。ぜひ、他の講座も楽しみながらスキルアップを目指してくださいね 他の講座を見るにはこちら

目次

列の選択

練習用Excelのダウンロード

説明で利用するExcelファイルをダウンロードして実際に操作をしてみましょう。

練習用エクセルを開き以下の通りパワークエリエディタを開いてください。

  1. [データ]タブ
  2. [テーブルまたは範囲]を押下
  3. [先頭行テーブルを見出しとして使用する]にチェックを入れる
パワークエリエディタの開き方

単一列の選択

単一列を選択する場合は、単純で列のヘッダーを選択します。下図の例だとB列が選択された状態になっています。

選択されている列は緑色になります。

連続した複数列の選択

連続した複数の列を選択する方法です。

  1. 最初の列を選択
  2. Shiftキーを押しながら最終列を選択

連続していない複数列の選択

連続していない複数の列を選択する方法です。

  1. 選択したい列を選択
  2. Ctrlキーを押しながら選択したい2個目以降の列を選択します。
    下図の例では、B列とC列が選択されています。3個以上を選択することが可能です。

メニューから列を選択

メニューから列を選択することもできます。この場合は未選択の列が、そのステップ以降のクエリ結果から除外されます。単なる画面上の非表示ではなく、列を残す/除外する変換が追加される点が、ヘッダーをクリックする操作と異なります。

  1. [列の選択]アイコンを選択します。
  2. [列の選択]を選択します。
  3. 選択したい列にチェックを入れます。

選択した列だけが表示されます。

関数としてTable.SelectColumnsが使われています。引数として列名が指定されています。
Table.SelectColumns(変更された型,{“B列”, “D列”})

列名の変更

列名の変更方法です。取り込み元のファイルのヘッダー名がデフォルトで表示されていますが、取り込み後に処理し易い名称としておくことをお勧めします。

直接列名を変更する

列名をダブルクリックすることで列名を変更することができます。

直接列名を変更

メニューから列名を変更する

メニューより列名を変更する手順です。繰り返し取り込む処理では、記録されたステップを更新時に再利用できます。

  1. 列の名称を変更したい列を選択
  2. [変換]タブを選択
  3. [名前の変更を選択]
  4. 列名を変更
メニューから列名を変更

コードで列名を変更する

上記で説明したように画面上やメニューから列名を変更するとコードが自動生成されます。つまりコードで列名の変更をすることが可能です。

Table.RenameColumns関数を使うことで、列名の変更をすることができます。以下の例では、「A列」を「果物」へ「B列」を「名前」に変換しています。

Table.RenameColumns(変更された型,{{“A列”, “果物”}, {“B列”, “名前”}})

関数の詳細については、以下Microsoft公式サイトをご参照ください。

あわせて読みたい
Table.RenameColumns - PowerQuery M 詳細情報: Table.RenameColumns

列の移動

続いて列の移動方法について解説します。見やすいデータベースにするには列の位置が重要になってきますので、列の移動は頻繁に行うことになります。

連続する複数列の移動

Shiftキーで列を選択したあとにドラッグ&ドロップで移動させる方法です。

以下動画の例では、連続するB列~D列を選択して移動させています。

連続する複数列の移動

連続しない複数列の移動

Ctrlキーを押下しながら移動列を選択してドラッグ&ドロップで移動させる方法です。

以下動画の例では、Ctrlキーを押下しながらE列→B列→D列の順番で選択して移動させています。ポイントは、移動後に選択した順番通りになっている点です。列の並び替えを行う時は便利です。

連続しない複数列の移動

メニューからの列移動

メニューから列を移動する方法を解説します。

  1. 移動したい列を選択
  2. [変換]タブを押下
  3. 移動アイコンから列の移動先を選択

コードで列移動する方法

上記で説明したようにマウスで列移動するとコードが自動生成されます。つまりコードで列の並び順を指定することができるのです。

Table.ReorderColumns関数を使うことで、列の順番を指定することができます。以下の例では、E列→B列→D列→A列→C列の順番で列が並ぶように指定しています。

= Table.ReorderColumns(変更された型,{“E列”, “B列”, “D列”, “A列”, “C列”})

関数の詳細については、以下Microsoft公式サイトをご参照ください。

あわせて読みたい
Table.ReorderColumns - PowerQuery M 詳細情報: Table.ReorderColumns

列の削除

列の削除方法です。

単一列の削除

単一列の削除方法です。

  1. 削除したい列を選択
  2. [列の削除]アイコンを選択
  3. [列の削除]を押下
単一列の削除

複数列の削除

複数列の削除方法です。

  1. 削除したい複数の列を選択
  2. [列の削除]アイコンを選択
  3. [列の削除]を押下
複数列の削除

選択した列以外の削除

選択した列以外を削除する方法です。99列あって1列以外消したい場合に、98列を選択して削除するのは大変ですよね。

  1. 残したい列を選択
  2. [列の削除]アイコンを選択
  3. [他の列の削除]を押下

コードで列を削除する方法

関数で列削除をする方法です。上記の対応を行うと自動生成されるコードです。

列の削除

Table.RemoveColumns関数で、削除する列を指定することができます。

= Table.RemoveColumns(変更された型,{"B列", "D列"})

その他列の削除

Table.SelectColumns関数は指定した列以外が削除されます。

= Table.SelectColumns(変更された型,{"A列", "C列", "E列"})

列の結合

パワークエリでは関数を使わずに列と列を簡単に結合することができます。

ここでいう結合は、同じ行にある列の値をつなぐ「列のマージ」です。別テーブルをキーで結ぶ「クエリのマージ」とは異なります。「列の追加」タブから行うと元列を残して結合列を作り、「変換」タブから行うと選択した元列を置き換えます。テキスト型と列の選択順、区切り記号を確認してください。

以下は、元の列を残して新しい列を作る例です。

STEP
結合する列の選択
  1. 結合したい列を選択(下図の例では、C列とD列を選択した状態)
  2. [列の追加]タブの[列のマージ]を押下します。
STEP
結合条件を指定

列と列の間の区切り記号と列名を指定します。

  1. [区切り記号]から列と列の間の区切りをする文字や記号を選択
  2. [新しい列名(オプション)]作成される列の名称を記入
STEP
結合完成

結合されると下図のように、結合後の列が追加されます。指定通りコンマ区切りで結合されていることが確認できます。

列の分割

パワークエリでは関数を使わずに指定した条件で列内のデータを分割することが可能です。

練習用Excelのダウンロード

説明で利用するExcelファイルをダウンロードして実際に操作をしてみましょう。

半角スペースで分割

半角スペースを分割条件にして列内データを分割します。サンプルデータのName列の名前を姓と名の列に分割します。

STEP
分割列の選択
  1. 分割したい列を選択
  2. [ホーム]タブ>[列の分割]>[区切り記号による分割]を選択
STEP
分割条件を指定
  1. 区切り記号に[カスタム]を選択
  2. 区切る文字や記号を指定できるので半角スペースを入力
STEP
列が分割された

下図のように列が半角スペースで分割されました。

指定文字数で分割

明示的に指定した文字数で分割することができます。

下の説明では、2005846xという文字列を200と5846xに2分割します。

STEP
分割列の選択
  1. 分割したい列を選択
  2. [ホーム]タブ>[列の分割]>[文字数による分割]を選択
STEP
分割する文字数を指定
  1. 文字数を指定
  2. [できるだけ左側で1回]を選択
STEP
列が分割された

指定した文字数で分割されていることが確認できます。

指定位置で分割

明示的に指定した位置で分割することができます。

下の説明では、2005846xという文字列を200と58と46xに3分割します。

STEP
分割列の選択
  1. 分割したい列を選択
  2. [ホーム]タブ>[列の分割]>[位置による分割]を選択
STEP
分割する文字位置を指定

分割後の各部分が始まる位置を、0から数えて指定します。下図の例は 0,3,5 です。2005846x の0文字目から3文字目の手前までが「200」、3文字目から5文字目の手前までが「58」、5文字目以降が「46x」になります。「文字数による分割」と混同しないでください。

STEP
列が分割された

指定した文字位置で分割されていることが確認できます。

大文字→小文字で分割

大文字から小文字に移行する処理に基づいて分割させることもできます。

下の説明していますが、例えば名前がFumiya Tanakaであれば、大文字→小文字で分割されるので、[F][umiya T][anaka] と3分割されます。

STEP
分割列の選択
  1. 分割したい列を選択
  2. [ホーム]タブ>[列の分割]>[大文字から小文字による分割]を選択
STEP
列が分割された

大文字→小文字で分割されていることが確認できます。

更新時に列が見つからない場合と、操作を戻す方法

「適用したステップ」を上から確認し、どのステップで必要な列が消えたか、名前が変わったかを調べます。途中のステップを選ぶと、その時点の結果を確認できます。不要なステップを削除する前にクエリを複製し、後続ステップがその列を参照していないか確認します。

Table.RemoveColumns は消す列を列挙し、Table.SelectColumns は残す列を列挙します。取り込み元に新しい列が増えたとき、残す列を固定した処理ではその列は出力されません。列構成の変更を受け入れるのか、決めた出力だけに限定するのかで選びます。

Table.ReorderColumns は列の並びを扱う関数で、リストに書かなかった列を削除する関数ではありません。必要な列だけに絞りたい場合は Table.SelectColumns を使います。列名や前のステップ名は実際のクエリに合わせてください。

指定列が存在しない場合、Table.SelectColumns は既定でエラーになります。任意列がなくても続行する設計なら第3引数の MissingField.UseNull でnull列を作る方法がありますが、必須列の欠落まで隠すと入力の誤りを見逃します。単にエラーを消すために付けないでください。

ダウンロード不要で試せる列選択のMコード

新しい空のクエリの「詳細エディター」に、次の let ... in 全体を入力する練習例です。既存の業務クエリを置き換えないでください。記事中の先頭に = がある単一式は数式バー向けであり、詳細エディターのクエリ全体とは入力形式が異なります。

let
    Source = #table(
        type table [商品 = text, 数量 = Int64.Type, メモ = text],
        {{"りんご", 2, "確認済み"}, {"みかん", 3, "追加分"}}
    ),
    Selected = Table.SelectColumns(Source, {"数量", "商品"}),
    Renamed = Table.RenameColumns(Selected, {{"商品", "品名"}})
in
    Renamed

仕様上、この例の出力列は左から「数量」「品名」で、行は 2 / りんご と 3 / みかん になります。「メモ」は元の定義には残っていますが、出力からは除外されます。この追加例はM関数の公式仕様に基づく例であり、今回Excel実機で実行した結果ではありません。

結合・分割でデータを壊さないための確認

商品コードや郵便番号など先頭の0が重要な列は、数値に変換すると0が失われます。分割・結合する前だけでなく、自動追加された「変更された型」のステップも確認し、必要な列をテキストとして扱います。すでに数値化して失った0は、後からテキスト型へ戻すだけでは復元できません。

氏名を空白で分割する場合は、半角・全角の違い、連続する空白、複合姓やミドルネームを確認します。分割条件で「各区切り」「一番左」「一番右」のどれを使うかにより結果が変わります。区切りがない行や想定より多い行もプレビューで確認してください。

「大文字から小文字」での分割は文字種の境界を扱うもので、氏名を正しく姓・名に分ける機能ではありません。また、分割先を「行」にすると行数が増え、合計値や集計結果に影響します。「列」に分けたいのか「行」に展開したいのかも確認します。

列構成・データ型・行数を確認できたら「閉じて読み込む」で出力先を確認します。出力表を直接直すだけでは次回更新で置き換わる場合があるため、繰り返し必要な処理はクエリのステップとして設定します。

公式リファレンス

列の選択と削除/Table.SelectColumns/Table.ReorderColumns/列のマージ/位置による分割/区切り記号による分割

パワークエリ学習コンテンツ

全11回の学習コンテンツでパワークエリを習得することができます。

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次