PowerApps Choicesでつまずくときって、だいたい「候補は出たのに保存できない」「初期値だけ空になる」みたいな場面ですよね。
原因は、Choicesを文字列一覧として見てしまうことが多いです。実際はレコードのテーブルとして扱うと、Combo box、DefaultSelectedItems、Patchまで一気に見通しがよくなります。
PowerApps Choicesは選択肢のテーブルを返す関数

まずはChoicesの正体を押さえましょう。ここが曖昧なままだと、.Value、SelectedItems、Patch のすべてがややこしく見えます。返り値の形から整理すると、式の迷子がかなり減りますよ。
Choices関数の基本構文
Choices関数は、SharePointやDataverseの選択肢列、またはルックアップ列の候補を取り出すために使います。Microsoft Learnでは、Choicesについて次のように説明されています。
検索列で使用可能な値のテーブルを返します。
Microsoft Learn Choices 関数
基本形はシンプルです。
Choices(案件管理.ステータス)ここで大事なのは、列名を文字列で書かないことです。"ステータス" のようにダブルクォーテーションで囲むのではなく、データソース.列名の形で直接参照します。
Gallery1.Selected.ステータス のようにコントロール経由で列を渡す形は、Choicesの列参照としては使えません。
候補を取りたい列そのものを、データソースから直接指定します。
返ってくるのは文字列ではなくレコードのテーブル
Choicesで一番ハマりやすいのは、候補が「完了」「未着手」のような文字列だけに見えるところです。でもPower Fxの中では、候補はレコードの集まりとして返ります。
SharePointの選択肢列なら、よく見る形は次のようなイメージです。
| 見た目 | 実際に扱う形のイメージ | よく使う場所 |
|---|---|---|
| 未着手 | {Value:"未着手"} | Combo boxの選択値 |
| 進行中 | {Value:"進行中"} | PatchやDataCardのUpdate |
| 完了 | {Value:"完了"} | ラベル表示では .Value |
つまり、ラベルに表示するだけなら ComboBox1.Selected.Value のようにValueを見ます。一方で保存するときは、テキストだけではなく選択されたレコードを渡す場面が多いです。
ここを分けて考えると、かなり楽になります。表示するときは Value、保存するときは Selected や SelectedItems。この役割分担がChoices攻略の土台です。
ChoiceとChoicesの違いを先に分ける
名前が似ているので少しややこしいですが、Choice と Choices は文脈で意味が変わります。
ChoiceはDataverseなどの列型としての選択肢Choicesは複数選択できる列型を指すことがあるChoices()はPower Fxの関数
この3つを混ぜると、検索している途中で頭がこんがらがります。実装中は「列型の話なのか」「候補を取り出す関数の話なのか」を分けて見るのがおすすめです。
PowerApps Choicesを使うときのコツは、候補をテーブルとして受け取り、表示ではValue、保存ではレコードとして扱うことです。


Choicesは「候補の文字を取る関数」ではなく「候補レコードの表を取る関数」と見ると、後の式がかなり読みやすくなります。
Combo boxやDrop downでChoicesを使う基本


