PowerApps|Lookup関数|「互換性エラー」対策のポイントはデータ型!

Lookup関数はデータ型を意識して使用する
Lookup関数実行時に発生する「互換性エラー」の対策はデータ型を正しく理解することが一番の近道です。
Plat(プラット)具体的にはデータ型というのは以下5つのようなものを指します
- レコード
- テキスト
- 数値
- 選択肢
- テーブル



思ったよりたくさんあるんですね・・・
このデータ型というのはSharePointリストとPowerAppsの各種コントロールが持っている型です。
各アプリで用意された値の型を合わせることでエラーを防ぎます。以降具体例を使って解説します。
関連書籍
関連記事
本記事はドロップダウンの記事と関連が深い記事となっています。
Lookup関数は変数とも関わり合いが強いです。
こちらは上級者向けです。委任(デリゲーション)について知りたい人はこちらをご覧ください。
Lookup関数とは
Microsoftの公式ドキュメントはこちらです。少々分かりにくい方は以下内容をご覧ください。
事例
SharePointリストを以下のような構成で用意してみました。
| フィールド名 | SharePointListの型 | 補足 |
|---|---|---|
| Title | 単一行テキスト | 文字列として扱う |
| Status | 選択肢(単一) | 1つの選択肢を選ぶには.Value が必要 |
| Category | 選択肢(複数) | Concat で文字列化 |
| IsActive | はい/いいえ | If ステートメントでは文字列化が必要 |
| Count | 数値 | Selected.Value は文字列なので注意 |
| Created | 日付と時刻 | 適宜Text() で形式を整えましょう |
実際にリストを用意してみました。レコードは1つです。


SharePointリストに対してPowerApps側で用意するLookup関数です。
PowerApps側ではテキストラベルのTextプロパティに式を書くことを想定してください
この式はエラーになります。ご注意ください。(正解の式が気になる方はこちら)
LookUp(SharePointList, ID = 1)戻り値は1行分のデータとなります。冒頭でも申し上げましたようにレコード型となります。
{
Title: "案件A",
Status: { Value: "完了" },
Category: [ {Value:"A"}, {Value:"B"} ],
IsActive: true,
Count: 10,
Created: 2026-03-20
}ただしテキストラベルではこれらの値を受け取ることができません。
レコードの中から1つの列の値を取得する方法
先ほど説明した式ではエラーがでます。理由はテキストラベルに合った値が用意できてないからです。
エラーが出ないように式を変えます。Lookup関数の後に列名を指定しましょう。
この式をPowerAppsのテキストラベルのTextプロパティに書くと「案件A」という文字列が表示されます。
この式が正解です(エラーは出ないです)
LookUp(SharePointList,ID=1).Title


これでレコードの中からタイトル列の値を取り出すことができるんですね
レコードを取得してからタイトルを取り出すというイメージです



とても良いイメージです
様々な型の列が乱立していてもLookup関数としてはまずはレコードとして値を取得することになります。
ここから少々式を付け加えることで任意の列の情報を取り出すことができるようになるという建付けです。
Lookup関数で互換性エラーが出る理由
繰り返しとなりますがLookup関数はSharePointリストなどのデータソースからレコードを取り出す関数です。
このレコードとレコードが展開される側(PowerApps)のコントロールとの型の不一致でエラーが起きます。
互換性エラーが起きる典型的パターン
代表的なエラーとエラーメッセージを挙げておきます。
| 番号 | エラーが出る原因 | エラーメッセージ |
|---|---|---|
| 1 | レコード型の値をテキストに格納しようとする | Text値が必要です |
| 2 | 値が複数選択されている中で単一値として扱ってしまう | Text値が必要です |
| 3 | 複数の値(レコード)を単数の値との比較に使ってしまう | 型に互換性がないため比較できません |
あくまで一例ですがエラーの際はまず型の不一致からくるエラーを疑ってみてください。
よくある互換性エラーと正しい式の書き方
ここからは前項で挙げた事例に対してより具体的な例を用意して解説します。
エラーが出ているコードと正しく書いたコードを比較できるように用意しています。
その1:レコード型の値をテキストに格納しようとする
PowerApps側ではテキストラベルのTextプロパティに式を書くことを想定してください
誤:レコード型の値が取得されたのでテキスト型の箱では値を受け取ることができません
LookUp(SharePointList,ID=1)正:レコード型の値からPowerAppsのテキストで値を受け取ることができる単数型に絞り込み
LookUp(SharePointList,ID=1).Titleその2:値が複数選択されている中で単一値として扱ってしまう
PowerApps側ではテキストラベルのTextプロパティに式を書くことを想定してください
誤:Category列は複数の値が用意されているのでテキストラベルのTextプロパティには合わない
LookUp(SharePointList, ID=1).Category
正:値がAのものだけ欲しいという指示にすることで単数の値を取り出すことができています
LookUp(
LookUp(SharePointList, ID=1).Category,
Value = "A"
).Valueその3:複数の値(レコード)を単数の値との比較に使ってしまう
PowerApps側ではテキストラベルのTextプロパティに式を書くことを想定してください
加えてここではDropdownを1つ用意して値は「完了」にしておきます
誤:Status列の何とDoropdown1の値を照合したらいいのか分からない状態です
LookUp(
SharePointList,
Status = Dropdown1.Selected.Value
)正:Status列の値とDoropdown1の値を照合し一致した列のCreated列が取得できました
LookUp(
SharePointList,
Status.Value = Dropdown1.Selected.Value
).CreatedSharepointリストの列名や列型も確認しましょう
PowerApps側ばかり見直しても解決しないことがあります。
エラーの際はあらためてSharePointリストについても確認することを忘れないようにしてください。



SharePoint側にも問題があるかもしれない・・・



PowerAppsだけではなくSharePoint側も見直しが必要という事ですね
よくある落とし穴
主に「勘違い」と言われるものが大半です。ゆっくり落ち着いて確認してみましょう。
- SharePoint側の値が思っていた型ではなかった(式は合っているけど型の思い違いでエラー)
- SharePointリストの列名を間違えていた(Titleとtitleを間違えてエラー)
PowerAppsは一部優秀な所がありアプリ内では型の違いを認識しエラーを吸収するケースもあります。
しかし厳密にはSharePointと連携を取るとなると話は別です。PowerApps側と型を合わせましょう。
まとめ
PowerAppsのLookup関数で発生する互換性エラーはデータ型が理解できれば対策済のようなものです。
しかし普段は「値の型」を意識することはあまり無いのですぐ理解するのは難しいと思われます。
何回か作業をすると慣れてくるので根気よく続けることを意識しましょう。
このスキルが身につくと1ついい事があります。変数の理解も深まります。理由は変数にも型があるからです。




