Power Appsでスペース混入バグを防ぐ|TrimとTrimEndsの使い方

数式は正しいのに、Ifが通らない。FilterでSharePointのデータがヒットしない。こういった謎のバグの犯人は、ほとんどの場合スペースです。TrimとTrimEndsを覚えておくだけで、この種のトラブルを大幅に減らせます。

スペース1文字が引き起こすバグの仕組み

Power Appsの文字列比較は、スペース1文字の差でも別の値として扱います。たとえば「田中」と「田中 」(末尾にスペース)は、見た目がほぼ同じでも完全に別の文字列です。IfやSwitchの条件式でFalseが返るとき、数式の書き方ではなくデータ側のスペースを疑ってみてください。

私が最初にこれで詰まったのは、SharePointリストのデータをLookUpで検索していたときのことです。画面上は同じ値なのに一致しない。数式を何度見直しても問題がない。ようやく判明した原因は、SharePointに登録されたデータの末尾に半角スペースが混入していたことでした。入力フォームのテキスト入力コントロールはスペースをそのまま渡すため、入力者が気づかずスペースを含めてしまうことが多いのです。

TrimとTrimEndsの違い

Power Appsにはスペースを除去する関数が2種類あります。まず両者の違いを整理しておきましょう。

関数除去する対象主な用途
Trim先頭・末尾のスペース+文字間の連続スペースを1つに圧縮氏名・住所など文字間も整えたいとき
TrimEnds先頭と末尾のスペースのみテキスト入力の値を受け取るとき

Trimは文字列の両端に加えて、文中の連続スペースも1つに詰めます。たとえば「山  田」(スペース2つ)は「山 田」(スペース1つ)に変換されます。一方、TrimEndsは両端だけを除去し、文中のスペースはそのまま保持します。氏名や住所のように文中のスペースに意味がある場合は、TrimEndsのほうが安全です。

実例3パターン

テキスト入力の末尾スペースでIfが通らない

入力フォームで名前を入力し、特定の値と一致したときにメッセージを表示する場面です。テキスト入力コントロールからそのまま値を取得すると、ユーザーが気づかず末尾にスペースを入れた場合にIfが通らなくなります。

If(
    TrimEnds(TextInput1.Text) = "田中太郎",
    "一致しました",
    "一致しません"
)

TextInput1.Textをそのまま比較するのではなく、TrimEndsで両端を整えてから比較します。Ifの使い方についてはPower AppsのIfとSwitchで詳しく解説しています。

SharePointデータとの比較失敗

SharePointリストのデータを検索フィールドの入力値で絞り込む場面です。Filterでヒットしない原因の多くは、片方のデータにスペースが混入しています。

Filter(
    社員リスト,
    TrimEnds(氏名) = TrimEnds(TextInput_Search.Text)
)

検索フィールドの値だけでなく、SharePointリスト側の列にもTrimEndsをかけておくと確実です。特に人の手で登録されたデータはスペース混入が起きやすい傾向があります。FilterやSearchの使い方はPower AppsのFilter・Search・LookUp関数にまとめています。

SharePoint保存時にTrimをかけておく

Patch関数でSharePointリストにデータを書き込む際、入力値をそのまま渡すとスペース混入がリストに蓄積されていきます。Patchの時点でTrimEndsを一枚かませておくと、後工程での問題を防げます。

Patch(
    社員リスト,
    Defaults(社員リスト),
    {
        氏名: TrimEnds(TextInput_Name.Text),
        部署: TrimEnds(TextInput_Dept.Text)
    }
)

SharePointリストへの読み書きの基本はPower AppsでSharePointリストのデータを読み書きするで解説しています。

よくある間違い:Trimしたつもりが変数に入れ忘れ

Trimをかけたのに効いていない、というときに多いのが、Trimした結果をどこにも使えていないパターンです。

// 間違い例:Trimの結果が捨てられている
Trim(TextInput1.Text);
Set(varName, TextInput1.Text);

// 正しい例:Trimした値を変数に入れる
Set(varName, Trim(TextInput1.Text));

Trimは新しいテキスト値を返す関数であり、元のコントロールの値を書き換えるわけではありません。戻り値を変数に格納するか、比較式の中で直接使いましょう。OnButtonPressなど複数の処理をまとめて書くとき、この間違いが発生しやすいので注意が必要です。

まとめ:入力を受け取るときは常にTrimEnds

テキスト入力コントロールからユーザーの入力を受け取るときは、常にTrimEndsを1枚かませる。これを習慣にしておくだけで、スペース起因のバグに悩む機会を大幅に減らせます。

Trimは文字間まで整えたいとき、TrimEndsは末尾スペースだけ取り除きたいときと使い分けてください。ほとんどのケースではTrimEndsで十分対応できます。

大文字小文字の違いも同様に比較結果を狂わせます。その対策については、Upper・Lower・Properの使い方として別記事で解説する予定です。

Power Appsのその他のテキスト関数についての完全ガイドはこちらの記事をご覧ください

地道な一手間ですが、こういった処理を積み重ねることが、信頼できるアプリにつながります。ぜひ習慣にしてみてください。

Xでフォローしよう