雑・Excel入門試論 - 脱VLOOKUPの思考 15 - Power Query - エクセルのデータを読み込む

# Power Queryを使う意味

　我々がエクセルで行う作業では、多くの場合、CSVファイルやエクセル・ファイル、テキスト・ファイルが渡されて、それを整形や加工する作業が大きな比重を占めています。
　Power Queryのコネクタを利用することで、CSVやエクセルファイルだけでなく、Web上のデータや、特別なアドインやODBCの設定無しで多くのデータソースからデータの抽出が可能です。
　また、以下のような、データの変換作業にも強力な力を発揮してくれます。

- **データクレンジング** : データのフィルタリングや不要な行の削除、データの加工、変換、分割など、データをきれいにするためのあらゆる機能があります。
- **データ統合** : 複数のデータセットを結合するためにVLOOKUPやXLOOKUPを使っていると思いますが、Power Queryでは関数や引数を書くことなく、データの結合やグループ化を視覚的に行うことができます。
- **データエンリッチメント** : 新しい列を追加したり、データセットに対して計算を行うことができます。また、テーブルを動的に作成することもできます。

:::note info
Power Queryを使用した変換作業では、殆どの作業が数式やコードを書く必要なく、メニューのコマンドで操作が可能です。その操作結果は、１つ１つステップとして記録され、どのような手順で操作を行ったか追跡することができます。
作業の手順が検証可能であることは、データの信頼性を高めるためには大変重要です。
:::

:::note warn
古典的なエクセルの操作で、エクセルシート上で複数ステップで変換を行ったり、データによって違う関数を使用したりすると、その手順の追跡、検証が難しくなります。また、最終的に値で貼り付けを行うと、シート上では追跡、検証が不可能になってしまいます。
:::

　その操作した内容は **M言語** で記録されているので、ユーザーはそのコードを学習することで、より便利な機能を手にすることができます。Power Queryは、ノーコード、ローコード、プロコード、いずれの要望にも答えることができます。
 
# クエリオプション
　Power Queryを始める前に、クエリオプションを確認します。

<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/93317fdb-5a38-b0a4-ebc1-7d24e25ee641.png"/>

<details><summary><b>1. グローバル・全般</b></summary><div>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/353db1ae-5bb1-361a-9f96-069da81c9139.png)

</div></details>
<b>▼ 2. グローバル・データの読み込み</b><div>
　「高速データ読み込み」にチェックを入れます。このチェックによって、データの更新中にExcelのユーザーインターフェースがロックされますが、読み込みが高速に行われます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/79d1be79-4174-bd5e-8c1c-7f08a4ece79e.png)

</div>
<b>▼ 3. グローバル・Power Queryエディター</b><div>
　以下のチェックボックスにはすべてチェックを入れておきましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/a1f524fd-e81f-268d-107c-f386bac125f7.png)

</div>
<details><summary><b>4. グローバル・セキュリティ</b></summary><div>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/41cc1345-53ea-b2f1-5bfb-5c3412245023.png)

</div></details>
<details><summary><b>5. グローバル・プライバシー</b></summary><div>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/cf45f485-4793-5a01-4c3b-4335f4c72c82.png)

</div></details>
<details><summary><b>6. グローバル・地域の設定</b></summary><div>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/a6f17901-c1b2-9a02-d0f9-4d650d5c7f2e.png)
　規定では「現在のインストール言語」になっており、Power Queryeエディターで作成されるステップの名前が日本語で作成されます。「常に英語」にすると、ステップ名が英語で作成されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/020690e3-d09c-acae-5b5e-150495575771.png)

</div></details>
<details><summary><b>7. グローバル・診断</b></summary><div>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/e6b6cc1b-769d-fe02-819d-6446d51bd69b.png)

</div></details>
<details><summary><b>8. 現在のブック・データの読み込み</b></summary><div>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/bf2d5e75-c59e-b9d6-a496-ce67fd6bffc9.png)
　Power Queryは、クエリごとに最大1,000行のプレビューデータをキャッシュし、更新を高速化することができます。ただし、1,000行を超えるファイルに対して多数のクエリを作成する場合、プレビューデータの更新に時間がかかる可能性があります。そのような作業を行う場合は、「バックグラウンドでのデータプレビューのダウンロードを許可する」のチェックを外します。
</div></details>
<details><summary><b>9. 現在のブック・地域の設定</b></summary><div>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/f8c6457e-07d2-7945-3c61-110f6cc32dc6.png)

