ADVERTISEMENT

【Excel】ExcelでPower Queryの結合キーに全角半角の違いがある時の原因と修正手順

【Excel】ExcelでPower Queryの結合キーに全角半角の違いがある時の原因と修正手順
🛡️ 超解決

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)の違いも見落とされがちです。これらの差異は人間の目には同じに見えても、コンピューターでは完全に異なる文字コードとして扱われます。

お探しの解決策が見つからない場合は、こちらの「Excelトラブル完全解決データベース」で他のエラー原因や解決策をチェックしてみてください。

確認手順:Power Queryエディタで全角半角の有無を調べる

結合前に、該当列に全角半角の違いがないかを確認します。以下の手順を実行してください。

手順1:Power Queryエディタを開く

Excelでデータを読み込み、「データ」タブの「テーブルまたは範囲から」または「クエリと接続」からPower Queryエディタを起動します。結合元のクエリと結合先のクエリの両方を開いておきます。

手順2:結合キーの列を選択しデータを観察する

各クエリの結合キー列をクリックし、列内の値を目視で確認します。全角と半角が混在している場合、数字や英字に注目します。例えば「12345」と「12345」が並んでいるかをチェックします。

手順3:カスタム列を追加して文字数を比較する

全角文字は半角文字よりもバイト数が多いため、文字列の長さが異なります。以下のM言語式を使って文字数をカウントするカスタム列を追加します。

  1. Power Queryエディタで「列の追加」タブ → 「カスタム列」をクリックします。
  2. 新しい列名を「Length」とし、以下の式を入力します。
    = Text.Length([結合キー列])
  3. OKをクリックすると、元の文字列の長さ(文字数)が表示されます。
  4. 次に、もう1つのクエリでも同様のカスタム列を追加します。
  5. 文字数を比較し、同じ内容のはずなのに長さが異なる行があれば、全角半角の混在の可能性があります。

手順4:全角文字を半角に変換する正規化クエリを作成する

文字数の確認で差が見つかった場合は、Power Query内で全角文字を半角に変換する処理を追加します。手動で変換する方法と、カスタム関数を用いる方法を説明します。

手動変換の手順

  1. 「列の追加」→「カスタム列」をクリックします。
  2. 新しい列名を「NormalizedKey」とし、以下の式を入力します。
    = Text.Replace(Text.Replace(Text.Replace([結合キー列], "1", "1"), "2", "2"), "A", "A")
    これを必要な文字種(0~9、A~Z、a~z、全角スペースなど)すべてに対して入れ子にします。ただし、すべての全角文字を扱うには長くなるため、次のカスタム関数の利用を推奨します。
  3. 既存の結合キー列を非表示または削除し、正規化後の列を結合キーとして使用します。

カスタム関数を使う方法

  1. 「ホーム」タブ → 「新しいソース」→ 「空のクエリ」を選択し、クエリを追加します。
  2. 「詳細エディター」を開き、以下の関数を貼り付けます。
(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([結合キー列]) と入力して正規化列を作成します。

結合前に両方のテーブルを正規化する

正規化列を用意したら、両方のテーブルで同じ変換を適用した上で、その列を使ってマージします。手順は以下の通りです。

  1. 各テーブルに上記の正規化列(例:NormalizedKey)を追加します。
  2. 「ホーム」タブ → 「クエリのマージ」を選択します。
  3. プライマリテーブルとセカンダリテーブルを指定し、結合キーとして両方の正規化列を選択します。
  4. 結合の種類(左外部、内部など)を選んでOKをクリックします。
  5. 結果を展開してデータを確認します。以前より多くの行が結合されていれば、全角半角の問題が解消されたことになります。

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の変換で迅速に対処できます。


📊
Excelトラブル完全解決データベースこの記事以外にも、様々なエラー解決策をまとめています。困った時の逆引きに活用してください。

ADVERTISEMENT

この記事の監修者
📈

超解決 Excel・Word研究班

企業のDX支援や業務効率化を専門とする技術者チーム。20年以上のExcel・Word運用改善実績に基づき、不具合の根本原因と最短の解決策を監修しています。ExcelとWordを使った「やりたいこと」「困っていること」「より便利な使い方」をクライアントの視点で丁寧に提供します。

🏆
超解決 Excel検定 あなたのExcel実務能力を3分で測定!【1級・2級・3級】

ADVERTISEMENT