Power Apps のキャンバスアプリは、SharePoint リストを1つ用意すれば、数回のクリックで「一覧を見る・詳細を見る・新しく入力する・直す」ができるアプリが自動でできます。ただ、自動でできたアプリは列が全部並んだだけの画面で、そのままでは現場で使いにくいものです。この記事では、サンプル工務店の休暇申請リストからアプリを作り、自分の申請だけを一覧に出す、入力欄を絞る、期間の重複を確かめる、上長に催促するボタンからフローを呼ぶ、というところまで、手順と式をそのまま書きます。前提は、休暇申請リストが SharePoint にあること(列の作り方は「Teamsの承認アプリとPower Automateの承認フロー:申請から承認までを作る」で書いた形)と、Power Apps が何かをおおまかに知っていることです。何をアプリにするべきかの判断は「Power Appsとは:できることと、入力画面をアプリにする判断」に書いています。
この記事の内容
先に決めること
作り始める前に決めておくと、あとで作り直さずに済むことが3つあります。
1つ目は、リストの列を固めておくことです。アプリはリストの列を見て画面を作るので、あとから列を足すとアプリ側でもフォームに足す作業が要ります。列名を変えるとアプリの式が壊れることもあります。リストの列を最初に英数字の名前で作り、表示名を日本語にしておくと、式の中で列を指定するときに困りません。
2つ目は、誰が何を見てよいかです。休暇申請なら、申請者は自分の申請だけ、上長と総務は全員分、が普通です。アプリの画面で「自分の申請だけ」に絞っても、SharePoint リストを直接開けば全員分が見えます。見せたくないなら、アプリではなくリストの側で制限します(後述)。
3つ目は、申請のあとの処理をアプリでやるかフローでやるかです。承認依頼・通知・書き戻しは Power Automate のフローに任せ、アプリは「入力と一覧」に徹するのが、直す人にとって一番分かりやすい分け方です。サンプル工務店では、リストに申請が登録されたら承認フローが動く形(承認の記事で作ったもの)をそのまま使い、アプリはその入口にしています。
作るものの一覧
この記事で作る休暇申請アプリの全体です。
| 部品 | やること | 使う式・機能 |
|---|---|---|
| 一覧 | 自分の申請を新しい順に出す。状態で絞り込む | Filter・SortByColumns・User() |
| 入力フォーム | 休暇の種類・期間・理由だけを入力させる | フォームの「フィールドの編集」・SubmitForm |
| 重複の確認 | 同じ期間に申請済みなら警告を出す | LookUp |
| 取り下げボタン | 申請中のものを取り下げにする | Patch |
| 催促ボタン | 上長に Teams で催促を送る | Power Automate のフロー |
| 共有 | 全社員に使わせ、総務を共同所有者にする | アプリの共有・リストのアクセス許可 |
リストからアプリを作る
作り方は2通りあり、どちらでも同じアプリができます。
リストから作る
- SharePoint で休暇申請リストを開きます(Microsoft Lists の画面に切り替わります)。
- 上部の「統合」→「Power Apps」→「アプリの作成」を選びます。
- アプリの名前に「休暇申請」と入れて「作成」を選びます。
- Power Apps Studio(アプリを作る画面)が開き、リストのデータが入ったアプリが表示されます。

Power Appsから作る
- make.powerapps.com にサインインします。
- ホーム画面で「データで開始」を選びます。
- 「アプリの作成」のページで「SharePoint」を選びます。
- SharePoint のサイトの URL を入れて「接続」を選びます(最近使ったサイトから選んでもかまいません)。
- 「休暇申請」を選び、「アプリの作成」を選びます。
どちらで作っても、最初に「アプリのプレビュー」(右上の再生のアイコン)で動きを確かめます。一覧が出て、項目を選ぶと詳細が見え、新しい申請を入れるとリストにも行が増えることを確かめたら、「保存」しておきます。
自動で作られるアプリの形は、2026年10月時点では、一覧とフォームが1つの画面にまとまった形です。画面の幅に合わせて並びが変わるので、パソコンではタブレットのような横並び、スマホでは縦に並びます。以前は「一覧の画面」「詳細の画面」「編集の画面」の3画面で作られていて、そのころに作ったアプリは3画面のまま動き続けます。社内に古いアプリがある場合は、画面の作りが違うことを覚えておきます。