</div></details>
<details><summary><b>10. 現在のブック・プライバシー</b></summary><div>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/3194a3a2-2002-8718-ebb3-f75f8b5c2a54.png)

</div></details>


# データの読み込み
　Power Queryは、様々なデータソースからのデータを読み込むことができます。
- エクセルブック、PDF、テキストファイル、CSV、XML、JSONなど
- SQLサーバー、Access、Oracle, SAP HANAなど
- Power BI
- SharePoint、Exchange、Dynamics 365、 Salesfoceなど
- OData、Hadoop、ODBCなど

<img width="800" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/55452ed9-c677-5694-74c8-697dfd907b20.png"/>

# Excelワークブックからデータを読み込む
## データの取得
　作業の元となるデータが定期的に他のシステムから提供されるようなシーンでは、元となるデータの形がエクセルやCSVの形になっていることがよくあります。
　CSVファイルの場合、エクセルに読み込んでから作業を行うことになりますが、エクセルファイルで提供される場合、直接そのエクセルファイルで作業を行うことはやめましょう。元となるデータは、常に参照する形で使用し、元データを書き換える危険は極力避けるようにします。

　そこで、作業用のエクセルにデータを読み込む作業を行うことになりますが、その作業をPower Queryで行います。

<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/51c25c3b-9b8d-3e60-e0e6-88987445ad2c.png"/>

　ナビゲーターにシート名、テーブル名が表示され、読み込みたいテーブルを選択し、「データの変換」を押します。
<img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/f0bcd06c-1e9d-d44f-e062-ebbbdc817542.png"/>

　テーブルのデータがPower Queryエディタに表示されます。

<img width="800" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/e10818c9-54da-77cb-1aa8-a818dd1d217c.png"/>

## 必要な項目の選択
　読み込みを行うと、自動的にクエリステップがいくつか作成されます。
1. ソース：エクセルブックの読み込み。
1. ナビゲーション：読み込み対象とするテーブルを選択
1. 昇格されたヘッダー数：1行目のデータをヘッダーとして適用
1. 変更された型：テーブルの最初の200行を検査して、列の型とヘッダーを自動的に検出

　すべてのクエリの最初のステップは「ソース」と表示されます。「適用したステップ」ウィンドウでこれを選択すると、Power Queryが抽出した生データがプレビュー表示されます。
　「変更された型」は、最初の200個の値から、日時、整数、10進数、テキストのいずれかの型を判断します。型の種類は他にもありますが、この4種類の型がPower Queryの基本の型となります。一旦「変更された型」を削除し、自動検出でなく、後で自分で行うこととします。

:::note info
「適用したステップ」に表示されているステップを選択して、ステップの削除、追加を行うことができます。
また、Power Queryはデータをコピーして動作しているため、データソースを汚すことがありません。一番最初のステップである「ソース」以外を削除してしまえば、最初の状態に戻ることができます。
:::


　まず最初に行うのは、必要な項目の選択です。読み込まれたデータをすべて使用する場合はそのままでいいのですが、必要のない項目があった場合は、列の選択でチェックを外して削除します。

<img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/6691e58b-a42f-31bf-9296-e690484025bd.png"/>

## 項目名の変更
　最初の項目名は、エクセルのひょうの1行目のデータをもとに作成されていますので、必要なら適宜変更します。変更するには、項目名をダブルクリックして行います。

## データ型の決定
　先程「変更された型」のステップを削除したので、項目名の左にあるアイコンが「ABC123」となっていると思います。
<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/e1d6286a-40d1-f0d8-d0b3-c774de915620.png"/>
これは、**Any型**と言われるもので、なんでもOKの型です。データ処理を行っていくのに、項目の型を決めておくことは重要なので、変更します。
　「ABC123」となっているところをクリックすると、選択できる型の種類がドロップダウンで表示されます。このデータでは"Sales Price"がドルになっているので、小数点以下2桁が有効な通貨型を選択します。小数点以下を扱わない場合は、整数で問題ありません。小数点以下の計算が必要な場合は、浮動小数点を扱う10進数を選択します。
<img width="200" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/3ae6e406-9b73-a3f6-615d-25d9bf412e2d.png"/>
　変更すると、項目名の左にそれぞれの型を示すアイコンが表示されます。また、左側のクエリステップに「変更された型」のステップが追加されます。
<img width="800" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/50b9a1e4-8f6a-440e-14f8-4b39cdeee41a.png"/>

　データの型の決定を決定し、期待するデータに揃えておくことは、データ処理の基本です。もっといい方法があるかもしれませんが、意識して作業を行うことを心がけてください。