候補の取り出し方がわかったら、次はコントロールに表示します。ここではItems、表示列、初期値、選択値の取り出し方を、実装順に見ていきます。特にCombo boxではDefaultSelectedItemsが大事です。
ItemsにChoicesを設定する
SharePointリストの選択肢列をCombo boxに出すなら、まずは Items にChoicesを設定します。
Choices(案件管理.ステータス)フォームで自動生成されたCombo boxなら、すでにこの形になっていることも多いです。自分で追加したCombo boxでも、基本は同じです。
// cmbStatus.Items
Choices(案件管理.ステータス)単一選択だけならDrop downでも動かせます。ただ、検索したい、複数選択したい、後から表示項目を調整したいなら、Combo boxの方が扱いやすいです。
| やりたいこと | おすすめコントロール | 理由 |
|---|---|---|
| 候補が少なく単一選択 | Drop down | 画面がシンプル |
| 候補が多く検索したい | Combo box | 検索しながら選べる |
| 複数選択したい | Combo box | SelectedItemsを使える |
表示列はValueを見せることが多い
SharePointのChoice列では、候補の表示にValueを使う場面が多いです。クラシックなCombo boxでは、右側のフィールド設定で表示列を選べます。
モダンCombo boxなら、表示テキストを ItemDisplayText で決めます。
// cmbStatus.ItemDisplayText
ThisItem.Valueここで ThisItem が出てくるのは、Combo boxの各候補が1件ずつのレコードだからです。ThisItem.Value は、そのレコードの表示用ラベルを見ているだけなんですね。
DataverseのChoiceやLookupでは、列や環境によって表示に使うフィールド名が変わることがあります。
迷ったら、まずはData tableなどでChoicesの返り値を一度見える化すると早いです。
初期値はDefaultSelectedItemsに合わせる
Combo boxで「候補は出るのに、既存値が初期表示されない」という悩みはよくあります。この場合は、初期値の形がItemsと合っているかを見ます。
モダンCombo boxの DefaultSelectedItems は、Itemsデータソースに含まれるレコードのテーブルである必要があります。フォーム内で使うなら、基本は次の考え方です。
// 単一選択のDataCard内
Parent.Default複数選択なら、Parent.Defaultがすでにテーブルとして渡ってくることが多いです。空欄にしたい場合は、空のテーブルを返す設計にします。
// 空にしたいときの考え方
[]そして、選択後に値を読むときは、単一選択と複数選択でプロパティを分けます。
- 単一選択なら
cmbStatus.Selected - 単一選択の表示文字なら
cmbStatus.Selected.Value - 複数選択なら
cmbStatus.SelectedItems - 複数選択の表示文字なら
Concat(cmbTags.SelectedItems, Value, ", ")
SelectedItemsはテーブルです。テキストとしてそのまま表示しようとすると、思った表示にならないことがあります。ラベルに出すなら Concat でつなぐと見やすいです。





Combo boxは、ItemsとDefaultSelectedItemsの形を合わせるのがコツです。候補と初期値が別物になっていないかを見るだけで、かなり解決できます。
FilterやSortでChoicesを使いやすく整える


実際のアプリでは、選択肢をそのまま出すだけでは足りないことがあります。並べ替えたい、使わない候補を隠したい、入力文字で候補を絞りたい。Choicesはテーブルなので、こうした加工を組み合わせられます。
Sortで選択肢を並べ替える
Choicesの返り値はテーブルなので、Sort で並べ替えできます。SharePointの選択肢列で Value を基準に昇順にしたいなら、次のように書けます。
Sort(
Choices(案件管理.ステータス),
Value,
SortOrder.Ascending
)候補が「低」「中」「高」のような自然な順番を持つ場合は、SharePointやDataverse側の選択肢順を整える方がわかりやすいです。アプリ側の式で無理に並べるより、データ側を整える方が保守しやすい場面もあります。
Filterで出したくない選択肢を外す
一部の選択肢をアプリ側では出したくない場合は、Filter を使います。
Filter(
Choices(案件管理.ステータス),
Value <> "廃止"
)この式なら、SharePoint側に「廃止」という選択肢が残っていても、アプリの候補には出しません。ただし、完全な権限制御としては弱いです。
ユーザーに絶対に使わせたくない値なら、データソース側の設計や権限も見直してください。アプリの表示だけを隠しても、別の経路から値が入る可能性はあります。
表示を少し整えるならFilterやSortでOKです。
業務ルールとして使えない値を防ぎたいなら、データソース設計や入力チェックもセットで考えるのが安心です。
委任できない場面は設計を見直す
Microsoft Learnでは、Choicesは現時点で委任できないと説明されています。ここは実務で見落としやすいポイントです。
選択肢列の候補が10個、20個くらいなら、気にしすぎなくてよい場面もあります。でも、ルックアップ先が大量のレコードを持つ場合は、委任できない影響が出ることがあります。
判断の目安は次の通りです。
| 状況 | Choicesで進めやすい | 設計見直しを検討 |
|---|---|---|
| 固定の選択肢列 | はい | 候補が多すぎる場合 |
| 小さなマスタ参照 | 場合による | 件数が増え続ける場合 |
| 大量の取引先や商品マスタ | 注意 | データソース直接利用が無難 |
候補が業務マスタのように増え続けるなら、Choicesに頼りすぎない方がいいです。
SharePointリストやDataverseテーブルを直接データソースとして追加し、Combo boxのItemsにそのテーブルを指定する方が、検索や委任の面で安定します。