画面を直す
Power Apps Studio の画面は、左に部品の一覧(ツリー ビュー)、中央にアプリ、上に数式バー、右に選んだ部品のプロパティがあります。部品を選んで、数式バーでそのプロパティの式を書き換える、というのが直し方の基本です。
一覧を自分の申請だけにする
一覧の部品(ギャラリー)を選び、数式バーの左で「Items」を選んで、次の式に置き換えます。
SortByColumns(
Filter('休暇申請', '登録者'.Email = User().Email),
"Created",
SortOrder.Descending
)
'登録者' は SharePoint が自動で付ける「誰が登録したか」の列です。User().Email は、名前に反してメールアドレスではなく、アプリを使っている人の UPN(サインインに使う名前)を返します。サインインの名前とメールアドレスが同じ会社なら、これで自分が登録した申請だけが新しい順に並びます。
サインインの名前とメールアドレスが違う会社では、この式だと1件も出ません。その場合は、アプリの「OnStart」で Office 365 ユーザーのコネクタから自分のメールアドレスを取って変数に入れ(例:Set(varMyMail, Office365Users.MyProfileV2().mail))、式の User().Email を varMyMail に置き換えます。自社がどちらかは、自分の Microsoft 365 のサインインの名前とメールアドレスを見比べれば分かります。上長や総務用に全員分を見る画面を別に作る場合は、Filter を外した式にします。
一覧に表示する項目は、ギャラリーの中のラベルを選んで「Text」の式を変えます。開始日と終了日をまとめて1行に出すなら、次のようにします。
Text(ThisItem.開始日, "yyyy/mm/dd") & " 〜 " & Text(ThisItem.終了日, "yyyy/mm/dd")
状態で絞り込むドロップダウンを置く場合は、ドロップダウンの「Items」を ["すべて","申請中","承認","却下","差し戻し"] にし、ギャラリーの式の中の Filter を次のように変えます。
Filter(
'休暇申請',
'登録者'.Email = User().Email,
drpStatus.Selected.Value = "すべて" || 状態.Value = drpStatus.Selected.Value
)
drpStatus はドロップダウンの名前です。ツリー ビューで部品の名前を分かりやすく付け直しておくと、式が読みやすくなります。
フォームの入力欄を絞る
自動で作られたフォームには、リストの列がすべて並びます。承認者・承認日時・承認者コメントのようにフローが書き込む列は、申請者に入力させません。
- フォームを選びます。
- 右のプロパティで「フィールドの編集」を選びます。
- 承認者・承認日時・承認者コメント・状態のフィールドの「…」→「削除」を選びます。
- 残したフィールド(タイトル・休暇の種類・開始日・終了日・理由)をドラッグして並べ替えます。