## 「閉じて読み込む」
　ここで、一旦「閉じて読み込む」を押し、エクセルシートにデータを読み込んでみます。

<img width="200" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/0e0ffe6b-1f61-1095-14c8-029f8e1b17c6.png"/>

# クエリの編集
　作成したクエリを編集するには、「データ」の「クエリと接続」を選択すると、右側に先ほど作成したクエリが表示されます。
<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/47605638-cb26-b581-c195-3b0529f769d8.png"/>
　表示されたクエリ名を右クリックし、「編集」を選択すれば、Power Queryエディタが表示されます。
<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/38aff1ad-72cf-cc99-a1ce-70f5f6174ce0.png"/>

　あるいは、「データ」から「データの取得」を開き「Power Queryエディターの起動」を選択します。
<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/9a0e76e9-f534-9eb7-2420-74fadb819890.png"/>

# ソースの変更
　違うエクセルファイルを読み込みたい場合は、Power Queryエディタのステップ「ソース」の名前をダブルクリックするか、名前の右にある歯車のアイコンをクリックしてダイアログを表示させます。その中のファイルパスを変更すれば、違うファイルを読み込むことができます。
<img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/59f9f7ee-2253-8261-9c9f-81eb3d073669.png"/>

# CSVの読み込み
　CSVの読み込みには、「テキストまたはCSVから」を使用します。
<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/07fb27c6-4286-a42c-e159-f9a00b17e59b.png"/>

# エクセルシートのデータを読み込む
　元となるデータを現在開いているエクセルブックのシートを使いたい場合、テーブル内のデータを右クリックし、「テーブルまたは範囲からデータを取得」を選択します。
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/bacb1f4e-cab6-c34a-125e-9c0a3cb82e33.png"/>
　Power Queryエディタがデータが読み込まれた状態で開きます。

# フォルダの中の複数のエクセルファイル（または複数のCSVファイル）を読み込む
　毎回ファイル名を指定するのではなく、決められたファイルに入っているものを読み込むようにしたい場合は、「フォルダーから」を使用します。加えて、フォルダーに複数のエクセルファイルがあれば、まとめて読み込むこともできます。
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/2d2d76a6-50e6-705a-c75c-68b01cb03cd2.png"/>
　下図のアイコンをクリックし、ContentsのBinaryを展開します。
<img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/989e7590-261d-5307-26bd-f2919f3f10f9.png"/>
　後は、先程のエクセルファイル（またはCSVファイル）と同様に選択していきます。
<img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/f86dca12-e186-b033-58d4-138f51e7588b.png"/>
　データの読み込みができると、左側のクエリペインには複数のファイルからなる「ヘルパークエリ」が表示され、右側のステップは新たなステップが記録されています。
　1つ1つのファイルの変換は、ヘルパークエリの「サンプルファイルの変換」で定義されています。エクセルファイルからデータを取り込む際の操作を行うには、このクエリを修正していきます。修正は自動的に「ファイルの変換」に反映し、「新しいフォルダー」クエリから呼び出されます。
<img width="200" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/e479d5a6-291b-da4a-b975-f0313b177278.png"/>
![path234.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/c1040697-7a86-44ea-ef37-d00f42f93c5e.png)

:::note warn
フォルダの中のファイルは、全て同じ形式のファイルが入っていることが前提です。違う形式が混じっている場合、正しく読み込みできません。
:::


# データの更新
　もとのデータファイルの中身が変更になった場合、「すべて更新」を押して再読込を行うと、定義されたステップが変更されたデータに再度適用されます。
<img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/3439eae2-39d7-d415-75fe-62c6c1087156.png"/>

:::note info
従来は、データを入れ替えて計算しなおすには、全て手作業でやり直すか、古いワークシートに新たなデータを貼り付けて調整を行う作業が必要でした。Power Queryではそのような再作業の必要はなく、パラメータを書き換えて「すべて更新」ボタンを押すだけで完了します。
ただ早いだけでなく、エラーの原因となる人的要因を排除できることがとても重要です。
:::

:::note info
ポータビリティを高めるた、フォルダーのパスのような固有の値はパラメータに登録しておくことをお勧めします。

<img width="350" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/a96c5a5b-25fb-82b9-d400-c56449b6ff43.png"/>

<img width="350" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/d5fdde9d-4bab-77e6-45fb-470336a40248.png"/>
:::


