雑・Excel入門試論 - 脱VLOOKUPの思考 17 - Power Query - テーブルの結合

# Power Query 結合
## 1.Table.NestedJoin
　Excelで2つのテーブルを結合する時、ほとんどの人はVLOOKUPを使用すると思います。参照するテーブルが小さい場合は問題がありません。しかし、2つのテーブルが非常に大きい時、VLOOKUP関数がエクセルをクラッシュさせる原因となることがあります。

　参照元と参照先のテーブルが**1対1**の関係になっており、参照先のデータが変更されない場合、VLOOKUPの様なダイナミック参照ではなく、静的参照を行うほうが効果的です。

　例えば、給与テーブルに人事テーブルを参照して4月1日時点の年齢を列追加したい時、2つのテーブルは1対1になっており、4月1日時点年齢は作業中に変化はないと思います。この場合、VLOOKUPではなく、Power Queryをを使えば、人事テーブルを作業中のエクセルに持ち込まずに別ファイルにして作業できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/f4cd2fed-d8db-0eff-2ada-4661c7102231.png)
　このような給与データに人事テーブルから氏名と雇用開始日を持ってきます。
<img width="800" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/5d838450-f479-fa26-ebd4-76976ae16b7d.gif"/>

　最期に列の品質、列の分布できちんと結合できているか確認しましょう。
<img width="800" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/a79b58f7-16e2-5465-1c1b-7a68031a4306.png"/>

### 構文
```text:Table.NestedJoin構文
Table.NestedJoin(
    table1 as table, 
    key1 as any, 
    table2 as any, 
    key2 as any, 
    newColumnName as text, 
    optional joinKind as nullable number, 
    optional keyEqualityComparers as nullable list
) as table
```
### JoinKind.Type

|名前|値|説明|
|:--|:--:|:--|
JoinKind.Inner|0|内部結合(既定)
JoinKind.LeftOuter|1|左外部結合
JoinKind.RightOuter|2|右外部結合
JoinKind.FullOuter|3|完全外部結合
JoinKind.LeftAnti|4|左反結合
JoinKind.RightAnti|5|右反結合


### Table.Joinとの違い
　Table.Joinは、以下のような構文になります。

```text:Table.Join構文
Table.Join(
    table1 as table, 
    key1 as any, 
    table2 as table, 
    key2 as any, 
    optional joinKind as nullable number, 
    optional joinAlgorithm as nullable number, 
    optional keyEqualityComparers as nullable list
) as table
```

　Table.Joinは、テーブル1の後にテーブル2の内容が追加されるのに対して、Table.NestedJoinは、新しい項目にテーブル2の内容がテーブル形式で作成されます。

<img width="800" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/b7656926-bfab-5ae0-199d-eb717d1c53ad.png"/>
<img width="800" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/41e27a42-93ae-b4cf-aeef-b0033ee702c5.png"/>

# VLOOKUP

```text:VLOOKUP構文
=VLOOKUP (
    lookup_value, 
    table_array, 
    col_index_num, 
    [range_lookup]
)
```

- lookup_value : 検索値
- table_array : 範囲
- col_index_num : 列番号
- [range_lookup] : 検索の型
    - 1/TRUE : 近似一致(既定)
    - 0/FALSE : 完全一致

# XLOOKUP

```text:XLOOKUP構文
=XLOOKUP(
    lookup_value, 
    lookup_array, 
    return_array, 
    [if_not_found], 
    [match_mode], 
    [search_mode]
) 
```

- lookup_value : 検索値
- lookup_array : 検索範囲
- return_array : 戻り配列
- [if_not_found] : 見つからない場合
- [match_mode] : 一致モード
    - 0 : 完全一致。見つからない場合は #N/A が既定で返される(既定)
    - -1 : 近似一致。完全に一致するか、次の小さなアイテムが返されます
    - 1 : 近似一致。完全に一致するか、次の大きなアイテムが返されます
    - 2 : `*` , `?` 及び `~` が特別な意味を持つワイルドカードの一致
- [search_mode] : 検索モード
    - 1 : 先頭の項目から検索を実行します(既定)
    - -1 : 末尾の項目から逆に検索を実行します
    - 2 : 昇順で並べられた検索範囲を使用してバイナリ検索を実行します。並べ替えられていな場合、無効な結果が返されます。
    - -2 : 降順で並べ替えられた検索範囲を使用してバイナリ検索を実行します。並び替えられていない場合、無効な結果が返されます。

　XLOOKUPは、垂直方向または水平方向の範囲で値を検索でき、近似一致と完全一致を実行でき、部分一致のためのワイルドカード（* ?）をサポートしています。さらに、XLOOKUPは、最初の値または最後の値からデータを検索できます。

　バイナリサーチは非常に高速ですが、データは必要に応じてソートされなければなりません。データが適切にソートされていない場合、バイナリサーチは一見完全に正常に見えても、無効な結果を返すことがあります。

### XLOOKUPのメリット
- XLOOKUPは、検索値の左側のデータも返すことができます。
- XLOOKUPのデフォルトは完全一致です。VLOOKUPで起きる、検索の型を指定し忘れることから生じるミスを防ぐことができます。
- XLOOKUPは、テーブルを参照する場合、返す列を番号ではなく列名で指定できます。
- XLOOKUPは、1つの値だけでなく、範囲や行または列全体を返すことができます。

:::note warn
ワークブック間でXLOOKUPを使用する場合、両方のワークブックが開いている必要があります。
:::

:::note info
XLOOKUP関数は、大文字と小文字を区別しません。区別するようにするには、EXACT関数を使用します。
`=XLOOKUP(TRUE,EXACT([@[Employee_Name]],Salary[Name]),Salary[Salary])`
:::
# コンテンツ
- [雑・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)