タイトルを手で書かせたくない場合は、タイトルのカードを選んで「ロック解除」し、入力欄の「Default」を User().FullName & " " & Text(Today(), "mm/dd") & " 申請" のような式にします。状態はリストの既定値(申請中)で入るので、フォームに出す必要はありません。
保存ボタンをSubmitFormにする
フォームの内容をリストに書き込むのは SubmitForm です。自動で作られたアプリの保存ボタンには最初から入っていますが、成功したときと失敗したときの動きを足しておきます。
保存ボタンの OnSelect: SubmitForm(frmLeave)
フォームの OnSuccess: Notify("申請しました。上長に承認依頼が届きます", NotificationType.Success); NewForm(frmLeave)
フォームの OnFailure: Notify("保存できませんでした:" & frmLeave.Error, NotificationType.Error)
frmLeave はフォームの名前です。新しい申請を SubmitForm で保存すると、フォームはいま保存した申請の編集の状態に切り替わります。続けて次の申請を空の状態から入れられるように、NewForm で新規入力の状態に戻しています。ResetForm は入力を初期値に戻す関数で、空の新規入力には戻らないので、ここでは使いません。SubmitForm はフォームの入力チェック(必須の列が空でないか)もしてくれるので、入力画面がフォームならこちらを使います。
Power Fxの基本を申請アプリで使う
Power Apps の式は Power Fx と呼ばれ、Excel の関数に近い書き方をします。申請アプリでよく使うものを表にします。
| 関数 | やること | 申請アプリでの使いどころ |
|---|---|---|
Filter | 条件に合う行を全部取り出す | 自分の申請だけを一覧に出す |
LookUp | 条件に合う最初の1行を取り出す | 同じ期間の申請がもうないか確かめる |
SubmitForm | フォームの内容を保存する | 申請の保存 |
Patch | フォームを使わずに行を作る・直す | 取り下げボタンで状態だけ変える |
User() | 使っている人の名前・UPN(サインインの名前)を返す | 自分の申請の絞り込み、タイトルの自動入力 |
Notify | 画面の上にお知らせを出す | 保存できた・できなかったの表示 |
LookUpで期間の重複を確かめる
同じ期間に申請を二重に出すのを防ぎます。フォームの上にラベルを置き、「Text」に次の式を入れます。
If(
!IsBlank(
LookUp(
'休暇申請',
'登録者'.Email = User().Email &&
開始日 <= dpEnd.SelectedDate &&
終了日 >= dpStart.SelectedDate
)
),
"この期間には申請済みのものがあります",
""
)
dpStart と dpEnd は、フォームの中の開始日と終了日の入力欄の名前です。保存ボタンの「DisplayMode」を、このラベルが空でないときは DisplayMode.Disabled にすれば、重複したまま保存できなくなります。
Patchで取り下げる
申請中の申請を本人が取り下げるボタンは、フォームを使わず Patch で状態の列だけを変えます。一覧のギャラリーの中にボタンを置き、「OnSelect」に次の式を入れます。
Patch(
'休暇申請',
ThisItem,
{ 状態: { Value: "取り下げ" } }
);
Notify("取り下げました", NotificationType.Information)
SharePoint の選択肢の列に書き込むときは、{ Value: "取り下げ" } の形で渡します。ただし、この書き方は公式の Patch の説明には載っていません(公式の選択肢の例は Dataverse のもので、SharePoint などでは形式が異なることがある、とだけ書かれています)。実際の運用ではこの形で動いていますが、エラーになる場合は、取り下げもフォームを使って保存する形に変えます。リストの状態の列に「取り下げ」の選択肢を足しておきます。ボタンの「Visible」を ThisItem.状態.Value = "申請中" にしておくと、申請中のものにだけボタンが出ます。
フォームを使わずに新しい行を作るときは、Defaults を使います。
Patch(
'休暇申請',
Defaults('休暇申請'),
{
Title: User().FullName & " 申請",
休暇の種類: { Value: "有給" },
開始日: dpStart.SelectedDate,
終了日: dpEnd.SelectedDate
}
)
SubmitForm と Patch の使い分けは、入力欄がフォームなら SubmitForm、ボタン1つで決まった値を書き込むなら Patch です。Patch は入力チェックをしてくれないので、空のまま保存されないように自分で条件を書きます。
ボタンからPower Automateのフローを呼ぶ
承認依頼に上長が気づいていないとき、申請者がアプリのボタンから上長に催促を送れるようにします。
フローを作る
- Power Apps Studio の左のメニューで「Power Automate」を選びます。
- 「新規フローの作成」→「最初から作成」を選びます。
- トリガーに Power Apps から呼ばれるトリガー(画面では「Power Apps (V2)」のような名前で出ます)を選び、テキストの入力を1つ足して名前を
申請IDにします。 - SharePoint の「項目を取得する」を追加し、休暇申請リストと、「ID」にトリガーの
申請IDを入れます。 - 「マネージャーの取得 (V2)」で申請者の上長を取得します(ユーザーに「項目を取得する」の登録者のメールを入れます)。
- Teams の「チャットまたはチャネルでメッセージを投稿する」を追加し、「次のように投稿する」でフロー ボットを、「投稿」でボットとのチャットを選び、宛先に上長のメールを入れ、メッセージに申請の内容と「承認をお願いします」と書きます(選択肢と宛先の欄の表示名は画面で確かめます)。
- 「保存」を選びます。フローの名前は「休暇申請の催促」にします。