# コンテンツ
- [雑・Excel入門試論 - 脱VLOOKUPの思考 01 - ブック - 仕様と制限](https://qiita.com/spumoni/items/189004c01181c50a4821)
- [雑・Excel入門試論 - 脱VLOOKUPの思考 02 - ブック - オプション](https://qiita.com/spumoni/items/75955db69cc34695de14)
- [雑・Excel入門試論 - 脱VLOOKUPの思考 03 - ワークシート](https://qiita.com/spumoni/items/5408cae114034be528c4)
- [雑・Excel入門試論 - 脱VLOOKUPの思考 04 - セル - 文字列型](https://qiita.com/spumoni/items/4ab1d7067418886c0582)
- [雑・Excel入門試論 - 脱VLOOKUPの思考 05 - セル - 数値データ](https://qiita.com/spumoni/items/970b4b39a5a2185992ed)
- [雑・Excel入門試論 - 脱VLOOKUPの思考 06 - セル - 日時データ](https://qiita.com/spumoni/items/9f270e181fbc45503759)
- [雑・Excel入門試論 - 脱VLOOKUPの思考 07 -  リンクされたデータ型](https://qiita.com/spumoni/items/ed59d15753d992c3a630)
- [雑・Excel入門試論 - 脱VLOOKUPの思考 08 - セル - 計算式・関数](https://qiita.com/spumoni/items/ae339c97627110e2134e)
- [雑・Excel入門試論 - 脱VLOOKUPの思考 09 -  セル - 数値の書式設定](https://qiita.com/spumoni/items/1b3134d4b0284465976f)
- [雑・Excel入門試論 - 脱VLOOKUPの思考 10 - セル - 日付と時刻の書式設定](https://qiita.com/spumoni/items/6eb602f69956a5e1502f)
- [雑・Excel入門試論 - 脱VLOOKUPの思考 11 - セル - 条件付き書式](https://qiita.com/spumoni/items/04bd8e24284daef6f27a)
- [雑・Excel入門試論 - 脱VLOOKUPの思考 12 - テーブル - テーブルの作成と入力規則](https://qiita.com/spumoni/items/f23beca01c5093c81c47)
- [雑・Excel入門試論 - 脱VLOOKUPの思考 13 - テーブル - ソートとスライサー](https://qiita.com/spumoni/items/b66027008c2f9edb853f)
- [雑・Excel入門試論 - 脱VLOOKUPの思考 14 - テーブル - 動的配列関数](https://qiita.com/spumoni/items/cc03e898f02b8c3017f7)
- [雑・Excel入門試論 - 脱VLOOKUPの思考 15 - Power Query - エクセルのデータを読み込む](https://qiita.com/spumoni/items/fc38a4ae595b64af87f5)
- [雑・Excel入門試論 - 脱VLOOKUPの思考 16 - Power Query - 変換](https://qiita.com/spumoni/items/100e0e3c6a5a59b03229)
- [雑・Excel入門試論 - 脱VLOOKUPの思考 17 - Power Query - テーブルの結合](https://qiita.com/spumoni/items/debb9ea9b8692ca8fc8c)
- [雑・Excel入門試論 - 脱VLOOKUPの思考 18 パワーピボット - データモデル](https://qiita.com/spumoni/items/08458978e86dc59f18ed)
- [雑・Excel入門試論 - 脱VLOOKUPの思考 19 パワーピボット - 操作](https://qiita.com/spumoni/items/e7b3f245e87622e9bc79)
- [雑・Excel入門試論 - 脱VLOOKUPの思考 20 パワーピボット - 日付テーブル](https://qiita.com/spumoni/items/340e0fcbc9cd10198112)
- [雑・Excel入門試論 - 脱VLOOKUPの思考 21 DAX - コンテキストとイテレーター](https://qiita.com/spumoni/items/cddc7fa16341e20bafb8)
- [雑・Excel入門試論 - 脱VLOOKUPの思考 22 DAX - CALCULATE](https://qiita.com/spumoni/items/e2218fece1ec01e177b0)
- [雑・Excel入門試論 - 脱VLOOKUPの思考 23 DAX - タイムインテリジェンス](https://qiita.com/spumoni/items/6d8aeb9f80ecafb69c5a)
- [雑・Excel入門試論 - 脱VLOOKUPの思考 24 - ダッシュボード - ピボットグラフ（Pivot Chart）](https://qiita.com/spumoni/items/ffb0d57a6272c2e5ad37)
- [雑・Excel入門試論 - 脱VLOOKUPの思考 25 - ダッシュボードの作成](https://qiita.com/spumoni/items/5e57ad587a343857e543)