Power Queryで複数のテーブルを結合する際、結合キーに全角文字と半角文字が混在していると、本来一致するはずの値が異なるデータとして扱われ、マージに失敗します。例えば、全角数字「1」と半角数字「1」、全角英字「A」と半角英字「A」などが該当します。この問題は手動では見つけにくく、結合結果が予想より少なくなる原因となります。ここでは、Power Queryで全角半角の違いを確認し、正しく結合できるようにする具体的な手順を説明します。
【要点】この記事で確認すること
- 最初に見る場所: 結合キーとして使用する列のデータ型が「テキスト」であること、およびセル内に全角英数字や全角記号が含まれていないかをPower Queryエディタで直接確認します。
- 切り分けの軸: 端末側のデータ入力方法の問題か、業務システムからエクスポートされるデータの仕様か、管理者側の設定(文字コードやUnicode正規化)で対処すべきかを切り分けます。
- 注意点: 会社PCで複数のユーザーが利用する共有データソースの場合、Power Queryで変換を加える前に元データを書き換えないように注意してください。変換はクエリ内で行い、元のソースは変更しない運用にしてください。
ADVERTISEMENT
目次
全角半角の違いが発生する原因
Power Queryで結合キーに全角と半角の違いが生じる主な原因は、データの出所が異なることにあります。例えば、あるテーブルはWebシステムからエクスポートしたCSVファイルで、別のテーブルは手入力されたExcelファイルである場合、前者は半角英数字、後者は全角英数字で入力されることがあります。また、システム間で文字コードやキーボード入力の設定が統一されていない場合も同様です。
特に日本語環境では、全角文字(2バイト)と半角文字(1バイト)が混在しやすく、「1」と「1」、「A」と「A」、「あ」と「ア」などが代表例です。さらに、全角スペース(U+3000)と半角スペース(U+0020)の違いも見落とされがちです。これらの差異は人間の目には同じに見えても、コンピューターでは完全に異なる文字コードとして扱われます。
確認手順:Power Queryエディタで全角半角の有無を調べる
結合前に、該当列に全角半角の違いがないかを確認します。以下の手順を実行してください。
手順1:Power Queryエディタを開く
Excelでデータを読み込み、「データ」タブの「テーブルまたは範囲から」または「クエリと接続」からPower Queryエディタを起動します。結合元のクエリと結合先のクエリの両方を開いておきます。
手順2:結合キーの列を選択しデータを観察する
各クエリの結合キー列をクリックし、列内の値を目視で確認します。全角と半角が混在している場合、数字や英字に注目します。例えば「12345」と「12345」が並んでいるかをチェックします。
手順3:カスタム列を追加して文字数を比較する
全角文字は半角文字よりもバイト数が多いため、文字列の長さが異なります。以下のM言語式を使って文字数をカウントするカスタム列を追加します。
- Power Queryエディタで「列の追加」タブ → 「カスタム列」をクリックします。
- 新しい列名を「Length」とし、以下の式を入力します。
= Text.Length([結合キー列]) - OKをクリックすると、元の文字列の長さ(文字数)が表示されます。
- 次に、もう1つのクエリでも同様のカスタム列を追加します。
- 文字数を比較し、同じ内容のはずなのに長さが異なる行があれば、全角半角の混在の可能性があります。
手順4:全角文字を半角に変換する正規化クエリを作成する
文字数の確認で差が見つかった場合は、Power Query内で全角文字を半角に変換する処理を追加します。手動で変換する方法と、カスタム関数を用いる方法を説明します。
手動変換の手順
- 「列の追加」→「カスタム列」をクリックします。
- 新しい列名を「NormalizedKey」とし、以下の式を入力します。
= Text.Replace(Text.Replace(Text.Replace([結合キー列], "1", "1"), "2", "2"), "A", "A")
これを必要な文字種(0~9、A~Z、a~z、全角スペースなど)すべてに対して入れ子にします。ただし、すべての全角文字を扱うには長くなるため、次のカスタム関数の利用を推奨します。 - 既存の結合キー列を非表示または削除し、正規化後の列を結合キーとして使用します。
カスタム関数を使う方法
- 「ホーム」タブ → 「新しいソース」→ 「空のクエリ」を選択し、クエリを追加します。
- 「詳細エディター」を開き、以下の関数を貼り付けます。
(inputText as text) as text =>
let
// 全角英数字および記号を半角に変換
replaceFullWidth = Text.Replace(Text.Replace(Text.Replace(Text.Replace(Text.Replace(Text.Replace(Text.Replace(
Text.Replace(Text.Replace(Text.Replace(Text.Replace(Text.Replace(Text.Replace(Text.Replace(
inputText,
"0","0"),"1","1"),"2","2"),"3","3"),"4","4"),"5","5"),"6","6"),
"7","7"),"8","8"),"9","9"),"A","A"),"B","B"),"C","C"),"D","D"),
// 以下同様に必要な文字を追加
result = replaceFullWidth
in
result
名前を「ConvertToHalfWidth」などに設定し、完成したら閉じて読み込みます。その後、各テーブルで「カスタム列の追加」から = ConvertToHalfWidth([結合キー列]) と入力して正規化列を作成します。
結合前に両方のテーブルを正規化する
正規化列を用意したら、両方のテーブルで同じ変換を適用した上で、その列を使ってマージします。手順は以下の通りです。
- 各テーブルに上記の正規化列(例:NormalizedKey)を追加します。
- 「ホーム」タブ → 「クエリのマージ」を選択します。
- プライマリテーブルとセカンダリテーブルを指定し、結合キーとして両方の正規化列を選択します。
- 結合の種類(左外部、内部など)を選んでOKをクリックします。
- 結果を展開してデータを確認します。以前より多くの行が結合されていれば、全角半角の問題が解消されたことになります。
ADVERTISEMENT
失敗パターンと対策
以下のような失敗パターンがよく発生します。事前に把握して予防してください。
| 失敗パターン | 原因 | 対策 |
|---|---|---|
| 正規化を片方のテーブルにしか適用しなかった | 結合キーの片方だけを変換しても、もう片方が全角のままでは不一致 | 必ず両方のテーブルで同一の正規化処理を施す |
| 全角スペースを変換し忘れる | 全角スペース(U+3000)と半角スペース(U+0020)は別文字 | 全角スペースも半角に変換する処理を追加する |
| 数字だけで英字を変換しなかった | 英字にも全角半角があり、例えば「A」と「A」は異なる | 英大文字・小文字もすべて対応する、またはUnicode正規化関数を使用 |
| 元データを直接変更してしまった | Power Queryの変換ではなく、元のExcelセルを書き換えた | Power Query内で変換を行うことに徹し、ソースデータは編集しない |
管理者に確認する情報
全角半角の問題が頻繁に発生する場合は、データの入力規則やシステム設定の見直しが必要です。管理者に以下の点を確認してください。
- データを生成する業務システムの文字コード設定(UTF-8、Shift_JISなど)と、全角半角の自動変換機能の有無
- 手入力を伴うExcelファイルで、入力規則により英数字を半角に制限できるか
- Power Queryで毎回変換するよりも、元のデータソースでUnicode正規化(NFKC)を適用する方が効率的な場合があるか
- 組織全体で全角半角の使用ルールを統一するポリシーが策定可能か
よくある質問(Q&A)
Q1: 全角半角の変換を自動化する方法はありますか?
Power QueryのM言語には標準で全角半角を変換する関数がありませんが、上記のカスタム関数を作成すれば自動化できます。また、Excelの「PHONETIC」関数などのワークシート関数は使用できません。VBAを使う方法もありますが、Power Query内で完結させるほうが保守しやすいです。
Q2: 結合後に正規化前の列も残したい場合はどうすれば?
元の列は削除せず、正規化列を追加したままマージしてください。必要に応じて、マージ後に不要な列を非表示にできます。
Q3: 全角カタカナ「ア」と半角カタカナ「ア」も結合に影響しますか?
はい、影響します。全角カタカナと半角カタカナは別の文字コードです。同様に変換処理を追加する必要がありますが、プロジェクトによってどちらに統一すべきか決めて対応してください。
Q4: 大量の全角文字をすべて対応するのが面倒です。良い方法は?
Unicode正規化(NFKDやNFKC)を利用すると、見た目を半角に変換できます。残念ながらPower Queryの標準関数にはありませんが、カスタム関数でUnicode正規化を実装するか、外部ライブラリの使用を検討してください。あるいは、変換が必要な文字種を事前にリストアップして関数に含めます。
まとめ
Power Queryでの結合時に全角半角の違いがあると、結合結果が不完全になります。まずはPower Queryエディタで結合キーの文字数を調べ、不自然な長さの行がないかを確認します。問題が見つかった場合は、全角文字を半角に変換するカスタム列を作成し、両方のテーブルに同じ変換を適用してからマージします。一度適切な変換クエリをテンプレート化しておくと、同じ問題が発生したときに再利用できて便利です。データの一貫性を保つためには、入力段階でのルール統一が最も効果的ですが、既存データに対してはPower Queryの変換で迅速に対処できます。
ADVERTISEMENT
超解決 Excel・Word研究班
企業のDX支援や業務効率化を専門とする技術者チーム。20年以上のExcel・Word運用改善実績に基づき、不具合の根本原因と最短の解決策を監修しています。ExcelとWordを使った「やりたいこと」「困っていること」「より便利な使い方」をクライアントの視点で丁寧に提供します。
Office・仕事術の人気記事ランキング
- 【Word】差し込み印刷で数字の桁を整える!金額にカンマ(桁区切り)を入れる設定
- 【Teams】メッセージを「保存済み」にして後で読む!重要なチャットをブックマークして整理する技
- 【Copilot】「サービスに接続できません」エラーの原因切り分けと対処法
- 【PDF】PDFのサムネイルプレビューが表示されない!エクスプローラーの設定とAcrobat環境設定
- 【Excel】文字がセルの枠からはみ出す・隠れる!「折り返して表示」と「縮小して全体を表示」の使い分け
- 【Outlook】添付ファイルが「Winmail.dat」に化ける!受信側が困らない送信設定
- 【PDF】PDFに入力した文字の「フォント・サイズ・色」を変更するプロパティ設定
- 【Word】校閲機能の基本!赤字(変更履歴)とコメントで修正を見える化する
- 【Outlook】宛先が「オートコンプリート」に出ない・間違っている時の修正手順|履歴の削除と再構築
- 【PDF】結合するPDFの「用紙サイズ」がバラバラな時、すべてを「A4サイズ」に強制リサイズしてから結合する