ボタンにつなぐ
一覧のギャラリーの中に「催促」ボタンを置き、「OnSelect」に次の式を入れます。
'休暇申請の催促'.Run(Text(ThisItem.ID));
Notify("上長に催促を送りました", NotificationType.Success)
フローの名前に空白や記号があると式で呼びにくいので、名前は短くしておきます。フローの中身を Power Automate の画面で直したときは、Power Apps Studio の Power Automate ウィンドウでフローの「…」→「更新」を選んでから、アプリを保存・公開し直します。これを忘れると、公開済みのアプリでもフローの実行に失敗することがあります。
フローに渡した値は通信の途中で見える可能性がある、と公式にも書かれています。催促のように ID を渡すだけなら問題ありませんが、フローの中で「渡されたメールアドレスに機密を送る」ような作りはしないでください。宛先はフローの中で取得し直します。
アプリの共有と、リストのアクセス許可
アプリを使ってもらうには、保存して公開したうえで共有します。
- Power Apps Studio で「保存」→「公開」を選びます。
- make.powerapps.com の左のメニューで「アプリ」を選び、休暇申請アプリを選びます。
- コマンド バーの「共有」を選びます。
- 共有する相手に、全社員のセキュリティ グループを入れ、権限を「ユーザー」にします。Microsoft 365 グループ(Teams のチームのグループなど)で共有する場合は、そのグループのセキュリティを有効にしておく必要があります。
- 総務の事務Bを入れ、権限を「共同所有者」にします。
- 「共有」を選びます。

ここで一番つまずくのが、アプリの共有とリストのアクセス許可が別だという点です。アプリを共有しても、休暇申請リストに書き込む権限がない人は、アプリを開いても一覧が空で、保存もできません。リストのアクセス許可で、同じグループに「編集」の権限を付けておきます。
逆に、リストに「編集」の権限がある人は、アプリを通さずにリストを直接開けます。アプリで自分の申請だけに絞っても、リストを開けば他の人の申請も見えます。これを防ぐには、リストの設定の詳細設定にある「アイテム レベルのアクセス許可」で、読み取りと編集を「自分が作成したアイテムだけ」に絞る方法があります(項目名と選択肢の表記は画面で確かめます)。この設定にすると、全員分を見る必要がある上長や総務には、リストを管理できる強い権限が要る形になります。
アプリを直したときは、毎回「保存」と「公開」の両方が要ります。「保存」だけでは、使っている人の画面は前のままです。
委任の警告(500件・2,000件の上限)
SharePoint リストをデータにしたアプリで、後から必ず出てくるのが委任の問題です。
Power Apps は、Filter などの絞り込みを、できるだけ SharePoint 側に任せます(これを委任といいます)。SharePoint が受け付けない書き方をすると、Power Apps はリストの先頭から500件だけを取ってきて、その中で絞り込みます。リストが500件を超えると、501件目以降は絞り込みの対象にならず、検索しても出てきません。エラーにはならず、黙って結果が欠けるのが怖いところです。
委任できない式を書くと、Power Apps Studio では部品の横に黄色の三角、式に青い波線が出ます。これが委任の警告です。