Choicesは便利ですが、万能な検索用データソースではありません。候補が増え続ける列なら、早めにマスタ化を考えると後で楽です。
選択した値を保存するときの考え方


表示はできたのに保存で失敗する場合、ほとんどは値の形が合っていません。選択肢列はテキストだけではなく、選択レコードとして扱う場面があります。単一選択と複数選択で、渡すプロパティを分けて考えましょう。
フォームならUpdateプロパティを確認する
Edit formを使っているなら、まずDataCardの Update プロパティを確認します。
Power Appsが自動生成したフォームでは、選択肢列のDataCardにCombo boxが置かれ、Updateも正しい形になっていることが多いです。
単一選択なら、考え方は次のようになります。
// DataCard.Update
DataCardValue_Status.Selected複数選択なら、SelectedItems を渡します。
// DataCard.Update
DataCardValue_Tags.SelectedItemsフォームで保存するなら、まずは SubmitForm(EditForm1) を使うのが安全です。Microsoft Learnでも、単純な変更ではEdit formの方が簡単な場合があると説明されています。
Patchでは選択レコードを渡す
Patchで保存する場合も、基本は選択されたレコードを渡します。SharePointの単一選択列なら、次のような形で考えます。
Patch(
案件管理,
ThisItem,
{
ステータス: cmbStatus.Selected
}
)複数選択列なら、選択されたレコードのテーブルを渡します。
Patch(
案件管理,
ThisItem,
{
関連カテゴリ: cmbCategory.SelectedItems
}
)文字列から保存したい場合は、SharePointのChoice列が期待する形に合わせて、{Value:"完了"} のようなレコードを作ることがあります。
Patch(
案件管理,
ThisItem,
{
ステータス: {Value: "完了"}
}
)ただし、これはSharePointの選択肢列を想定した書き方です。DataverseのChoiceでは内部値や選択肢レコードの扱いが変わるため、できるだけ Choices から選んだレコードをそのまま渡す方が安全です。
cmbStatus.Selected.Value のようなテキストだけをPatchに渡すと、列型と合わずに保存できないことがあります。
ラベル表示ではValue、保存ではSelectedという分け方を意識しましょう。
初期値が出ないときはItemsと同じ形か見る
最後に、よくあるトラブルをまとめます。初期値が出ないときは、まずCombo boxの Items と DefaultSelectedItems の形が合っているかを見てください。
| 症状 | 見る場所 | よくある原因 |
|---|---|---|
| 候補は出るが初期値が空 | DefaultSelectedItems | 文字列を渡している |
| 保存できない | DataCard.Update または Patch | Valueだけを渡している |
| 複数選択が保存されない | SelectMultiple と SelectedItems | 単一選択の式のまま |
| 候補が古い | データソース | 列変更後に更新していない |
僕なら、まず画面にラベルを置いて、次のように確認します。
// 単一選択の確認
cmbStatus.Selected.Value// 複数選択の確認
Concat(cmbCategory.SelectedItems, Value, ", ")見えている値と保存に渡している値を分けて確認すると、原因をかなり絞れます。焦って式を全部書き換えるより、Items、初期値、保存値の3点を順番に見るのが近道です。





保存で迷ったら、単一選択はSelected、複数選択はSelectedItemsです。Valueは表示用と考えると、式の役割がすっきりします。
PowerApps Choicesに関するよくある質問
まとめ
PowerApps Choicesは、選択肢候補をレコードのテーブルとして返す関数です。
表示ではValue、初期値ではDefaultSelectedItems、保存ではSelectedやSelectedItemsを見ると、迷いがかなり減ります。
まずは自分のCombo boxで、Items、DefaultSelectedItems、Updateの3つを並べて確認してみてください。ここがそろうと、選択肢列まわりのエラー対応がぐっと楽になりますよ。