SharePoint で委任できるもの・できないものの主なものです。
| 書き方 | 委任できるか | 代わりの書き方 |
|---|---|---|
Filter で =・<・> を使う(数値・日付) | できる | そのまま使う |
Filter でテキストに = | できる | そのまま使う |
StartsWith(Title, txtSearch.Text) | できる | 前方一致で検索させる |
Search 関数 | SharePoint の公式の委任の表に載っていない(委任されない前提で書く) | StartsWith に変える |
選択肢の列 状態.Value = "申請中" | できる | そのまま使う |
ユーザーの列の Email と DisplayName | できる | 他の項目(部署など)では絞り込まない |
ID に > や < | できない(= だけ可) | 作成日時の列で絞り込む |
IsBlank(列) | できない | 列 = Blank() に変える |
CountRows で件数を数える | できない | 件数は Power Automate や SharePoint のビューで出す |
Not を使う | できない | <> や条件の言い換えで書く |
500件という上限は、Power Apps Studio の「設定」→「全般」→「データ行の制限」で最大2,000件まで上げられます。ただ、上げても上限が先に延びるだけで、2,000件を超えれば同じことが起きますし、件数を増やすほどアプリが重くなります。本当の直し方は、委任できる書き方にすることです。
公式に書かれている確かめ方として、テストの間だけ「データ行の制限」を1にする方法があります。委任できていない式は1件しか返さなくなるので、どこが委任できていないかがすぐに分かります。サンプル工務店の休暇申請は年に数百件なので当面は500件に届きませんが、問い合わせ台帳や現場日報のように毎日増えるリストは、半年ほどで500件を超えます。最初から委任できる書き方で作っておきます。
できないことと、その代わり
SharePoint リストと Power Apps の申請アプリは、社内の申請を回すには十分ですが、次のことは苦手です。
- 数千件を超えるデータの集計。委任できない集計(件数を数えるなど)は正しい数にならないことがあります。集計は Excel や Power BI に任せます。
- 行ごとに見せる人を細かく分けること。アイテム レベルのアクセス許可は「自分が作ったものだけ」という単純な分け方しかできません。部署ごと、案件ごとに見せる人を変えるなら、Dataverse のセキュリティ ロールや、kintone のように行ごとの権限が最初からある業務アプリの仕組みを検討します。
- 圏外での入力。キャンバスアプリはネットにつながっている前提で作られています。
- 複雑な承認経路の画面化。決裁権限表に沿った承認経路を画面とフローで作り込むと、作った人しか直せなくなります。ワークフロー専用のサービスを検討します。
データが増えてきて委任の制限やアクセス許可の分け方で困るようになったら、データの置き場を Dataverse に移すことも考えます。ただし Dataverse を使うアプリは Premium のライセンスが要り、移すのにも手間がかかります。判断は「Dataverseとは:SharePointリスト・Excelとの違いと、使うべき場面」に書いています。
よく詰まるところ
| 症状 | 原因 | 直し方 |
|---|---|---|
| 共有した人の一覧が空になる | リストのアクセス許可がない | リストに同じグループで「編集」の権限を付ける |
| 直したのに使う人の画面が変わらない | 「保存」だけで「公開」していない | 「公開」を選ぶ。使う人はアプリを開き直す |
| 検索しても古い申請が出てこない | 委任できない式で、先頭500件しか見ていない | 委任の警告を消す書き方に直す |
| 黄色の三角が消えない | IsBlank など委任できない関数や、SharePoint で委任の対象に載っていない Search を使っている | StartsWith や = Blank() に書き換える |
| 選択肢の列に書き込むとエラーになる | 文字だけを渡している | { Value: "申請中" } の形で渡す(公式に例はないので、動かなければフォームで保存する) |
| 列名を変えたら式が赤くなった | 式が古い列名を参照している | 式の列名を直すか、表示名を戻す |
| ボタンからフローを呼ぶと失敗する | フローを直したあとにアプリ側で更新していない | Power Automate ウィンドウでフローの「…」→「更新」をして公開し直す |
| フローの呼び出しで引数の数が合わないと出る | フローの入力を足したのにアプリ側が古い | フローを更新し、.Run() の引数を入力の数に合わせる |
| 日付が1日ずれて保存される | 日付の列が「日付と時刻」でタイムゾーンの差が出ている | リストの列を「日付のみ」にする |
| 他の人の申請がリストで見えてしまう | アプリの絞り込みはリストの権限ではない | アイテム レベルのアクセス許可を設定する |
| 自分の申請が1件も出ない | User().Email は UPN を返し、メールアドレスと違う | 自分のメールアドレスを Office 365 ユーザーのコネクタで取って比べる |
| 古い3画面のアプリと画面の作りが違う | 今は1画面の形で自動作成される | ツリー ビューで部品の名前を確かめてから式を書く |
次にやること
休暇申請アプリができたら、同じ作り方で社用車の予約や備品の貸し出しにも広げられます。承認の流れをまだ作っていない場合は承認の記事を、データの置き場で迷い始めたら Dataverse の記事を読んでください。
- Power Appsとは:できることと、入力画面をアプリにする判断
- SharePointリストとは:作り方と、Excelの台帳をリストに移す判断
- Teamsの承認アプリとPower Automateの承認フロー:申請から承認までを作る
- Dataverseとは:SharePointリスト・Excelとの違いと、使うべき場面