<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>市民開発.com</title><description>Power Platformをつかった市民開発奮闘記</description><link>https://shiminkaihatsu.com/</link><item><title>Power Apps開発の全体マップ。基礎・データ操作・関数・UI設計の完全ガイド</title><link>https://shiminkaihatsu.com/app-development-map/</link><guid isPermaLink="true">https://shiminkaihatsu.com/app-development-map/</guid><description>Power Apps開発の全体マップ。基礎・データ操作・関数・UI設計の完全ガイド</description><pubDate>Mon, 16 Mar 2026 15:46:51 GMT</pubDate><content:encoded>&lt;p&gt;Power Appsでアプリを作れるようになりたいなら、まず開発全体の地図を持つことが最初の一手です。何をどの順番で覚えるかを把握しているかどうかで、上達スピードが大きく変わります。&lt;/p&gt;
&lt;h2 id=&quot;power-apps習得の全体マップ&quot;&gt;Power Apps習得の全体マップ&lt;/h2&gt;
&lt;p&gt;Power Appsでアプリを開発するには、大きく分けて4つの領域があります。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;領域&lt;/th&gt;
&lt;th&gt;主な内容&lt;/th&gt;
&lt;th&gt;優先度&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;①基礎&lt;/td&gt;
&lt;td&gt;データソースへの接続・画面遷移&lt;/td&gt;
&lt;td&gt;★★★&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;②データ操作&lt;/td&gt;
&lt;td&gt;読み込み・書き込み・削除（CRUD）&lt;/td&gt;
&lt;td&gt;★★★&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;③関数・ロジック&lt;/td&gt;
&lt;td&gt;変数・条件分岐・検索関数&lt;/td&gt;
&lt;td&gt;★★☆&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;④UI設計&lt;/td&gt;
&lt;td&gt;ギャラリー・フォーム・見た目&lt;/td&gt;
&lt;td&gt;★★☆&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;この4つを軸に習得を進めるのが、現場で使えるアプリを最短で作るルートです。慣れてきたら⑤パフォーマンス管理と⑥Power Automate連携も加わります。&lt;/p&gt;
&lt;p&gt;どこから手をつければいいかわからない方は、&lt;a href=&quot;/appkaihatsunagare/&quot;&gt;アプリ開発の一連の流れ&lt;/a&gt;で全体像を先に確認しておくといいでしょう。初心者の方は&lt;a href=&quot;/powerapps-basic/&quot;&gt;Power Appsとは？完全ガイド&lt;/a&gt;もあわせてどうぞ。&lt;/p&gt;
&lt;h2 id=&quot;基礎アプリの骨格を作る&quot;&gt;①基礎：アプリの骨格を作る&lt;/h2&gt;
&lt;p&gt;アプリ開発の入口として最初に習得すべきなのは、データソースへの接続と画面遷移の2つです。この2つが分かれば、最低限動くアプリは作れます。&lt;/p&gt;
&lt;h3 id=&quot;データソースは何を使うか&quot;&gt;データソースは何を使うか&lt;/h3&gt;
&lt;p&gt;Power Appsはさまざまなデータソースと繋がれますが、市民開発の入口としてもっともおすすめなのはSharePointリスト（Microsoft Lists）です。Excelをデータソースにしたいと思う方も多いでしょうが、Excelには件数の上限や委任問題があり、業務利用では早々に限界が来ることも少なくありません。&lt;/p&gt;
&lt;p&gt;SharePointリストとExcelをどう使い分けるかは、&lt;a href=&quot;/powerapps-db/&quot;&gt;データソースの選び方&lt;/a&gt;や&lt;a href=&quot;/splist_mslist/&quot;&gt;SharePointリストとMicrosoft Listsの関係&lt;/a&gt;で詳しく解説しています。&lt;/p&gt;
&lt;h3 id=&quot;画面遷移の設計&quot;&gt;画面遷移の設計&lt;/h3&gt;
&lt;p&gt;複数の画面を持つアプリを作るには、Navigate関数を使います。画面同士の移動を管理することが、マルチスクリーンアプリの基本設計です。&lt;a href=&quot;/navigate-powerapps/&quot;&gt;Navigate関数の詳しい使い方&lt;/a&gt;は別記事で解説しています。&lt;/p&gt;
&lt;h2 id=&quot;データ操作読み書き削除の基本crud&quot;&gt;②データ操作：読み書き削除の基本（CRUD）&lt;/h2&gt;
&lt;p&gt;アプリの核心は、データの読み書き・削除——いわゆるCRUDです。CRUDとはCreate（作成）・Read（読み込み）・Update（更新）・Delete（削除）の頭文字で、ほぼすべての業務アプリがこの4種類の操作を必要とします。&lt;/p&gt;
&lt;h3 id=&quot;データの読み込みと絞り込み&quot;&gt;データの読み込みと絞り込み&lt;/h3&gt;
&lt;p&gt;SharePointリストからデータを読み込むには、ギャラリーコントロールにデータソースを接続します。そこにFilter関数・Search関数・LookUp関数を組み合わせて、必要な行だけを表示します。3つの関数の使い分けは&lt;a href=&quot;/powerapps-filter-search-lookup/&quot;&gt;Filter・Search・LookUp関数の使い分けガイド&lt;/a&gt;で整理しました。&lt;/p&gt;
&lt;h3 id=&quot;データの書き込みと削除&quot;&gt;データの書き込みと削除&lt;/h3&gt;
&lt;p&gt;データの追加・更新にはPatch関数かフォームコントロールを使います。Patch関数はコードで直接書く方法で自由度が高い反面、書き方を覚える必要があります。フォームコントロールはコードがほぼ不要で手軽に実装できますが、カスタマイズには限界があります。SharePointリストのCRUDをまとめて学びたい方は別記事で詳しく解説する予定です。Patch関数の詳しい使い方は&lt;a href=&quot;/powerapps-patch-function/&quot;&gt;Power AppsのPatch関数の使い方&lt;/a&gt;でも解説しています。&lt;/p&gt;
&lt;h2 id=&quot;関数ロジック数式で動きを作る&quot;&gt;③関数・ロジック：数式で動きを作る&lt;/h2&gt;
&lt;p&gt;Power Appsの数式はExcelに近い感覚で書けます。ただし、Excelとは異なる独自ルールもあり、最初は戸惑うこともあるでしょう。私もその一人でした。ここでは特に重要な3つの領域を紹介します。&lt;/p&gt;
&lt;h3 id=&quot;変数と初期化処理&quot;&gt;変数と初期化処理&lt;/h3&gt;
&lt;p&gt;Power Appsには変数が2種類あります。グローバル変数（Set関数で設定）とコンテキスト変数（UpdateContext関数で設定）です。どちらをどんな場面で使うかは&lt;a href=&quot;/powerapps-variables/&quot;&gt;グローバル変数とコンテキスト変数の使い分け&lt;/a&gt;で図解しています。&lt;/p&gt;
&lt;p&gt;初期化処理をOnStartに書くか、OnVisibleに書くかも迷いどころのひとつです。OnStartとOnVisibleの使い分けについては別記事で整理する予定です。&lt;/p&gt;
&lt;h3 id=&quot;条件分岐&quot;&gt;条件分岐&lt;/h3&gt;
&lt;p&gt;条件によって動きを変えたいときはIf関数かSwitch関数を使います。複数の条件を並べるとき、IfよりもSwitchの方がすっきり書ける場面があります。IfとSwitchの使い分けについては別記事で詳しく解説します。&lt;/p&gt;
&lt;h3 id=&quot;データを絞り込む3つの関数&quot;&gt;データを絞り込む3つの関数&lt;/h3&gt;
&lt;p&gt;ギャラリーに表示するデータを絞り込むFilter・Search・LookUpは、Power Appsでもっともよく使う関数です。使い分けがわかるようになると、アプリ開発の幅が一気に広がります。&lt;a href=&quot;/powerapps-filter-search-lookup/&quot;&gt;Filter・Search・LookUp関数の使い分けガイド&lt;/a&gt;で詳しくまとめています。&lt;/p&gt;
&lt;h2 id=&quot;ui設計使いやすさに投資する&quot;&gt;④UI設計：使いやすさに投資する&lt;/h2&gt;
&lt;p&gt;機能が動いても、使いにくければ誰も使わないアプリになります。これは現場でよく起きることです。UI設計の考え方の全体像は&lt;a href=&quot;/powerapps-uiux/&quot;&gt;Power Appsは見た目と使いやすさにこだわって開発すべし&lt;/a&gt;でまとめています。&lt;/p&gt;
&lt;h3 id=&quot;ギャラリーコントロール&quot;&gt;ギャラリーコントロール&lt;/h3&gt;
&lt;p&gt;データを一覧表示するためのコントロールです。ギャラリーのSelectedプロパティと画面遷移を組み合わせることで、一覧→詳細表示という基本的な流れが作れます。ギャラリーの基本と検索連携の実装については別記事で解説する予定です。&lt;/p&gt;
&lt;h3 id=&quot;フォームコントロール&quot;&gt;フォームコントロール&lt;/h3&gt;
&lt;p&gt;EditForm・NewForm・DisplayFormの3種類があり、データの編集・追加・閲覧に対応しています。フォームコントロールを使えばPatch関数を書かなくてもデータの更新ができます。設定のポイントはフォームコントロールの解説記事で別途まとめる予定です。&lt;/p&gt;
&lt;p&gt;小ネタやUI改善のテクニック集としては&lt;a href=&quot;/powerappstips/&quot;&gt;Power Appsで使える実用テクニック&lt;/a&gt;もおすすめです。&lt;/p&gt;
&lt;h2 id=&quot;パフォーマンス重くなる前に知っておくこと&quot;&gt;⑤パフォーマンス：重くなる前に知っておくこと&lt;/h2&gt;
&lt;p&gt;アプリが大きくなってくると、表示が遅くなったり、データが全件取得できなくなる問題が出てきます。特に注意が必要なのが委任（デリゲーション）という概念です。&lt;/p&gt;
&lt;p&gt;委任とは、Power Appsがデータ処理をデータソース側に依頼する仕組みのことです。委任できないフィルターを使うと、データが最大2,000件までしか扱えなくなります。たとえば20人が使うアプリで1日20件の登録があれば、5ヶ月で2,000件に達します。設計の早い段階で委任を意識しておきましょう。委任の詳細は&lt;a href=&quot;/powerapps-delegation-warning/&quot;&gt;Power Appsの委任の警告とは？&lt;/a&gt;を参照してください。&lt;/p&gt;
&lt;p&gt;パフォーマンス改善の具体策は別記事でまとめる予定です。&lt;/p&gt;
&lt;h2 id=&quot;power-automateとつないで自動化する&quot;&gt;⑥Power Automateとつないで自動化する&lt;/h2&gt;
&lt;p&gt;メール送信・承認フロー・Teams通知など、Power Apps単体では難しい自動化はPower Automateが担います。ボタンを押したときにフローを呼び出し、処理結果をアプリに返す——これがPower Apps×Power Automateの基本パターンです。&lt;/p&gt;
&lt;p&gt;連携の実装方法はPower AppsとPower Automateの連携記事で別途解説する予定です。Power Platformで業務改善を進めるイメージ全体は&lt;a href=&quot;/simple-development/&quot;&gt;Power Platformで始めるシンプルな業務改善&lt;/a&gt;もあわせて読んでみてください。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;Power Apps開発の全体像を6つの領域で整理しました。&lt;/p&gt;
&lt;p&gt;全部を一気に覚えようとする必要はありません。①②で動くアプリを1本作り、③④で磨き込む——この繰り返しがいちばん確実な上達ルートです。この記事を地図として、自分のペースでPower Apps習得を進めていきましょう。&lt;/p&gt;</content:encoded></item><item><title>Power Appsでアプリ開発する一連の流れを紹介</title><link>https://shiminkaihatsu.com/appkaihatsunagare/</link><guid isPermaLink="true">https://shiminkaihatsu.com/appkaihatsunagare/</guid><description>Power Appsでアプリ開発する一連の流れを紹介</description><pubDate>Tue, 13 Feb 2024 21:37:10 GMT</pubDate><content:encoded>&lt;p&gt;Power Appsでのアプリ開発は、流れを把握してから着手すると驚くほどスムーズに進みます。要件定義から本公開・メンテナンスまで、市民開発者の視点で一連のプロセスを整理しました。&lt;/p&gt;
&lt;p&gt;一般的なシステム開発経験者の視点では抜け・漏れがあるかもしれませんが、あくまでも市民開発者目線の記事として参考にしてください。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;要件定義&lt;/li&gt;
&lt;li&gt;環境構築&lt;/li&gt;
&lt;li&gt;設計&lt;/li&gt;
&lt;li&gt;開発&lt;/li&gt;
&lt;li&gt;プロトタイプの公開&lt;/li&gt;
&lt;li&gt;本公開&lt;/li&gt;
&lt;li&gt;メンテナンス&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;開発の流れは料理でかんがえるとわかりやすい&quot;&gt;開発の流れは料理でかんがえるとわかりやすい&lt;/h2&gt;
&lt;p&gt;難しく考える必要はありません。料理をするときの流れを想像してみましょう。&lt;/p&gt;
&lt;p&gt;ご飯を作るときも、何を作るか決めて、材料を揃えて、手順通りに調理する。アプリ開発も、まったく同じ考え方で進めることができます。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;開発&lt;/th&gt;
&lt;th&gt;詳細&lt;/th&gt;
&lt;th&gt;料理&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;要件定義&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;なにを作るか？&lt;/td&gt;
&lt;td&gt;ご飯何にしよう？&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;環境構築&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;ツールを考える&lt;/td&gt;
&lt;td&gt;材料や調理器具の準備&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;設計&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;仕様や動作&lt;/td&gt;
&lt;td&gt;玉ねぎはどう切る？ お米は何合？&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;開発&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;実際の開発&lt;/td&gt;
&lt;td&gt;材料を切る、炒める&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;プロトタイプの公開&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;試作品の公開&lt;/td&gt;
&lt;td&gt;味見&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;本公開&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;完成&lt;/td&gt;
&lt;td&gt;完成&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;メンテナンス&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;保守・メンテナンス&lt;/td&gt;
&lt;td&gt;後片付け&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;1-要件定義&quot;&gt;1. 要件定義&lt;/h2&gt;
&lt;p&gt;要件定義は、アプリ開発でもっとも重要なフェーズです。何を作るか、誰のために作るか、どんな機能が必要かを言語化することで、開発の方向性が定まります。&lt;/p&gt;
&lt;p&gt;Power Appsで作るアプリには、大きく2種類あります。依頼を受けて作るアプリと、自発的に作るアプリです。&lt;/p&gt;
&lt;p&gt;依頼を受けて作るアプリは、誰かから困っていることを聞いてニーズを把握したうえで作るものです。他人の依頼を形にするわけなので、要件定義が大切というのは理解できるでしょう。&lt;/p&gt;
&lt;p&gt;自発的に作るアプリは、自らが業務改善をするために作るアプリです。現場の仕事を理解している分、業務改善・DX化が進みやすいメリットがあります。ただし、ついつい要件定義を省略して好き勝手に作ってしまいがちです。私がそうでした。ちゃんとした運用を考えるのであれば、やはり要件定義は必要です。&lt;/p&gt;
&lt;p&gt;自分の思考を見える化することで整理ができますし、他人が見ても共通のゴールと道筋が見えるのが大切なのです。&lt;/p&gt;
&lt;h3 id=&quot;要件定義の一例&quot;&gt;要件定義の一例&lt;/h3&gt;
&lt;p&gt;アプリの一例を出して、要件定義を作ってみました。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;定義項目&lt;/th&gt;
&lt;th&gt;詳細&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;いま困っていることは何か&lt;/td&gt;
&lt;td&gt;テレワークが増え、部内で誰がテレワークなのか出社なのか把握しづらい&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;アプリでそれをどう解決するのか&lt;/td&gt;
&lt;td&gt;ひと目で全員のテレワークと出社を見ることができる&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;アプリを使うユーザーは誰か&lt;/td&gt;
&lt;td&gt;自分の部署と関係部署、合わせて3部署&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;必須機能は何か&lt;/td&gt;
&lt;td&gt;Outlookスケジューラーの予定を抽出する機能。 テレワークと出社を判別し、わかりやすく表示する機能。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;あったら便利な機能は何か&lt;/td&gt;
&lt;td&gt;1週間ほど先まで予定が見える機能。 部署ごとにわけて表示する機能。 出社人数がわかる棒グラフ機能。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;このような感じです。ExcelやSpreadsheetにまとめておき、進捗に合わせて色付けするなどして管理しやすくしておきましょう。&lt;/p&gt;
&lt;p&gt;ちなみにこのアプリは、実際に私が作った自発的なアプリの一例です。作った当時は市民開発の初心者だったので、きちんと要件定義も作らずに制作していました。&lt;/p&gt;
&lt;h3 id=&quot;判断できる力が必要&quot;&gt;判断できる力が必要&lt;/h3&gt;
&lt;p&gt;必須機能として挙げた項目が、本当に実装可能かどうか判断できる力が必要です。Power Appsでできることとできないことを要件定義の段階で明確にする必要があり、市民開発者はその判断を求められます。&lt;/p&gt;
&lt;p&gt;実装できないものは3つのレベルにわけて考えると整理しやすいです。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;それが実装可能かどうか知らないので実装できない&lt;/li&gt;
&lt;li&gt;実装できることは知っているが、経験値が自分にないので実装できない&lt;/li&gt;
&lt;li&gt;Power Appsの仕様上、実装できない&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;初心者の市民開発者は、まず1が該当するでしょう。Power Appsに詳しい人に尋ねたり、ネットや書籍で調べる必要があります。2のケースは、時間をかければ自力で解決できるかもしれません。3の判断がつくのであれば、非常にラクですね。どのレベルに当てはまるかを把握できれば、このアプリはほぼ成功したも同然です。&lt;/p&gt;
&lt;p&gt;この業務は何のためにやっているのか、やり方を変えられるか、業務を無くせないか――こういう考え方が重要です。&lt;/p&gt;
&lt;h2 id=&quot;2-環境構築&quot;&gt;2. 環境構築&lt;/h2&gt;
&lt;p&gt;環境構築とは、Power Appsを使うか、Power Platformを組み合わせて使うか、データベースは何にするかを決めることです。&lt;/p&gt;
&lt;p&gt;Power Platformには、外部サービス連携のためのコネクタが1,000種類以上用意されています。ただし、企業によっては業務に関係ないSNSや海外サービスのコネクタに使用制限がかかっていることが多いです。自社で使用できるコネクタと制限を把握したうえで、どのツールを使うかを考える必要があります。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-cons/&quot;&gt;&lt;strong&gt;Power Appsは万能ツールではないため、機能上限があります。&lt;/strong&gt;&lt;/a&gt;Power Automateも会社のライセンス次第で1日の使用に制限がかけられています。まずは制約をきちんと把握することが大切です。&lt;/p&gt;
&lt;p&gt;データベースの種類も考える必要があります。Excelにすると一部機能が制限されることがあります。SharePoint Listsにすると委任問題や5,000件問題があります。Dataverseにするとほぼ万能ですが追加料金がかかります。それぞれの特徴は&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-db/&quot;&gt;Power Appsのデータベース選びの記事&lt;/a&gt;で詳しく解説していますので、あわせて参考にしてください。&lt;/p&gt;
&lt;h2 id=&quot;3-設計&quot;&gt;3. 設計&lt;/h2&gt;
&lt;p&gt;設計では、アプリで扱うテーブルを計画します。エンティティ、属性、リレーションシップなどを定義し、データの整合性とアクセス効率を最適化するためのスキーマを設計します。この設計が、後のアプリのパフォーマンスと拡張性に大きく影響します。&lt;/p&gt;
&lt;p&gt;私がまだ市民開発の初心者だったころ、データベースはアプリに1つあれば十分じゃないかと考えていました。アプリから入力して保存する、それをアプリで表示する、アプリ作りなんて楽勝だと思っていました。&lt;/p&gt;
&lt;p&gt;でもアプリを使う人が増えたり、凝った内容にしようとすると、これユーザー情報をまとめた一覧表が別で必要じゃないか、とか、選択肢の名称が変更になったら全部の記録を手動で修正するのは現実的に無理じゃないか、と行き詰まることに気づいてきたのです。Dataverseを使ったアプリ作成に乗り出してからは、特にこのデータベース設計が重要な意味を持つことを実感しています。&lt;/p&gt;
&lt;p&gt;逆にいえば、ExcelやListsを使ったシンプル構造のアプリは、そこまでデータベース設計にこだわる必要はないかもしれません。ただ考え方のクセはつけておいたほうがいいです。&lt;/p&gt;
&lt;h3 id=&quot;データベース設計の基本&quot;&gt;データベース設計の基本&lt;/h3&gt;
&lt;p&gt;データベース設計は簡単にいうと、データベースにどんな列を持たせる必要があるかを考え、正規化し、その関係性を明確にすることです。&lt;/p&gt;
&lt;p&gt;例えば、社員のデータベースを作るなら、名前・部署・入社年月・出身地などの列を作って管理するでしょう。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/appnagare09.5JauumeC_2gP8QD.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;437&quot;&gt;&lt;/p&gt;
&lt;p&gt;そのデータベースで何を管理したいかに合わせて列を設けます。こうして出来上がったものをテーブルと呼びます。&lt;/p&gt;
&lt;p&gt;正規化とは、テーブルの余計な列を無くし（冗長性の排除）、データの整合性を保つための最小単位のかたまりにすることです。このような名簿テーブルがあるとします。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;一見するとこのままデータベースとして使えそうですが、先々のメンテナンスを考えてみましょう。例えば社内の部署名変更があり、営業部が営業統括部に変更するとします。すると先程の名簿はこのように修正が必要です。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;全データを一括で修正するのは手間がかかりますし、修正ミスのリスクも高い。ではこれをどうするべきかというと、部署名に固有IDを持たせて2つのテーブルで管理します。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;すると、部署名を変更するときも部署テーブルを1箇所変更するだけで済み、間違うリスクを減らすことができます。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;Power Appsのデータソースには、この2つのテーブルを連携します。あとはギャラリーコントロールなどで参照が可能になりますね。このような作業を正規化といいます。&lt;/p&gt;
&lt;p&gt;非エンジニアの私は、このデータベース設計のことを知らないままPower Appsに触れていました。ところがアプリを作っていくうち、テーブルをわけて別々にデータを管理しないと、作業が複雑すぎて対応できなくなると気づいたのです。結果的にデータベース設計の大切さを知ることになり、初心者向けデータ設計の書籍を数冊読み込んで勉強しました。&lt;/p&gt;
&lt;h3 id=&quot;要件定義とデータベース設計は一朝一夕ではならず&quot;&gt;要件定義とデータベース設計は一朝一夕ではならず&lt;/h3&gt;
&lt;p&gt;要件定義とデータベース設計は、理屈を知ったからといって最初から完璧なものができるわけではありません。アプリを作るうち、やっぱりあの機能があったほうがいいとか後で思いつくことはザラにありますし、必要なデータベースを忘れていて後から追加することもあります。&lt;/p&gt;
&lt;p&gt;これらは経験を重ねて慣れていくしかないと思っています。学べば学ぶほど、必要な機能やデータ構成がわかるようになってきます。一朝一夕ではいかないものです。&lt;/p&gt;
&lt;h2 id=&quot;4-開発&quot;&gt;4. 開発&lt;/h2&gt;
&lt;p&gt;開発段階では、要件定義で特定した核となる機能に焦点を当て、アプリの基礎を構築します。必須要求を満たし、核となるプロセスが正しく機能することを確認するフェーズです。&lt;/p&gt;
&lt;p&gt;先ほどの要件定義の例でいえば、ひと目で全員のテレワーク・出社状況を把握できるギャラリー画面を作ること、個人がステータスを入力する画面を作ること、これが最初の開発目標になります。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;定義項目&lt;/th&gt;
&lt;th&gt;詳細&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;いま困っていることは何か&lt;/td&gt;
&lt;td&gt;テレワークが増え、部内で誰がテレワークなのか出社なのか把握しづらい&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;アプリでそれをどう解決するのか&lt;/td&gt;
&lt;td&gt;ひと目で全員のテレワークと出社を見ることができる&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;アプリを使うユーザーは誰か&lt;/td&gt;
&lt;td&gt;自分の部署と関係部署、合わせて3部署&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;必須機能は何か&lt;/td&gt;
&lt;td&gt;&lt;em&gt;Outlookスケジューラーの予定を抽出する機能。 テレワークと出社を判別し、わかりやすく表示する機能。&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;あったら便利な機能は何か&lt;/td&gt;
&lt;td&gt;1週間ほど先まで予定が見える機能。 部署ごとにわけて表示する機能。 出社人数がわかる棒グラフ機能。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;開発が進むにつれ画面が増えてきます。複数画面のアプリ設計については、&lt;a href=&quot;https://shiminkaihatsu.com/navigate-powerapps/&quot;&gt;Navigate関数を使った画面遷移の記事&lt;/a&gt;で詳しく解説していますので、あわせて参考にしてください。&lt;/p&gt;
&lt;p&gt;完璧を求めすぎず、まず動くものを作ることが重要です。細かい調整や追加機能は、プロトタイプ公開後のフィードバックをもとに対応していけば十分です。&lt;/p&gt;
&lt;h2 id=&quot;5-プロトタイプの公開&quot;&gt;5. プロトタイプの公開&lt;/h2&gt;
&lt;p&gt;プロトタイプの公開では、初期バージョンのアプリを限定的なユーザーグループにリリースし、実際の操作を通じたフィードバックを収集します。この段階で得られる意見や提案は、アプリの改善と最終的な品質向上に不可欠です。&lt;/p&gt;
&lt;p&gt;最低限のUIを作り、テストユーザーに公開してアプリを使ってもらいましょう。自分一人では見落としていた挙動を指摘してもらったり、使い勝手向上のためのヒアリングを進めます。&lt;/p&gt;
&lt;p&gt;Power AppsはURLを通じてアクセスしますので、改修したアプリはすぐに使ってもらうことが可能です。Teamsを使って専用チームを作成し、気づいたことをどんどん投げてもらうといいですね。&lt;/p&gt;
&lt;h2 id=&quot;6-本公開&quot;&gt;6. 本公開&lt;/h2&gt;
&lt;p&gt;本公開の段階では、アプリを関係者全員にリリースし、実運用を開始します。ここまでくれば一通りの開発フェーズが終了です。場合によっては、付属機能の実装と本公開はオーバーラップしてもいいですね。&lt;/p&gt;
&lt;h2 id=&quot;7-メンテナンス&quot;&gt;7. メンテナンス&lt;/h2&gt;
&lt;p&gt;メンテナンスフェーズでは、アプリの運用を継続的に監視し、バグ修正やパフォーマンスの最適化を行います。また、ユーザーからのフィードバックに基づいて機能の追加や改善を続けていきます。&lt;/p&gt;
&lt;p&gt;アプリは公開して終わりではありません。使われながら育てていくものです。定期的に見直す習慣をつけておきましょう。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;アプリ開発の一連の流れをまとめます。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;要件定義&lt;/li&gt;
&lt;li&gt;環境構築&lt;/li&gt;
&lt;li&gt;設計&lt;/li&gt;
&lt;li&gt;開発&lt;/li&gt;
&lt;li&gt;プロトタイプの公開&lt;/li&gt;
&lt;li&gt;本公開&lt;/li&gt;
&lt;li&gt;メンテナンス&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;要件定義は、アプリ開発における肝になるフェーズです。開発・プロトタイプの公開は、ひたすら手を動かすフェーズ。本公開・メンテナンスはアフターフォローのフェーズです。&lt;/p&gt;
&lt;p&gt;アプリの規模にもよりますが、最も時間がかかるのは手を動かして作るフェーズですね。1つ機能をつけたらできるだけ早くプロトタイプとして公開し、フィードバックを得るといいでしょう。&lt;/p&gt;
&lt;p&gt;Power Apps全体の学習ロードマップや各機能の位置づけについては、Power Apps開発の全体マップ記事でまとめて解説しています。あわせて参考にしてください。&lt;/p&gt;
&lt;p&gt;今回紹介した流れは、アプリを作れば作るほど自然と身についてきます。楽しみながら手を動かして、1つでも多く経験を積んでいきましょう。&lt;/p&gt;</content:encoded></item><item><title>Power Appsを社外の人と外部共有して使う方法</title><link>https://shiminkaihatsu.com/apps_external/</link><guid isPermaLink="true">https://shiminkaihatsu.com/apps_external/</guid><description>Power Appsを社外の人と外部共有して使う方法</description><pubDate>Sat, 10 Aug 2024 13:03:36 GMT</pubDate><content:encoded>&lt;p&gt;Power Apps で開発したアプリは、社外の人と外部共有し、共同で利用することができます。&lt;/p&gt;
&lt;p&gt;ただし、社内利用時と同じような自由度で利用してもらうのはハードルが高く、シンプルな利用に限ります。&lt;/p&gt;
&lt;p&gt;外部共有における注意点を押さえておきましょう。&lt;/p&gt;
&lt;h2 id=&quot;アプリを社外共有するための3つの条件&quot;&gt;アプリを社外共有するための3つの条件&lt;/h2&gt;
&lt;p&gt;自社開発アプリを社外の人が使うためには、次の3つの条件すべてをクリアする必要があります。&lt;/p&gt;
&lt;h3 id=&quot;1-power-apps-を利用できるライセンス契約をしていること&quot;&gt;1. Power Apps を利用できるライセンス契約をしていること&lt;/h3&gt;
&lt;p&gt;まず、アプリを開発するあなたと、そのアプリを利用したい社外の人お互いが Power Appsを利用できるライセンスを契約している必要があります。&lt;/p&gt;
&lt;p&gt;昨今のライセンスを見る限り、Microsoftと契約のある企業であれば基本的に最初から利用可能になっていることがほとんどだと思います。&lt;/p&gt;
&lt;p&gt;2024年6月現在、最新のライセンス一覧はこちらです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/expowerapps-01.CocPIInb_ZlrBFk.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;908&quot; height=&quot;1410&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://cdn-dynmedia-1.microsoft.com/is/content/microsoftcorp/microsoft/final/ja-jp/microsoft-brand/documents/Power%20Platform%20Licensing%20Guide%20June%202024.pdf&quot;&gt;Microsoftライセンス一覧より抜粋&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;相手先企業の人が Power Apps ライセンスを所有しているかどうか、先方のシステム担当者に確認してもらうか、または&lt;a href=&quot;https://make.powerapps.com/&quot;&gt;&lt;strong&gt;Power Appsのサイト&lt;/strong&gt;&lt;/a&gt;にアクセスできるかどうかを確認してもらえばいいですね。&lt;/p&gt;
&lt;p&gt;お互いがライセンスを持っていなければいけないということは、不特定多数の人が利用することを想定したアプリ開発は不可能であることを意味します。&lt;/p&gt;
&lt;p&gt;具体的には、ECサイトなどで顧客に必要情報を入力してもらうためのアプリとしてPower Appsは不向きということになります。&lt;/p&gt;
&lt;p&gt;なぜなら、基本的に Power Appsはビジネス利用が前提となっていて、個人契約の Microsoft 365 Personal や Familyプランは Power Apps のライセンスを含んでいないからです。&lt;/p&gt;
&lt;p&gt;それらの人が利用するためには、追加オプションで別途 Power Apps ライセンスを契約する必要があり、よほど興味関心のある人でない限り、個人でこれらを契約する人は少ないと考えられます。&lt;/p&gt;
&lt;h3 id=&quot;2-外部共有を設定したsharepointサイトにデータソースを配置すること&quot;&gt;2. 外部共有を設定したSharePointサイトにデータソースを配置すること&lt;/h3&gt;
&lt;p&gt;SharePointサイトを外部共有可に設定し、そこに外部利用したい人のメールアドレスを設定します。&lt;/p&gt;
&lt;p&gt;その上でSharePointリストなどデータソースを配置することで、アプリからの利用が可能になります。&lt;/p&gt;
&lt;p&gt;[M365管理センター]-[SharePoint管理センター]-[アクティブなサイト]-[任意のサイト]-[設定]-[ファイルの外部共有]から変更できます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/expowerapps-02.B3fqdr3a_EV8r.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;1109&quot;&gt;&lt;/p&gt;
&lt;p&gt;セキュリティのことを考えると[新規および既存のゲスト]にしておくといいでしょう。&lt;/p&gt;
&lt;p&gt;外部ユーザーがアクセスのたびに認証が必要となりますし、ドメインでアクセス制限ができたり、アクセス可能日数を30日〜730日の間で設定することも可能です。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/expowerapps-03.Bhv0vZ5E_Z3R97X.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;908&quot;&gt;&lt;/p&gt;
&lt;p&gt;サイトを共有した相手には、サイトリンクを通知するこのようなメールが自動送信される&lt;/p&gt;
&lt;h3 id=&quot;3-作ったアプリの共有先に外部ユーザーを追加する&quot;&gt;3. 作ったアプリの共有先に外部ユーザーを追加する&lt;/h3&gt;
&lt;p&gt;共有したいアプリの共有先に、2で追加した外部ユーザーのメールアドレスを設定します。&lt;/p&gt;
&lt;p&gt;2で外部メンバーを追加していないとアプリの共有先候補に一覧が表示されませんので注意しましょう。&lt;/p&gt;
&lt;p&gt;あとはアプリのリンクは外部ユーザーに連絡すれば、そのURLからアクセスできるようになります。&lt;/p&gt;
&lt;h2 id=&quot;power-apps外部共有のデメリット&quot;&gt;Power Apps外部共有のデメリット&lt;/h2&gt;
&lt;p&gt;苦労して Power Apps の外部利用が可能になっても、デメリットや使い勝手の悪い点があります。&lt;/p&gt;
&lt;h3 id=&quot;コネクタの利用はかなり制限される&quot;&gt;コネクタの利用はかなり制限される&lt;/h3&gt;
&lt;p&gt;コネクタとは、例えばPower Apps内で使うTeamsコネクタ、Outlookコネクタ、OneDriveコネクタなどのこと。&lt;/p&gt;
&lt;p&gt;これらはいわゆる標準コネクタと呼ばれるものですが、コネクタごとに外部共有の設定が必要で、管理が相当煩雑になります。&lt;/p&gt;
&lt;p&gt;そのため、外部利用したいアプリはコネクタを使わないシンプルな構造にすることを求められます。&lt;/p&gt;
&lt;h3 id=&quot;認証が面倒くさい&quot;&gt;認証が面倒くさい&lt;/h3&gt;
&lt;p&gt;サイトの外部共有設定で[新規および既存のゲスト]を選択すると、外部ユーザーがアプリにアクセスするたびに認証を求められます。&lt;/p&gt;
&lt;p&gt;月1回アクセスする程度ならまだ許容できますが、頻繁にアクセスするとユーザビリティが低下します。&lt;/p&gt;
&lt;p&gt;[すべてのユーザ]をアクセス可にすれば認証問題は無くなりますが、セキュリティ性が大幅に低下しますので、推奨されません。&lt;/p&gt;
&lt;h3 id=&quot;データは誰でも編集可能になってしまう&quot;&gt;データは誰でも編集可能になってしまう&lt;/h3&gt;
&lt;p&gt;SharePointサイトにデータソースを保存する以上、サイト内部のすべてのアイテムに対してメンバーは編集権限を持ちます。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;#extpeople&quot;&gt;&lt;strong&gt;ここでの説明&lt;/strong&gt;&lt;/a&gt;の通り、外部ユーザーをサイトに追加した段階でサイトアドレスが通知されますので、データの保存場所は相手に筒抜けです。&lt;/p&gt;
&lt;p&gt;そのため、ユーザーによって改変される恐れがあることを許容した上でアプリを設計する必要があるのです。&lt;/p&gt;
&lt;p&gt;情報管理レベルに応じて、例えば自社とA社だけが使う外部サイト、自社とB社、C社、D社が使う外部サイトのように分けて管理する必要もありますね。&lt;/p&gt;
&lt;h2 id=&quot;情報収集に最適forms-を活用した外部との連携&quot;&gt;【情報収集に最適】Forms を活用した外部との連携&lt;/h2&gt;
&lt;p&gt;凝ったアプリが必要なければ、わざわざPower Appsを使わず、Formsで事足りるかもしれません。&lt;/p&gt;
&lt;p&gt;Formsはアンケートをお手軽に作れるツールですが、[すべてのユーザーが回答可能]にすることで、社外から簡単に情報収集が可能です。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/expowerapps-04.C8sBuN0W_ZpeoQV.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;394&quot;&gt;&lt;/p&gt;
&lt;p&gt;Formsの回答をトリガーとしてPower Automateと連携させれば、Dataverseやリストへの格納も可能ですね。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Power Appsを社外の人が使うためには、[必要なライセンス]・[サイト（リスト）のアクセス権を付与する]・[アプリを共有する]が必要。&lt;/li&gt;
&lt;li&gt;社内で使うような自由さはなく、外部ユーザーが手間に感じる恐れあり&lt;/li&gt;
&lt;li&gt;Formsで事足りるならFormsのほうが簡単&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Power Appsは基本的に社内ユースが前提のツールですが、上記のことを踏まえれば外部共有が可能になります。&lt;/p&gt;</content:encoded></item><item><title>Dataverseのテーブルから30秒でアプリを自動生成する方法</title><link>https://shiminkaihatsu.com/dataverse-auto-app/</link><guid isPermaLink="true">https://shiminkaihatsu.com/dataverse-auto-app/</guid><description>Dataverseのテーブルから30秒でアプリを自動生成する方法</description><pubDate>Wed, 25 Mar 2026 17:30:33 GMT</pubDate><content:encoded>&lt;p&gt;Dataverseのテーブルを作ったら、まず自動生成でアプリを動かしてみましょう。テーブルを選んでボタンを押すだけで、ギャラリー（一覧画面）＋フォーム（入力・編集・詳細表示）がセットになった、実際に動くアプリが30秒〜1分で完成します。&lt;/p&gt;
&lt;p&gt;私がDataverseを使い始めたとき、「テーブルを作ったあと何をすればいいか」がしばらくわかりませんでした。自動生成機能を知ってからは、テーブルを作るたびにまず自動生成でアプリを動かして、テーブル設計の確認ツールとして使うようになりました。この段階で設計ミスを発見しておくと、後の修正コストが大幅に下がります。&lt;/p&gt;
&lt;h2 id=&quot;自動生成アプリの作り方&quot;&gt;自動生成アプリの作り方&lt;/h2&gt;
&lt;p&gt;手順はとてもシンプルです。慣れれば1〜2分で完了します。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://make.powerapps.com&quot;&gt;make.powerapps.com&lt;/a&gt; を開き、左上の「ホーム」をクリックします&lt;/li&gt;
&lt;li&gt;画面中央の「データから開始」セクションにある「既存のテーブルから開始」をクリックします&lt;/li&gt;
&lt;li&gt;テーブルの一覧が表示されるので、アプリを作りたいテーブルにチェックを入れます&lt;/li&gt;
&lt;li&gt;右下の「アプリの作成」ボタンをクリックします&lt;/li&gt;
&lt;li&gt;30秒〜1分ほど待つと、Power Appsのエディタが開いてアプリが表示されます&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;「既存のテーブルから開始」が見つからない場合は、「テーブル」一覧からテーブルを選び、上部メニューの「このデータを使用してアプリを作成する」からも同じ操作ができます。どちらの方法でも同じアプリが生成されます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/dataverse-auto-app01.CsVC3xM4_23U0Ps.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;生成されるアプリの構成&quot;&gt;生成されるアプリの構成&lt;/h2&gt;
&lt;p&gt;自動生成されるアプリは、SharePointリストからアプリを作ったときと同じ3画面構成です。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;BrowseScreen（一覧画面）&lt;/strong&gt;：テーブルのレコードをギャラリーで一覧表示します。上部に検索バーと並び替えボタンが自動で設置されており、右上の「＋」ボタンで新規レコードの追加もできます&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DetailScreen（詳細画面）&lt;/strong&gt;：ギャラリーでタップしたレコードの詳細を表示します。DisplayFormを使って全列の値を表示する画面です&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;EditScreen（編集・新規画面）&lt;/strong&gt;：レコードの新規追加と編集を行う画面です。EditFormを使って各列の入力フィールドが自動で配置されます&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;この3画面でCRUD（作成・読み取り・更新・削除）がすべて動作します。ギャラリーからレコードを選んで詳細を見て、編集・削除もできる一通りの機能が最初から揃っています。&lt;/p&gt;
&lt;p&gt;ギャラリーの仕組みの詳細は&lt;a href=&quot;/powerapps-gallery/&quot;&gt;Power Appsのギャラリーコントロール&lt;/a&gt;で、フォームの構造については&lt;a href=&quot;/powerapps-form-basics/&quot;&gt;Power AppsのEditForm・NewForm・DisplayForm&lt;/a&gt;でそれぞれ解説しています。自動生成アプリをカスタマイズするときの参考にしてください。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/dataverse-auto-app02.COhJolqs_O28YX.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;自動生成アプリの3つの活用シーン&quot;&gt;自動生成アプリの3つの活用シーン&lt;/h2&gt;
&lt;h3 id=&quot;1-そのまま業務アプリとして使う&quot;&gt;1. そのまま業務アプリとして使う&lt;/h3&gt;
&lt;p&gt;単純なデータ入力・一覧表示・編集・削除が目的であれば、自動生成のアプリをほぼそのまま使えます。フォームの列の並び順を整えたり、ギャラリーに表示する列を調整したりする程度の修正だけで、実用的なアプリになります。&lt;/p&gt;
&lt;p&gt;SharePointリストのデータ管理に使っていたアプリと同じ感覚で使えるため、Dataverse移行後の初期段階でもスムーズに運用できます。リストとの使い勝手の比較については&lt;a href=&quot;/dataverse-table-vs-list/&quot;&gt;SharePointと違うDataverseのテーブル作成フロー&lt;/a&gt;も参考になります。&lt;/p&gt;
&lt;h3 id=&quot;2-カスタマイズのベースとして使う&quot;&gt;2. カスタマイズのベースとして使う&lt;/h3&gt;
&lt;p&gt;複雑な機能を持つアプリを作る場合でも、まず自動生成で土台を作り、そこにカスタマイズを重ねていく方法が効率的です。ギャラリーとフォームの接続設定がすでに完了した状態から始められるため、ゼロからスクリーンを構築するより大幅に時間を節約できます。&lt;/p&gt;
&lt;p&gt;たとえばギャラリーに条件付き書式を追加する、フォームに独自のバリデーションを設定する、承認ボタンを追加するといったカスタマイズも、自動生成の土台があればスムーズに進みます。&lt;/p&gt;
&lt;h3 id=&quot;3-テーブル設計の確認ツールとして使う&quot;&gt;3. テーブル設計の確認ツールとして使う&lt;/h3&gt;
&lt;p&gt;これが私が最もよく使うシーンです。テーブルを作ったあと、自動生成でアプリを動かしてみると設計ミスに気づきやすいです。&lt;/p&gt;
&lt;p&gt;確認できる主なポイントは以下の通りです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ルックアップ列のドロップダウンに意図した値（primary column）が表示されているか&lt;/li&gt;
&lt;li&gt;choice列の選択肢が正しい内容で並んでいるか&lt;/li&gt;
&lt;li&gt;必須設定にした列が正しく「必須」になっているか&lt;/li&gt;
&lt;li&gt;フォームの列の並び順がユーザーにとってわかりやすいか&lt;/li&gt;
&lt;li&gt;日付・時刻・数値など各列の入力フィールドが適切なタイプで表示されているか&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;設計のミスはデータを入れ始める前に発見するほうが、修正コストが圧倒的に低くなります。自動生成アプリは数分あれば動く状態になるため、「テーブルを作ったらまず動かして確認する」という習慣をつけると、後のやり直しを大きく減らせます。&lt;/p&gt;
&lt;h2 id=&quot;自動生成アプリの注意点と限界&quot;&gt;自動生成アプリの注意点と限界&lt;/h2&gt;
&lt;p&gt;便利な反面、自動生成のままでは対応できない場面もあります。事前に把握しておきましょう。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;列の表示順はそのまま反映されます。&lt;/strong&gt;テーブルで定義している列の順番がそのままフォームに出るため、ユーザーが使いやすい入力順に並び替えるには、Power Appsエディタでフォームの列の順序を手動で変更する必要があります。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ルックアップ列の表示はprimary columnのみです。&lt;/strong&gt;自動生成のComboBoxは参照先テーブルのprimary columnしか表示できません。「氏名と部署名を組み合わせて表示したい」といった要件がある場合は、ComboBoxのItemsプロパティやDisplayFieldプロパティをカスタマイズする必要があります。ルックアップ列の詳細は&lt;a href=&quot;/dataverse-lookup/&quot;&gt;Dataverseのルックアップ列でテーブルをリレーションさせる&lt;/a&gt;をご覧ください。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;委任（Delegation）の警告が出ることがあります。&lt;/strong&gt;テーブルのレコード数が多くなると、自動生成のFilter関数やSearch関数が委任警告を出す場合があります。この場合はクエリの書き方を見直す必要があります。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;他ユーザーと共有する場合はライセンスが必要です。&lt;/strong&gt;自分一人で使うアプリであれば問題ありませんが、他のユーザーと共有して使う場合は、Dataverseを使うアプリにはPower Apps Premiumライセンスが必要になります。SharePointリストを使ったアプリはMicrosoft 365ライセンスで共有できましたが、Dataverseではそれができません。詳細は&lt;a href=&quot;/dataverse-license/&quot;&gt;DataverseはSharePointアプリと違いライセンスが必要&lt;/a&gt;で整理しています。&lt;/p&gt;
&lt;h2 id=&quot;dataverseとsharepointの自動生成アプリの違い&quot;&gt;DataverseとSharePointの自動生成アプリの違い&lt;/h2&gt;
&lt;p&gt;SharePointリストからアプリを自動生成したことがある方なら、操作感はほぼ同じと感じるはずです。ただ、いくつかの点が異なります。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;SharePointリストから生成&lt;/th&gt;
&lt;th&gt;Dataverseテーブルから生成&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;生成の入口&lt;/td&gt;
&lt;td&gt;SharePointリスト画面の「Power Appsで編集」&lt;/td&gt;
&lt;td&gt;make.powerapps.comのホームから「既存のテーブルから開始」&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;必要なライセンス（共有時）&lt;/td&gt;
&lt;td&gt;Microsoft 365（追加ライセンス不要）&lt;/td&gt;
&lt;td&gt;Power Apps Premium（有償）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;データ容量&lt;/td&gt;
&lt;td&gt;リスト上限2,000アイテム（実用上の目安）&lt;/td&gt;
&lt;td&gt;大量データに対応しやすい&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;リレーション&lt;/td&gt;
&lt;td&gt;ルックアップ列で疑似的に実現&lt;/td&gt;
&lt;td&gt;テーブル間リレーションとして正式に管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;生成される画面構成&lt;/td&gt;
&lt;td&gt;3画面（Browse・Detail・Edit）&lt;/td&gt;
&lt;td&gt;同じく3画面&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;操作感はほぼ同じですが、Dataverseの方がデータ構造の厳密さとスケーラビリティが高い分、設計時に考慮すべき事項も増えます。はじめは自動生成アプリで動作を体感してから、徐々にカスタマイズを加えていくアプローチが取り組みやすいです。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;Dataverseのテーブルから自動生成するアプリは、30秒〜1分で動く状態になります。そのまま業務アプリとして使う・カスタマイズのベースにする・テーブル設計の確認に使う、いずれの用途でも役に立ちます。&lt;/p&gt;
&lt;p&gt;「テーブルを作ったらまず自動生成で動かして確認する」という習慣をつけることで、データを大量に入れてから設計ミスに気づくという状況を防ぎやすくなります。Dataverseを使い始めの段階でこの流れを体に染み込ませておくと、その後の開発がスムーズになります。&lt;/p&gt;
&lt;p&gt;Dataverseの全体像はDataverseをSharePoint経験者向けに完全解説にまとめています。テーブル設計・列型・環境・ライセンスまで、SharePoint経験者の視点で一通り整理しています。&lt;/p&gt;</content:encoded></item><item><title>DataverseのAuto-number列はテキスト型。フローで数値比較できない理由と回避策</title><link>https://shiminkaihatsu.com/dataverse-autonumber/</link><guid isPermaLink="true">https://shiminkaihatsu.com/dataverse-autonumber/</guid><description>DataverseのAuto-number列はテキスト型。フローで数値比較できない理由と回避策</description><pubDate>Wed, 25 Mar 2026 17:30:32 GMT</pubDate><content:encoded>&lt;p&gt;DataverseのAuto-number列は、数値に見えてテキスト型です。この一点を知っているかどうかで、Power Automateフローを組むときの詰まり方がまったく変わります。&lt;/p&gt;
&lt;p&gt;SharePointリストのID列（1, 2, 3と増える連番）を使い慣れていると、Dataverseにも同じような採番列があると期待するのは自然なことです。Auto-number列がまさにそれだと思って使い始め、フローの条件式で比較しようとしたら型エラー、という経験は、SharePointからDataverseに移行する人なら一度はぶつかります。自分もそうでした。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/dataverse-autonumber01.BtL81Ndm_ZPzoiu.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;auto-number列とはどんな機能か&quot;&gt;Auto-number列とはどんな機能か&lt;/h2&gt;
&lt;h3 id=&quot;設定できるフォーマット&quot;&gt;設定できるフォーマット&lt;/h3&gt;
&lt;p&gt;Auto-number列は、レコードが新規作成されるたびに自動で値が採番される列です。採番のルールをフォーマット文字列で設定できるのが特徴で、以下の3種類の要素を組み合わせられます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;SEQNUM(桁数)：連番。例：{SEQNUM:4} なら 0001, 0002…&lt;/li&gt;
&lt;li&gt;DATETIME(フォーマット)：日付。例：{DATETIME:yyyyMMdd} なら 20260322&lt;/li&gt;
&lt;li&gt;RANDSTRING(桁数)：ランダム文字列&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;これらを自由に組み合わせることができます。たとえば REQ-{DATETIME:yyyyMM}-{SEQNUM:4} と設定すれば、REQ-202603-0001 のような番号が自動生成されます。SharePointの連番IDにはできない、業務要件に合わせた採番が可能なのはたしかに便利です。&lt;/p&gt;
&lt;h3 id=&quot;ただし型はテキスト型これが全ての起点&quot;&gt;ただし型はテキスト型。これが全ての起点&lt;/h3&gt;
&lt;p&gt;便利なフォーマット設定ができる一方、Auto-number列の型はテキスト（文字列）です。見た目が 0001 や 123 であっても、Dataverseの内部では文字列として保存されています。つまり数値計算も大小比較もできません。&lt;/p&gt;
&lt;p&gt;なぜテキスト型なのかというと、REQ-202603-0001 のように日付や固定文字列を含めた複合フォーマットを実現するには、型を文字列にするしかないからです。純粋な数値型では、アルファベットや記号を含める採番ルールを表現できません。機能の柔軟性とのトレードオフとして、型はテキストに固定されています。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/dataverse-autonumber02.DCwKgqS5_atlbN.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;sharepointのid列との違い&quot;&gt;SharePointのID列との違い&lt;/h2&gt;
&lt;p&gt;改めて2つを比較してみます。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;比較項目&lt;/th&gt;
&lt;th&gt;SharePoint ID列&lt;/th&gt;
&lt;th&gt;Dataverse Auto-number列&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;データ型&lt;/td&gt;
&lt;td&gt;数値（整数）&lt;/td&gt;
&lt;td&gt;テキスト（文字列）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;自動採番&lt;/td&gt;
&lt;td&gt;1, 2, 3…（固定）&lt;/td&gt;
&lt;td&gt;フォーマット自由（REQ-0001 など）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;数値比較&lt;/td&gt;
&lt;td&gt;できる（gt, lt, eq）&lt;/td&gt;
&lt;td&gt;できない（テキスト比較になる）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;計算&lt;/td&gt;
&lt;td&gt;できる（+1など）&lt;/td&gt;
&lt;td&gt;できない&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Patchでの書き込み&lt;/td&gt;
&lt;td&gt;不可（自動）&lt;/td&gt;
&lt;td&gt;不可（自動）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;採番リセット&lt;/td&gt;
&lt;td&gt;できない&lt;/td&gt;
&lt;td&gt;できない（連番は減らせない）&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;SharePointのIDは純粋な数値型なので、フローの条件式で ID gt 100（100より大きい）のような比較がそのまま動きます。Auto-numberは見た目が同じ数字でも、中身は文字列なのでこれができません。&lt;/p&gt;
&lt;h2 id=&quot;power-automateフローで起きるエラーの実例&quot;&gt;Power Automateフローで起きるエラーの実例&lt;/h2&gt;
&lt;h3 id=&quot;条件ステップでの型エラー&quot;&gt;条件ステップでの型エラー&lt;/h3&gt;
&lt;p&gt;フローの条件ステップで Auto-number列の値が 100 より大きければ〜という分岐を作ろうとすると、思い通りに動きません。数値の 100 とテキストの 0100 を比較しているため、フローが正しく評価できないのです。エラーにならず無言でfalseを返し続けるケースもあり、原因に気づきにくいことがあります。&lt;/p&gt;
&lt;p&gt;個人的に一番やっかいだと感じるのはこのパターンです。エラーメッセージが出ないまま動作がおかしいだけなので、フローのどこに問題があるのか特定しづらいです。&lt;/p&gt;
&lt;h3 id=&quot;intで数値に変換してから比較する&quot;&gt;int()で数値に変換してから比較する&lt;/h3&gt;
&lt;p&gt;純粋な連番形式（0001, 0002…）のAuto-numberであれば、int()関数でテキストを整数に変換してから比較できます。式エディタ（fx）で以下のように書きます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// Auto-number列の値を整数に変換してから比較する&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;int(triggerOutputs()?[&apos;body&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;cr52a_managementnumber&apos;])&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ただしこれが使えるのは、採番値が純粋な数字のみの場合に限ります。REQ-202603-0001 のようなプレフィックス付きフォーマットでは、数字部分だけを substring() や split() で切り出してからint()変換する必要があります。だんだん複雑になってきますね。&lt;/p&gt;
&lt;p&gt;値の型を確認するには Composeアクションが便利です。&lt;a href=&quot;/powerautomate-compose/&quot;&gt;Composeアクションの使い方&lt;/a&gt;の記事でも触れていますが、フローの途中でComposeにAuto-number列の値を渡して実行してみると、どんな形式で保存されているかを目で確認できます。&lt;/p&gt;
&lt;h3 id=&quot;フィルタークエリでの注意&quot;&gt;フィルタークエリでの注意&lt;/h3&gt;
&lt;p&gt;Dataverseの行を取得するアクションで、フィルター行に Auto-number列を使って絞り込もうとするときも注意が必要です。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 数値として比較しようとするとうまく動かない&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;cr52a_managementnumber gt &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;100&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// テキストとして一致比較なら動く&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;cr52a_managementnumber eq &apos;&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;0100&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;&apos;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;大小比較はテキスト型では期待通りに動作しません。一致比較（eq）であればテキストとしての比較になるので動きます。どうしても大小比較が必要な場合は、数値型の別列を用意してそちらで管理するほうが現実的です。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/dataverse-autonumber03.jUX6qkAZ_1oHMfB.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;patch関数でauto-number列への書き込みはできません&quot;&gt;Patch関数でAuto-number列への書き込みはできません&lt;/h2&gt;
&lt;p&gt;Power AppsのPatch関数でレコードを新規作成するとき、Auto-number列を指定しようとするとエラーになります。Auto-numberは読み取り専用の自動採番列なので、アプリ側から値を指定できない仕様です。&lt;/p&gt;
&lt;p&gt;解決策はシンプルで、Patchのレコード定義からAuto-number列を省略するだけです。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// ❌ Auto-number列に値を入れようとするとエラー&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Patch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    案件テーブル,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Defaults&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(案件テーブル),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        管理番号: &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;0001&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,   &lt;/span&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// ← これがNGの原因&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        件名: TextInput1.Text,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        担当者: Dropdown1.Selected.Value&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// ✅ 省略するだけでOK。採番はDataverseが自動でやってくれる&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Patch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    案件テーブル,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Defaults&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(案件テーブル),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        件名: TextInput1.Text,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        担当者: Dropdown1.Selected.Value&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Patchの書き方全般については&lt;a href=&quot;/powerapps-patch-function/&quot;&gt;Patch関数の使い方&lt;/a&gt;の記事をあわせて参照してください。&lt;/p&gt;
&lt;h2 id=&quot;どうしても数値として使える連番が欲しい場合&quot;&gt;どうしても数値として使える連番が欲しい場合&lt;/h2&gt;
&lt;p&gt;SharePointのIDのように数値として扱える連番が業務上どうしても必要な場合、Auto-numberではなく数値型の列を別途用意するのが現実的です。いくつかの設計パターンを紹介します。&lt;/p&gt;
&lt;h3 id=&quot;パターン1power-automateフローで採番する&quot;&gt;パターン1：Power Automateフローで採番する&lt;/h3&gt;
&lt;p&gt;レコード作成時にPower Automateをトリガーとして起動し、フロー内で現在の最大値を取得して+1した値を数値型列に書き込む方法です。処理の流れとしては次のようになります。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Dataverseの行が作成されたときにフローを起動&lt;/li&gt;
&lt;li&gt;テーブル全体の行を取得し、採番列の最大値を取得&lt;/li&gt;
&lt;li&gt;最大値+1を計算して、対象レコードの採番列に書き込む&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;同時に複数のレコードが作成される環境では採番の重複が起きるリスクがあります。同時アクセスが少ない業務アプリであれば現実的に問題になることは少ないですが、設計の前提として把握しておく必要があります。&lt;/p&gt;
&lt;h3 id=&quot;パターン2表示用と管理用を分けて持つ&quot;&gt;パターン2：表示用と管理用を分けて持つ&lt;/h3&gt;
&lt;p&gt;Auto-number列はあくまで表示・印刷用の採番として使い、内部の管理キーはGUIDのままにする設計です。フローの条件分岐や検索キーにはGUIDを使い、Auto-numberは帳票に印刷する申請番号としてだけ機能させます。DataverseはGUIDで完結できる設計なので、この割り切りが一番シンプルです。&lt;/p&gt;
&lt;p&gt;Power AppsからPower Automateを連携させる基本的な設計については&lt;a href=&quot;/powerapps-powerautomate/&quot;&gt;Power AppsとPower Automateの連携記事&lt;/a&gt;も参考にしてください。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;DataverseのAuto-number列は見た目が数字でも型はテキスト（文字列）です&lt;/li&gt;
&lt;li&gt;フロー条件での数値比較には使えません。int()変換が必要で、プレフィックス付きフォーマットではさらに複雑になります&lt;/li&gt;
&lt;li&gt;Patch関数での書き込みは不要で、省略するのが正解です&lt;/li&gt;
&lt;li&gt;数値として使える連番が必要な場合は、数値型の別列を用意してフローで採番するか、GUIDで割り切る設計を選びましょう&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;仕様を知った上で使うぶんには、表示用の採番列として十分活躍してくれます。SharePointのIDとは別物だと割り切って、Dataverse本来の設計に慣れていきましょう。&lt;/p&gt;
&lt;p&gt;Dataverseの全体像はDataverseをSharePoint経験者向けに完全解説にまとめています。&lt;/p&gt;</content:encoded></item><item><title>Dataverseの列データ型まとめ｜SharePoint対応表つきで全型を解説</title><link>https://shiminkaihatsu.com/dataverse-column-types/</link><guid isPermaLink="true">https://shiminkaihatsu.com/dataverse-column-types/</guid><description>Dataverseの列データ型まとめ｜SharePoint対応表つきで全型を解説</description><pubDate>Wed, 25 Mar 2026 17:30:31 GMT</pubDate><content:encoded>&lt;p&gt;SharePointで使える列の種類をDataverseで探すと、似ているようで微妙に違う。そのギャップを整理したのがこの記事です。&lt;/p&gt;
&lt;p&gt;Dataverseには10種類以上の列データ型があります。SharePointの列と対応させながら、それぞれの特徴と注意点を一通り把握しておくと、テーブル設計のときに迷わなくなります。個人的には、最初の1〜2テーブルを作るときにこの一覧をチェックしながら進めると後悔が少ないと思っています。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/dataverse-column-types01.DRGNiZQC_LnqRX.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;テキスト型単一行複数行&quot;&gt;テキスト型（単一行・複数行）&lt;/h2&gt;
&lt;h3 id=&quot;単一行テキストデフォルト100文字に注意&quot;&gt;単一行テキスト：デフォルト100文字に注意&lt;/h3&gt;
&lt;p&gt;SharePointの単一行テキストはデフォルト255文字ですが、Dataverseは100文字がデフォルトです。変更しなければ100文字を超える入力が切り捨てられます。最大400文字まで拡張できますが、SharePointから移行するつもりで設計するなら255文字に揃えておくのが無難です。変更手順と文字数制限の詳細については&lt;a href=&quot;/dataverse-text-limit/&quot;&gt;Dataverseのテキスト列文字数設定の記事&lt;/a&gt;でまとめています。&lt;/p&gt;
&lt;p&gt;また、Email・電話・URLなどのフォーマット指定が用意されていますが、Power Appsのキャンバスアプリでは見た目にほぼ反映されません。モデル駆動型アプリ（Model-driven App）を使う場合は機能しますが、キャンバスアプリ主体であれば気にしなくてよいです。&lt;/p&gt;
&lt;h3 id=&quot;複数行テキストsharepointより大きな上限を持つ&quot;&gt;複数行テキスト：SharePointより大きな上限を持つ&lt;/h3&gt;
&lt;p&gt;デフォルト1000文字で、最大100万文字まで対応しています。SharePointの複数行テキスト（約65,000文字）より上限が大きいです。議事録や長文メモをDataverseで管理する用途には十分すぎるほどの容量です。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/dataverse-column-types02.CHTed_C4_Z1RDLy9.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;数値型3種類ありますが普段はdecimalで十分&quot;&gt;数値型：3種類ありますが普段はdecimalで十分&lt;/h2&gt;
&lt;p&gt;数値型はWhole number（整数）・Decimal number（小数）・Floating-point number（浮動小数点）の3種類から選べます。&lt;/p&gt;
&lt;p&gt;Whole numberは年齢・個数・順位など小数点以下が不要な数値向けです。DecimalとFloatingは小数を扱える点では同じですが、精度が異なります。Decimalは正確な桁数を保持する方式なので、金額・パーセンテージなど精度が必要な場面に向いています。Floatingは科学的計算向けの方式で、誤差が出ることがあります。業務アプリの数値入力欄であれば、DecimalかWhole numberを選んでおけば間違いありません。&lt;/p&gt;
&lt;h2 id=&quot;日付型date-and-time-と-date-only-の2種類&quot;&gt;日付型：Date and Time と Date Only の2種類&lt;/h2&gt;
&lt;p&gt;日付型はDate and Time（日付と時刻）とDate Only（日付のみ）の2種類から選べます。一見シンプルですが、落とし穴があります。Date Onlyを選んだとしても、Dataverseの内部では深夜0時を含む日時として保存されます。タイムゾーンの設定を誤ると、見かけ上は同じ日付でも時差の影響で1日ずれて表示される現象が起きます。&lt;/p&gt;
&lt;p&gt;この問題を防ぐには、列作成時にadvanced optionsのTime Zone設定でTime Zone Independentを選ぶ必要があります。この設定は作成後に変更できません。詳しい仕組みと対処法は&lt;a href=&quot;/dataverse-date-timezone/&quot;&gt;Dataverseの日付タイムゾーン設定の記事&lt;/a&gt;で解説しています。日付列を作るときは必ずこの記事を確認してから設定するようにしています。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/dataverse-column-types03.CVqNjsRv_Z1pbAXB.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;670&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;選択肢choicesharepointの選択肢とほぼ同じですが複数選択は扱いが複雑&quot;&gt;選択肢（Choice）：SharePointの選択肢とほぼ同じですが複数選択は扱いが複雑&lt;/h2&gt;
&lt;p&gt;SharePointの選択肢列と似た感覚で使えます。選択肢の値・ラベルを設定して、ドロップダウンで選ばせる列です。Dataverseでは色を設定する機能もありますが、キャンバスアプリでは色の情報が反映されません。モデル駆動型アプリのみ色が使われる仕様です。&lt;/p&gt;
&lt;p&gt;注意が必要なのは複数選択対応の選択肢（Multi-select Choice）です。SharePointの複数選択と見た目は似ていますが、Dataverse内部ではテーブル構造として保存されるため、Power AutomateやPower Apps数式での取り扱いが複雑になります。単純な一択選択肢で事足りる場合は、Multi-select Choiceを使わないほうが扱いやすいです。&lt;/p&gt;
&lt;h2 id=&quot;yesnosharepointのbooleantruefalseとは別物&quot;&gt;Yes/No：SharePointのBoolean（true/false）とは別物&lt;/h2&gt;
&lt;p&gt;SharePointのYes/No列はBoolean型（true/false）ですが、DataverseのYes/No列は選択肢型の一種です。Power Appsの数式でif(YesNo列, …)と書いても思い通りに動きません。詳しい扱い方は&lt;a href=&quot;/dataverse-yesno/&quot;&gt;DataverseのYes/No列の記事&lt;/a&gt;でまとめていますので、ぜひ一読してから使ってください。&lt;/p&gt;
&lt;h2 id=&quot;auto-number見た目は数字でも型はテキスト&quot;&gt;Auto-number：見た目は数字でも型はテキスト&lt;/h2&gt;
&lt;p&gt;自動採番の列です。採番ルールをフォーマット文字列で柔軟に設定できます。ただし型はテキスト（文字列）なので、Power Automateのフローで数値比較をしようとするとエラーになります。SharePointのID列（整数型の連番）とは別物です。仕組みと対処法は&lt;a href=&quot;/dataverse-autonumber/&quot;&gt;DataverseのAuto-number列の記事&lt;/a&gt;で詳しく説明しています。&lt;/p&gt;
&lt;h2 id=&quot;通貨currency追加すると関連列が4本自動生成される&quot;&gt;通貨（Currency）：追加すると関連列が4本自動生成される&lt;/h2&gt;
&lt;p&gt;金額を扱う列です。多通貨対応のため、通貨列を1本追加すると関連列が約4本自動生成されます。具体的には、基準通貨での金額・換算レート・使用通貨の種類などが裏側で追加されます。初めて通貨列を作ると突然テーブルに見知らぬ列が増えて驚きます。自分も最初に見たとき何が起きたのかわからず焦りました。業務で多通貨対応が必要な場合以外は、単純な数値型（Decimal number）で代用するほうが混乱を避けられます。&lt;/p&gt;
&lt;h2 id=&quot;ルックアップlookupテーブル同士のリレーションを作る&quot;&gt;ルックアップ（Lookup）：テーブル同士のリレーションを作る&lt;/h2&gt;
&lt;p&gt;別のテーブルを参照する列です。SharePointのルックアップ列と概念は似ていますが、Dataverseのルックアップはリレーション（多対一の関係）を自動で生成する本格的なリレーショナル設計です。&lt;/p&gt;
&lt;p&gt;ルックアップを設定すると、ドロップダウンに参照先テーブルのプライマリ列（Primary column）の値が表示されます。SharePointは表示列を後から選び直せますが、Dataverseはプライマリ列がそのまま使われます。プライマリ列の設計が後から変更できないため、参照テーブルを作るときに何をプライマリ列にするかを先に考えておく必要があります。&lt;a href=&quot;/dataverse-lookup/&quot;&gt;ルックアップ列の詳しい使い方&lt;/a&gt;は別記事で解説しています。&lt;/p&gt;
&lt;p&gt;また、Power Appsの数式でルックアップ値を参照するときとSharePointのルックアップとでは書き方が異なります。&lt;a href=&quot;/powerapps-filter-search-lookup/&quot;&gt;Filter・Search・LookUp関数の記事&lt;/a&gt;に実例があるので参照してください。&lt;/p&gt;
&lt;h2 id=&quot;数式formulapower-fxで計算列を作れる&quot;&gt;数式（Formula）：Power FXで計算列を作れる&lt;/h2&gt;
&lt;p&gt;Power FXの数式を使って計算列を作れます。たとえば姓と名を結合してフルネーム列を作ったり、日付の差分を日数で出したりといった用途に使います。Excelの計算列に近い感覚で設定できますが、使える関数の種類がまだ限られていて、今後拡充される予定の機能です。現時点ではシンプルな計算列であれば十分機能します。&lt;/p&gt;
&lt;h2 id=&quot;sharepoint列との対応表&quot;&gt;SharePoint列との対応表&lt;/h2&gt;
&lt;p&gt;まとめとして、SharePointとDataverseの列データ型の対応を整理します。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;SharePoint列&lt;/th&gt;
&lt;th&gt;Dataverse相当&lt;/th&gt;
&lt;th&gt;主な注意点&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;一行テキスト（255文字）&lt;/td&gt;
&lt;td&gt;単一行テキスト（100文字）&lt;/td&gt;
&lt;td&gt;デフォルト文字数が少ない。255に変更推奨&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;複数行テキスト&lt;/td&gt;
&lt;td&gt;複数行テキスト&lt;/td&gt;
&lt;td&gt;上限はDataverseのほうが大きい&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;数値&lt;/td&gt;
&lt;td&gt;整数 / 小数 / 浮動小数点&lt;/td&gt;
&lt;td&gt;精度によってDecimalかWhole numberを選ぶ&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;通貨&lt;/td&gt;
&lt;td&gt;通貨（Currency）&lt;/td&gt;
&lt;td&gt;関連列が自動追加される。Decimalで代用も可&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;日付と時刻&lt;/td&gt;
&lt;td&gt;Date and Time / Date Only&lt;/td&gt;
&lt;td&gt;タイムゾーン設定を必ず確認。後から変更不可&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;選択肢&lt;/td&gt;
&lt;td&gt;Choice&lt;/td&gt;
&lt;td&gt;色設定はキャンバスアプリでは使われない&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Yes/No（Boolean）&lt;/td&gt;
&lt;td&gt;Yes/No（Choice型）&lt;/td&gt;
&lt;td&gt;SharePointのBoolean(true/false)と別物&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ルックアップ&lt;/td&gt;
&lt;td&gt;Lookup&lt;/td&gt;
&lt;td&gt;リレーションを自動生成。Primary column設計が鍵&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ID（自動採番・整数）&lt;/td&gt;
&lt;td&gt;Auto-number（テキスト型）&lt;/td&gt;
&lt;td&gt;数値比較できない。GUIDが本来の主キー&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;計算列&lt;/td&gt;
&lt;td&gt;Formula（数式）&lt;/td&gt;
&lt;td&gt;Power FXで設定。使える関数は現時点で限定的&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;SharePointのリストとDataverseを比較したい場合は&lt;a href=&quot;/splist_mslist/&quot;&gt;SharePointリストとMicrosoft Listsの記事&lt;/a&gt;も参考にしてください。またExcelをデータソースとして使う場合との違いについては&lt;a href=&quot;/excel-datasource/&quot;&gt;Excelデータソースの記事&lt;/a&gt;と合わせて読むと整理しやすいです。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;テキスト型はデフォルト100文字なので、SharePoint移行時は255文字への変更を検討しましょう&lt;/li&gt;
&lt;li&gt;数値型はDecimal numberかWhole numberを選んでおけば業務アプリでは十分です&lt;/li&gt;
&lt;li&gt;日付型はタイムゾーン設定が後から変更できません。作成前に必ず確認してください&lt;/li&gt;
&lt;li&gt;Yes/NoとAuto-numberはSharePointとは別物です。それぞれの専用記事で仕組みを把握しておくと詰まらなくなります&lt;/li&gt;
&lt;li&gt;ルックアップは参照先テーブルのプライマリ列設計が後から変えられないため、設計段階で何を表示名にするかを決めておきましょう&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;列の種類を一通り把握できると、テーブル設計の打率が格段に上がります。最初は全部理解しようとせず、まず作るテーブルに使いそうな型だけをおさえて、必要に応じてこの記事に戻ってくる使い方で十分です。&lt;/p&gt;
&lt;p&gt;Dataverseの全体像はDataverseをSharePoint経験者向けに完全解説にまとめています。&lt;/p&gt;</content:encoded></item><item><title>Dataverseで日付が1日ずれる原因と解決策｜タイムゾーン設定の落とし穴</title><link>https://shiminkaihatsu.com/dataverse-date-timezone/</link><guid isPermaLink="true">https://shiminkaihatsu.com/dataverse-date-timezone/</guid><description>Dataverseで日付が1日ずれる原因と解決策｜タイムゾーン設定の落とし穴</description><pubDate>Wed, 25 Mar 2026 17:30:32 GMT</pubDate><content:encoded>&lt;p&gt;Dataverseの日付列をDate Only（日付のみ）に設定したのに、Power Appsで表示すると1日前にずれてしまう。このバグっぽい挙動を経験したことがある方は多いと思います。原因はタイムゾーンの設定です。そして厄介なことに、列を作成した後からは変更できません。&lt;/p&gt;
&lt;p&gt;この記事では、なぜDate Onlyでもずれるのかの仕組みと、列作成時に必ず設定すべき Time Zone Independent の選び方を解説します。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/dataverse-date-timezone01.D5p3L6mY_23MUXS.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;なぜdate-onlyでも日付がずれるのか&quot;&gt;なぜDate Onlyでも日付がずれるのか&lt;/h2&gt;
&lt;h3 id=&quot;dataverseの内部保存の仕組み&quot;&gt;Dataverseの内部保存の仕組み&lt;/h3&gt;
&lt;p&gt;Dataverseの日付列は、内部では日付と時刻をセットで保存しています。Date Only という表示設定は、あくまでユーザーインターフェース上で時刻部分を隠しているだけです。&lt;/p&gt;
&lt;p&gt;たとえば2026年3月22日として入力した値は、内部では 2026-03-22T00:00:00Z（深夜0時のUTC）として保存されています。このときタイムゾーンがどう扱われるかが、ずれの根本原因です。&lt;/p&gt;
&lt;h3 id=&quot;デフォルト設定-user-local-の問題&quot;&gt;デフォルト設定 User Local の問題&lt;/h3&gt;
&lt;p&gt;Dataverseの日付列にはタイムゾーンの動作という設定があり、デフォルトは User Local（ユーザーのローカルタイム）になっています。User Localの動作はこのような流れです。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;日本（UTC+9）のユーザーが2026年3月22日を入力する&lt;/li&gt;
&lt;li&gt;Dataverseは2026-03-22T00:00:00+09:00として解釈し、UTCに変換して2026-03-21T15:00:00Zで保存する&lt;/li&gt;
&lt;li&gt;Power Appsでこの値を表示すると、UTCの値にユーザーのタイムゾーンを適用して2026年3月22日と表示される&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;日本国内だけで使うなら一見問題ありません。しかし Date Only として扱っているにもかかわらず、タイムゾーン変換が走ることで、ブラウザの設定や環境によって表示がずれることがあります。特に2つの問題が起きやすいです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Power Automate フローで日付を取り出すと、内部保存のUTC値が返ってくるため日本時間より9時間前になる&lt;/li&gt;
&lt;li&gt;異なるタイムゾーンの環境（例：海外に設定されたテナント）で開くと前日の日付として表示される&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/dataverse-date-timezone02.CyykKk2r_A2sva.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;解決策列作成時に-time-zone-independent-を選ぶ&quot;&gt;解決策：列作成時に Time Zone Independent を選ぶ&lt;/h2&gt;
&lt;h3 id=&quot;time-zone-independentとは&quot;&gt;Time Zone Independentとは&lt;/h3&gt;
&lt;p&gt;Time Zone Independent（タイムゾーン非依存）を選ぶと、入力した日付をそのままの値でDataverseに保存します。タイムゾーン変換が一切行われないため、2026年3月22日と入力したら2026-03-22としてそのまま保存されます。&lt;/p&gt;
&lt;p&gt;日付だけを管理したいユースケース（生年月日・期限日・契約日など）では、Time Zone Independentが正解です。&lt;/p&gt;
&lt;h3 id=&quot;設定手順&quot;&gt;設定手順&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Dataverseでテーブルを開き、日付列を新規作成します&lt;/li&gt;
&lt;li&gt;データ型で「日付と時刻（Date and Time）」または「日付のみ（Date Only）」を選びます&lt;/li&gt;
&lt;li&gt;詳細オプション（Advanced options）を展開します&lt;/li&gt;
&lt;li&gt;タイムゾーンの動作（Time zone adjustment）をTime Zone Independentに変更します&lt;/li&gt;
&lt;li&gt;保存してCreate（作成）します&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;詳細オプションを展開しないとこの設定が表示されないので注意が必要です。デフォルトのUser Local のまま気づかずに列を作ってしまうケースが多いです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/dataverse-date-timezone03.C6_UagYD_Z1PpVk6.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;作成後に変更できないという最大の注意点&quot;&gt;作成後に変更できない、という最大の注意点&lt;/h2&gt;
&lt;p&gt;このタイムゾーン設定は、列を作成した後に変更できません。User Localで作ってしまったら、既存のデータを別列に移し替えて、元の列を削除し、新しくTime Zone Independentで作り直すしかありません。&lt;/p&gt;
&lt;p&gt;Dataverseを初めて触ったとき、この制約を知らずにUser Localで列を大量に作ってしまい、後で全部作り直した経験があります。設計の初期段階でこの選択をしっかりしておくかどうかで、後の手間がかなり変わります。テーブル設計フロー全体については、&lt;a href=&quot;/dataverse-table-vs-list/&quot;&gt;SharePointと違うDataverseのテーブル作成フロー&lt;/a&gt;でまとめています。&lt;/p&gt;
&lt;h2 id=&quot;power-automateフローでの注意点&quot;&gt;Power Automateフローでの注意点&lt;/h2&gt;
&lt;p&gt;Time Zone Independentで列を作成しても、Power Automateフローで日付を扱う際は別の注意が必要です。フローで日付列の値を取得すると 2026-03-22T00:00:00Z のようなUTC形式で返ってくることがあります。この値を条件式や通知メッセージで使う場合、convertTimeZone()や formatDateTime()関数で適切な書式に変換する必要があります。&lt;/p&gt;
&lt;p&gt;Dataverseの日付がフローで期待どおりに動かないときは、まず User LocalかTime Zone Independentかを確認し、次にフロー内の変数の型を確認するのが手順です。変数の型の扱い方については&lt;a href=&quot;/powerautomate-variables/&quot;&gt;Power Automateで変数を使いこなす記事&lt;/a&gt;が参考になります。&lt;/p&gt;
&lt;h2 id=&quot;タイムゾーン設定の選び方まとめ&quot;&gt;タイムゾーン設定の選び方まとめ&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;設定&lt;/th&gt;
&lt;th&gt;動作&lt;/th&gt;
&lt;th&gt;使うべきケース&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;User Local（デフォルト）&lt;/td&gt;
&lt;td&gt;入力時のタイムゾーンを考慮してUTC変換&lt;/td&gt;
&lt;td&gt;時刻まで含めて正確に管理したいとき&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Time Zone Independent&lt;/td&gt;
&lt;td&gt;入力値をそのまま保存、変換なし&lt;/td&gt;
&lt;td&gt;日付のみを管理するとき（期限・生年月日など）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;UTC&lt;/td&gt;
&lt;td&gt;UTC固定で保存&lt;/td&gt;
&lt;td&gt;グローバルなシステム連携など特殊なケース&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;日付のみを管理するなら Time Zone Independent 一択です。これだけ覚えておけばほとんどのケースをカバーできます。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;DataverseのDate Only列でも、タイムゾーン設定が「User Local」だと日付がずれる可能性があります&lt;/li&gt;
&lt;li&gt;日付のみ管理するなら、列作成時に詳細オプション→Time Zone Independent を選びます&lt;/li&gt;
&lt;li&gt;この設定は列作成後に変更できないため、テーブル設計の段階で必ず確認してください&lt;/li&gt;
&lt;li&gt;Power Automateフローで日付を扱う場合はさらに書式変換が必要になる場合があります&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Dataverseの全体像はDataverseをSharePoint経験者向けに完全解説にまとめています。&lt;/p&gt;</content:encoded></item><item><title>Dataverseの環境とは何か。テーブルが見えない原因の8割はここにあります</title><link>https://shiminkaihatsu.com/dataverse-environment/</link><guid isPermaLink="true">https://shiminkaihatsu.com/dataverse-environment/</guid><description>Dataverseの環境とは何か。テーブルが見えない原因の8割はここにあります</description><pubDate>Wed, 25 Mar 2026 17:30:31 GMT</pubDate><content:encoded>&lt;p&gt;Dataverseを使い始めた人が最初にぶつかる壁の一つが、環境（Environment）という概念です。作ったはずのテーブルが見えない、アプリが動かない、フローがつながらない。これらのトラブルの多くは、環境を正しく理解できていないことが原因です。&lt;/p&gt;
&lt;p&gt;SharePointを使い慣れている方には、環境をSharePointのサイトコレクションと同じ感覚で捉えると理解しやすいです。この記事で環境の仕組みと実際の使い方を整理します。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/dataverse-environment01.DNCl5PNW_Z1iU8Ut.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;環境とはデータベースの境界線です&quot;&gt;環境とはデータベースの境界線です&lt;/h2&gt;
&lt;h3 id=&quot;sharepointのサイトコレクションで考える&quot;&gt;SharePointのサイトコレクションで考える&lt;/h3&gt;
&lt;p&gt;SharePointには、サイトコレクションという単位があります。サイトコレクションが違えば、そこにあるリストもファイルも別の管理領域にあります。異なるサイトコレクション間でリストを参照するには特別な設定が必要です。&lt;/p&gt;
&lt;p&gt;Dataverseの環境はほぼ同じ考え方です。環境が違えば、テーブルも別物です。環境Aで作ったテーブルは、環境Bからは見えません。アプリやフローは作成した環境に紐づいているので、環境を間違えて作ってしまうと、テーブルに接続できなくなります。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;概念&lt;/th&gt;
&lt;th&gt;SharePoint&lt;/th&gt;
&lt;th&gt;Dataverse&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;データの管理単位&lt;/td&gt;
&lt;td&gt;サイトコレクション&lt;/td&gt;
&lt;td&gt;環境（Environment）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;中にあるもの&lt;/td&gt;
&lt;td&gt;リスト・ライブラリ・サイト&lt;/td&gt;
&lt;td&gt;テーブル・フロー・アプリ&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;別の単位との関係&lt;/td&gt;
&lt;td&gt;基本的に分離（クロスサイトは特別設定が必要）&lt;/td&gt;
&lt;td&gt;完全に分離（環境をまたいだ参照は原則できない）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;誰が作れるか&lt;/td&gt;
&lt;td&gt;サイトコレクション管理者&lt;/td&gt;
&lt;td&gt;管理センターの権限保有者 or 開発者プランユーザー&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&quot;環境の中に何が入っているか&quot;&gt;環境の中に何が入っているか&lt;/h3&gt;
&lt;p&gt;一つの環境の中には、Dataverseのテーブルだけでなく、その環境に紐づくPower Appsのアプリ、Power Automateのフロー、Power BIのレポートなども含まれます。つまり環境は、Power Platformで作るものすべての入れ物です。&lt;/p&gt;
&lt;p&gt;アプリを作るときは必ず特定の環境の中に作ることになります。そのアプリがDataverseのテーブルにアクセスできるのは、同じ環境のテーブルだけです。これを知らずに異なる環境でアプリとテーブルを作ってしまうと、接続できなくて詰まります。自分も最初のころにやらかしました。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/dataverse-environment02.DrZUxR21_ZuImiw.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;環境の種類と使い分け&quot;&gt;環境の種類と使い分け&lt;/h2&gt;
&lt;h3 id=&quot;デフォルト環境は触らないほうが無難です&quot;&gt;デフォルト環境は触らないほうが無難です&lt;/h3&gt;
&lt;p&gt;テナントに最初から存在する共有の環境です。テナント内の全ユーザーが自動的にアクセスできるため、誰でもテーブルやアプリを作れます。&lt;/p&gt;
&lt;p&gt;一見便利そうですが、管理の観点からは問題が起きやすいです。誰が作ったかわからないテーブルが増えていき、データの品質もアクセス制御も担保しにくくなります。社内全員が書き込み権限を持つSharePointリストを想像してみてください。整理されずに情報が散乱していく状況に近いです。&lt;/p&gt;
&lt;p&gt;本番のアプリやデータは、デフォルト環境ではなく専用の本番環境で管理することをおすすめします。デフォルト環境は学習・実験用と割り切るのが現実的です。&lt;/p&gt;
&lt;h3 id=&quot;開発者環境は最初はここで始めましょう&quot;&gt;開発者環境は最初はここで始めましょう&lt;/h3&gt;
&lt;p&gt;Microsoft Power Apps Developer Planに登録すると、自分専用の開発者環境を無料で作れます。この環境は自分しかアクセスできないので、デフォルト環境を汚すことなく自由に実験できます。&lt;/p&gt;
&lt;p&gt;Dataverseを初めて触る方は、まず開発者環境を作ってそこで作業することを強くおすすめします。失敗しても自分の環境の中だけで完結しますし、テーブルを壊しても作り直せます。社内のデフォルト環境で練習すると、意図せず他の人に影響が出ることがあります。&lt;/p&gt;
&lt;h4 id=&quot;開発者環境の作り方&quot;&gt;開発者環境の作り方&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;Microsoft Power Apps Developer Planに登録する（&lt;a href=&quot;https://powerapps.microsoft.com/developerplan/&quot;&gt;公式サイト&lt;/a&gt;）&lt;/li&gt;
&lt;li&gt;make.powerapps.com を開く&lt;/li&gt;
&lt;li&gt;画面右上の環境名をクリックして環境一覧を表示する&lt;/li&gt;
&lt;li&gt;一覧の中に（自分の名前）の環境が表示されていれば作成完了&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Developer PlanはDataverseも含めて無料で使えますが、本番公開はできません。あくまで学習・検証用です。本番運用に移行するときはPremiumライセンスが必要になります。ライセンス周りの詳細については&lt;a href=&quot;/powerapps-license/&quot;&gt;Power Appsのライセンス解説記事&lt;/a&gt;を参照してください。&lt;/p&gt;
&lt;h3 id=&quot;本番環境は管理者が作る正式な器&quot;&gt;本番環境は管理者が作る正式な器&lt;/h3&gt;
&lt;p&gt;組織のPower Platform管理者がPower Platform管理センター（admin.powerplatform.microsoft.com）で作成する環境です。アクセス権限・データ保護ポリシー・Dataverseの有効化などを管理者が設定します。&lt;/p&gt;
&lt;p&gt;本番環境はユーザーが勝手に作れないよう、管理センターのロールで制御するのが一般的です。開発環境・テスト環境・本番環境の3つを分けて運用するのが理想ですが、小規模な組織では開発者環境と本番環境の2つで運用することも多いです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/dataverse-environment03.Dx9ywnth_8YqX5.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;テーブルが見えないときの4つの確認ポイント&quot;&gt;テーブルが見えないときの4つの確認ポイント&lt;/h2&gt;
&lt;p&gt;make.powerapps.com でテーブルを探しても見当たらない。このトラブルは環境が原因のことがほとんどです。以下の順番で確認してみてください。&lt;/p&gt;
&lt;h3 id=&quot;確認1今いる環境は正しいか&quot;&gt;確認1：今いる環境は正しいか&lt;/h3&gt;
&lt;p&gt;画面右上に環境名が表示されています。ここが期待している環境名になっているか確認します。違う場合はクリックして正しい環境を選択します。環境の切り替えだけで解決することが一番多いです。&lt;/p&gt;
&lt;h3 id=&quot;確認2その環境にdataverseが有効化されているか&quot;&gt;確認2：その環境にDataverseが有効化されているか&lt;/h3&gt;
&lt;p&gt;環境が存在していても、Dataverseデータベースが有効化されていない環境があります。特にデフォルト環境以外の手動で作った環境では、Dataverseを後から追加する設定が必要なことがあります。Power Platform管理センターで対象の環境を開き、Dataverseの欄が有効になっているか確認します。有効化するには管理者権限が必要です。&lt;/p&gt;
&lt;h3 id=&quot;確認3アクセス権限はあるか&quot;&gt;確認3：アクセス権限はあるか&lt;/h3&gt;
&lt;p&gt;本番環境など管理者がアクセス制御を設定している環境では、自分がテーブルにアクセスする権限を持っていないことがあります。環境管理者に確認して、必要なロールを付与してもらいます。&lt;/p&gt;
&lt;h3 id=&quot;確認4テーブル自体が存在するか&quot;&gt;確認4：テーブル自体が存在するか&lt;/h3&gt;
&lt;p&gt;最後の確認です。そのテーブルを作ったのは本当にこの環境だったでしょうか。別の環境で作成していた場合、この環境にはテーブルがありません。開発者環境と本番環境を混同して作業していたというケースもよくあります。&lt;/p&gt;
&lt;h2 id=&quot;環境の切り替え方と確認の習慣&quot;&gt;環境の切り替え方と確認の習慣&lt;/h2&gt;
&lt;p&gt;make.powerapps.com を開いたとき、自動的にどの環境が選択されるかは前回ログアウトした時点の環境によって変わります。毎回右上の環境名を確認する習慣をつけておくと、環境の混同によるトラブルを防げます。&lt;/p&gt;
&lt;p&gt;社内でPower Platformを複数のプロジェクトで使い始めると、環境の数も増えていきます。本番A・本番B・開発用・個人実験用……と増えていくので、環境の命名規則を最初から決めておくのがおすすめです。SharePointのサイト名の命名規則と同じ感覚で決めると整理しやすいです。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Dataverseの環境はSharePointのサイトコレクションと同じ概念です。環境が違えば、テーブルもアプリも別の管理領域にあります&lt;/li&gt;
&lt;li&gt;テーブルが見えないときは、まず画面右上の環境名を確認します。環境の切り替えで解決することが最多です&lt;/li&gt;
&lt;li&gt;Dataverseを初めて使う場合は、Developer Plan（無料）で開発者環境を作ってそこで作業を始めるのが安全です&lt;/li&gt;
&lt;li&gt;本番運用には管理者が作成した専用の環境とPremiumライセンスが必要です&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;環境の概念さえ理解できれば、Dataverse周りのトラブルシューティングがかなり楽になります。SharePointのサイトコレクションと対応させながら、感覚をつかんでいきましょう。&lt;/p&gt;
&lt;p&gt;Dataverseの全体像はDataverseをSharePoint経験者向けに完全解説にまとめています。&lt;/p&gt;</content:encoded></item><item><title>DataverseのExcelライブ編集機能｜バルク編集とデータ構造確認に使う隠れ技</title><link>https://shiminkaihatsu.com/dataverse-excel-edit/</link><guid isPermaLink="true">https://shiminkaihatsu.com/dataverse-excel-edit/</guid><description>DataverseのExcelライブ編集機能｜バルク編集とデータ構造確認に使う隠れ技</description><pubDate>Wed, 25 Mar 2026 17:30:33 GMT</pubDate><content:encoded>&lt;p&gt;DataverseのデータはExcelで直接編集できます。エクスポートしてインポートし直す必要はありません。&lt;/p&gt;
&lt;p&gt;このExcelライブ編集という機能、知っている人が意外と少いです。Dataverseを使い始めた人に教えると、ほぼ全員が驚きます。単なるデータ編集手段というだけでなく、GUIDの実態や Created by 列の中身など、Dataverseの内部構造を生データで確認できる唯一の手段でもあります。バルク編集とデバッグの両方で使える機能です。&lt;/p&gt;
&lt;h2 id=&quot;excelライブ編集とは何か&quot;&gt;Excelライブ編集とは何か&lt;/h2&gt;
&lt;h3 id=&quot;エクスポートではなくライブ接続&quot;&gt;エクスポートではなく「ライブ接続」&lt;/h3&gt;
&lt;p&gt;まず最も重要な点を先に言います。ExcelにDataverseのデータが表示されますが、これはスナップショットのコピーではありません。Power Appsアドイン経由でDataverseに直接接続した状態です。&lt;/p&gt;
&lt;p&gt;Excelで編集して保存すると、その変更が直接Dataverseに書き戻されます。SharePointでExcelをエクスポートしてデータをコピーし、またインポートする——という手順は不要です。この仕組みを理解していないと、後述するPublishボタンを押し忘れてデータが反映されないという落とし穴にはまります。&lt;/p&gt;
&lt;p&gt;Excelをデータソースとしてそのまま使う方法は別の話です。DataverseのExcelライブ編集はDataverseを主として使い、その操作・確認UIとしてExcelを使う位置づけです。Excelをデータソースにする場合との違いは&lt;a href=&quot;/excel-datasource/&quot;&gt;ExcelをPower Appsデータソースにする記事&lt;/a&gt;に整理しています。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/dataverse-excel-edit01.DHnYQ4sE_1TLrq2.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;基本的な操作手順&quot;&gt;基本的な操作手順&lt;/h2&gt;
&lt;h3 id=&quot;excelを開くまで&quot;&gt;Excelを開くまで&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;make.powerapps.com を開き、テーブル一覧から対象のテーブルを選択する&lt;/li&gt;
&lt;li&gt;画面上部の Edit ボタンをクリックし、メニューから Edit data in Excel を選ぶ&lt;/li&gt;
&lt;li&gt;.xlsx ファイルのダウンロードが始まるので開く&lt;/li&gt;
&lt;li&gt;Excelが起動したらPower Appsアドイン（画面右側）のサインインを求められる&lt;/li&gt;
&lt;li&gt;Microsoft 365アカウントでサインインして接続を確認する&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;初回はアドインのサインインが必要です。2回目以降は自動で接続されることが多いですが、アカウントが変わった場合はサインインし直しが必要です。&lt;/p&gt;
&lt;h3 id=&quot;データを編集してpublishする&quot;&gt;データを編集してPublishする&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Excel上でデータを直接編集する（セルをクリックして書き換えるだけ）&lt;/li&gt;
&lt;li&gt;新規行の追加も可能（最終行の下に入力する）&lt;/li&gt;
&lt;li&gt;編集が終わったら、Excelの右側に表示されているPower Appsアドインパネルで Publish ボタンをクリックする&lt;/li&gt;
&lt;li&gt;成功メッセージが表示されたらDataverseに反映完了&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Excel側で保存（Ctrl+S）をしても、Dataverseには反映されません。Publishボタンを押して初めて書き戻されます。この違いを最初に教わらなかった人がPublishを知らずに閉じてしまい、入力したデータが消えた——という話はよく聞きます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/dataverse-excel-edit02.BDnHPRFQ_1qRmRP.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;活用シーンバルク編集大量データの一括修正&quot;&gt;活用シーン①：バルク編集（大量データの一括修正）&lt;/h2&gt;
&lt;p&gt;Power Appsアプリ上でレコードをひとつひとつ編集するのは大量件数だと現実的ではありません。Excelライブ編集を使えばExcelの操作感のままデータを一括修正できます。&lt;/p&gt;
&lt;p&gt;たとえばこういった使い方が実用的です。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;担当者名が変わったレコードを一括で書き換える（100件でも一操作）&lt;/li&gt;
&lt;li&gt;ステータスが特定の値のレコードを一括で更新する&lt;/li&gt;
&lt;li&gt;マスターデータの初期投入（手入力よりExcelのほうが速い）&lt;/li&gt;
&lt;li&gt;別システムからコピーしたデータを貼り付けて登録する&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ただし同時に複数のユーザーが同じテーブルを編集している状況では、Publish時に競合が発生することがあります。業務時間外や利用者が少ない時間帯にまとめて更新するほうが安全です。&lt;/p&gt;
&lt;h2 id=&quot;活用シーン生データを確認するdataverse理解の最短ルート&quot;&gt;活用シーン②：生データを確認する（Dataverse理解の最短ルート）&lt;/h2&gt;
&lt;p&gt;Excelライブ編集のもう一つの価値が、Dataverseの内部データをそのままの形で見られる点です。Power Appsアプリ上では表示を加工しているため、実際にDataverseに保存されている値と見え方が異なることがあります。生データを確認することでDataverseの仕組みへの理解が格段に速まります。&lt;/p&gt;
&lt;h3 id=&quot;guidの実態が見える&quot;&gt;GUIDの実態が見える&lt;/h3&gt;
&lt;p&gt;Power Appsアプリ上でレコードを見ても、主キーであるGUIDは通常表示されません。Excelライブ編集を開くと、IDや主キー名の列にGUIDの値（36文字の英数字）が表示されます。DataverseにはSharePointのような連番IDがなく、GUIDが主キーとして機能しているという感覚を、目で見て実感できます。GUIDの詳細については&lt;a href=&quot;/dataverse-guid/&quot;&gt;DataverseのGUID解説記事&lt;/a&gt;を読んでみてください。&lt;/p&gt;
&lt;h3 id=&quot;created-by-がguidで表示される&quot;&gt;Created by がGUIDで表示される&lt;/h3&gt;
&lt;p&gt;作成者（Created by）列は、アプリ上では名前やアイコンで表示されることが多いですが、Excelライブ編集では内部のGUID値が表示されます。Dataverseではユーザーも別のテーブル（SystemUser）で管理されていて、ルックアップ先のGUIDが保存されているためです。&lt;/p&gt;
&lt;p&gt;フローや数式で作成者をフィルター条件にしようとしたとき、なぜ名前ではなくGUIDを使わなければならないのか——その理由がExcelライブ編集を一度見れば腑に落ちます。&lt;/p&gt;
&lt;h3 id=&quot;列のシステム名スキーマ名が見える&quot;&gt;列のシステム名（スキーマ名）が見える&lt;/h3&gt;
&lt;p&gt;Power Appsのテーブル画面では列の表示名（日本語名）が並んでいますが、Excelライブ編集ではヘッダーにシステム名（例：cr52a_tantousha）が表示されることがあります。Power AutomateのDataverse行の取得アクションや、ODataフィルター条件を書くときにシステム名が必要になる場面があるので、ここで確認しておくと便利です。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/dataverse-excel-edit03.xOs2RFh7_Z24YN3d.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;注意点と使えないケース&quot;&gt;注意点と使えないケース&lt;/h2&gt;
&lt;p&gt;Excelライブ編集にはいくつかの制約があります。把握しておくと現場で慌てずに済みます。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;制約&lt;/th&gt;
&lt;th&gt;内容&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;書き込み権限が必要&lt;/td&gt;
&lt;td&gt;閲覧権限のみのユーザーはPublishできない&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;同時編集の競合&lt;/td&gt;
&lt;td&gt;複数人が同時にPublishすると後勝ちになる（注意が必要）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Auto-number列は編集不可&lt;/td&gt;
&lt;td&gt;読み取り専用列はExcel上でも変更できない&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;大量件数は時間がかかる&lt;/td&gt;
&lt;td&gt;数千件を超えるデータのPublishは処理時間がかかる&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;アドインのサインインが必要&lt;/td&gt;
&lt;td&gt;初回・アカウント変更時にPower Appsアドインへのログインが必要&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Auto-number列や主キー（GUID）列はExcel上でも編集できません。グレーアウトされているか、変更しようとするとエラーになります。これはDataverseの仕様として想定された動作なので、試みず放置するのが正解です。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;ExcelライブEditはエクスポートではありません。Power Appsアドイン経由でDataverseに直接接続した状態です&lt;/li&gt;
&lt;li&gt;編集後は必ずPublishボタンをクリックしてください。Excel側の保存だけではDataverseに反映されません&lt;/li&gt;
&lt;li&gt;バルク編集（大量データの一括修正・初期投入）に最も使いやすい手段です&lt;/li&gt;
&lt;li&gt;GUID・Created by・スキーマ名など、Dataverseの内部構造を目で確認できる唯一の手段です。Dataverseを理解する上でも一度は覗いてみる価値があります&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;まだ触ったことがない方は、テスト用の環境で一度試してみてください。アプリからしかデータを操作できないと思い込んでいたとしたら、この機能を知るだけで作業効率がかなり変わります。&lt;/p&gt;
&lt;p&gt;データベースからアプリを作る全体的な流れについては&lt;a href=&quot;/powerapps-db/&quot;&gt;データベースからのアプリ作成記事&lt;/a&gt;も参考にしてください。&lt;/p&gt;
&lt;p&gt;Dataverseの全体像はDataverseをSharePoint経験者向けに完全解説にまとめています。&lt;/p&gt;</content:encoded></item><item><title>DataverseにIDがない理由｜GUIDとは何か、SharePointのIDとの違いを解説</title><link>https://shiminkaihatsu.com/dataverse-guid/</link><guid isPermaLink="true">https://shiminkaihatsu.com/dataverse-guid/</guid><description>DataverseにIDがない理由｜GUIDとは何か、SharePointのIDとの違いを解説</description><pubDate>Wed, 25 Mar 2026 17:30:32 GMT</pubDate><content:encoded>&lt;p&gt;SharePointリストのIDに慣れていると、Dataverseのテーブルを初めて開いたとき「あれ、ID列がない？」と戸惑います。でも実際には、IDに相当するものはちゃんとあります。名前が違うだけです。&lt;/p&gt;
&lt;p&gt;この記事では、DataverseのGUIDとは何か、SharePointの連番IDとどう違うのか、そしてテーブルと同じ名前の列が2本あるように見える謎を順番に整理します。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/dataverse-guid01.D9nKh5JX_Z1uOBWS.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;sharepointのid列とdataverseのidの違い&quot;&gt;SharePointのID列とDataverseのIDの違い&lt;/h2&gt;
&lt;h3 id=&quot;sharepointのid1から始まる連番&quot;&gt;SharePointのID：1から始まる連番&lt;/h3&gt;
&lt;p&gt;SharePointリストのID列は、レコードを追加するたびに自動で1, 2, 3……と増えていく連番です。視認性が高く、「今何件登録されているか」を直感で把握できます。フローの条件式でも 「ID eq 123」のように数値比較できるので、扱いやすいです。&lt;/p&gt;
&lt;p&gt;ただしこの連番はSharePoint特有の仕様で、削除したレコードの番号が再利用されることはありません。100番を削除しても、次のレコードは101番になります。&lt;/p&gt;
&lt;h3 id=&quot;dataverseのidguidという文字列&quot;&gt;DataverseのID：GUIDという文字列&lt;/h3&gt;
&lt;p&gt;Dataverseのテーブルには連番IDが存在しません。代わりに、レコードごとに自動で割り振られる「GUID」がIDの役割を担います。&lt;/p&gt;
&lt;p&gt;GUIDとは、Globally Unique Identifierの略で、世界中で重複しない一意の識別子を生成する仕組みです。見た目はこんな形になります。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;a1b2c3d4&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;e5f6&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;7890&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;abcd&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;ef1234567890&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ハイフンで区切られた32文字の英数字です。ランダムに生成されるため連番にはなりませんし、人間が覚える必要もありません。Power Appsのギャラリーや数式の内部で自動的に参照されるので、開発者がGUID自体を意識する場面はほとんどありません。&lt;/p&gt;
&lt;p&gt;とはいえ、「IDが連番でない」という事実はフローや数式の設計に影響することがあります。特にSharePointのID列を前提にした設計（例：Auto-incrementで採番したいなど）を持ち込もうとすると、壁にぶつかります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/dataverse-guid02.DsnluR64_hRSqu.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;テーブルと同じ名前の列が2本ある謎を解く&quot;&gt;「テーブルと同じ名前の列が2本ある」謎を解く&lt;/h2&gt;
&lt;h3 id=&quot;なぜ同名の列が2本に見えるのか&quot;&gt;なぜ同名の列が2本に見えるのか&lt;/h3&gt;
&lt;p&gt;Dataverseのテーブルを列の一覧で見ると、テーブル名と同じ名前の列が2本存在するように見えることがあります。たとえば「案件管理」というテーブルを作ると、「案件管理」という列が2本表示されるようなイメージです。&lt;/p&gt;
&lt;p&gt;これは仕様です。2本あるように見える列のうち1本は「プライマリ列（Primary column）」——つまり主キーとは別の「表示名」として機能する列です。SharePointリストの「タイトル（Title）」列に相当します。&lt;/p&gt;
&lt;p&gt;もう1本はテーブルの主キーとなるGUIDを格納する列で、テーブル名に「ID」を付けた名前になっています（例：案件管理ID）。この列が実質的なIDの本体です。&lt;/p&gt;
&lt;h3 id=&quot;プライマリ列とguid列の違い&quot;&gt;プライマリ列とGUID列の違い&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;列の種類&lt;/th&gt;
&lt;th&gt;役割&lt;/th&gt;
&lt;th&gt;データ型&lt;/th&gt;
&lt;th&gt;ユーザーが入力するか&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;プライマリ列（テーブル名と同名）&lt;/td&gt;
&lt;td&gt;ルックアップ時の表示名&lt;/td&gt;
&lt;td&gt;テキスト&lt;/td&gt;
&lt;td&gt;する&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GUIDを格納する列（テーブル名＋ID）&lt;/td&gt;
&lt;td&gt;レコードの一意識別子（主キー）&lt;/td&gt;
&lt;td&gt;一意識別子（GUID）&lt;/td&gt;
&lt;td&gt;しない（自動生成）&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;ルックアップ列（他のテーブルを参照する列）を設定すると、参照先のプライマリ列の値がドロップダウンに表示されます。SharePointリストの「タイトル列がルックアップの表示名になる」動作と同じ仕組みです。&lt;/p&gt;
&lt;p&gt;テーブルを作ったら最初に「プライマリ列に何を入れるか」を設計しておくと、後のルックアップ設定がスムーズになります。&lt;/p&gt;
&lt;h2 id=&quot;excelライブ編集でguidを実際に見てみる&quot;&gt;Excelライブ編集でGUIDを実際に見てみる&lt;/h2&gt;
&lt;p&gt;GUIDが自動生成されることは説明しましたが、「本当にそんな列があるのか」を目で確認したいなら、Dataverseの「Excelでデータを編集する」機能が手っ取り早いです。&lt;/p&gt;
&lt;p&gt;make.powerapps.com でテーブルを開き、上部メニューの「データの編集」→「Excelで編集」を選ぶと、Excelがライブ接続の状態で開きます。そこには画面上には表示されていないGUID列も含め、テーブルの生データが全列分表示されます。&lt;/p&gt;
&lt;p&gt;自分が初めてDataverseを使ったとき、このExcel表示を見てようやくGUIDの存在が腑に落ちました。「そうか、ここに書いてあるこれがIDの正体か」という感覚です。概念として理解するより、生データを見るほうが早いことは多いです。&lt;/p&gt;
&lt;p&gt;詳しい使い方は&lt;a href=&quot;/dataverse-excel-edit/&quot;&gt;DataverseのExcelライブ編集&lt;/a&gt;で解説しています。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/dataverse-guid03.DUQsC-KS_Z2oquxB.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;guidは覚えなくていいが存在は知っておく&quot;&gt;GUIDは「覚えなくていいが、存在は知っておく」&lt;/h2&gt;
&lt;p&gt;日常的な開発では、GUIDを直接扱う場面はほとんどありません。Power Appsの数式でレコードを参照するときも、GUIDを意識せず「ThisItem」や「LookUp」で操作できます。&lt;/p&gt;
&lt;p&gt;ただし以下のようなケースでは、GUIDの存在を知っていると解決が速くなります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Power Automateフローで「レコードのID」をどの列から取得するか迷ったとき&lt;/li&gt;
&lt;li&gt;別のテーブルからルックアップで参照したレコードを特定したいとき&lt;/li&gt;
&lt;li&gt;SharePointのID列を使ったフローをDataverseに移行しようとして詰まったとき&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;SharePointのIDに慣れていると「DataverseにはなぜわかりやすいIDがないんだ」と感じることもあります。でも、GUIDはグローバルなシステム間連携を想定した仕様です。SharePointは社内の小規模リストを想定した連番、Dataverseはエンタープライズ規模のデータ管理を想定したGUID、という設計思想の違いとして理解しておくと気持ちが楽になります。&lt;/p&gt;
&lt;p&gt;DataverseとSharePointリストの構造的な違いについては、&lt;a href=&quot;/splist_mslist/&quot;&gt;SharePointリストとMicrosoft Listsの記事&lt;/a&gt;もあわせて参照してください。また、Power AppsでSharePointリストのデータをCRUD操作する具体的な手順は&lt;a href=&quot;/powerapps-sharepoint-crud/&quot;&gt;こちらの記事&lt;/a&gt;でまとめています。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;DataverseにはSharePointのような連番IDはなく、代わりにGUID（一意識別子）がレコードを識別します&lt;/li&gt;
&lt;li&gt;テーブルと同じ名前の列が2本に見えるのは「プライマリ列（表示名）」と「GUID列（主キー）」が別物だからです&lt;/li&gt;
&lt;li&gt;GUIDはExcelライブ編集で生データとして確認できます&lt;/li&gt;
&lt;li&gt;日常の開発でGUIDを直接操作する場面は少ないですが、存在と役割を知っておくと詰まったときに早く解決できます&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Dataverseの全体像はDataverseをSharePoint経験者向けに完全解説にまとめています。&lt;/p&gt;</content:encoded></item><item><title>DataverseはSharePointアプリと違いライセンスが必要｜E5でも別途必要な理由</title><link>https://shiminkaihatsu.com/dataverse-license/</link><guid isPermaLink="true">https://shiminkaihatsu.com/dataverse-license/</guid><description>DataverseはSharePointアプリと違いライセンスが必要｜E5でも別途必要な理由</description><pubDate>Wed, 25 Mar 2026 17:30:31 GMT</pubDate><content:encoded>&lt;p&gt;DataverseはSharePointリストよりはるかに強力なデータソースですが、利用にはPower Apps Premiumライセンスが必要です。SharePointアプリと同じ感覚で導入しようとすると、ライセンスの壁にぶつかります。&lt;/p&gt;
&lt;h2 id=&quot;sharepointアプリとdataverseアプリライセンスの根本的な違い&quot;&gt;SharePointアプリとDataverseアプリ。ライセンスの根本的な違い&lt;/h2&gt;
&lt;p&gt;まず前提として、Power Appsのライセンスには大きく2種類あります。Microsoft 365ライセンス（M365やOffice 365のサブスクリプション）に含まれているものと、追加で契約が必要なPower Apps Premiumです。&lt;/p&gt;
&lt;p&gt;SharePointリストをデータソースにしたアプリは、Microsoft 365ライセンスの範囲内で動かすことができます。つまり多くの会社では、社員がすでにM365アカウントを持っているなら、追加コストゼロでSharePointアプリを作って使ってもらえます。これがSharePointが市民開発の定番データソースになっている大きな理由のひとつです。&lt;/p&gt;
&lt;p&gt;一方、Dataverseをデータソースにしたアプリは話が変わります。アプリをビルド（作成）すること自体はPremiumなしでも可能です。ただし、そのアプリを他のユーザーと共有して実際に使ってもらうためには、利用者全員にPower Apps Premiumライセンスが必要になります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/dataverse-license01.DkMRNcsf_EsBig.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;p&gt;この仕組みを整理すると次のようになります。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;項目&lt;/th&gt;
&lt;th&gt;SharePointリストアプリ&lt;/th&gt;
&lt;th&gt;Dataverseアプリ&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;アプリのビルド（作成）&lt;/td&gt;
&lt;td&gt;M365ライセンスで可能&lt;/td&gt;
&lt;td&gt;M365ライセンスで可能&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;他ユーザーへの共有・利用&lt;/td&gt;
&lt;td&gt;M365ライセンスのみでOK&lt;/td&gt;
&lt;td&gt;利用者全員にPower Apps Premiumが必要&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;E5で利用可能か&lt;/td&gt;
&lt;td&gt;可能&lt;/td&gt;
&lt;td&gt;不可（追加契約が必要）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;追加コストの目安&lt;/td&gt;
&lt;td&gt;なし&lt;/td&gt;
&lt;td&gt;約20ドル/ユーザー/月（2024年時点）&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;SharePointリストとDataverseの機能面での違いについては&lt;a href=&quot;/splist_mslist/&quot;&gt;SharePointリストとMicrosoft Listsの違い&lt;/a&gt;でも解説しています。ライセンスだけでなく、機能面での使い分けも参考にしてください。&lt;/p&gt;
&lt;h2 id=&quot;e5ライセンスでも対象外&quot;&gt;E5ライセンスでも対象外&lt;/h2&gt;
&lt;p&gt;よく受ける質問のひとつが、「うちの会社はMicrosoft 365 E5を契約しているからDataverseも使えますよね？」というものです。残念ながら、これは正確ではありません。&lt;/p&gt;
&lt;p&gt;E5はMicrosoft 365の最上位プランで、高度なセキュリティ機能や音声通話機能なども含まれる充実したプランです。しかし、Power Apps Premiumは含まれていません。E1でもE3でもE5でも、Power Apps Premiumは別途契約が必要です。&lt;/p&gt;
&lt;p&gt;個人的にも社内でこの説明をするたびに驚かれます。高いライセンス料を払っているのにさらに追加が必要なのかと。気持ちはよくわかりますが、これはMicrosoftのライセンス構造上そういうものなので、そういうものだと割り切って考えるしかない部分です。&lt;/p&gt;
&lt;h3 id=&quot;導入前に試算してみる&quot;&gt;導入前に試算してみる&lt;/h3&gt;
&lt;p&gt;Power Apps Premiumは2024年時点で1ユーザーあたり月額約20ドル（日本円で概算3,000円前後）です。&lt;/p&gt;
&lt;p&gt;たとえば10人のチームで社内ツールを使う場合、月3万円程度の追加コストが発生します。SharePointアプリなら追加コストゼロだったことを考えると、この差は無視できません。50人が使うアプリになれば月15万円規模になります。&lt;/p&gt;
&lt;p&gt;Dataverseを導入する前に、利用者の人数と月額コストをざっと試算してから意思決定することをおすすめします。小規模なチーム内ツールなら費用対効果が見えやすいですが、全社展開を考えているなら、先に情報システム部門や経営層との調整が必要になる場合もあります。&lt;/p&gt;
&lt;h2 id=&quot;dataverseだけじゃないpremiumが必要なデータソース&quot;&gt;Dataverseだけじゃない、Premiumが必要なデータソース&lt;/h2&gt;
&lt;p&gt;Premium扱いになるのはDataverseだけではありません。Power Appsで接続できるデータソースの中には、Premiumコネクターに分類されるものが多数あります。代表的なものを挙げると、SQL Server（オンプレミス・Azure SQL）、Salesforce、ServiceNow、Dynamics 365などです。&lt;/p&gt;
&lt;p&gt;これらをデータソースにしたアプリも、利用者にPower Apps Premiumが必要です。SharePointやExcel、Teams、OneDriveはStandardコネクターなので追加コストはかかりませんが、ひとつ踏み込んだデータソースを使う場合は必ずライセンスを確認してください。&lt;/p&gt;
&lt;p&gt;Power Appsのライセンス全体の仕組みについては&lt;a href=&quot;/powerapps-license/&quot;&gt;Power Appsのライセンスをわかりやすく解説&lt;/a&gt;に詳しくまとめています。無料で使える範囲と有料プランの違いも合わせて確認しておきましょう。&lt;/p&gt;
&lt;h2 id=&quot;model-driven-appsとpower-pagesも同様&quot;&gt;model-driven appsとPower Pagesも同様&lt;/h2&gt;
&lt;p&gt;Dataverseを前提としたアプリの種類として、model-driven appsというものがあります。Canvas appがUIを自由に設計できるのに対して、model-driven appsはDataverseのテーブル構造に沿って自動的に画面が生成されるタイプのアプリです。Excelのフォームビューのような使い勝手で、設定次第で素早くデータ管理画面を作れます。&lt;/p&gt;
&lt;p&gt;model-driven appsはDataverseなしでは動かない仕組みなので、利用者にPower Apps Premiumが必要であることはCanvas appと同様です。&lt;/p&gt;
&lt;p&gt;Power Pages（外部向けWebサイトをDataverse連携で作るサービス）についても、ライセンス体系は別途確認が必要です。こちらは用途が社外向けになるため、ライセンス構造がより複雑になります。&lt;/p&gt;
&lt;h2 id=&quot;それでもdataverseを選ぶ理由&quot;&gt;それでもDataverseを選ぶ理由&lt;/h2&gt;
&lt;p&gt;ここまでコストとライセンスの話ばかりしてきましたが、Dataverseにはそのコストに見合うだけの価値があります。&lt;/p&gt;
&lt;p&gt;SharePointリストにはないテーブル間のリレーション（&lt;a href=&quot;/dataverse-lookup/&quot;&gt;ルックアップ列&lt;/a&gt;）、タイムゾーン対応の日付管理、GUIDによる堅牢な主キー設計、こうした本格的なデータベース機能を、ノーコードのPower Appsから扱えるのはDataverseだけです。大量のデータや複数テーブルを組み合わせた複雑な業務ロジックが必要なアプリを作るなら、SharePointリストには限界があります。&lt;/p&gt;
&lt;p&gt;実際に私が社内でDataverseを使い始めたのは、SharePointリストだけではどうしても実現できない要件が出てきたからです。最初はライセンスコストを聞いて一歩引きましたが、実現できる機能の幅を考えると、必要な投資だと判断しました。&lt;/p&gt;
&lt;p&gt;データベースからアプリを作る基本的な流れは&lt;a href=&quot;/powerapps-db/&quot;&gt;Power Appsでデータベースから簡単にアプリを作る手順&lt;/a&gt;でも紹介しています。Dataverseを使ったアプリ作成のイメージをつかむ参考にしてください。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;Dataverseは機能面では文句なしのデータソースですが、利用には追加のライセンスコストがかかります。ポイントを整理しておきます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Dataverseアプリの利用者全員にPower Apps Premiumが必要&lt;/li&gt;
&lt;li&gt;E5を含むM365ライセンスではカバーされない&lt;/li&gt;
&lt;li&gt;SQL ServerなどほかのPremiumコネクターも同様&lt;/li&gt;
&lt;li&gt;導入前に人数×月額コストを試算する&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;コストも仕様のひとつとして正確に把握した上で、それでも必要だと判断したら導入する、その順番を踏んで進んでいきましょう。&lt;/p&gt;
&lt;p&gt;Dataverseの全体像はDataverseをSharePoint経験者向けに完全解説にまとめています。&lt;/p&gt;</content:encoded></item><item><title>Dataverseのルックアップ列でテーブルをリレーションさせる｜作成・primary column設計のポイント</title><link>https://shiminkaihatsu.com/dataverse-lookup/</link><guid isPermaLink="true">https://shiminkaihatsu.com/dataverse-lookup/</guid><description>Dataverseのルックアップ列でテーブルをリレーションさせる｜作成・primary column設計のポイント</description><pubDate>Wed, 25 Mar 2026 17:30:33 GMT</pubDate><content:encoded>&lt;p&gt;Dataverseのルックアップ列は、SharePointのルックアップ列と似ているようで、設計時に押さえておくべき重要な制約があります。なかでも「primary column（プライマリ列）は後から変更できない」という点を最初に知っておかないと、後で大きな手戻りが発生します。&lt;/p&gt;
&lt;p&gt;私自身が最初にDataverseのリレーション設計で失敗したのは、担当者テーブルのprimary columnを確認せずにルックアップ列を作ってしまったときです。ドロップダウンに社員番号が表示されてしまい、後から修正しようとしたところ変更できないとわかり、テーブルごと作り直す羽目になりました。この記事では、同じ失敗をしないためにルックアップ列の設計から作成手順まで順を追って説明します。&lt;/p&gt;
&lt;h2 id=&quot;choice列とlookup列まず使い分けを把握する&quot;&gt;choice列とlookup列——まず使い分けを把握する&lt;/h2&gt;
&lt;p&gt;Dataverseでドロップダウンを実現する方法は主に2つあります。「choice列（選択肢列）」と「lookup列（ルックアップ列）」です。この2つの違いを理解することが、設計の第一歩です。&lt;/p&gt;
&lt;p&gt;choice列はシンプルで、列の定義に選択肢リストを直接書き込む仕組みです。「承認済み」「未承認」「却下」のような固定の選択肢であれば、choice列で十分です。Power Appsでの扱いも文字列としてシンプルに扱えるため、初心者にも使いやすい設定です。&lt;/p&gt;
&lt;p&gt;一方、lookup列は別テーブルのレコードと紐づける仕組みです。たとえば「担当者」をドロップダウンで選ぶ場合、担当者テーブルのレコードそのものと紐づけることができます。担当者のメールアドレスや部署名なども後から引き出せるのが、choice列との最大の違いです。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;choice列&lt;/th&gt;
&lt;th&gt;lookup列&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;データの実体&lt;/td&gt;
&lt;td&gt;列に定義した選択肢リスト&lt;/td&gt;
&lt;td&gt;別テーブルのレコード&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;追加属性の取得&lt;/td&gt;
&lt;td&gt;不可&lt;/td&gt;
&lt;td&gt;参照先テーブルの列を引き出せる&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;複数テーブルでの共有&lt;/td&gt;
&lt;td&gt;グローバルchoiceなら可&lt;/td&gt;
&lt;td&gt;テーブルを共有するため自然に可能&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Power Appsでの扱い&lt;/td&gt;
&lt;td&gt;文字列としてシンプルに扱える&lt;/td&gt;
&lt;td&gt;レコード型として扱う（少し複雑）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;複数選択&lt;/td&gt;
&lt;td&gt;対応（内部構造が複雑化する）&lt;/td&gt;
&lt;td&gt;many-to-many専用テーブルが別途必要&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;判断の基準はシンプルです。「選択肢の横に追加情報を持たせる必要があるか」で決めれば問題ありません。担当者名だけ表示できれば十分であればchoiceで足ります。担当者のメールアドレスや部署コードも後から使いたい場合は、lookup列を選びましょう。&lt;/p&gt;
&lt;p&gt;なお、choice列の複数選択（Multi-Select Choice）については注意が必要です。SharePointの複数選択列と似た感覚で使えそうに見えますが、内部的にはテーブル化された複雑な構造になっており、Power AutomateやAPIでの操作が一段階難しくなります。用途がシンプルな場合は避けることをおすすめします。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/dataverse-lookup01._xqQXYNm_ZcYXFL.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;primary-columnを先に設計する後から変えられない唯一の制約&quot;&gt;primary columnを先に設計する——後から変えられない唯一の制約&lt;/h2&gt;
&lt;p&gt;ルックアップ列を作成する前に、参照先テーブルの「primary column」を確認・設計することが最も重要なステップです。これがSharePointのルックアップ列と最も大きく異なる点です。&lt;/p&gt;
&lt;p&gt;primary columnとは、テーブル作成時に設定する「Name」フィールドにあたる列のことです。Dataverseのルックアップ列は、ドロップダウンに参照先テーブルのprimary columnだけが表示されます。SharePointのルックアップ列では表示する列を後から自由に変更できますが、Dataverseではこの変更ができません。&lt;/p&gt;
&lt;p&gt;たとえば、担当者テーブルのprimary columnが「氏名」に設定されていれば、ドロップダウンには氏名が表示されます。しかし「社員番号」に設定されていれば、社員番号しか表示されません。そしてprimary columnは、テーブル作成後に変更することができないという制約があります。&lt;/p&gt;
&lt;p&gt;ルックアップ列を設定する前に、参照先テーブルの「ドロップダウンで何が表示されるか」を必ず確認しておきましょう。もし既存のテーブルのprimary columnが意図した列でない場合は、ルックアップ列を作成する前にテーブル構造を見直す必要があります。&lt;/p&gt;
&lt;p&gt;primary columnの確認方法は、make.powerapps.comで対象テーブルを開き、「列」タブの一覧で「Primary」アイコンがついている列を確認します。デフォルトでは「Name」という名前のテキスト列がprimary columnになっています。テーブルを作成する段階で、この列名と入力内容を「ドロップダウンに表示したい値」に合わせて設計しておくことが大切です。&lt;/p&gt;
&lt;h2 id=&quot;ルックアップ列の作成手順&quot;&gt;ルックアップ列の作成手順&lt;/h2&gt;
&lt;p&gt;実際にルックアップ列を作成する手順を説明します。慣れれば3〜5分ほどで完了します。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://make.powerapps.com&quot;&gt;make.powerapps.com&lt;/a&gt; を開き、左メニューの「テーブル」から&lt;strong&gt;子テーブル&lt;/strong&gt;（ルックアップ列を追加する側のテーブル）を選択します&lt;/li&gt;
&lt;li&gt;「列」タブを開き、「新しい列」をクリックします&lt;/li&gt;
&lt;li&gt;「データ型」のドロップダウンから「Lookup（ルックアップ）」を選択します&lt;/li&gt;
&lt;li&gt;「Related Table（関連テーブル）」で参照先のテーブルを選択します&lt;/li&gt;
&lt;li&gt;列の表示名を入力し、「保存」をクリックして列を作成します&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;ひとつ注意点があります。「Related Table」の選択肢に「Customer」という項目が表示されます。これはAccountテーブルとContactテーブルを統合した特殊な複合ルックアップ列を作るための設定で、通常のユーザーが使う場面はほとんどありません。一般的なルックアップ列を作る場合は「Customer」を選ばないようにしてください。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/dataverse-lookup02.CqIvqNmX_Z1iQqnK.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;自動生成されるリレーションを理解しておく&quot;&gt;自動生成されるリレーションを理解しておく&lt;/h2&gt;
&lt;p&gt;ルックアップ列を作成すると、Dataverseが裏側でmany-to-one（多対一）のリレーションを自動生成します。「テーブル」→「リレーションシップ」タブを開くと、作成されたリレーションを確認できます。参照先テーブル（親テーブル）側でも、one-to-manyのリレーションとして表示されます。&lt;/p&gt;
&lt;p&gt;SharePointにはこのようなリレーションの概念がありませんでしたが、Dataverseではテーブル間のリレーションが明示的に管理されています。これにより、データの整合性を担保するための設定が細かくコントロールできるようになります。&lt;/p&gt;
&lt;h3 id=&quot;リレーション動作relationship-behaviorsの設定&quot;&gt;リレーション動作（Relationship behaviors）の設定&lt;/h3&gt;
&lt;p&gt;リレーションには「動作（behaviors）」という設定があります。基本的にデフォルトのままで問題ありませんが、知っておくと設計時の判断に役立ちます。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;設定名&lt;/th&gt;
&lt;th&gt;動作の内容&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Referential（デフォルト）&lt;/td&gt;
&lt;td&gt;親レコードを削除しても子レコードは残る。ルックアップ列の値がnullになる&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Referential, restrict delete&lt;/td&gt;
&lt;td&gt;子レコードが存在する間は親レコードを削除できない&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Parental&lt;/td&gt;
&lt;td&gt;親レコードを削除すると子レコードも連動して削除される（カスケード削除）&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Referential（デフォルト）は最も安全な設定です。親レコードを削除しても子レコードが残るため、データが意図せず失われるリスクがありません。&lt;/p&gt;
&lt;p&gt;「Referential, restrict delete」を選ぶと、子レコードが存在する間は親レコードを削除できなくなります。データの整合性を厳密に保ちたい運用では、この設定が安全です。たとえば「担当者テーブルの担当者を削除したとき、その担当者が紐づいている案件レコードが残ってしまう」という状況を防げます。&lt;/p&gt;
&lt;p&gt;「Parental」は親レコードを削除すると子レコードも連動して削除されるカスケード削除です。意図せずデータが大量に消えるリスクもあるため、データ構造を十分に理解した上で使うようにしましょう。初心者のうちはデフォルトの「Referential」から始めることをおすすめします。設定の変更は、リレーションを開いて「General」タブから行えます。&lt;/p&gt;
&lt;h2 id=&quot;power-appsとpower-automateでの注意点&quot;&gt;Power AppsとPower Automateでの注意点&lt;/h2&gt;
&lt;p&gt;ルックアップ列はPower Appsで操作するとき、choice列とは異なる扱いになります。いくつか代表的なパターンを押さえておきましょう。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;自動生成アプリを使う場合&lt;/strong&gt;は、ルックアップ列のComboBoxが自動的に設定されるため、特別な操作は不要です。まずは自動生成でアプリを動かしてみて、動作を確認するのがおすすめです。詳細は&lt;a href=&quot;/dataverse-auto-app/&quot;&gt;Dataverseのテーブルから30秒でアプリを自動生成する方法&lt;/a&gt;をご覧ください。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Patch関数でルックアップ列に値を書き込む場合&lt;/strong&gt;は、テキスト文字列ではなくレコード型で渡す必要があります。たとえば次のような書き方になります。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Patch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;  案件テーブル,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;  Defaults&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(案件テーブル),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;  {担当者: &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;LookUp&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(担当者テーブル, ID &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; ComboBox1.Selected.ID)}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Filter関数でルックアップ列を使ってフィルターする場合&lt;/strong&gt;は、ルックアップ列のフィールドを参照する記述が必要です。たとえば担当者テーブルのIDでフィルターする場合は、&lt;code&gt;Filter(案件テーブル, 担当者.ID = ComboBox1.Selected.ID)&lt;/code&gt;のような書き方になります。&lt;/p&gt;
&lt;p&gt;Power AutomateでDataverseのルックアップ列をODataフィルターで使う場合は、システム列名に&lt;code&gt;_value&lt;/code&gt;サフィックスを付ける特殊な書き方が必要です。列のシステム名（スキーマ名）はmake.powerapps.comの「列」タブで確認できます。&lt;/p&gt;
&lt;p&gt;列型全体の整理は&lt;a href=&quot;/dataverse-column-types/&quot;&gt;Dataverseの列データ型まとめ&lt;/a&gt;をご覧ください。テーブル作成の流れは&lt;a href=&quot;/dataverse-table-vs-list/&quot;&gt;SharePointと違うDataverseのテーブル作成フロー&lt;/a&gt;も合わせて参考にしてください。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;Dataverseのルックアップ列は、choice列では実現できない「参照先テーブルのデータを丸ごと扱う」リレーション設計を可能にします。設計で最も重要なのは、&lt;strong&gt;ルックアップ列を作成する前に参照先テーブルのprimary columnを固めること&lt;/strong&gt;です。この設定は後から変えられないため、ドロップダウンに何を表示したいかを先に決めてから着手するようにしましょう。&lt;/p&gt;
&lt;p&gt;リレーション動作の設定や、Power Appsでのレコード型の扱いなど、SharePointと異なる概念が出てきますが、一つひとつ順番に理解していけば難しくありません。最初は自動生成アプリでルックアップ列の動作を確認しながら、少しずつカスタマイズを重ねていくのがおすすめです。&lt;/p&gt;
&lt;p&gt;Dataverseの全体像はDataverseをSharePoint経験者向けに完全解説にまとめています。環境・テーブル・列型・ルックアップまで、SharePoint経験者の視点で一通り確認できます。&lt;/p&gt;</content:encoded></item><item><title>Dataverseの標準テーブルとは｜最初から大量にあるテーブルの正体と触ってはいけないもの</title><link>https://shiminkaihatsu.com/dataverse-standard-tables/</link><guid isPermaLink="true">https://shiminkaihatsu.com/dataverse-standard-tables/</guid><description>Dataverseの標準テーブルとは｜最初から大量にあるテーブルの正体と触ってはいけないもの</description><pubDate>Wed, 25 Mar 2026 17:30:33 GMT</pubDate><content:encoded>&lt;p&gt;Dataverseを初めて開いたとき、テーブル一覧に見覚えのないテーブルが30〜40個並んでいて戸惑う方は多いと思います。これらは「標準テーブル（Standard Tables）」と呼ばれるシステムテーブルで、Dataverseが最初から用意しているものです。自分で作ったわけでも、誰かが追加したわけでもありません。&lt;/p&gt;
&lt;p&gt;私も最初に見たとき、「Account」「Contact」「Activity」といった見慣れない英語のテーブルが大量に並んでいて、何が何だかわかりませんでした。誤って標準テーブルに列を追加しようとしたこともあります。この記事では、標準テーブルとは何か、どれが触っていいもので、どれを避けるべきかを整理します。&lt;/p&gt;
&lt;h2 id=&quot;標準テーブルとは何か&quot;&gt;標準テーブルとは何か&lt;/h2&gt;
&lt;p&gt;Dataverseの環境を作成すると、最初から大量のテーブルが存在しています。これが標準テーブルです。SharePointでサイトを作ったとき、「サイトページ」「ドキュメント」「カレンダー」などが最初から存在しているのと似た感覚ですが、Dataverseの場合はその数がはるかに多く、またシステムとしての役割も複雑です。&lt;/p&gt;
&lt;p&gt;標準テーブルは主に、Microsoft Dynamics 365やModel-driven appsが使うために用意されています。これらのアプリが顧客情報・連絡先・活動履歴などを管理するためのデータ構造として、あらかじめ定義されているのが標準テーブルです。&lt;/p&gt;
&lt;p&gt;代表的な標準テーブルとその用途は以下の通りです。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;テーブル名（英語）&lt;/th&gt;
&lt;th&gt;表示名&lt;/th&gt;
&lt;th&gt;主な用途&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Account&lt;/td&gt;
&lt;td&gt;取引先企業&lt;/td&gt;
&lt;td&gt;顧客・取引先の企業情報を管理するためのテーブル&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Contact&lt;/td&gt;
&lt;td&gt;取引先担当者&lt;/td&gt;
&lt;td&gt;個人の連絡先情報を管理するテーブル&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;User&lt;/td&gt;
&lt;td&gt;ユーザー&lt;/td&gt;
&lt;td&gt;Dataverse環境にアクセスするユーザーの情報&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Activity&lt;/td&gt;
&lt;td&gt;活動&lt;/td&gt;
&lt;td&gt;メール・電話・タスクなどの活動履歴の親テーブル&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Team&lt;/td&gt;
&lt;td&gt;チーム&lt;/td&gt;
&lt;td&gt;ユーザーをグループ化して権限管理するテーブル&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Business Unit&lt;/td&gt;
&lt;td&gt;部署&lt;/td&gt;
&lt;td&gt;組織の部門・部署構造を表すテーブル&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Role&lt;/td&gt;
&lt;td&gt;セキュリティロール&lt;/td&gt;
&lt;td&gt;アクセス権限の役割定義テーブル&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Canvas appを独自に作るだけが目的であれば、これらの標準テーブルはほとんど使いません。Dynamics 365との連携や、Model-driven appsの構築を前提とした場合に意識する必要が出てきます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/dataverse-standard-tables01.BnEaqBRn_Z17VXJb.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;カスタムテーブルとの見分け方&quot;&gt;カスタムテーブルとの見分け方&lt;/h2&gt;
&lt;p&gt;テーブル一覧でカスタムテーブル（自分で作ったテーブル）だけを表示したい場合は、一覧上部のフィルターで「カスタム」を選択すると絞り込めます。普段の作業はこのビューを使えば、標準テーブルに混乱させられることなく作業できます。&lt;/p&gt;
&lt;p&gt;フィルターを使わずに見分ける場合は、以下の3点を確認するのが目安になります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;スキーマ名のプレフィックス&lt;/strong&gt;：カスタムテーブルのスキーマ名には「cr52a_」「abc_」のようなパブリッシャープレフィックスが付きます。標準テーブルにはプレフィックスがなく、「account」「contact」のようにシンプルな名前です&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Managed（マネージド）の表示&lt;/strong&gt;：テーブルの詳細を開いて「Managed solution」と表示されているものは、Microsoftが管理しているシステムテーブルです&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;テーブルプロパティの制限&lt;/strong&gt;：標準テーブルの一部は、削除や特定のプロパティ変更が制限されています。カスタムテーブルは自由に変更できます&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Dataverseの環境の概念や、環境によって標準テーブルのセットがどう変わるかについては、&lt;a href=&quot;/dataverse-environment/&quot;&gt;Dataverseの「環境」とは何か&lt;/a&gt;で詳しく解説しています。合わせて確認してみてください。&lt;/p&gt;
&lt;h2 id=&quot;標準テーブルは触っていいのか&quot;&gt;標準テーブルは触っていいのか&lt;/h2&gt;
&lt;p&gt;結論からいうと、「基本的には自分でカスタムテーブルを作れば十分」です。ただし「触ってはいけない」という意味ではありません。標準テーブルは用途に応じて3種類に分けて考えると整理しやすいです。&lt;/p&gt;
&lt;h3 id=&quot;積極的に活用できる標準テーブル&quot;&gt;積極的に活用できる標準テーブル&lt;/h3&gt;
&lt;p&gt;「Account（取引先企業）」と「Contact（取引先担当者）」は、カスタマイズが許可されており、列を追加することもできます。顧客管理や案件管理をDataverseで行う場合は、これらの標準テーブルをベースにカスタマイズするのが推奨アプローチです。&lt;/p&gt;
&lt;p&gt;特にDynamics 365との連携を前提にする場合は、AccountやContactに独自列を追加してデータを管理するのが一般的です。一から作ったカスタムテーブルでは連携がうまくいかないケースもあるため、将来的にDynamics 365の導入が視野にある場合は標準テーブルの活用を検討する価値があります。&lt;/p&gt;
&lt;h3 id=&quot;参照には使えるが変更は慎重に&quot;&gt;参照には使えるが変更は慎重に&lt;/h3&gt;
&lt;p&gt;「User（ユーザー）」「Team（チーム）」「Business Unit（部署）」などは、Power Appsで「ログインユーザーの情報を引き出す」「担当者を選択肢に表示する」といった用途でよく参照します。ただし構造を変更すると、既存のアプリやフロー、セキュリティ設定に影響が出る可能性があるため、列の追加などは慎重に行いましょう。&lt;/p&gt;
&lt;h3 id=&quot;触らなくていいシステムテーブル&quot;&gt;触らなくていいシステムテーブル&lt;/h3&gt;
&lt;p&gt;Managedと表示されているテーブルや、名前から明らかにシステム内部で使われているとわかるテーブル（例：「Suggestion」「Audit」「Role」など）は基本的に変更しないほうが安全です。誤って構造を変えると、Dataverse内部の処理やModel-driven appsの動作に影響する可能性があります。&lt;/p&gt;
&lt;p&gt;SharePointに例えるなら、サイトページライブラリやワークフロー履歴リストを直接触らないのと同じ感覚です。業務データは自分のカスタムリスト（カスタムテーブル）で管理するのが基本です。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/dataverse-standard-tables02.EEtYP8vl_ZUXYP9.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;カスタムテーブルを作成したときに知っておくこと&quot;&gt;カスタムテーブルを作成したときに知っておくこと&lt;/h2&gt;
&lt;p&gt;自分でテーブルを作成すると、スキーマ名にパブリッシャープレフィックス（例：cr52a_）が自動的に付きます。これは環境を作成したときに設定されたプレフィックスで、標準テーブルと自分のテーブルを区別するためのものです。&lt;/p&gt;
&lt;p&gt;このプレフィックスは、Power AutomateでDataverseのテーブルを操作するときや、APIでアクセスするときに使います。画面上の「表示名（Display Name）」はプレフィックスなしで見られるため、日常の操作では気にする必要はありませんが、数式やフローを書くときに意識しておくと混乱しません。&lt;/p&gt;
&lt;p&gt;たとえば「案件テーブル」という表示名のテーブルのスキーマ名が「cr52a_案件テーブル」になっているという具合です。make.powerapps.comのテーブル設定画面でスキーマ名を確認できます。&lt;/p&gt;
&lt;p&gt;カスタムテーブルの作成フローについては&lt;a href=&quot;/dataverse-table-vs-list/&quot;&gt;SharePointと違うDataverseのテーブル作成フロー&lt;/a&gt;で詳しく解説しています。SharePointリストとの設計の違いも含めて確認してみてください。また、テーブルを作成した後はすぐに自動生成アプリで動作確認するのがおすすめです。手順は&lt;a href=&quot;/dataverse-auto-app/&quot;&gt;Dataverseのテーブルから30秒でアプリを自動生成する方法&lt;/a&gt;をご覧ください。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;Dataverseを開いて大量のテーブルに驚いたとしても、それらのほとんどは標準テーブルであり、Canvas appを作るだけであれば直接関わる必要はありません。テーブル一覧は「カスタム」フィルターで絞り込んで使うのが日常の操作として正解です。&lt;/p&gt;
&lt;p&gt;標準テーブルを知っておくことには、将来の設計上の意味があります。「Account」「Contact」は業務要件によっては積極的に活用できます。また、Dynamics 365との連携を前提にするなら、最初から標準テーブルを使う設計が重要になります。&lt;/p&gt;
&lt;p&gt;「触ってはいけないテーブル」を見極める目安は、Managedかどうかとパブリッシャープレフィックスの有無を確認するだけで十分です。これを知っておけば、大量のテーブルに惑わされることなく、自分が必要なカスタムテーブルだけに集中して作業を進めることができます。&lt;/p&gt;
&lt;p&gt;Dataverseの全体像はDataverseをSharePoint経験者向けに完全解説にまとめています。環境・テーブル設計・列型まで、SharePoint経験者の視点で整理しています。&lt;/p&gt;</content:encoded></item><item><title>SharePointと違うDataverseのテーブル作成フロー。設計してから建てる順番を知っておこう</title><link>https://shiminkaihatsu.com/dataverse-table-vs-list/</link><guid isPermaLink="true">https://shiminkaihatsu.com/dataverse-table-vs-list/</guid><description>SharePointと違うDataverseのテーブル作成フロー。設計してから建てる順番を知っておこう</description><pubDate>Wed, 25 Mar 2026 17:30:31 GMT</pubDate><content:encoded>&lt;p&gt;SharePointリストは作ってから列を追加していく設計ですが、Dataverseのテーブルは先にすべての列を設計してからCreateボタンを押す設計です。この順番の違いを知らないまま触ると、画面の構成からして戸惑います。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/dataverse-table-vs-list01.C5QVO4eo_ZJja6t.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;2つの設計思想の違い&quot;&gt;2つの設計思想の違い&lt;/h2&gt;
&lt;h3 id=&quot;sharepointリスト作ってから育てる&quot;&gt;SharePointリスト：作ってから育てる&lt;/h3&gt;
&lt;p&gt;SharePointでリストを作るときは、まず空のリストを作ります。最初はタイトル列だけがある状態で保存され、そこから列を一つずつ追加していきます。後から列の種類を変えたり、削除したりするのも比較的自由です。&lt;/p&gt;
&lt;p&gt;Excelで新しいシートを作って、後から列ヘッダーを追加していく感覚に近いです。まず器を作って、中身を後から整えていくイメージです。&lt;/p&gt;
&lt;h3 id=&quot;dataverseテーブル設計してから建てる&quot;&gt;Dataverseテーブル：設計してから建てる&lt;/h3&gt;
&lt;p&gt;Dataverseのテーブル作成画面を開くと、列名と型を入力するフォームが並んでいます。ここですべての列を定義してからCreateボタンを押す流れです。Createを押すまでテーブルは存在しません。&lt;/p&gt;
&lt;p&gt;料理でいうと、SharePointは冷蔵庫にあるものを見ながら何を作るか決めるスタイル、Dataverseは最初にレシピを完成させてから買い物に行くスタイルです。どちらが良い悪いではなく、設計の文化が根本的に違います。&lt;/p&gt;
&lt;p&gt;もちろん、Createした後に列を追加することは可能です。ただし、タイムゾーン設定のように後から変更できない項目がいくつかあります。その代表例が日付列のタイムゾーン設定で、詳しくは&lt;a href=&quot;/dataverse-date-timezone/&quot;&gt;Dataverseの日付タイムゾーン設定の記事&lt;/a&gt;でまとめています。後悔しないように、設計段階で考えきっておくほうが確実です。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/dataverse-table-vs-list02.BfeluOLD_2b6QTP.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;テーブル作成時に選べる3つの方法&quot;&gt;テーブル作成時に選べる3つの方法&lt;/h2&gt;
&lt;p&gt;make.powerapps.com でテーブルの新規作成を選ぶと、作成方法を選択する画面が表示されます。&lt;/p&gt;
&lt;h3 id=&quot;add-columns-and-data手動&quot;&gt;Add columns and data（手動）&lt;/h3&gt;
&lt;p&gt;列名・データ型・必須かどうかなどを自分で設定していく方法です。設計の自由度が最も高く、どんなテーブルでも作れます。初めてDataverseを触る方にはこの方法が一番把握しやすいです。列を一行ずつ定義してCreateを押すシンプルな流れです。&lt;/p&gt;
&lt;h3 id=&quot;copilotで作成自然言語&quot;&gt;Copilotで作成（自然言語）&lt;/h3&gt;
&lt;p&gt;どんなテーブルが欲しいかを日本語で説明すると、AIが列の候補を提案してくれます。たとえば申請者・申請日・申請内容・承認者・ステータスを管理する申請管理テーブルと入力すると、それらしい構成を自動で提案してくれます。&lt;/p&gt;
&lt;p&gt;ゼロから考えるのが面倒なときのたたき台として便利です。ただしそのまま使えることは少なく、不要な列を削除したり、型を修正したりする作業が必ず発生します。提案を参考にしながら手直しする使い方がおすすめです。&lt;/p&gt;
&lt;h3 id=&quot;高度なプロパティから作成&quot;&gt;高度なプロパティから作成&lt;/h3&gt;
&lt;p&gt;スキーマ名（システム名）やオーナーシップタイプなどの詳細設定が必要な場合に使います。特別な理由がなければ最初は不要です。&lt;/p&gt;
&lt;h2 id=&quot;設定を慎重にすべき3つの項目&quot;&gt;設定を慎重にすべき3つの項目&lt;/h2&gt;
&lt;h3 id=&quot;primary-columnプライマリ列後から変更できません&quot;&gt;Primary column（プライマリ列）——後から変更できません&lt;/h3&gt;
&lt;p&gt;SharePointリストのタイトル列に相当するのがプライマリ列（Primary column）です。ルックアップ列（他のテーブルを参照する列）を設定したとき、ドロップダウンに表示される名前がこのプライマリ列の値になります。&lt;/p&gt;
&lt;p&gt;たとえば社員テーブルのプライマリ列が社員IDだと、申請テーブルのルックアップで社員を選ぶドロップダウンに社員IDの数字が並んでしまいます。氏名にしておけば、ドロップダウンに名前が表示されて直感的に使えます。&lt;/p&gt;
&lt;p&gt;プライマリ列の設定はテーブル作成後に変更できないため、最初にしっかり決めておく必要があります。そのテーブルを参照するときに何の値を見せたいか。この一点を先に考えておきましょう。また、プライマリ列はテキスト型のみで、数値型や日付型には変更できません。&lt;/p&gt;
&lt;h3 id=&quot;plural-name複数形名power-apps上の表示に影響します&quot;&gt;Plural name（複数形名）——Power Apps上の表示に影響します&lt;/h3&gt;
&lt;p&gt;テーブル名の複数形を設定する項目です。Power Appsの数式エディタや管理画面のあちこちで、テーブルは複数形の名前で表示されます。&lt;/p&gt;
&lt;p&gt;英語のテーブル名であれば自動で適切な複数形が生成されます。しかし日本語のテーブル名（例：申請管理）では、英語変換が変な形になることがあります。作成前に確認して、わかりにくい場合は修正しておきましょう。後から変更することも可能ですが、既にフローやアプリで参照している場合は影響が出ることがあります。&lt;/p&gt;
&lt;h3 id=&quot;schema-nameスキーマ名api接続時に使います&quot;&gt;Schema name（スキーマ名）——API接続時に使います&lt;/h3&gt;
&lt;p&gt;テーブルのシステム内部名称です。作成環境のパブリッシャープレフィックス（例：cr52a_）が自動で付きます。たとえば申請管理テーブルのスキーマ名は cr52a_shinseikanri のようになります。&lt;/p&gt;
&lt;p&gt;Power Automateの行の追加アクションやDataverseコネクタを使うとき、このスキーマ名がドロップダウンに表示されます。普段の開発では気にする必要はほぼありませんが、APIで直接Dataverseにアクセスするケースでは意識する場面があります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/dataverse-table-vs-list03.2hUX_7Tn_1zd4XK.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;列を設計するときに決めておくべきこと&quot;&gt;列を設計するときに決めておくべきこと&lt;/h2&gt;
&lt;p&gt;テーブルを作る前に、以下を整理しておくと作業がスムーズになります。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;確認項目&lt;/th&gt;
&lt;th&gt;検討内容&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;プライマリ列に何を入れるか&lt;/td&gt;
&lt;td&gt;ルックアップで参照されたとき何を表示したいか&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;日付列のタイムゾーン設定&lt;/td&gt;
&lt;td&gt;日付のみ管理する列はTime Zone Independentを選ぶ（後から変更不可）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;テキスト列の文字数&lt;/td&gt;
&lt;td&gt;デフォルト100文字。SharePointの255文字に合わせるなら変更が必要&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;選択肢列の選択肢&lt;/td&gt;
&lt;td&gt;後から追加は可能だが、削除は使われているとできない&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;必須項目&lt;/td&gt;
&lt;td&gt;Required設定は後から変更できるが、初期設計で決めておくとデータ品質が安定する&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;SharePointリストは列を後から追加・変更するのが容易で、その感覚のまま来るとDataverseの制約に驚くことがあります。一度テーブルを作り直すのは手間なので、設計に少し時間をかける価値はあります。&lt;/p&gt;
&lt;h2 id=&quot;sharepointリストとの設計フローの違いまとめ&quot;&gt;SharePointリストとの設計フローの違いまとめ&lt;/h2&gt;
&lt;p&gt;作業の順番を並べると次のようになります。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;手順&lt;/th&gt;
&lt;th&gt;SharePointリスト&lt;/th&gt;
&lt;th&gt;Dataverseテーブル&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;①&lt;/td&gt;
&lt;td&gt;空のリストを作成・保存&lt;/td&gt;
&lt;td&gt;テーブル名・プライマリ列を設定&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;②&lt;/td&gt;
&lt;td&gt;必要な列を一つずつ追加&lt;/td&gt;
&lt;td&gt;すべての列（名前・型・設定）を入力&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;③&lt;/td&gt;
&lt;td&gt;保存して即使用可能&lt;/td&gt;
&lt;td&gt;Createを押してテーブルが作成される&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;④&lt;/td&gt;
&lt;td&gt;後から列を追加・変更・削除&lt;/td&gt;
&lt;td&gt;列の追加は可能。一部の設定は変更不可&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;実際にSharePointリストのCRUD操作に慣れている方が、Dataverseで同様の操作をする際の違いについては&lt;a href=&quot;/powerapps-sharepoint-crud/&quot;&gt;SharePointリストのデータを読み書きする記事&lt;/a&gt;もあわせて参考にしてください。また、テーブルを設計した後のフォームでのデータ入力については&lt;a href=&quot;/powerapps-form-basics/&quot;&gt;フォームコントロールの記事&lt;/a&gt;で詳しく解説しています。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;SharePointは作ってから列を追加する設計、Dataverseは先に列を設計してからCreateを押す設計です&lt;/li&gt;
&lt;li&gt;プライマリ列はルックアップの表示名になります。作成後に変更できないため、最初に何を入れるか決めておきましょう&lt;/li&gt;
&lt;li&gt;日付列のタイムゾーン設定やテキスト列の文字数など、後から変更できない・しにくい設定が複数あります&lt;/li&gt;
&lt;li&gt;Copilotの自動生成はたたき台として便利ですが、そのまま使わず必ず手直しをしましょう&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;最初は設計ファーストという感覚が慣れないかもしれませんが、慣れてしまえばむしろきちんと設計してから作る習慣が身につきます。SharePointリストを作る前にもExcelで列を整理するようになったら、Dataverse的な設計思想が自然に身についてきたサインかもしれません。&lt;/p&gt;
&lt;p&gt;Dataverseの全体像はDataverseをSharePoint経験者向けに完全解説にまとめています。&lt;/p&gt;</content:encoded></item><item><title>Dataverseのテキスト列はデフォルト100文字｜SharePointに合わせる設定方法</title><link>https://shiminkaihatsu.com/dataverse-text-limit/</link><guid isPermaLink="true">https://shiminkaihatsu.com/dataverse-text-limit/</guid><description>Dataverseのテキスト列はデフォルト100文字｜SharePointに合わせる設定方法</description><pubDate>Wed, 25 Mar 2026 17:30:34 GMT</pubDate><content:encoded>&lt;p&gt;DataverseのテキストはSharePointとデフォルト文字数が違います。知らないままデータを入力し始めると、100文字を超えた分がいつの間にか切れています。&lt;/p&gt;
&lt;p&gt;SharePointの一行テキスト列は作った直後からデフォルト255文字で使えます。ところがDataverseの単一行テキストはデフォルト100文字です。移行前の社内システムや既存のSharePointリストにある住所・備考・商品名など、100文字を軽く超えることがある項目をそのままDataverseに持ってくると、静かにデータが欠けます。声を大にして言いたいのはこの一点です。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/dataverse-text-limit01.BKq_Aywl_Z14IwbF.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;単一行テキストデフォルト100文字最大400文字&quot;&gt;単一行テキスト：デフォルト100文字、最大400文字&lt;/h2&gt;
&lt;h3 id=&quot;sharepointとの比較&quot;&gt;SharePointとの比較&lt;/h3&gt;
&lt;p&gt;並べて確認するとこうなります。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;比較項目&lt;/th&gt;
&lt;th&gt;SharePoint 一行テキスト&lt;/th&gt;
&lt;th&gt;Dataverse 単一行テキスト&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;デフォルト文字数&lt;/td&gt;
&lt;td&gt;255文字&lt;/td&gt;
&lt;td&gt;100文字&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;変更できる上限&lt;/td&gt;
&lt;td&gt;255文字（固定）&lt;/td&gt;
&lt;td&gt;400文字まで拡張可&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;変更タイミング&lt;/td&gt;
&lt;td&gt;設定なし（常に255）&lt;/td&gt;
&lt;td&gt;列作成前後どちらでも変更可&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;SharePointは255文字から変えることができない代わりに最初から255文字が保証されていますが、Dataverseは自分で設定する必要があります。自由度が高い分、設定漏れのリスクがあります。&lt;/p&gt;
&lt;h3 id=&quot;100文字で足りなくなる実例&quot;&gt;100文字で足りなくなる実例&lt;/h3&gt;
&lt;p&gt;どんな項目が100文字を超えるか、イメージしにくい方向けに実例を挙げます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;住所（都道府県+市区町村+番地+マンション名で100文字を超えることがある）&lt;/li&gt;
&lt;li&gt;備考欄（自由入力なので100文字制限は短い）&lt;/li&gt;
&lt;li&gt;商品名・品番（長い正式名称が入る業種では超えることがある）&lt;/li&gt;
&lt;li&gt;URL（https://で始まる長いリンクは簡単に超える）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;自分が最初にDataverseでテーブルを作ったとき、住所列を100文字のままにして後から入力データが途中で切れているのに気づきました。すでに数十件入力した後で、列の文字数を変更してもデータは自動では修正されないため、ひとつひとつ確認する羽目になりました。テーブル設計の段階で変えておけばよかったと心底思いました。&lt;/p&gt;
&lt;h2 id=&quot;文字数を変更する手順&quot;&gt;文字数を変更する手順&lt;/h2&gt;
&lt;p&gt;列の文字数は作成前でも作成後でも変更できます。手順は以下です。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;make.powerapps.com でテーブルを開く&lt;/li&gt;
&lt;li&gt;対象の列をクリックして列の編集画面を開く&lt;/li&gt;
&lt;li&gt;Advanced optionsを展開する&lt;/li&gt;
&lt;li&gt;Maximum character countの値を変更する（例：255や400）&lt;/li&gt;
&lt;li&gt;保存する&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;既存データがある状態で文字数を増やす変更は問題ありません。反対に、文字数を減らす方向の変更は既存データが制限を超えていると保存できないことがあるので注意してください。&lt;/p&gt;
&lt;h2 id=&quot;複数行テキストデフォルト1000文字最大100万文字&quot;&gt;複数行テキスト：デフォルト1000文字、最大100万文字&lt;/h2&gt;
&lt;p&gt;複数行テキストはデフォルト1000文字で、SharePointの複数行テキストの約65,000文字と比べてもデフォルトで十分な容量があります。議事録・自由記述欄・メモ欄など、長文が入る可能性がある列はこちらを選びましょう。&lt;/p&gt;
&lt;p&gt;単一行テキストと複数行テキストの使い分けのポイントは、改行を含むかどうかです。住所や短い備考は単一行で十分ですが、議事録や詳細説明のように段落や改行が含まれる可能性がある項目は複数行を選んでおきます。後から単一→複数に変更するとデータの再確認が必要になるので、設計段階で判断しておくほうが楽です。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;比較項目&lt;/th&gt;
&lt;th&gt;SharePoint 複数行テキスト&lt;/th&gt;
&lt;th&gt;Dataverse 複数行テキスト&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;デフォルト文字数&lt;/td&gt;
&lt;td&gt;6列（設定なし）&lt;/td&gt;
&lt;td&gt;1000文字&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;最大文字数&lt;/td&gt;
&lt;td&gt;約65,000文字&lt;/td&gt;
&lt;td&gt;100万文字&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;改行の扱い&lt;/td&gt;
&lt;td&gt;対応&lt;/td&gt;
&lt;td&gt;対応&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;推奨設定用途別の文字数選択の目安&quot;&gt;推奨設定：用途別の文字数選択の目安&lt;/h2&gt;
&lt;p&gt;テーブルを作るときに列ごとに文字数を考えるのは最初は手間に感じますが、慣れてくると5秒で判断できるようになります。迷ったときはこの表を参考にしてください。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;列の用途&lt;/th&gt;
&lt;th&gt;推奨設定&lt;/th&gt;
&lt;th&gt;理由&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;氏名・担当者名&lt;/td&gt;
&lt;td&gt;100文字（デフォルト）&lt;/td&gt;
&lt;td&gt;通常は50文字以内。デフォルトで十分&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;住所&lt;/td&gt;
&lt;td&gt;255文字以上&lt;/td&gt;
&lt;td&gt;都道府県+市区町村+番地で100文字を超えることがある&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;商品名・品番&lt;/td&gt;
&lt;td&gt;255文字&lt;/td&gt;
&lt;td&gt;長い正式名称が入る可能性を考慮&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;URL・リンク&lt;/td&gt;
&lt;td&gt;400文字（最大）&lt;/td&gt;
&lt;td&gt;長いURLは200文字を超えることもある&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;備考・メモ（短め）&lt;/td&gt;
&lt;td&gt;255〜400文字&lt;/td&gt;
&lt;td&gt;単一行テキストで対応可能な範囲&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;議事録・詳細説明&lt;/td&gt;
&lt;td&gt;複数行テキスト&lt;/td&gt;
&lt;td&gt;改行が含まれる。1000文字デフォルトで十分&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;住所やURLを扱う列は最初から400文字にしておいても特に問題はありません。上限を大きくすることでストレージが圧迫されるわけではないので、迷ったら大きめにしておくほうが後悔が少ないです。&lt;/p&gt;
&lt;h2 id=&quot;power-appsで入力前に文字数チェックする方法&quot;&gt;Power Appsで入力前に文字数チェックする方法&lt;/h2&gt;
&lt;p&gt;アプリ側でテキスト入力欄に文字数制限のフィードバックを出すには、Len関数を組み合わせます。たとえば入力欄の下にカウンター表示を置いたり、文字数が上限を超えたらSubmitボタンを無効化したりする実装が一般的です。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 入力残り文字数を表示する数式の例&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;255&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; Len&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(TextInput1.Text)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 文字数超過でSubmitボタンを無効化する数式の例&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Len&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(TextInput1.Text) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 255&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Len関数の使い方については&lt;a href=&quot;/powerapps-len/&quot;&gt;Len関数の記事&lt;/a&gt;でくわしく解説しています。また&lt;a href=&quot;/dataverse-table-vs-list/&quot;&gt;Dataverseのテーブル作成フローの記事&lt;/a&gt;ではテーブル設計全体の流れをまとめているので、文字数設定もあわせて設計段階で確認してみてください。&lt;/p&gt;
&lt;p&gt;SharePointとDataverseの列の違い全体については&lt;a href=&quot;/dataverse-column-types/&quot;&gt;Dataverse列データ型まとめ&lt;/a&gt;の記事に対応表があります。テキスト型以外の型も確認したい場合はそちらをどうぞ。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Dataverseの単一行テキストはデフォルト100文字です。SharePointの255文字とは異なります&lt;/li&gt;
&lt;li&gt;最大400文字まで拡張できます。列の作成前後どちらでも変更可能です&lt;/li&gt;
&lt;li&gt;住所・URL・備考など、100文字を超える可能性がある列は設計段階で文字数を変更しておきましょう&lt;/li&gt;
&lt;li&gt;複数行テキストはデフォルト1000文字。議事録や自由記述欄はこちらを選びます&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;列を一本作るたびに文字数を確認するのは最初は面倒に感じるかもしれませんが、後からデータが欠けていることに気づくほうがはるかに大変です。テーブル設計の習慣として身につけておきましょう。&lt;/p&gt;
&lt;p&gt;Dataverseの全体像はDataverseをSharePoint経験者向けに完全解説にまとめています。&lt;/p&gt;</content:encoded></item><item><title>DataverseのYes/NoはSharePointのYes/Noと別物｜Boolean判定できない理由</title><link>https://shiminkaihatsu.com/dataverse-yesno/</link><guid isPermaLink="true">https://shiminkaihatsu.com/dataverse-yesno/</guid><description>DataverseのYes/NoはSharePointのYes/Noと別物｜Boolean判定できない理由</description><pubDate>Wed, 25 Mar 2026 17:30:32 GMT</pubDate><content:encoded>&lt;p&gt;SharePointリストのYes/No列と同じ感覚でDataverseのYes/No列を使おうとすると、Power Appsの数式やPower Automateのフロー条件で動かないケースに当たります。原因は、SharePointのYes/NoはBoolean型（true/false）ですが、DataverseのYes/Noは選択肢型（Choice）だからです。&lt;/p&gt;
&lt;p&gt;名前が同じだけに混乱しやすいです。この記事でその違いと正しい扱い方を整理します。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/dataverse-yesno01.DWXJuvCE_ZA0uFx.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;sharepointのyesnobooleandataverseのyesnochoice&quot;&gt;SharePointのYes/No＝Boolean、DataverseのYes/No＝Choice&lt;/h2&gt;
&lt;h3 id=&quot;sharepointのyesno列&quot;&gt;SharePointのYes/No列&lt;/h3&gt;
&lt;p&gt;SharePointリストのYes/No列は、内部的にBoolean型（真偽値）で保存されます。値は trueまたはfalseの2択です。&lt;/p&gt;
&lt;p&gt;Power Appsから参照するとき、チェックボックスの状態を If(ThisItem.承認済み, “済”, “未”) のように直接Boolean判定できます。Power Automateフローの条件式でも is equal to true という書き方が自然に機能します。&lt;/p&gt;
&lt;h3 id=&quot;dataverseのyesno列&quot;&gt;DataverseのYes/No列&lt;/h3&gt;
&lt;p&gt;一方、DataverseのYes/No列は、内部的にはChoice型（選択肢型）として扱われます。「Yes」と「No」という2つの選択肢が定義された選択肢列です。&lt;/p&gt;
&lt;p&gt;そのため If(ThisItem.承認済み, “済”, “未”) という書き方では動きません。選択肢列に対してBoolean判定（true/false直接比較）をしているためです。Power Appsから見ると、この列はBoolean値ではなくOptionSetValueとして認識されます。&lt;/p&gt;
&lt;p&gt;実際にこの詰まりポイントに当たって、「なぜSharePointと同じように書いたのに動かないんだ」と30分ほど悩んだことがあります。結論を知ってしまえば単純ですが、知らないと原因にたどり着けません。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/dataverse-yesno02.CE3HMrzO_LVja7.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;power-appsでの正しい扱い方&quot;&gt;Power Appsでの正しい扱い方&lt;/h2&gt;
&lt;h3 id=&quot;選択肢の値を比較する&quot;&gt;選択肢の値を比較する&lt;/h3&gt;
&lt;p&gt;DataverseのYes/No列を条件分岐に使うには、Boolean直接判定ではなく選択肢の値との比較が必要です。以下のような書き方をします。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// ❌ 動かない（SharePoint式の書き方）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(ThisItem.承認済み, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;済&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;未&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// ✅ 動く（Dataverse Yes/No列の正しい書き方）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(ThisItem.承認済み &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; &apos;テーブル名（承認済み）&apos;.Yes, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;済&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;未&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;‘テーブル名（承認済み）’.Yes の部分は、Power Apps上でEnum（列挙型）として扱う記法です。実際には候補が自動補完で表示されますので、入力中に候補から選べば正しく書けます。&lt;/p&gt;
&lt;h3 id=&quot;filter関数での使い方&quot;&gt;Filter関数での使い方&lt;/h3&gt;
&lt;p&gt;ギャラリーや変数に絞り込んだデータをセットするときも同様です。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// ❌ 動かない&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(案件管理, 承認済み &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; true&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// ✅ 動く&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(案件管理, 承認済み &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; &apos;案件管理（承認済み）&apos;.Yes)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;a href=&quot;/powerapps-filter-search-lookup/&quot;&gt;Filter・Search・LookUpの使い分け&lt;/a&gt;の記事でも触れていますが、列型によって条件の書き方が変わる点は意識しておきたいです。また、If・Switchの使い分けについては&lt;a href=&quot;/powerapps-if-switch/&quot;&gt;Power AppsのIfとSwitch記事&lt;/a&gt;も参考にしてください。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/dataverse-yesno03.E1KjgCYu_1pmCu1.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;power-automateフローでの正しい扱い方&quot;&gt;Power Automateフローでの正しい扱い方&lt;/h2&gt;
&lt;h3 id=&quot;フローの条件式での注意点&quot;&gt;フローの条件式での注意点&lt;/h3&gt;
&lt;p&gt;Power Automateでも同様に、DataverseのYes/No列はBoolean値ではなく整数値（0または1）として取得されます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Yes（選択されている）= 1&lt;/li&gt;
&lt;li&gt;No（選択されていない）= 0&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;フローの条件ステップで「is equal to true」と書くと動きません。代わりに「is equal to 1」と書きます。トリガー条件（ODataフィルタークエリ）を使ってYes/Noで絞り込む場合は以下のようになります。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// Dataverse Yes/No列でYesのレコードだけ取得するODataフィルター&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;承認済み eq &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// または整数で書く場合&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;承認済み eq &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ODataフィルタークエリの書き方はDataverseとSharePointで微妙に異なります。&lt;a href=&quot;/powerautomate-trigger-condition/&quot;&gt;Power Automateのトリガー条件の記事&lt;/a&gt;もあわせて参考にしてください。&lt;/p&gt;
&lt;h3 id=&quot;フローでのデバッグ&quot;&gt;フローでのデバッグ&lt;/h3&gt;
&lt;p&gt;「条件に合致するはずなのに動かない」場合は、Composeアクションで列の生の値を確認するのが手っ取り早いです。0か1かtrueかfalseか、実際の型を目で確認してから条件式を書くと詰まりにくくなります。&lt;/p&gt;
&lt;h2 id=&quot;なぜdataverseはboolean型にしなかったのか&quot;&gt;なぜDataverseはBoolean型にしなかったのか&lt;/h2&gt;
&lt;p&gt;DataverseがYes/No列をChoiceとして実装しているのは、「Yes」と「No」のラベルをカスタマイズできるようにするためです。たとえば「承認済み」と「未承認」、「有効」と「無効」のように表示名を変えられる柔軟性があります。&lt;/p&gt;
&lt;p&gt;Dataverseはもともと大規模なビジネスアプリ向けのデータストアとして設計されており、選択肢型での実装のほうがメタデータとして管理しやすいという背景もあります。SharePointの単純なBoolean型より複雑になりますが、その分自由度は高いです。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;DataverseのYes/No列はSharePointのYes/No列と同名ですが、内部型が異なります（SharePoint＝Boolean、Dataverse＝Choice）&lt;/li&gt;
&lt;li&gt;Power Appsでは If(field, …) の直接Boolean判定は動きません。 field = ‘列名の列挙型’.Yes の形式で比較します&lt;/li&gt;
&lt;li&gt;Power Automateフローでは整数値（1 = Yes、0 = No）として扱われます&lt;/li&gt;
&lt;li&gt;ODataフィルタークエリでは 列名 eq true または 列名 eq 1 の形式を使います&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;DataverseとSharePointの違いはこのYes/No列に限らず列型全体で起きます。詳細は&lt;a href=&quot;/dataverse-column-types/&quot;&gt;Dataverseの列データ型まとめ&lt;/a&gt;で解説しています。&lt;/p&gt;
&lt;p&gt;Dataverseの全体像はDataverseをSharePoint経験者向けに完全解説にまとめています。&lt;/p&gt;</content:encoded></item><item><title>Power Apps のデータソースでExcelの評価をちょっとだけ見直した件</title><link>https://shiminkaihatsu.com/excel-datasource/</link><guid isPermaLink="true">https://shiminkaihatsu.com/excel-datasource/</guid><description>Power Apps のデータソースでExcelの評価をちょっとだけ見直した件</description><pubDate>Sat, 27 Jul 2024 21:02:25 GMT</pubDate><content:encoded>&lt;p&gt;一昔前まで Power Apps のデータソースに Excel を使うのはタブー視されていましたが、ここ最近になってExcelも場合によってはありと見直すようになりました。&lt;/p&gt;
&lt;p&gt;本格的な開発にはやっぱりリスト/Dataverse一択になってしまうのですが、どうして Excel への評価を見直すことになったか紹介します。&lt;/p&gt;
&lt;h2 id=&quot;excelの進化&quot;&gt;Excelの進化&lt;/h2&gt;
&lt;p&gt;Excel を Power Apps のデータソースとして使うのは絶対に避けなければいけない理由が、過去にはいくつか存在しました。&lt;/p&gt;
&lt;p&gt;しかし、2021年4月以降の数回のアップデートにより、Excelは進化を遂げています。&lt;/p&gt;
&lt;h3 id=&quot;委任が一切できなかった一部は委任できるようになっている&quot;&gt;委任が一切できなかった▶一部は委任できるようになっている&lt;/h3&gt;
&lt;p&gt;Excel をデータソースにすると一切の関数が委任不可でした。&lt;/p&gt;
&lt;p&gt;委任できないということは、どんなに頑張っても2,000件までしかデータが扱えなかったということです。&lt;/p&gt;
&lt;p&gt;しかし今では一部関数は委任問題をクリアするようになっています。&lt;/p&gt;
&lt;h3 id=&quot;同時編集できなかった同時編集できるようになっている&quot;&gt;同時編集できなかった▶同時編集できるようになっている&lt;/h3&gt;
&lt;p&gt;Excel をデータソースにしたアプリを使う場合、誰かがアプリを開いている時に別の場所で同時にアプリを起動するとエラーが起きていましたが、それが今はクリアになっています。&lt;/p&gt;
&lt;p&gt;また、Excelが開きっぱなしだとアプリ側でパッチ処理がエラーになる（Submit Formも同様）事象がありましたが、これも無くなっています。&lt;/p&gt;
&lt;h3 id=&quot;関数が入っているとエラーエラーにならなくなった&quot;&gt;関数が入っているとエラー▶エラーにならなくなった&lt;/h3&gt;
&lt;p&gt;セルに関数（＝A1+B1など）が入っているとアプリのエラーを引き起こしていましたが、それも無くなりました。&lt;/p&gt;
&lt;h3 id=&quot;変更履歴が残らなかったexcelに履歴が残るようになった&quot;&gt;変更履歴が残らなかった▶Excelに履歴が残るようになった&lt;/h3&gt;
&lt;p&gt;誰がいつどんな変更を加えたか、アプリから変更を加えたExcelに履歴が残るようになりました。&lt;/p&gt;
&lt;h2 id=&quot;コツはコネクションを使うこと&quot;&gt;コツはコネクションを使うこと&lt;/h2&gt;
&lt;p&gt;ただし、上記のExcel進化を体感するためには、キャンバスアプリからExcel Online（Business）コネクタ、またはOneDrive for Businessコネクタを使ってExcelと連携しなくてはいけません。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/excel-rev01.wN8QWj8-_Z2dwfKH.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1306&quot; height=&quot;1164&quot;&gt;&lt;/p&gt;
&lt;p&gt;データの追加から接続する必要がある&lt;/p&gt;
&lt;p&gt;アプリを新規作成する際にデータで開始するから始めてしまうと、内部で古いExcelのコネクションを使ってしまうようで、進化する前のポンコツExcel機能しか利用できません。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/excel-rev02.Du7VNUiF_ZxPppe.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;815&quot;&gt;&lt;/p&gt;
&lt;p&gt;外部データを選択、は使わないように。&lt;/p&gt;
&lt;h2 id=&quot;excel-onlinebusinessとonedrive-for-businessの違い&quot;&gt;Excel Online(Business)とOneDrive for Businessの違い&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Excel Online（Business）コネクタ&lt;/li&gt;
&lt;li&gt;OneDrive for Businessコネクタ&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;この2つのコネクタのどちらかを利用しなければいけないのはわかったけど、2つの違いが気になると思います。&lt;/p&gt;
&lt;p&gt;2024年7月現在、どちらのコネクタを利用するかで、進化版Excelの機能に違いがあることがわかっています。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Excel Online (Business)&lt;/th&gt;
&lt;th&gt;OneDrive for Business&lt;/th&gt;
&lt;th&gt;データで開始 した場合&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Search関数&lt;/td&gt;
&lt;td&gt;1列のみ。委任可能。&lt;/td&gt;
&lt;td&gt;複数列。委任可能。&lt;/td&gt;
&lt;td&gt;1列のみ。委任不可。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;同時編集&lt;/td&gt;
&lt;td&gt;可能&lt;/td&gt;
&lt;td&gt;不可&lt;/td&gt;
&lt;td&gt;不可&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;関数を使ったセル&lt;/td&gt;
&lt;td&gt;エラー&lt;/td&gt;
&lt;td&gt;表示可能&lt;/td&gt;
&lt;td&gt;エラー&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Search関数が委任可能な点は見逃せないでしょう。&lt;/p&gt;
&lt;p&gt;この点においてはリストよりも優れていますし、Search以外でも、リストでは委任不可でもExcelで委任可能な関数は存在すると思われます。&lt;/p&gt;
&lt;h2 id=&quot;それでもexcelが主役のデータソースにはならない理由&quot;&gt;それでもExcelが主役のデータソースにはならない理由&lt;/h2&gt;
&lt;p&gt;地味に進化する（そしてそれが公式ドキュメントに載っていないという）Excelですが、それでも私は本番開発においてExcelを使うことはこの先ないでしょう。本番開発においては&lt;a href=&quot;https://shiminkaihatsu.com/splist_mslist/&quot;&gt;SharePoint Listsの活用&lt;/a&gt;か、可能であればDataverseを選ぶことをおすすめします。&lt;/p&gt;
&lt;p&gt;その理由はこちらです。&lt;/p&gt;
&lt;h3 id=&quot;ユーザー列が存在しない&quot;&gt;ユーザー列が存在しない&lt;/h3&gt;
&lt;p&gt;Excelにはユーザー列が存在しないため、入力者情報の取り扱いが面倒です。&lt;/p&gt;
&lt;p&gt;リストやDataverseは入力した人の氏名・アドレス・所属部署などEntra IDに紐づく情報を抽出できますが、Excelにはそれがありません。&lt;/p&gt;
&lt;h3 id=&quot;画像の取り扱いが不明&quot;&gt;画像の取り扱いが不明&lt;/h3&gt;
&lt;p&gt;これは私が未検証なのが理由ですが、Excelにおける画像の取り扱いが不明です。&lt;/p&gt;
&lt;p&gt;できるのかもしれませんし、できないかもしれません。&lt;/p&gt;
&lt;h3 id=&quot;power-automateとの相性が悪い&quot;&gt;Power Automateとの相性が悪い&lt;/h3&gt;
&lt;p&gt;Power AutomateとExcel Onlineは非常に相性が悪いです。&lt;/p&gt;
&lt;p&gt;Power AutomateでExcel Onlineに何らかの変更をかけた場合、Excel内部でその情報が反映されるまでにラグ（遅延）が発生します。&lt;/p&gt;
&lt;p&gt;そのため、AutomateのApply to eachアクションで繰り返し同じ処理をExcel Onlineに施す場合、遅延回避の処理を入れておかないと新しいデータが古いデータを上書きしてしまい、正しく処理されない事象が発生してしまうのです。&lt;/p&gt;
&lt;p&gt;リストやDataverseであれば、Automateの処理は即座に反映されるため、ラグを心配する必要なく使えます。&lt;/p&gt;
&lt;p&gt;参考までに、このラグは1つのデータに対しておよそ40秒〜50秒ほどあります（2024年7月現在）。&lt;/p&gt;
&lt;p&gt;例えば、10人分の日報をApply to eachでExcel Onlineに転記し、1つずつPDFに変換しようとする場合、遅延回避のアクションを組み込むと約10分弱かかってしまうというわけです。&lt;/p&gt;
&lt;h2 id=&quot;excelのご利用は計画的に&quot;&gt;Excelのご利用は計画的に&lt;/h2&gt;
&lt;p&gt;一部のネット情報や動画では、Excelは絶対に使ってはならないデータソースと訴えるものがありますが、それは2021年4月以前のExcelを触った人か、もしくはコネクションの仕様を知らない人でしょう。&lt;/p&gt;
&lt;p&gt;Excelはその後も地味に進化を続けていて、全く非推奨とまではいわないレベルになっていると感じます。&lt;/p&gt;
&lt;p&gt;ただし最後に述べたように、本番開発において私がExcelデータソースを利用することはありませんし、開発に慣れた人も、今更Excelが進化していると知ったところで、使い勝手のいいリスト／Dataverseから乗り換える理由は見当たらないでしょう。&lt;/p&gt;
&lt;p&gt;Excelは個人で使うアプリ、練習用アプリで気軽に使うデータソースとしてとどめ、リストもしくはDataverseに少しでも早く慣れるといいでしょう。&lt;/p&gt;
&lt;p&gt;SharePoint ListsをPower Appsのデータソースとして活用する具体的な実装については、&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-sharepoint-crud/&quot;&gt;Power AppsでSharePointリストのデータを読み書きする記事&lt;/a&gt;で詳しく解説しています。あわせて参考にしてください。&lt;/p&gt;
&lt;p&gt;どのデータソースを選ぶかは、アプリの規模・ユーザー数・予算によって変わります。Power Apps開発の全体マップ記事では、データソース選びも含めた開発全体のロードマップを解説しています。&lt;/p&gt;</content:encoded></item><item><title>Power Apps開発をAIで加速するテクニック</title><link>https://shiminkaihatsu.com/howtoaskai/</link><guid isPermaLink="true">https://shiminkaihatsu.com/howtoaskai/</guid><description>Power Apps開発をAIで加速するテクニック</description><pubDate>Sat, 12 Oct 2024 10:25:56 GMT</pubDate><content:encoded>&lt;p&gt;Power Apps開発にAIをうまく活用すれば、調べる時間を大幅に短縮できます。ここでは私が実際に使っているAIへの具体的な質問テクニックを紹介します。&lt;/p&gt;
&lt;h2 id=&quot;aiへの質問テクニック&quot;&gt;AIへの質問テクニック&lt;/h2&gt;
&lt;h3 id=&quot;有名どころのaiを使えばok&quot;&gt;有名どころのAIを使えばOK&lt;/h3&gt;
&lt;p&gt;ChatGPT、Gemini、Copilot、Perplexity、Gensparkなど巷はAIで溢れかえっていますが、耳にしたことがあるAIを使えばいいです。&lt;/p&gt;
&lt;p&gt;個人的にはChatGPT有償版をずっと使っています。レスポンス速度や機能面で無料版より使いやすいです。&lt;/p&gt;
&lt;p&gt;有償版はちょっと・・・という方はGeminiがいいですね。無料で高性能バージョンのAIが使えます。&lt;/p&gt;
&lt;p&gt;ただし、&lt;a href=&quot;https://gemini.google.com/app?hl=ja&quot;&gt;&lt;strong&gt;こちらのGemini&lt;/strong&gt;&lt;/a&gt;ではなく、&lt;a href=&quot;https://aistudio.google.com/app/prompts/new_chat?pli=1&quot;&gt;&lt;strong&gt;開発版のこちらのGemini&lt;/strong&gt;&lt;/a&gt;じゃないと高性能AIは使えないので注意しましょう。&lt;/p&gt;
&lt;h3 id=&quot;具体的な質問あいまいな質問&quot;&gt;具体的な質問＞あいまいな質問&lt;/h3&gt;
&lt;p&gt;AIには可能な限り具体的な質問を投げます。&lt;/p&gt;
&lt;p&gt;✕）Power Appsでボタンを押して確認画面を出すにはどうする？&lt;/p&gt;
&lt;p&gt;◯）Power Appsでユーザーが削除ボタンを押下した際、誤操作防止と意思確認のために確認画面をポップアップ表示したい。どう実装する？&lt;/p&gt;
&lt;p&gt;あいまいな質問にはあいまいな回答が返ってきますし、具体的な質問には具体的な回答が返ってきます。&lt;/p&gt;
&lt;p&gt;ただし、使用するAI性能によってはあいまいな質問でも通ることがあります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerappsai1.CdZzZ2yV_Wtq8c.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;819&quot;&gt;&lt;/p&gt;
&lt;p&gt;ChatGPT有償版はあいまいな質問でも回答がきた&lt;/p&gt;
&lt;p&gt;ChatGPT有償版（4o）は求めていた回答を一発で出しました。さすがです。&lt;/p&gt;
&lt;p&gt;一方、無料のCopilotはというと。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;Copilotは残念な結果&lt;/p&gt;
&lt;p&gt;あいまいな質問には的外れな回答が来ました。&lt;/p&gt;
&lt;p&gt;Copilotに具体的な質問をしたらどうなったかというと、&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;Copilotの限界か？&lt;/p&gt;
&lt;p&gt;一応やりたいことは実現できそうな回答ですが、私にとっては90点な内容でした。&lt;/p&gt;
&lt;p&gt;いつも私がポップアップ機能を作るとき、Set関数（グローバル変数）ではなくUpdateContext関数（ローカル変数）を使いますが、CopilotはSet関数を提示していますね。&lt;/p&gt;
&lt;p&gt;その点ChatGPT有償版は、最初からUpdateContext関数での回答です。さすがです。&lt;/p&gt;
&lt;h3 id=&quot;やりたいことの流れを説明する&quot;&gt;やりたいことの流れを説明する&lt;/h3&gt;
&lt;p&gt;その質問に至るまでの過程を細かくAIに伝えると、こちらの意図を汲み取った回答を返してくれやすくなります。&lt;/p&gt;
&lt;p&gt;例：&lt;/p&gt;
&lt;p&gt;日報提出アプリを作ろうとしている、GalleryのItemsにリストを設定して一覧表示させた、一覧の項目をクリックしたら画面が切り替わって詳細が表示されるようにしたい。何をどうしたらいいか？&lt;/p&gt;
&lt;h3 id=&quot;スクリーンショットを使う&quot;&gt;スクリーンショットを使う&lt;/h3&gt;
&lt;p&gt;エラー発生時、式をコピペしてAIに丸投げして質問するのはよく知られています。&lt;/p&gt;
&lt;p&gt;私はエラー箇所をスクリーンショットしてAIに貼り付けてどういうこと？と一言だけ聞きます。&lt;/p&gt;
&lt;p&gt;WindowsでChatGPTを使っている場合、Shift+Win+Sで任意の範囲で画面切り取り（スクリーンショット）ができ、画像保存せずそのままChatGPTのチャット欄にCtrl+Vで画像アップロードが可能です。&lt;/p&gt;
&lt;p&gt;Power Appsはエラーメッセージの内容はコピーできないため、スクリーンショットが最も効率的かつ入力ミスもないのです。&lt;/p&gt;
&lt;p&gt;ただし、これもやはりAIの種類や料金プランによって画像貼り付けができないものがあるので注意しましょう。&lt;/p&gt;
&lt;p&gt;無料版で先におすすめしたGeminiは、一度Googleドライブに画像を保存した後Geminiで読み込む手間が発生します。&lt;/p&gt;
&lt;h3 id=&quot;代案を聞いてみる&quot;&gt;代案を聞いてみる&lt;/h3&gt;
&lt;p&gt;AIが出した回答が難しくて理解できないときは、もっと簡単なやり方はある？と聞いてみます。&lt;/p&gt;
&lt;p&gt;実はもっとシンプルな道筋が存在することもあり、違う角度から質問してみるといいかもしれません。&lt;/p&gt;
&lt;h3 id=&quot;yamlで投げる&quot;&gt;YAMLで投げる&lt;/h3&gt;
&lt;p&gt;エラーが出たら、自分が作ったコントロールをYAMLコピーし、AIに投げて何が違うか聞いてみましょう。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;YAMLコピーすると、複雑なプロパティの中身をコードで表示してくれますので、AIが構造を理解できるのです。&lt;/p&gt;
&lt;h3 id=&quot;aiに解説してもらう&quot;&gt;AIに解説してもらう&lt;/h3&gt;
&lt;p&gt;Power Appsで作りたい機能があってネット検索したところ、詳しい手順を紹介した記事があったとします。&lt;/p&gt;
&lt;p&gt;ところが内容が難しく、手順通りにやってもうまくいきません。&lt;/p&gt;
&lt;p&gt;そんなとき、記事のURLをAIに貼り付けるか、記事をまるまるコピーしてAIに貼り付けて手順をわかりやすく教えてと聞きましょう。&lt;/p&gt;
&lt;p&gt;途中でエラーが出たらスクリーンショットして聞けばいいです。&lt;/p&gt;
&lt;p&gt;もしくはこの記事とは別のアプローチでやり方ない？と聞くのも良さげです。&lt;/p&gt;
&lt;h3 id=&quot;存在しない機能や関数に注意&quot;&gt;存在しない機能や関数に注意&lt;/h3&gt;
&lt;p&gt;AIは万能ではないため、Power Fxに存在しない関数を平気で答えとして出すことがあります。&lt;/p&gt;
&lt;p&gt;Power Appsのエラーで存在しない関数ですのようなエラーが出るのでわかりやすいです。&lt;/p&gt;
&lt;p&gt;そんな時は〜という関数はPower Appsでは使えない、ちゃんと回答してとたしなめるといいですね。&lt;/p&gt;
&lt;h3 id=&quot;複数のaiをつかう&quot;&gt;複数のAIをつかう&lt;/h3&gt;
&lt;p&gt;求める答えがChatGPTで出なければGeminiを使いますし、それがだめならPerplexityを使いますし、複数のAIを使いましょう。&lt;/p&gt;
&lt;h3 id=&quot;繰り返し質問する&quot;&gt;繰り返し質問する&lt;/h3&gt;
&lt;p&gt;求める答えが出ないからといって、一度聞いただけで諦めてはいけません。&lt;/p&gt;
&lt;p&gt;切り口を変えて、表現を変えて、繰り返し質問を続けることが大切です。&lt;/p&gt;
&lt;p&gt;AIは万能ではありません。使いこなす側の人間の質問力と根性が問われるのです。&lt;/p&gt;
&lt;h2 id=&quot;aiと組み合わせると特に効果的な場面&quot;&gt;AIと組み合わせると特に効果的な場面&lt;/h2&gt;
&lt;p&gt;個人的にAIが特に役立つと感じているのは、パフォーマンス改善です。アプリが遅い・重いと感じたとき、原因の特定と改善策の提案をAIに聞くとヒントがもらえることが多いです。&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-performance/&quot;&gt;Power Appsが重い・遅いと感じたときの改善策の記事&lt;/a&gt;もあわせて参考にしてください。&lt;/p&gt;
&lt;p&gt;Power Apps開発の全体像については、Power Apps開発の全体マップ記事でまとめて解説しています。AIはあくまで補助ツールですが、うまく活用することで学習スピードが大幅に上がります。&lt;/p&gt;
&lt;h2 id=&quot;あなたのおすすめおしえてください&quot;&gt;あなたのおすすめ、おしえてください&lt;/h2&gt;
&lt;p&gt;他にもこんなAIテクニックがあるよ、という方はぜひ教えて下さい！&lt;/p&gt;</content:encoded></item><item><title>Power Appsの画面遷移とNavigate関数。複数画面アプリの基本設計</title><link>https://shiminkaihatsu.com/navigate-powerapps/</link><guid isPermaLink="true">https://shiminkaihatsu.com/navigate-powerapps/</guid><description>Power Appsの画面遷移とNavigate関数。複数画面アプリの基本設計</description><pubDate>Mon, 16 Mar 2026 15:46:50 GMT</pubDate><content:encoded>&lt;p&gt;Power Appsで複数画面のアプリを作るなら、Navigate関数を理解することが最初の関門です。これを押さえると、ボタンを押して画面を切り替える、一覧から詳細に移動するといった動作が一気に作れるようになります。&lt;/p&gt;
&lt;h2 id=&quot;複数画面アプリの基本的な考え方&quot;&gt;複数画面アプリの基本的な考え方&lt;/h2&gt;
&lt;p&gt;Power Appsでは、1つのアプリの中に複数のスクリーン（画面）を作ることができます。左側のツリービューを見ると、スクリーンが一覧で並んでいる場所があると思います。スクリーンを追加するほど、表現できるアプリの幅が広がります。&lt;/p&gt;
&lt;p&gt;ただし、スクリーンは互いに独立しています。つまり、スクリーンAのコントロールにスクリーンBから直接アクセスすることはできません。画面をまたいでデータを使いたいときは、変数という仕組みを使う必要があります。この点は最初に覚えておくと後で混乱しません。&lt;/p&gt;
&lt;p&gt;画面遷移を実現する関数が Navigate関数 と Back関数 です。この2つを使いこなすことで、複数画面アプリの基礎が固まります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/navigate-powerapps02.Cgu4FfTk_Z1dTjGk.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;670&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;navigate関数の基本&quot;&gt;Navigate関数の基本&lt;/h2&gt;
&lt;h3 id=&quot;構文と使い方&quot;&gt;構文と使い方&lt;/h3&gt;
&lt;p&gt;Navigate関数の基本的な書き方はシンプルです。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Navigate&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(遷移先スクリーン, 遷移アニメーション)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;例えば、ボタンを押して詳細画面に移動させたいとします。そのボタンのOnSelectプロパティに次のように書きます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Navigate&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(詳細画面, ScreenTransition.Cover)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;第1引数が移動先のスクリーン名、第2引数が遷移時のアニメーションです。アニメーションは省略も可能ですが、指定しておくと画面の切り替わりが自然に見えます。&lt;/p&gt;
&lt;h3 id=&quot;遷移アニメーションの選び方&quot;&gt;遷移アニメーションの選び方&lt;/h3&gt;
&lt;p&gt;よく使うアニメーションは3種類です。用途ごとに使い分けると、アプリの操作感が良くなります。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;アニメーション&lt;/th&gt;
&lt;th&gt;動作&lt;/th&gt;
&lt;th&gt;おすすめの場面&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;ScreenTransition.None&lt;/td&gt;
&lt;td&gt;アニメーションなし、即切り替え&lt;/td&gt;
&lt;td&gt;高速な操作が必要なとき、パフォーマンス重視のとき&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ScreenTransition.Fade&lt;/td&gt;
&lt;td&gt;フェードイン・アウト&lt;/td&gt;
&lt;td&gt;一般的な画面遷移。どこでも使いやすい&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ScreenTransition.Cover&lt;/td&gt;
&lt;td&gt;右からスライドしてくる&lt;/td&gt;
&lt;td&gt;一覧→詳細など、階層が深くなる方向への遷移&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;個人的には ScreenTransition.None か ScreenTransition.Cover をほぼ使っています。アニメーションが凝りすぎると動作がもたつくことがあるので、シンプルなもので十分です。&lt;/p&gt;
&lt;h3 id=&quot;back関数で元の画面に戻る&quot;&gt;Back関数で元の画面に戻る&lt;/h3&gt;
&lt;p&gt;詳細画面から一覧画面に戻るボタンには Back関数 を使います。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Back&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;これは直前のスクリーンに戻る関数です。使い方は簡単なのですが、1点だけ注意があります。Back()は画面の履歴を遡るので、複雑な遷移フローだと意図しない画面に戻ることがあります。シンプルなアプリであれば問題ないのですが、慣れてきたら明示的に遷移先を書くほうが安全です。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Navigate&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(一覧画面, ScreenTransition.None)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;こちらのほうが、どの画面に戻るかが一目でわかるのでおすすめです。&lt;/p&gt;
&lt;h2 id=&quot;コンテキスト変数を使って値を受け渡す&quot;&gt;コンテキスト変数を使って値を受け渡す&lt;/h2&gt;
&lt;h3 id=&quot;navigate関数の第3引数&quot;&gt;Navigate関数の第3引数&lt;/h3&gt;
&lt;p&gt;一覧画面でタップした行の情報を、詳細画面でも使いたい——こういう場面はよくあります。そのときに使うのが Navigate関数の第3引数 です。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Navigate&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(詳細画面, ScreenTransition.Cover, {selectedItem: ギャラリー1.Selected})&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;こう書くと、詳細画面に selectedItem という名前のコンテキスト変数が渡されます。コンテキスト変数とは、そのスクリーン内だけで有効な一時的な変数のことです。料理でいえば、調理台の上にしか置けない食材のようなものです。別のスクリーンに持ち出すことはできません。&lt;/p&gt;
&lt;p&gt;詳細画面では、渡されたコンテキスト変数をこのように使います。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;selectedItem.タイトル&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;selectedItem.担当者名&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;selectedItem.期日&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;SharePointリストのフィールド名をそのまま書けば、選択した行のデータが表示されます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/navigate-powerapps01.Cp2dFhnY_Z1WtfIg.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;671&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;グローバル変数との使い分け&quot;&gt;グローバル変数との使い分け&lt;/h3&gt;
&lt;p&gt;コンテキスト変数はそのスクリーン内でしか使えないので、詳細画面から編集画面にさらに移動したい場合は少し工夫が必要です。&lt;/p&gt;
&lt;p&gt;よく使う方法は2つあります。1つ目は Navigate関数の第3引数でそのまま次の画面にも渡す方法。2つ目は Set関数を使ってグローバル変数に保存しておく方法です。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// グローバル変数に保存してから遷移する場合&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Set&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(gSelectedItem, ギャラリー1.Selected);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Navigate&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(詳細画面, ScreenTransition.Cover)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;グローバル変数はアプリ全体からアクセスできるので、複数の画面をまたぐデータにはこちらが向いています。グローバル変数とコンテキスト変数の違いや使い分けについては、&lt;a href=&quot;/powerapps-variables/&quot;&gt;グローバル変数とコンテキスト変数の解説&lt;/a&gt;で詳しく整理しているので参照してみてください。&lt;/p&gt;
&lt;h2 id=&quot;実際の画面設計一覧詳細編集の3画面構成&quot;&gt;実際の画面設計——一覧・詳細・編集の3画面構成&lt;/h2&gt;
&lt;p&gt;業務アプリで最もよく使う画面構成が、一覧→詳細→編集の3画面パターンです。私が物流現場で作った申請管理アプリも、最初はこの構成から始めました。&lt;/p&gt;
&lt;h3 id=&quot;画面の役割と遷移の流れ&quot;&gt;画面の役割と遷移の流れ&lt;/h3&gt;
&lt;p&gt;各画面の役割を先に決めておくと、設計がスムーズになります。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;一覧画面：ギャラリーでデータをリスト表示する。行をタップすると詳細へ移動&lt;/li&gt;
&lt;li&gt;詳細画面：選択したレコードの情報を表示する。編集ボタンで編集画面へ&lt;/li&gt;
&lt;li&gt;編集画面：データを入力・変更してPatch関数で保存。完了後は一覧に戻る&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;一覧画面のギャラリーのOnSelectプロパティはこのようになります。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Navigate&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(詳細画面, ScreenTransition.Cover, {selectedRecord: ThisItem})&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ThisItemはギャラリーが今タップされているレコードを指します。これをコンテキスト変数 selectedRecord として詳細画面に渡します。詳細画面の各テキストラベルには selectedRecord.フィールド名 と書けば、選んだレコードの値が表示されます。&lt;/p&gt;
&lt;h3 id=&quot;変数の設計に少し時間をかけると後が楽になる&quot;&gt;変数の設計に少し時間をかけると後が楽になる&lt;/h3&gt;
&lt;p&gt;画面遷移で詰まるのは、だいたい変数の使い方が曖昧なときです。コンテキスト変数でいくか、グローバル変数でいくかを最初に決めておくと、作りながら迷わずに済みます。&lt;/p&gt;
&lt;p&gt;私がよく使うパターンは、詳細画面まではコンテキスト変数でデータを渡して、編集画面に進む段階でグローバル変数に切り替える方法です。詳細画面では読み取りだけなのでコンテキスト変数で十分。編集画面ではフォームとのやり取りもあるので、アプリ全体からアクセスできるグローバル変数のほうが扱いやすいのです。&lt;/p&gt;
&lt;p&gt;ギャラリーコントロール自体の使い方（リスト表示の設定、Selected状態の管理、Search関数との組み合わせ）については別記事で解説する予定です。Navigate関数と組み合わせると、より実用的な一覧画面が作れるようになります。&lt;/p&gt;
&lt;h2 id=&quot;注意点と限界&quot;&gt;注意点と限界&lt;/h2&gt;
&lt;h3 id=&quot;画面数が増えると管理が大変になる&quot;&gt;画面数が増えると管理が大変になる&lt;/h3&gt;
&lt;p&gt;Power Appsはスクリーン数が増えると、どの変数がどの画面で使われているかを追うのが難しくなります。スクリーンが10枚を超えてくるあたりから、変数名の付け方や画面の命名規則を統一しないと自分でも混乱しやすくなります。&lt;/p&gt;
&lt;p&gt;開発者ドキュメントには、スクリーン数やコントロール数が増えるほどパフォーマンスが落ちると書かれています。体感として、スクリーンが20を超えてくると動作がもたつき始めることがあります。複雑になりそうな場合は、画面の分け方自体を見直すか、コンポーネントの活用を検討してみてください。&lt;/p&gt;
&lt;h3 id=&quot;backは使いすぎに注意&quot;&gt;Back()は使いすぎに注意&lt;/h3&gt;
&lt;p&gt;Back()自体は便利なのですが、Navigate()で画面を飛ばした経路が複雑だと、Back()で戻る先が想定外になることがあります。ユーザーが予期しない画面に戻った場合、操作に迷わせてしまいます。シンプルな構成なら問題ないので、複雑になってきたら Navigate()で明示的に戻り先を指定するほうが安全です。&lt;/p&gt;
&lt;p&gt;アプリ開発の全体像については&lt;a href=&quot;/app-development-map/&quot;&gt;Power Apps開発の全体マップ&lt;/a&gt;に整理しています。画面設計だけでなく、データソース・関数・フォームなど各トピックへの地図になっているので、何から学べばいいか迷ったときに使ってみてください。また、アプリを作る一連の手順を知りたい方は&lt;a href=&quot;/appkaihatsunagare/&quot;&gt;Power Appsアプリ開発の流れ&lt;/a&gt;も参考にしてみてください。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;Navigate関数をマスターすると、複数画面を持つ本格的な業務アプリが作れるようになります。最初はNavigateで飛んで、Back()で戻るだけを覚えれば十分です。慣れてきたら第3引数でコンテキスト変数を渡して、画面間のデータ連携に挑戦してみてください。&lt;/p&gt;
&lt;p&gt;一覧→詳細→編集の3画面構成は、業務アプリの定番パターンです。まずはこれを1本作り切ることを目標にしてみましょう。地道に積み上げていけば、使い物になるアプリはちゃんと作れます。&lt;/p&gt;</content:encoded></item><item><title>Power Apps, Power Automate, アプリ作成の初心者におすすめの勉強手順</title><link>https://shiminkaihatsu.com/osusume-study/</link><guid isPermaLink="true">https://shiminkaihatsu.com/osusume-study/</guid><description>Power Apps, Power Automate, アプリ作成の初心者におすすめの勉強手順</description><pubDate>Thu, 01 Feb 2024 21:28:13 GMT</pubDate><content:encoded>&lt;p&gt;私が実際に実施してきた、Power Apps / Power Automate の初心者向けおすすめ勉強手順を紹介します。&lt;/p&gt;
&lt;h2 id=&quot;1-まずハンズオン動画教材&quot;&gt;1. まずハンズオン（動画教材）&lt;/h2&gt;
&lt;p&gt;初心者はハンズオンからスタートしましょう。&lt;/p&gt;
&lt;p&gt;ハンズオンとは、オンラインで動画を視聴し、手順通りに実際に手を動かしてアプリを作る流れのことを指します。&lt;/p&gt;
&lt;p&gt;代表的なものは “Udemy（ユーデミー）“でしょう。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/ppsyoshinsya01.571uPS-U_1XGqba.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;665&quot;&gt;&lt;/p&gt;
&lt;p&gt;初心者向けのPower Platform学習コースがたくさんあるので、一通り受講してみることです。&lt;/p&gt;
&lt;p&gt;本当に基礎の基礎から丁寧に教えてくれるので、動画の通りに作るだけで流れが理解できました。&lt;/p&gt;
&lt;p&gt;勤務開始前の通知アプリや注文系のアプリなど、コースの中でイチからアプリを作るので、達成感も感じられます。&lt;/p&gt;
&lt;p&gt;個人的におすすめだったのはこの2つのコース。&lt;/p&gt;
&lt;p&gt;『Microsoft Power Apps - 入門講座』&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/ppsyoshinsya02.D-IKUMis_ZNp0BV.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;239&quot;&gt;&lt;/p&gt;
&lt;p&gt;マスカワシゲルさん&lt;/p&gt;
&lt;p&gt;『【2023年版】Microsoft Power Apps 基礎マスターコース』&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/ppsyoshinsya03.CCMhqmxn_1ufgsB.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;208&quot;&gt;&lt;/p&gt;
&lt;p&gt;ヒョウノモトハルさん&lt;/p&gt;
&lt;p&gt;説明が丁寧でわかりやすく、非エンジニアの私でもすんなり理解できたのが印象的でした。&lt;/p&gt;
&lt;p&gt;当時、Power Appsの知識が皆無だった私も、きちんとアプリが出来上がりました。&lt;/p&gt;
&lt;p&gt;Udemyで学習を進めるにあたって気をつけるポイントはこちら。&lt;/p&gt;
&lt;h3 id=&quot;画面構成が異なることがある&quot;&gt;画面構成が異なることがある&lt;/h3&gt;
&lt;p&gt;Power AppsやPower Automateの設計画面は日々アップデートされるため、動画で紹介している画面構成は古く、最新版と異なることがあります。&lt;/p&gt;
&lt;p&gt;それでもどこに何の機能があるか自分で探し出し、自己解決する必要があります。&lt;/p&gt;
&lt;h3 id=&quot;アレンジするにはさらなる勉強が必要&quot;&gt;アレンジするにはさらなる勉強が必要&lt;/h3&gt;
&lt;p&gt;Udemyで作るアプリが自分の業務に完全にマッチすることはまずなく、多少なりともアレンジを加えたくなります。&lt;/p&gt;
&lt;p&gt;その場合、そこまで詳細にコースでは紹介されていないため、別の手段で勉強するしかありません。&lt;/p&gt;
&lt;h2 id=&quot;2-アプリを作る&quot;&gt;2. アプリを作る&lt;/h2&gt;
&lt;p&gt;動画でアプリ作成の流れを一通り理解したら、さっそく手を動かしてアプリ作成に移りましょう。&lt;/p&gt;
&lt;p&gt;ローコードを含め、プログラミングを勉強するときは、実践に勝る学習方法はないと思っています。&lt;/p&gt;
&lt;p&gt;✕　知識を身につけてから作る&lt;br/&gt;
◯　まず作り、作りながら知識を身につける&lt;/p&gt;
&lt;p&gt;この流れが正解です。&lt;/p&gt;
&lt;p&gt;アプリの制作手順をノートにまとめるなど、それも不要です。&lt;/p&gt;
&lt;p&gt;わからないことがあれば、その場でネット検索すればいいからです。&lt;/p&gt;
&lt;p&gt;Power Apps を作るには主に2通りの手順があり、『1. ExcelやSharePointリストからアプリを作る』であれば、本当に数クリックでアプリが自動生成されます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/ppsyoshinsya04.iF1l9CWA_21YdwF.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;718&quot;&gt;&lt;/p&gt;
&lt;p&gt;出来上がるアプリは、3画面構成です。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;データの一覧表示画面&lt;/li&gt;
&lt;li&gt;詳細画面&lt;/li&gt;
&lt;li&gt;新規入力画面&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;正直このままでは物足りなさがありますので、自分好みにレイアウトや表示内容を変更する必要があるでしょう。&lt;/p&gt;
&lt;p&gt;一方、『空のアプリ』は全くの白紙からアプリを作ります。&lt;/p&gt;
&lt;p&gt;パーツ配置や構成の自由度が高い反面、初心者にはハードルが高いです。&lt;/p&gt;
&lt;p&gt;まずは自動生成のアプリを作り、Power Fx の仕組みや挙動を確認してみるといいですね。&lt;/p&gt;
&lt;p&gt;アプリ制作にあたり、個人的に重要だと感じるポイントをまとめます。&lt;/p&gt;
&lt;h3 id=&quot;日常のちょっとした手間を削減できないか考える&quot;&gt;日常のちょっとした手間を削減できないか考える&lt;/h3&gt;
&lt;p&gt;Excelの日報、紙資料の提出、手間のかかる承認作業。&lt;/p&gt;
&lt;p&gt;面倒くさく感じているちょっとした作業をアプリのネタにするといいでしょう。&lt;/p&gt;
&lt;h3 id=&quot;業務に直結するものはいきなり作らなくていい&quot;&gt;業務に直結するものはいきなり作らなくていい&lt;/h3&gt;
&lt;p&gt;市民開発と聞くと、誰しも仕事の効率アップとかDXを目的としてしまいがちです。&lt;/p&gt;
&lt;p&gt;でも最初は仕事を忘れ、業務改善と無関係のアプリでも良しとしましょう。&lt;/p&gt;
&lt;p&gt;なぜなら、自分自身がPower Platformで具体的にどんなツールが作れるかを理解できていないから。&lt;/p&gt;
&lt;p&gt;例えば、今日の天気を入力して保存するだけのアプリとか、ボタンを押したら0〜100の数字がランダムに表示されるアプリとか、なんでもいいので形にしてみることです。&lt;/p&gt;
&lt;p&gt;その中でPower AppsやPower Automateの機能を習得し、テクニックが身につき、応用を効かせられるようになっていきます。&lt;/p&gt;
&lt;p&gt;目標を最初から仕事と結びつけると、度重なるエラーにやられてしまい、途中で挫折します。&lt;/p&gt;
&lt;p&gt;そうなる前に、簡単でもいいのでアプリをたくさん作っておくことで、試行錯誤する知識と経験を身につけることができます。&lt;/p&gt;
&lt;h3 id=&quot;excelは早々に卒業する&quot;&gt;Excelは早々に卒業する&lt;/h3&gt;
&lt;p&gt;Power AppsのデータベースにExcelを使うのはやめておきましょう。&lt;/p&gt;
&lt;p&gt;データが多くなると、アプリ内で限られた数の情報しか閲覧できなくなったり（委任問題）、2人以上が同時にアプリを使うと、片方のデータが正しく保存されない（排他制御）など、データベースとしては使い物にならないのです。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://shiminkaihatsu.com/excel-datasource/&quot;&gt;&lt;strong&gt;Excelデータベースも多少改善されつつある&lt;/strong&gt;&lt;/a&gt;ようですが、Listsが使えるのにあえてExcelを使う理由は正直見当たりません。&lt;/p&gt;
&lt;p&gt;作成の基本はLists、慣れてきたらDataverseも視野に入れるといいですね。&lt;/p&gt;
&lt;h3 id=&quot;要件定義やデータベース設計も最初は無視&quot;&gt;要件定義やデータベース設計も最初は無視&lt;/h3&gt;
&lt;p&gt;学習の初期では、アプリの要件定義やデータベース設計は無視して構いません。&lt;/p&gt;
&lt;p&gt;そんなことより、おもしろそうとか便利そうとか、自分の気持ちに素直になり、下手でもいいのでそれらを形にすることを意識しましょう。&lt;/p&gt;
&lt;p&gt;アプリを使う人や関係部署が増えてくると、要件定義・データベース設計は避けては通れないようになりますが、それまでは気にする必要はありません。&lt;/p&gt;
&lt;p&gt;そもそも、アプリにどんな機能を持たせるかとか、どんなデータテーブルと列を作るかなんてことは、ある程度アプリを作った経験がないとわかりっこないのです。&lt;/p&gt;
&lt;p&gt;アプリを作りながら「あぁ、あの機能もつけたいな」「この列がやっぱり必要で・・・あの列は削除して」という、まさに行ったり来たりを経験する中でしか磨かれないと思います。&lt;/p&gt;
&lt;h3 id=&quot;たくさんのアプリ開発事例を見る&quot;&gt;たくさんのアプリ開発事例を見る&lt;/h3&gt;
&lt;p&gt;他の人がどんなアプリを作っているか知ることはとても大切です。&lt;/p&gt;
&lt;p&gt;新しい機能を知れたりアイディアにつながったり、自分に無い情報を周りから得ることは重要です。&lt;/p&gt;
&lt;p&gt;気軽に相談できる間柄であれば、ソースを開示してくれるかもしれませんね。&lt;/p&gt;
&lt;h3 id=&quot;人が開発する様子を見て学ぶ&quot;&gt;人が開発する様子を見て学ぶ&lt;/h3&gt;
&lt;p&gt;機会があれば他人が開発する様子を見せてもらうといいでしょう。&lt;/p&gt;
&lt;p&gt;関数の使い方や書き方を勉強できるだけでなく、どういう順番で開発をすすめるのか、ショートカットキーは何があるのかなど、新しい気付きと発見が必ずあります。&lt;/p&gt;
&lt;p&gt;私もある程度開発経験を積みましたが、YouTubeで人が開発している様子を見ると今でも新しい発見がたくさんあります。&lt;/p&gt;
&lt;h2 id=&quot;2-1-情報の取り方&quot;&gt;2-1. 情報の取り方&lt;/h2&gt;
&lt;p&gt;自分であらゆる情報を調べて試行錯誤することが開発上達への道です。&lt;/p&gt;
&lt;p&gt;どういう情報を取るべきか、紹介します。&lt;/p&gt;
&lt;h3 id=&quot;chatgptに聞く&quot;&gt;ChatGPTに聞く&lt;/h3&gt;
&lt;p&gt;Power Fxでわからないことがあれば、ChatGPTに質問してみましょう。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/ppsyoshinsya05.FsWw-mLL_ZCBxGx.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;762&quot;&gt;&lt;/p&gt;
&lt;p&gt;有料版がおすすめです&lt;/p&gt;
&lt;p&gt;まるで市民開発のプロがつきっきりで面倒を見てくれるかのごとく、あらゆる質問に回答してくれます。&lt;/p&gt;
&lt;p&gt;困り事があったら、まずChatGPTを使ってみることをおすすめします。&lt;/p&gt;
&lt;p&gt;ただし、ChatGPTは万能ではなく、あたかも正解かのような口ぶりで平気で間違ったことを示してきます。&lt;/p&gt;
&lt;p&gt;提示された式をそのまま使っても動かないことはしょっちゅうなので、自力で解析して修正したり、間違っていることをChatGPTに伝えて直してもらう必要があります。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://shiminkaihatsu.com/howtoaskai/&quot;&gt;&lt;strong&gt;開発において上手にAIに質問するテクニックを紹介&lt;/strong&gt;&lt;/a&gt;していますので、興味があればこちらもどうぞ。&lt;/p&gt;
&lt;h3 id=&quot;youtubeを使う&quot;&gt;YouTubeを使う&lt;/h3&gt;
&lt;p&gt;YouTubeにもPower Platformの有益な情報が上がっていますので、積極的に調べてみましょう。&lt;/p&gt;
&lt;p&gt;英語で発信されている海外YouTuberの情報は豊富で高レベルなものが多くあります。&lt;/p&gt;
&lt;p&gt;英語に抵抗感の無い方はぜひ英語コンテンツの視聴を強くおすすめします。&lt;/p&gt;
&lt;h3 id=&quot;ネット検索する&quot;&gt;ネット検索する&lt;/h3&gt;
&lt;p&gt;ネットの情報も貴重な学習資料です。&lt;/p&gt;
&lt;p&gt;エラーをそのまま検索するのは常套手段ですが、作りたい機能や調べたい関数で検索して答えを見つけることも有効です。&lt;/p&gt;
&lt;p&gt;動画と違ってコードをコピペできるのがネット検索の利点ですが、データソース名や変数をそのまま貼り付けてもあなたの環境では動きません。&lt;/p&gt;
&lt;p&gt;どの箇所をどう修正するべきか見極める最低限の知識が必要です。&lt;/p&gt;
&lt;h3 id=&quot;公式コミュニティを検索する&quot;&gt;公式コミュニティを検索する&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://community.powerplatform.com/forums/thread/?groupid=b5652dc6-2c99-4e33-8b6f-45be4a896a40&amp;amp;page=1&quot;&gt;&lt;strong&gt;Power Apps公式フォーラム&lt;/strong&gt;&lt;/a&gt;、&lt;a href=&quot;https://community.powerplatform.com/forums/thread/?groupid=46ce02a3-e1a7-4176-81fc-d93a4001d287&quot;&gt;&lt;strong&gt;Power Automate公式フォーラム&lt;/strong&gt;&lt;/a&gt;の中身を検索し、欲しい情報を探します。&lt;/p&gt;
&lt;p&gt;情報はすべて英語ですが、非常に有益な情報の宝庫です。&lt;/p&gt;
&lt;p&gt;日本語フォーラムも存在しますが、情報量が圧倒的に少ないため、英語版がおすすめです。&lt;/p&gt;
&lt;p&gt;ChatGPTなどにコピペすれば英語コンテンツも怖くないですね。&lt;/p&gt;
&lt;h2 id=&quot;3-人に使ってもらう&quot;&gt;3. 人に使ってもらう&lt;/h2&gt;
&lt;p&gt;アプリは自分一人で使うより、他人に使ってもらったほうが勉強になることが多いです。&lt;/p&gt;
&lt;p&gt;自分なりによくできたアプリだと思っていても、他人の目で見たら改善点が見つかることはよくあります。&lt;/p&gt;
&lt;p&gt;式が抜けていて挙動がおかしかったり、このボタンはここにあったほうが使いやすいとか、後からどんどん見つかってくることでしょう。&lt;/p&gt;
&lt;p&gt;アプリの中にお問い合わせフォームを設けてフィードバックをもらったり、Teamsチャットで気軽に質問を受けられるようにしておくといいですね。&lt;/p&gt;
&lt;h2 id=&quot;4-質問できるコミュニティに参加する&quot;&gt;4. 質問できるコミュニティに参加する&lt;/h2&gt;
&lt;p&gt;市民開発で行き詰まったとき、質問できるコミュニティに参加するといいでしょう。&lt;/p&gt;
&lt;p&gt;社内でコミュニティがあるかもしれませんし、無いなら自分で人を集めて作ってしまいましょう。&lt;/p&gt;
&lt;p&gt;同じ志を持った人同士の集まりは、いい刺激になるはずです。&lt;/p&gt;
&lt;p&gt;わからないことがあれば先人に聞くのはアプリ制作において非常に大切ですが、なんでもかんでも聞いてしまうのはちょっと考えもの。&lt;/p&gt;
&lt;p&gt;トライアンドエラーで苦労して自力で解決した経験は、後々に大きな財産になります。&lt;/p&gt;
&lt;p&gt;自分で考えるクセも必要ですので、コミュニティに頼りっぱなしというのは避けたいですね。&lt;/p&gt;
&lt;h2 id=&quot;5-継続的に学習を続ける&quot;&gt;5. 継続的に学習を続ける&lt;/h2&gt;
&lt;p&gt;毎日少しでもいいのでアプリ制作を継続しましょう。&lt;/p&gt;
&lt;p&gt;時間がたつと、せっかく学習したことが抜けてしまいます。&lt;/p&gt;
&lt;p&gt;また、Power Platformは頻繁にアップデートされ、新しい関数や機能が追加されます。&lt;/p&gt;
&lt;p&gt;XやYouTubeなどで最新情報を積極的に取りに行くことが大事です。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;動画で概要をつかむ&lt;/li&gt;
&lt;li&gt;さっそくアプリをつくる&lt;/li&gt;
&lt;li&gt;人に使ってもらう&lt;/li&gt;
&lt;li&gt;コミュニティを探す&lt;/li&gt;
&lt;li&gt;学習を続ける&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;この流れです。&lt;/p&gt;
&lt;p&gt;先に知識を蓄えすぎるのは逆効果ですので、わからないなりにも手を動かして作ることをおすすめします。&lt;/p&gt;
&lt;p&gt;作っていく中でしかわからないことがたくさんあるのです。&lt;/p&gt;</content:encoded></item><item><title>Power AppsでOutlookスケジュールの詳細を表示するギャラリーの作り方</title><link>https://shiminkaihatsu.com/outlook-schedulelayout/</link><guid isPermaLink="true">https://shiminkaihatsu.com/outlook-schedulelayout/</guid><description>Power AppsでOutlookスケジュールの詳細を表示するギャラリーの作り方</description><pubDate>Tue, 15 Apr 2025 13:59:39 GMT</pubDate><content:encoded>&lt;p&gt;Power Appsのギャラリー機能を使い、各個人のOutlookスケジュールを詳細に表示する方法を紹介します。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/scheduleapps3-11._CZZmAAN_231qVw.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;376&quot; height=&quot;1200&quot;&gt;&lt;/p&gt;
&lt;p&gt;Outlookのスケジュールを自動的に取得するためには Power Automate を使います。&lt;/p&gt;
&lt;p&gt;例では当日を含めて6日分の予定を30分毎に更新し、特定のSharePoint Listに保存しています。&lt;/p&gt;
&lt;p&gt;詳しいやり方は先にこちらをご覧ください。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://shiminkaihatsu.com/pa_outlookschedule_listcopy/&quot;&gt;https://shiminkaihatsu.com/pa_outlookschedule_listcopy/&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;使用している環境の紹介&quot;&gt;使用している環境の紹介&lt;/h2&gt;
&lt;p&gt;この予定表示は、こちらで紹介している「&lt;a href=&quot;https://shiminkaihatsu.com/scheduleapps/&quot;&gt;&lt;strong&gt;テレワークか出社か表示するアプリ例&lt;/strong&gt;&lt;/a&gt;」で実装している機能です。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/scheduleapps3-1.Bpa-63rJ_Z1iwfiE.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;780&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/detailedschedule05.CDc0oaYc_1b2s7a.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;982&quot;&gt;&lt;/p&gt;
&lt;p&gt;このうち、青島さん（仮名）を例にして紹介していきます。&lt;/p&gt;
&lt;h2 id=&quot;具体的なやり方&quot;&gt;具体的なやり方&lt;/h2&gt;
&lt;p&gt;予定を保存したSharePoint Listをキャンバスアプリに接続し、コレクションに格納します。&lt;/p&gt;
&lt;p&gt;Apps.OnStartでもいいですし、スクリーンのOnVisibleなどを利用するといいでしょう。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;ClearCollect&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(AoshimaCollection, 青島スケジュール)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;続いて名前を表示するボタンを作ります。&lt;/p&gt;
&lt;p&gt;ボタンのTextは表示させたい人の名前を入力し、OnSelectは次の式を入れます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Set&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(OnesSchedule, AoshimaCollection);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Set&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(OnesName, Self.Text);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Navigate&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(scrScheduleDetail, ScreenTransition.Fade);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ここではグローバル変数を2つ宣言しています。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;OnesSchedule：AoshimaCollectionをOnesScheduleに格納しています。&lt;/li&gt;
&lt;li&gt;OnesName：ボタンのTextの値をOnesNameに格納しています。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Selfはそのコントロールが持つプロパティの値を参照することができる、非常に便利な関数ですね。&lt;/p&gt;
&lt;p&gt;Navigate関数で別のスクリーンに遷移します。&lt;/p&gt;
&lt;p&gt;ここではscrScheduleDetailというスクリーンをあらかじめ作成済みです。&lt;/p&gt;
&lt;p&gt;ところが実は、このコードは問題を抱えています。&lt;/p&gt;
&lt;h2 id=&quot;人が増えても大丈夫なように工夫しておく&quot;&gt;人が増えても大丈夫なように工夫しておく&lt;/h2&gt;
&lt;p&gt;※ ここのやり方はちょっと複雑なことを書いていますので、難しい人は飛ばして次の段落へ進んでください ※&lt;/p&gt;
&lt;p&gt;私が作成した「&lt;a href=&quot;https://shiminkaihatsu.com/scheduleapps/&quot;&gt;&lt;strong&gt;テレワークか出社か表示するアプリ例&lt;/strong&gt;&lt;/a&gt;」は、30人を越えるメンバーの予定を表示しています。&lt;/p&gt;
&lt;p&gt;ここで問題になるのが、人が増えた時に関数の管理が大変になることです。&lt;/p&gt;
&lt;p&gt;もう一度さきほどのコードを見てみます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Set&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(OnesSchedule, AoshimaCollection);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Set&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(OnesName, Self.Text);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Navigate&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(scrScheduleDetail, ScreenTransition.Fade);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;人が増えたときに問題になるのは、1行目の Set(OnesSchedule, AoshimaCollection) の AoshimaCollection の箇所。&lt;/p&gt;
&lt;p&gt;ここはいわゆるハードコーディング（直打ち）してしまっているので、いざ修正や変更となるとボタンの数だけ1つ1つ手直ししなくてはいけません。&lt;/p&gt;
&lt;p&gt;そこでFormulasを使用します。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/detailedschedule01.Dh4UJa_w_Z10ypkL.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1110&quot; height=&quot;1104&quot;&gt;&lt;/p&gt;
&lt;p&gt;Formulasで設定する内容は、常にアプリに反映されます。&lt;/p&gt;
&lt;p&gt;Apps.OnStartのように挙動が重たくなることもなく、変数などをこちらで宣言しておくことで開発・メンテナンスがとても簡単になります。&lt;/p&gt;
&lt;p&gt;Formulasには次のように入れます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;ScheduleItems&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Table&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        Name: &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;青島&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        Collection: AoshimaCollection&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/detailedschedule02.Bfou0g3u_8t8n3.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;300&quot;&gt;&lt;/p&gt;
&lt;p&gt;ポイントは、Nameの値をボタンのTextと一致させておくことです。&lt;/p&gt;
&lt;p&gt;その上で、ボタンのOnSelectの関数を次のようにします。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Set&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(OnesSchedule, &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;LookUp&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(ScheduleItems, Name&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;Self.Text).Collection);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Set&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(OnesName, Self.Text);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Navigate&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(scrScheduleDetail, ScreenTransition.Fade);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;1行目の AoshimaCollection が LookUp(ScheduleItems, Name=Self.Text).Collection に変わりました。&lt;/p&gt;
&lt;p&gt;Formulasで定義したScheduleItemsのうち、Name項目がボタンのText（Selt.Text=青島）に一致する項目を見つけ、そのCollection項目の中身（AoshimaCollection）をOnesScheduleに格納する、という内容です。&lt;/p&gt;
&lt;p&gt;もし人が増えてきたら、Formulasは次のように増やしていきます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;ScheduleItems&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Table&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        Name: &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;青島&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        Collection: AoshimaCollection&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        Name: &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;伊藤&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        Collection: ItoCollection&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        Name: &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;上田&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        Collection: UedaCollection&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        Name: &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;榎本&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        Collection: EnomotoCollection&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        Name: &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;大塚&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        Collection: OtsukaCollection&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ここでの注意点は2つあります。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;コード末尾は必ず　;　で終えること&lt;/li&gt;
&lt;li&gt;〜Collectionは Apps.OnStartで宣言しておかないとFormulasでエラーになる&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;これを守っておけば大丈夫です。&lt;/p&gt;
&lt;h2 id=&quot;ギャラリーを入れ子にするのがポイント&quot;&gt;ギャラリーを入れ子にするのがポイント&lt;/h2&gt;
&lt;p&gt;続いて scrScheduleDetailという名前で空のスクリーンを追加します。&lt;/p&gt;
&lt;p&gt;まず先にツリービューをお見せします。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/detailedschedule06.D_ejuQef_1L58X3.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1074&quot; height=&quot;1200&quot;&gt;&lt;/p&gt;
&lt;p&gt;galDateは日付を表示するためのものです。&lt;/p&gt;
&lt;p&gt;入れ子にしたgalScheduleDetailは、その日の予定を表示します。&lt;/p&gt;
&lt;p&gt;galDateの中にgalScheduleDetailを入れ子にして使うのがここでのポイントですね。&lt;/p&gt;
&lt;p&gt;galDateのItemsには次の式が入ります。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Table&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        ID: &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        Date:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;            Text&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Today&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(), &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;m/d&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot;(&quot;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;            Switch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;                Weekday&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Today&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;()),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                1&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;日&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                2&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;月&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                3&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;火&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                4&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;水&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                5&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;木&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                6&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;金&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                7&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;土&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;            ) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot;)&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        LookupDate: &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Text&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Today&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(), &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;yyyy/mm/dd&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        LookupWeekday: &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;        Switch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;                Weekday&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Today&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;()),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                1&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;日&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                2&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;月&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                3&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;火&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                4&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;水&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                5&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;木&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                6&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;金&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                7&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;土&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;            )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        ID: &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        Date:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;            Text&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Today&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;m/d&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot;(&quot;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;            Switch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;                Weekday&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Today&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                1&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;日&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                2&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;月&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                3&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;火&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                4&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;水&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                5&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;木&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                6&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;金&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                7&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;土&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;            ) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot;)&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        LookupDate: &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Text&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Today&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;yyyy/mm/dd&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        LookupWeekday: &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;        Switch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;                Weekday&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Today&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                1&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;日&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                2&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;月&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                3&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;火&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                4&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;水&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                5&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;木&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                6&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;金&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                7&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;土&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;            )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        ID: &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        Date:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;            Text&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Today&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;m/d&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot;(&quot;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;            Switch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;                Weekday&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Today&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                1&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;日&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                2&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;月&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                3&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;火&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                4&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;水&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                5&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;木&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                6&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;金&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                7&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;土&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;            ) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot;)&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        LookupDate: &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Text&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Today&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;yyyy/mm/dd&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        LookupWeekday: &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;        Switch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;                Weekday&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Today&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                1&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;日&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                2&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;月&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                3&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;火&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                4&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;水&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                5&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;木&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                6&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;金&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                7&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;土&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;            )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        ID: &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        Date:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;            Text&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Today&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 3&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;m/d&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot;(&quot;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;            Switch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;                Weekday&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Today&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 3&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                1&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;日&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                2&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;月&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                3&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;火&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                4&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;水&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                5&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;木&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                6&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;金&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                7&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;土&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;            ) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot;)&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        LookupDate: &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Text&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Today&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 3&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;yyyy/mm/dd&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        LookupWeekday: &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;        Switch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;                Weekday&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Today&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 3&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                1&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;日&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                2&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;月&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                3&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;火&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                4&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;水&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                5&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;木&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                6&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;金&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                7&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;土&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;            )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        ID: &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        Date:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;            Text&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Today&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 4&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;m/d&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot;(&quot;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;            Switch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;                Weekday&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Today&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 4&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                1&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;日&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                2&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;月&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                3&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;火&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                4&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;水&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                5&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;木&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                6&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;金&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                7&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;土&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;            ) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot;)&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        LookupDate: &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Text&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Today&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 4&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;yyyy/mm/dd&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        LookupWeekday: &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;        Switch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;                Weekday&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Today&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 4&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                1&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;日&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                2&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;月&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                3&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;火&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                4&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;水&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                5&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;木&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                6&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;金&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                7&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;土&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;            )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        ID: &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;6&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        Date:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;            Text&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Today&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 5&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;m/d&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot;(&quot;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;            Switch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;                Weekday&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Today&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 5&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                1&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;日&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                2&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;月&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                3&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;火&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                4&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;水&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                5&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;木&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                6&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;金&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                7&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;土&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;            ) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot;)&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        LookupDate: &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Text&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Today&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 5&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;yyyy/mm/dd&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        LookupWeekday: &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;        Switch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;                Weekday&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Today&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 5&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                1&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;日&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                2&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;月&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                3&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;火&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                4&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;水&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                5&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;木&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                6&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;金&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;                7&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;土&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;            )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;簡単に解説します。&lt;/p&gt;
&lt;h3 id=&quot;id列&quot;&gt;ID列&lt;/h3&gt;
&lt;p&gt;私が作った「&lt;a href=&quot;https://shiminkaihatsu.com/scheduleapps/&quot;&gt;&lt;strong&gt;テレワークか出社か表示するアプリ例&lt;/strong&gt;&lt;/a&gt;」の仕様に合わせて6日分の日付を表示するようにしています。&lt;/p&gt;
&lt;p&gt;ID列はあっても無くてもいいのですが、わかりやすくするために入れてます。&lt;/p&gt;
&lt;h3 id=&quot;date列&quot;&gt;Date列&lt;/h3&gt;
&lt;p&gt;今日や明日などの日付と曜日を　4/14(月)　の形式で表示させます。&lt;/p&gt;
&lt;p&gt;Today関数を使うことで、動的に表示を変更しています。&lt;/p&gt;
&lt;h3 id=&quot;lookupdate列&quot;&gt;LookupDate列&lt;/h3&gt;
&lt;p&gt;日付をyyyy/mm/ddで表示させます。&lt;/p&gt;
&lt;p&gt;これは入れ子にしたgalScheduleDetailで利用する参照列として機能します。&lt;/p&gt;
&lt;h3 id=&quot;lookupweekday列&quot;&gt;LookupWeekday列&lt;/h3&gt;
&lt;p&gt;その日の曜日だけを取り出しています。&lt;/p&gt;
&lt;p&gt;これはgalDateの曜日を色付けして表示するために機能します。&lt;/p&gt;
&lt;hr/&gt;
&lt;p&gt;次に、各コントロールのプロパティを見ていきます。&lt;/p&gt;
&lt;h3 id=&quot;lbldate&quot;&gt;lblDate&lt;/h3&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;Text:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;ThisItem.Date&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;Color:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;Switch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    ThisItem.LookupWeekday,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;    &quot;日&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;Color.Red&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;    &quot;土&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;Color.Blue&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;日曜日を赤色、土曜日を青色で表示するようにしています。&lt;/p&gt;
&lt;p&gt;祝日には対応していないため、別途祝日Listなどを用意して接続すれば、より見やすい表示になるでしょう。&lt;/p&gt;
&lt;h3 id=&quot;galscheduledetail&quot;&gt;galScheduleDetail&lt;/h3&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;Items:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Sort&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(OnesSchedule, &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Text&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(DateTime, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;yyyy/mm/dd&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;ThisItem.LookupDate),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    DateTime,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;    SortOrder.Ascending&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;Height:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;CountRows&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        OnesSchedule,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;        Text&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;            DateTime,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;            &quot;yyyy/mm/dd&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        ) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; ThisItem.LookupDate&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 140&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Height 140 を掛けるようにしています。&lt;/p&gt;
&lt;p&gt;ご自身の環境に合わせて数字は変更してください。&lt;/p&gt;
&lt;h3 id=&quot;lblscheduletitle&quot;&gt;lblScheduleTitle&lt;/h3&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;Text:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;ThisItem.&apos;&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Title &lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(Title0)&apos;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;lbltitle&quot;&gt;lblTitle&lt;/h3&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;Text:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Text&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    ThisItem.DateTime,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;    &quot;H時mm分&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;SharePoint Listの作り方によっては列名が異なる場合があります。&lt;/p&gt;
&lt;p&gt;ご自身の環境に合わせた列名に置き換えて使ってください。&lt;/p&gt;
&lt;h2 id=&quot;応用に向けたアイディア&quot;&gt;応用に向けたアイディア&lt;/h2&gt;
&lt;p&gt;未実装ですが、アイディアだけは持っています。&lt;/p&gt;
&lt;p&gt;開発時間対効果がどこまで期待できるかという問題がありますので、もし時間があるようなら作ってみたいと考えています。&lt;/p&gt;
&lt;h3 id=&quot;複数人の予定を同時表示する&quot;&gt;複数人の予定を同時表示する&lt;/h3&gt;
&lt;p&gt;現状は1人だけの予定詳細しか見れませんが、何人かの予定を同時に表示させると便利になると思います。&lt;/p&gt;
&lt;h3 id=&quot;バーで予定を表示する&quot;&gt;バーで予定を表示する&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/detailedschedule07.CL4B_8J3_Z2unBpJ.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;732&quot; height=&quot;1176&quot;&gt;&lt;/p&gt;
&lt;p&gt;今はテキストだけの表示ですが、こういう画像のように色付きバーで予定が見えるとわかりやすくなると思います。&lt;/p&gt;
&lt;p&gt;複数人の予定を同時に表示するなら、横向きのバーがわかりやすいですね。&lt;/p&gt;
&lt;h3 id=&quot;アプリから予定を変更する&quot;&gt;アプリから予定を変更する&lt;/h3&gt;
&lt;p&gt;これは機能的に実現可能かわかりませんが、市民開発アプリからOutlookの予定を変更できるようになると、もっと便利になるでしょう。&lt;/p&gt;
&lt;h2 id=&quot;ギャラリーの入れ子は1階層までしか入らない&quot;&gt;ギャラリーの入れ子は1階層までしか入らない&lt;/h2&gt;
&lt;p&gt;ギャラリーの入れ子は便利ですが、1階層までしか入れることができません。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/detailedschedule08.lCZsPUZK_1OxqlJ.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;533&quot;&gt;&lt;/p&gt;
&lt;p&gt;入れ子を多様するとアプリが重たくなる原因にもなりますので、ほどほどに使いましょう。&lt;/p&gt;</content:encoded></item><item><title>Power AutomateでOutlookスケジュールをリストにコピーする方法</title><link>https://shiminkaihatsu.com/pa_outlookschedule_listcopy/</link><guid isPermaLink="true">https://shiminkaihatsu.com/pa_outlookschedule_listcopy/</guid><description>Power AutomateでOutlookスケジュールをリストにコピーする方法</description><pubDate>Tue, 29 Oct 2024 20:39:14 GMT</pubDate><content:encoded>&lt;p&gt;Outlookの予定を、Power Automateを使って30分間隔で自動的にSharePoint List（リスト）にコピーする方法を紹介します。&lt;/p&gt;
&lt;h2 id=&quot;全体の概要&quot;&gt;全体の概要&lt;/h2&gt;
&lt;p&gt;1人分のスケジュールをコピーするためには次のものが必要になります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;リスト1つ&lt;/li&gt;
&lt;li&gt;Power Automateフロー1つ&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;もし2人分になれば、リスト2つ、フロー2つ必要です。&lt;/p&gt;
&lt;p&gt;自分以外の予定をコピーすることもできますが、その場合はその人のアカウントからPower Automateを設定する必要があります。&lt;/p&gt;
&lt;p&gt;Outlookの編集権限を自分に付与してもらう必要はありません。&lt;/p&gt;
&lt;p&gt;それとは別に、次のものも必要です。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;更新用リスト1つ&lt;/li&gt;
&lt;li&gt;更新用 Power Automate フロー1つ&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;これらは人数が増えても減っても1つずつあれば大丈夫です。&lt;/p&gt;
&lt;p&gt;つまり、1人分のOutlookスケジュールをリストにコピーしようとすれば、最低限リスト2つ、フロー2つが必要になります。&lt;/p&gt;
&lt;p&gt;なお、SharePoint Listに予定を格納できれば、キャンバスアプリで見やすく表示することもできます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/scheduleapps3-11._CZZmAAN_231qVw.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;376&quot; height=&quot;1200&quot;&gt;&lt;/p&gt;
&lt;p&gt;興味があれば、こちらも御覧ください。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://shiminkaihatsu.com/outlook-schedulelayout/&quot;&gt;https://shiminkaihatsu.com/outlook-schedulelayout/&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;リストの準備&quot;&gt;リストの準備&lt;/h2&gt;
&lt;p&gt;リストを2種類準備します。&lt;/p&gt;
&lt;p&gt;まず1つ目は次のようにします。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/paoutlookschedule1.C51bscL8_181eUm.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;657&quot;&gt;&lt;/p&gt;
&lt;p&gt;仮にこのリストを&lt;em&gt;スケジュールリスト&lt;/em&gt;と呼称します。&lt;/p&gt;
&lt;p&gt;・Title/1行テキスト（予定の件名を入れる）&lt;/p&gt;
&lt;p&gt;・DateTime/日付と時刻（時間を含める、わかりやすい形式）（日時を入れる）&lt;/p&gt;
&lt;p&gt;・Name/1行テキスト（誰の予定かわかるようにする）&lt;/p&gt;
&lt;p&gt;このリストにはOutlookスケジューラーから抽出した予定が入ります。&lt;/p&gt;
&lt;p&gt;1人1リストなので、もし複数人の予定を取り扱いたい場合は人数分のリストを準備します。&lt;/p&gt;
&lt;p&gt;そして2つ目のリストはこちらです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/paoutlookschedule2.C9WYrHHS_Z1DfPLk.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;605&quot;&gt;&lt;/p&gt;
&lt;p&gt;仮にこのリストを&lt;em&gt;更新用リスト&lt;/em&gt;と呼称します。&lt;/p&gt;
&lt;p&gt;列は初期値のタイトルのままでいいです。&lt;/p&gt;
&lt;p&gt;それ以外の列は不要です。&lt;/p&gt;
&lt;p&gt;このリストに新しい項目が作成されたことをトリガーとし、30分間隔でOutlookの予定を吸い上げる Power Automate が動くようにしていきます。&lt;/p&gt;
&lt;p&gt;ここではあえて「スケジュール済みクラウドフロー」は使いません。詳細は後述します。&lt;/p&gt;
&lt;h2 id=&quot;power-automate1つ目&quot;&gt;Power Automate1つ目&lt;/h2&gt;
&lt;p&gt;Power Automateのフローも2種類用意します。&lt;/p&gt;
&lt;p&gt;まず簡単なほうからいくと、全体像はこちらです。&lt;/p&gt;
&lt;p&gt;スケジュール済みクラウドフローを使います。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/paoutlookschedule3.DhGySrqH_ZoCrG4.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;600&quot;&gt;&lt;/p&gt;
&lt;p&gt;中身は非常にシンプルな内容です。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/paoutlookschedule4.BVsd6JJN_Z28m1gO.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;1005&quot;&gt;&lt;/p&gt;
&lt;p&gt;自動発火は30分ごとです。&lt;/p&gt;
&lt;p&gt;次に SharePointリストから複数の項目を取得しますが、先に作成した&lt;em&gt;更新用リスト&lt;/em&gt;を設定します。&lt;/p&gt;
&lt;p&gt;詳細オプションは未入力のままです。&lt;/p&gt;
&lt;p&gt;続いて残り2つのアクションがこちら。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/paoutlookschedule5.BZy5ywpa_1Xw7Fk.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1142&quot; height=&quot;1200&quot;&gt;&lt;/p&gt;
&lt;p&gt;更新用リストから取得した複数の項目を、Apply to each で削除します。&lt;/p&gt;
&lt;p&gt;そして最後に SharePointリストの項目の作成で更新用リストを設定し、タイトル列に任意の値を入れましょう。&lt;/p&gt;
&lt;p&gt;私の場合はわかりやすく「30分」としました。&lt;/p&gt;
&lt;p&gt;これで1つ目のフローが完成です。&lt;/p&gt;
&lt;p&gt;やっていることは、30分間隔で更新用リストの中身を全消去し、項目を1つ作成するということ。&lt;/p&gt;
&lt;p&gt;更新用リストが更新されることで、次に作成するフロー2つ目のトリガーになります。&lt;/p&gt;
&lt;h3 id=&quot;スケジュール済みクラウドフローを使わない理由&quot;&gt;スケジュール済みクラウドフローを使わない理由&lt;/h3&gt;
&lt;p&gt;それは、人数が増えたとき、仮に発火の頻度を30分から変更したいときや、一時的にフローをストップするときに役立つためです。&lt;/p&gt;
&lt;p&gt;いま紹介しているやり方は、1人につき1つフローを準備しますので、人数が増えるほどフローも増えます。&lt;/p&gt;
&lt;p&gt;もしこれらのフローを「スケジュール済みクラウドフロー」のトリガーにしてしまうと、数の分だけ手動で変更しなくてはならず、大変です。&lt;/p&gt;
&lt;p&gt;私が実業務で使うときは30人以上の予定を取得していますので、更新用リストを設けることで随分ラクしています。&lt;/p&gt;
&lt;h2 id=&quot;power-automate-2つ目&quot;&gt;Power Automate 2つ目&lt;/h2&gt;
&lt;p&gt;続いて予定を取得するフローの全体図がこちら。&lt;/p&gt;
&lt;p&gt;自動化したクラウドフローを使います。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/paoutlookschedule6.0VI-LvKM_Z16L6Vp.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;1136&quot;&gt;&lt;/p&gt;
&lt;p&gt;中身を見ていきます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/paoutlookschedule7.a7NlaFoB_2hvb0k.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;937&quot;&gt;&lt;/p&gt;
&lt;p&gt;トリガーは、更新用リストに項目が作成された時にします。&lt;/p&gt;
&lt;p&gt;これは&lt;a href=&quot;#PA1&quot;&gt;&lt;strong&gt;1つ目のフロー&lt;/strong&gt;&lt;/a&gt;で30分間隔でリストが更新されるように設定済みのものですね。&lt;/p&gt;
&lt;p&gt;続いて変数Today に、addHours を使って日本時間の現在時刻を格納します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;addHours(utcNow(),&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;9&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&apos;yyyy&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;MM&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;dd&apos;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;変数Todayは後のアクションで使用します。&lt;/p&gt;
&lt;p&gt;続き。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/paoutlookschedule8.B2qM_qnf_1t9eMt.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1692&quot; height=&quot;938&quot;&gt;&lt;/p&gt;
&lt;p&gt;「イベントのカレンダービューの取得（V3）」アクションで、自分のカレンダーを指定し、開始時刻と終了時刻に式を設定します。&lt;/p&gt;
&lt;p&gt;開始時刻&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;addHours(variables(&apos;Today&apos;),&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;9&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;終了時刻&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;addHours(addDays(variables(&apos;Today&apos;),&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;6&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;), &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;9&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;6というのは6日分を意味します。&lt;/p&gt;
&lt;p&gt;取得したい日数に合わせて数字を変更してください。&lt;/p&gt;
&lt;p&gt;カレンダーIDを選択する時、おそらく複数の候補が表示されます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/paoutlookschedule9.Dl6v3x8Z_ZrQRv3.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;448&quot;&gt;&lt;/p&gt;
&lt;p&gt;この場合は「予定表」を選択します。&lt;/p&gt;
&lt;p&gt;そして変数 Kaishi を設定しておきます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/paoutlookschedule10.w5sez0M2_Z2s2gHh.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;523&quot;&gt;&lt;/p&gt;
&lt;p&gt;次に SharePoint「複数の項目の取得」アクションで、&lt;em&gt;スケジュールリスト&lt;/em&gt;を設定します。&lt;/p&gt;
&lt;p&gt;次は複雑なアクションが続きます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/paoutlookschedule11.BnXcl5N9_Zo5RhC.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;456&quot;&gt;&lt;/p&gt;
&lt;p&gt;ここはtry-catchというエラー処理を施したアクションです。&lt;/p&gt;
&lt;p&gt;スコープというのは複数のアクションをひとまとめにできる、いわばフォルダみたいな役割をします。&lt;/p&gt;
&lt;p&gt;まず「スコープtry」の中身がこちら。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/paoutlookschedule12.BVyTVTCH_13XxoB.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;704&quot; height=&quot;1200&quot;&gt;&lt;/p&gt;
&lt;p&gt;複雑なように見えますが、やっていることをまとめます。&lt;/p&gt;
&lt;p&gt;&lt;em&gt;スケジュールリスト&lt;/em&gt;の中身を Apply to each で全消去。&lt;/p&gt;
&lt;p&gt;消去後のスケジュールリストの項目を取得。&lt;/p&gt;
&lt;p&gt;本当に全削除できているかを Do until で判断し、まだ削除しきれていなければ再び Apply to each で消去ループをまわす。&lt;/p&gt;
&lt;p&gt;全削除できていれば次のアクション（スコープcatch）に進む。&lt;/p&gt;
&lt;p&gt;というものです。&lt;/p&gt;
&lt;p&gt;Do until の条件式はこちら。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;length(outputs(&apos;複数の項目の取得_2&apos;)?[&apos;body&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;value&apos;])&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;値の length がゼロ、つまり項目が全削除されたら Do until ループが抜ける仕組みです。&lt;/p&gt;
&lt;p&gt;ごくまれに項目の削除アクションで削除しきれない現象があるため、こういう複雑な処理をしています。&lt;/p&gt;
&lt;p&gt;次に「スコープcatch」の中身です。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/paoutlookschedule13.BRKN3wBG_Z23KE8L.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;650&quot;&gt;&lt;/p&gt;
&lt;p&gt;中には通知アクションがあります。&lt;/p&gt;
&lt;p&gt;エラー発生時に簡単なメッセージを送ることができるアクションです。&lt;/p&gt;
&lt;p&gt;これで「スコープcatch」の中身は終了なのですが、もう1つ設定箇所があります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/paoutlookschedule14.Cngr7afS_2kHOTs.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;385&quot;&gt;&lt;/p&gt;
&lt;p&gt;「スコープcatch」アクションのメニューから「実行条件の構成」を選択します。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/paoutlookschedule15.DXi_8a2E_1BGsa4.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;446&quot;&gt;&lt;/p&gt;
&lt;p&gt;チェックボックスを画像のようにし、完了ボタンを押します。これでOKです。&lt;/p&gt;
&lt;p&gt;Power Automateは基本的に1つ前のアクションでエラーが起きると、それ以降のアクション全てが中断されます。&lt;/p&gt;
&lt;p&gt;ところが「実行条件の構成」から上記のようにチェックを入れることで、エラーが起こってもその次にくるアクションを実行させることができます。&lt;/p&gt;
&lt;p&gt;これを利用し、もし「スコープtry」でエラーが起こった場合、「スコープcatch」でエラー通知を出し、次の「スコープfinally」アクションにつなげることができるのです。&lt;/p&gt;
&lt;p&gt;こういうやり方をエラー処理、例外処理といったりします。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/paoutlookschedule16.CIKVcL_Y_ZCCu3Q.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;818&quot;&gt;&lt;/p&gt;
&lt;p&gt;実行条件を設定した場合、矢印で示したようにアクション同士を繋ぐ線が点線表示になっていることがわかります。&lt;/p&gt;
&lt;p&gt;最後に「スコープfinally」の中身です。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/paoutlookschedule17.dSwTFSlB_mKgmh.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;864&quot; height=&quot;1200&quot;&gt;&lt;/p&gt;
&lt;p&gt;イベントのカレンダービューの取得で取得した予定を&lt;em&gt;スケジュールリスト&lt;/em&gt;にコピーする作業です。&lt;/p&gt;
&lt;p&gt;「項目の作成」のDateTime列の式はこちら。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;addHours(variables(&apos;Kaishi&apos;), &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &apos;yyyy&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;MM&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;dd HH:mm:ss&apos;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;これでPower Automate2つ目は完成となります。&lt;/p&gt;
&lt;h2 id=&quot;フローを動かした結果&quot;&gt;フローを動かした結果&lt;/h2&gt;
&lt;p&gt;完成したフローを動かすには、&lt;em&gt;更新用リスト&lt;/em&gt;に項目を追加します。&lt;/p&gt;
&lt;p&gt;1つ目に設定したフローが動くのを待つのもよし、&lt;em&gt;更新用リスト&lt;/em&gt;に手動でレコードを追加してもよし。&lt;/p&gt;
&lt;p&gt;ただしくフローが設定できていれば、&lt;em&gt;スケジュールリスト&lt;/em&gt;にOutlook予定の件名と日時が並びます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/paoutlookschedule18.C22W1Zed_ZxGGEi.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;654&quot;&gt;&lt;/p&gt;
&lt;p&gt;あとはこのリストを使ってPower Appsで予定を表示させるなど使いましょう。&lt;/p&gt;</content:encoded></item><item><title>Power Apps / Power Automate アウトプット完全ガイド｜メール・通知・画像埋め込み・AI添付ルーティングの全パターン</title><link>https://shiminkaihatsu.com/powerapps-automate-output/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-automate-output/</guid><description>Power Apps / Power Automate アウトプット完全ガイド｜メール・通知・画像埋め込み・AI添付ルーティングの全パターン</description><pubDate>Sun, 05 Apr 2026 10:18:36 GMT</pubDate><content:encoded>&lt;p&gt;Power Apps / Power Automate から何かを送り出す手段は、メール・プッシュ通知・Teams 通知・ファイル保存など複数あります。それぞれを個別に覚えていくより、全体像を先に把握してから選ぶほうが設計がブレません。この記事では、私が現場で使っているアウトプットのパターンをすべて整理します。&lt;/p&gt;
&lt;h2 id=&quot;アウトプットの全体像3つのカテゴリで整理する&quot;&gt;アウトプットの全体像：3つのカテゴリで整理する&lt;/h2&gt;
&lt;p&gt;Power Apps / Power Automate からのアウトプットは、大きく3つに分けられます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;メール系&lt;/strong&gt;：Outlook を使ったメール送信。Power Apps 単体でできるものと、Power Automate 経由でないとできないものがある&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;通知系&lt;/strong&gt;：プッシュ通知・Teams 通知。即時性が高く、相手にアクションを促したい場面に向く&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ファイル系&lt;/strong&gt;：SharePoint / OneDrive へのファイル保存。メール添付との組み合わせも含む&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;それぞれの手段を誰に・何を・どれくらいの即時性で届けたいかという軸で使い分けると、設計の判断が明確になります。以下、各パターンを順に解説します。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-automate-output01.Bw5vVfez_Zjcb4J.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;power-apps-単体でのメール送信&quot;&gt;Power Apps 単体でのメール送信&lt;/h2&gt;
&lt;p&gt;Power Apps からメールを送るには Power Automate が必要と思っている方も多いですが、&lt;strong&gt;Power Apps 単体でも Outlook メールを送ることができます&lt;/strong&gt;。Office 365 Outlook コネクタを追加するだけで、フローを作らずにメール送信が実装できます。&lt;/p&gt;
&lt;p&gt;関数は &lt;code&gt;SendEmailV2&lt;/code&gt; で、ボタンの OnSelect に直接書けます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;Office365Outlook.&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;SendEmailV2&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;    &quot;to@company.com&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;    &quot;件名テキスト&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;    &quot;本文テキスト&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;宛先をユーザー入力から動的に取得したり、コンボボックスで複数宛先を選択させたり、リッチテキストエディターで HTML メールを作ったりと、Power Automate なしでここまでできるのは設計の自由度が高まります。私の職場では、フォーム送信と同時に確認メールを送る処理を Power Apps 単体で実装しています。フロー設計が不要になるぶん、メンテナンスがシンプルです。&lt;/p&gt;
&lt;p&gt;宛先パターン・添付ファイル・HTML 本文・CC/BCC の全実装方法は、&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-send-outlook-email/&quot;&gt;Power Apps から Outlook でメールを送信する記事&lt;/a&gt;で詳しく解説しています。&lt;/p&gt;
&lt;h2 id=&quot;power-automate-でのhtmlメール画像埋め込み&quot;&gt;Power Automate でのHTMLメール・画像埋め込み&lt;/h2&gt;
&lt;p&gt;メール本文に画像を埋め込みたい場合は、Power Automate 経由になります。URL リンクではなく &lt;strong&gt;Base64 形式で画像データを直接 src 属性に埋め込む&lt;/strong&gt;方法で、URLが無効になる心配がなく確実に表示できます。&lt;/p&gt;
&lt;p&gt;基本的な仕組みは、SharePoint や OneDrive からファイルを取得し、&lt;code&gt;base64()&lt;/code&gt; 関数で文字列に変換して、img タグの src に埋め込む3ステップです。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;html&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;img&lt;/span&gt;&lt;span style=&quot;color:#50FA7B;font-style:italic&quot;&gt; src&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E9F284&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;data:image/jpeg;base64,@{base64(outputs(&apos;ファイルコンテンツの取得&apos;))}&lt;/span&gt;&lt;span style=&quot;color:#E9F284&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#50FA7B;font-style:italic&quot;&gt; width&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E9F284&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;300&lt;/span&gt;&lt;span style=&quot;color:#E9F284&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Office 365 ユーザーのプロフィール写真も同じ方法で埋め込めます。担当者の顔写真つきで社内連絡メールを送るという用途で使っている現場も増えています。注意点として、Base64 に変換した画像が大きすぎると Outlook 側で表示されないことがあるので、まず小さいファイルで動作確認をしてから本番に進んでください。&lt;/p&gt;
&lt;p&gt;Base64 変換の詳細手順・Compose（作成）アクションを使ったデバッグ方法は、&lt;a href=&quot;https://shiminkaihatsu.com/powerautomate-email-image-embed/&quot;&gt;Power Automate で HTML メールに画像を埋め込む記事&lt;/a&gt;にまとめています。&lt;/p&gt;
&lt;h2 id=&quot;ai-を使ったメール添付ファイルの自動振り分け&quot;&gt;AI を使ったメール添付ファイルの自動振り分け&lt;/h2&gt;
&lt;p&gt;受信メールの添付ファイルを自動で分類し、SharePoint の適切なフォルダに保存する処理は、Power Automate のRun a prompt（プロンプトの実行）アクションを使って実現できます。&lt;/p&gt;
&lt;p&gt;フローの全体設計は、メール受信 → 添付取得（ループ） → AI 分類 → Switch 振り分け → SharePoint 保存 → Teams 通知の5ステージです。AI にプロンプトで PDF を渡すと、resume（履歴書）・contract（契約書）・other に分類しつつ要約も返してきます。プロンプトで JSON 形式の出力を指定するのがポイントで、Switch（条件）アクションで振り分けに使える構造化データとして取り出せます。&lt;/p&gt;
&lt;p&gt;現時点で AI が対応できるファイル形式は PDF・JPEG・PNG・GIF（非アニメ）のみで、Word ファイルはそのままでは処理できません。この制約を前提に設計する必要があります。AI Builderのクレジット消費も考慮に入れておきましょう。&lt;/p&gt;
&lt;p&gt;5ステージそれぞれの詳細実装は、&lt;a href=&quot;https://shiminkaihatsu.com/powerautomate-email-attachment-routing/&quot;&gt;Power Automate でメール添付ファイルを AI で分類して SharePoint に自動振り分けする記事&lt;/a&gt;で解説しています。&lt;/p&gt;
&lt;h2 id=&quot;プッシュ通知スマートフォンに直接届ける&quot;&gt;プッシュ通知：スマートフォンに直接届ける&lt;/h2&gt;
&lt;p&gt;メールより即時性が高く、タップするとそのまま Power Apps アプリが起動するのがプッシュ通知の強みです。承認フローで、特定の申請レコードを開いた状態でアプリを起動するDeep Link が実装できると、担当者の操作ステップを大幅に削減できます。&lt;/p&gt;
&lt;p&gt;実装には Power Automate のプッシュ通知の送信 V2アクションを使います。Power Apps V2 トリガーにメッセージ・宛先・パラメーターの3つのテキスト入力を設け、Power Apps 側からフローを呼び出す形です。&lt;/p&gt;
&lt;p&gt;重要な注意点が2つあります。ひとつは&lt;strong&gt;新デザイナーでは既知バグがあるため旧デザイナーで作成すること&lt;/strong&gt;、もうひとつは&lt;strong&gt;Deep Link を使う場合はフォームの Item プロパティを Gallery.Selected ではなく varRecord にしておくこと&lt;/strong&gt;です。Gallery.Selected は画面遷移後にリセットされてしまうため、通知経由でアプリを直接起動した場合に機能しません。&lt;/p&gt;
&lt;p&gt;プッシュ通知はスケジュールトリガーからも送れます。毎朝リストをチェックして未提出者だけに通知する、という自動化との相性も抜群です。設定の全手順は&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-push-notification/&quot;&gt;Power Apps でプッシュ通知を送る記事&lt;/a&gt;にまとめています。&lt;/p&gt;
&lt;h2 id=&quot;teams-通知チームへの一斉周知に最適&quot;&gt;Teams 通知：チームへの一斉周知に最適&lt;/h2&gt;
&lt;p&gt;個人への直接アクション誘導にはプッシュ通知が向きますが、チーム全体への周知・定期レポート配信は Teams 通知が適しています。Power Automate の、チャットまたはチャネルへの投稿（Post a message in a chat or channel）アクションで、Flow Bot として投稿する方法が最もシンプルです。&lt;/p&gt;
&lt;p&gt;HTML モードを使えばハイパーリンクや太字・テーブルをメッセージに含められます。SharePoint に保存したファイルへの直接リンクを埋め込んでここをクリックして確認という導線を作ると、Teams 通知の有用性がさらに高まります。&lt;/p&gt;
&lt;p&gt;基本設定から実用シーン7パターンまでは、&lt;a href=&quot;https://shiminkaihatsu.com/powerautomate-teams-notify/&quot;&gt;Power Automate で Teams 自動通知する記事&lt;/a&gt;で網羅しています。&lt;/p&gt;
&lt;h2 id=&quot;どれを使うアウトプット手段の使い分けガイド&quot;&gt;どれを使う？アウトプット手段の使い分けガイド&lt;/h2&gt;
&lt;p&gt;5つのパターンを誰に・どんな内容を・どれくらい急いでという軸で整理すると、次のような判断基準になります。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;シーン&lt;/th&gt;
&lt;th&gt;推奨手段&lt;/th&gt;
&lt;th&gt;理由&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;承認催促・タスク割り当て（即時アクション誘導）&lt;/td&gt;
&lt;td&gt;プッシュ通知&lt;/td&gt;
&lt;td&gt;タップで該当レコードを直接開ける&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;詳細説明・外部関係者への連絡&lt;/td&gt;
&lt;td&gt;Outlook メール（Power Apps 単体）&lt;/td&gt;
&lt;td&gt;HTML・添付・CC/BCC が揃っている&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;画像・グラフを含んだ見栄えのいい社内メール&lt;/td&gt;
&lt;td&gt;Power Automate メール（Base64 画像埋め込み）&lt;/td&gt;
&lt;td&gt;URL 依存なしの確実な表示&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;受信メールの仕分け・分類&lt;/td&gt;
&lt;td&gt;Power Automate ＋ AI 振り分け&lt;/td&gt;
&lt;td&gt;手動仕分けをゼロにできる&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;チーム全体への周知・定期レポート&lt;/td&gt;
&lt;td&gt;Teams 通知&lt;/td&gt;
&lt;td&gt;チャンネルに流れるため見逃しにくい&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;とりあえず全部メールにするという設計はシンプルですが、重要な催促が埋もれやすくなります。受け取る側が、このメールは読まなくていいと無意識に判断してしまうと、通知そのものの価値が下がります。プッシュ通知・Teams・メールを使い分けて、各通知の重要度を伝えることが、業務改善の精度を上げるポイントです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-automate-output02.D0FP-xBd_HPLqN.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;Power Apps / Power Automate のアウトプット手段は、メール・通知・ファイル保存を軸に5つのパターンがあります。それぞれに向き不向きがあり、シーンに合わせて選ぶことで通知の効果が変わります。&lt;/p&gt;
&lt;p&gt;最初からすべてを実装する必要はありません。まずPower Apps 単体でのメール送信から始めて、届け方を変えたいシーンが出てきたらプッシュ通知や Teams 通知を追加していくのが現実的な進め方です。それぞれの詳細な実装は各記事にまとめているので、必要になったタイミングで参照してください。&lt;/p&gt;
&lt;p&gt;Power Apps / Power Automate の連携全般については、&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-powerautomate/&quot;&gt;Power Apps から Power Automate を呼び出す基礎の記事&lt;/a&gt;が入口として最適です。フロー連携の考え方を把握しておくと、今回紹介したどのパターンにも応用できます。&lt;/p&gt;</content:encoded></item><item><title>【2026年最新】Power Appsとは？業務効率化を実現するローコード開発ツール完全ガイド</title><link>https://shiminkaihatsu.com/powerapps-basic/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-basic/</guid><description>【2026年最新】Power Appsとは？業務効率化を実現するローコード開発ツール完全ガイド</description><pubDate>Sat, 26 Apr 2025 11:28:29 GMT</pubDate><content:encoded>&lt;p&gt;Power Appsはマイクロソフトが提供する簡単アプリ作成ツールで、プログラミングの専門知識がなくても業務アプリケーションを素早く開発できるプラットフォームです。&lt;/p&gt;
&lt;p&gt;近年、DX推進や業務効率化を目指す企業から注目を集めています。&lt;/p&gt;
&lt;p&gt;この記事では、Power Appsの基本から応用まで徹底解説し、実際の活用法や最新機能についてご紹介します。&lt;/p&gt;
&lt;h2 id=&quot;power-appsとはマイクロソフトが提供する業務アプリ開発プラットフォーム&quot;&gt;Power Appsとは？マイクロソフトが提供する業務アプリ開発プラットフォーム&lt;/h2&gt;
&lt;p&gt;Power Appsは、マイクロソフトが推しに推している簡単アプリ作成ツールのこと。&lt;/p&gt;
&lt;p&gt;従来のアプリ開発では多くの時間とプログラミングの専門知識が必要でしたが、Power Appsなら慣れれば非常に素早くマルチプラットフォームのアプリケーションを開発することができます。&lt;/p&gt;
&lt;p&gt;このツールはマイクロソフトの「Power Platform」に含まれる製品の一つで、他にもプロセス自動化を行う「Power Automate」、データのビジュアライズの「Power BI」などと連携して使われます。&lt;/p&gt;
&lt;p&gt;これらを総合的に活用することで、包括的な業務システムを構築できるのが特徴です。&lt;/p&gt;
&lt;p&gt;Power Appsの最大の魅力は、コードをほとんど書かずにアプリを開発できる「ローコード」の仕組み。&lt;/p&gt;
&lt;p&gt;ドラッグ＆ドロップの直感的な操作で画面を設計し、必要に応じて簡単な関数を追加するだけで、実用的なアプリが作れます。&lt;/p&gt;
&lt;p&gt;また、Office 365やSharePointなどのマイクロソフト製品との親和性が高く、既存の業務環境とシームレスに連携できる点も大きな利点です。&lt;/p&gt;
&lt;h2 id=&quot;power-appsで実現できること&quot;&gt;Power Appsで実現できること&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;現場の業務報告アプリ（日報、点検記録など）&lt;/li&gt;
&lt;li&gt;社内リソース予約システム（会議室、備品管理など）&lt;/li&gt;
&lt;li&gt;顧客管理アプリ（簡易CRM）&lt;/li&gt;
&lt;li&gt;申請・承認ワークフロー（経費精算、休暇申請など）&lt;/li&gt;
&lt;li&gt;検索機能を持つ情報管理システム&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;power-appsの2つの開発アプローチと他ツールとの比較&quot;&gt;Power Appsの2つの開発アプローチと他ツールとの比較&lt;/h2&gt;
&lt;p&gt;Power Appsには「キャンバスアプリ」と「モデル駆動型アプリ」という2種類の開発方法があります。&lt;/p&gt;
&lt;p&gt;キャンバスアプリは白紙のキャンバスに自由にUIをデザインしていくアプローチで、デザインの自由度が高いのが特徴。&lt;/p&gt;
&lt;p&gt;一方、モデル駆動型アプリはデータモデルを先に定義し、そこから自動的にアプリの画面が生成される方式で、より少ないコードで開発できます。&lt;/p&gt;
&lt;p&gt;他社の類似ツールと比較すると、以下のような特徴があります：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;ツール名&lt;/th&gt;
&lt;th&gt;開発アプローチ&lt;/th&gt;
&lt;th&gt;特徴&lt;/th&gt;
&lt;th&gt;適している用途&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Power Apps&lt;/td&gt;
&lt;td&gt;ローコード（キャンバス/モデル駆動）&lt;/td&gt;
&lt;td&gt;Microsoft製品との連携、大規模アプリ対応&lt;/td&gt;
&lt;td&gt;業務アプリ内製化、市民開発&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;kintone&lt;/td&gt;
&lt;td&gt;ノーコード「画面からデータ」&lt;/td&gt;
&lt;td&gt;日本語サポート、簡単操作&lt;/td&gt;
&lt;td&gt;シンプルな業務アプリ、情報共有&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AppSheet&lt;/td&gt;
&lt;td&gt;ノーコード「データから画面」&lt;/td&gt;
&lt;td&gt;Google連携、データ駆動&lt;/td&gt;
&lt;td&gt;Googleユーザーの業務効率化&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Power Appsの特徴は、比較的大規模なアプリケーションの開発にも対応していることです。&lt;/p&gt;
&lt;p&gt;マイクロソフトによれば、Power Appsの導入目的は「現場主導のDX推進」と「アプリの内製化」の2種類あるとされています。&lt;/p&gt;
&lt;h2 id=&quot;power-appsのメリットデメリットを徹底分析&quot;&gt;Power Appsのメリット・デメリットを徹底分析&lt;/h2&gt;
&lt;h2 id=&quot;メリット&quot;&gt;メリット&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;開発スピードの向上&lt;/strong&gt;: 従来の開発手法と比べて圧倒的に短期間でアプリを開発できます。数ヶ月かかっていた開発が数週間や数日で完了することも珍しくありません。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;コスト削減&lt;/strong&gt;: 外部委託せずに社内リソースでアプリ開発ができるため、開発コストを大幅に削減できます。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;現場主導のDX推進&lt;/strong&gt;: IT部門だけでなく、実際の業務に詳しい現場の社員がアプリを開発できるため、真に現場のニーズに合ったシステムを構築できます。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;マイクロソフト製品との連携&lt;/strong&gt;: Office 365、SharePoint、Teamsなど既存のマイクロソフト環境と簡単に連携できます。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;マルチデバイス対応&lt;/strong&gt;: 一度開発すれば、Web、iOS、Androidなど様々なプラットフォームで利用できます。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;デメリット&quot;&gt;デメリット&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;複雑な処理の限界&lt;/strong&gt;: 非常に複雑な処理や大量データの処理には不向きな場合があります。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;カスタマイズの制限&lt;/strong&gt;: 従来の開発に比べると細かなカスタマイズの自由度は制限されます。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ライセンスコスト&lt;/strong&gt;: 本格的に活用するには有償ライセンスが必要になります。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ガバナンスの課題&lt;/strong&gt;: アプリが増えていくとメンテナンスや管理が難しくなる場合があります。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Power Appsは特に、頻繁に変更が必要な業務アプリや、比較的シンプルな処理を行うアプリの開発に適しています。&lt;/p&gt;
&lt;p&gt;基幹システムや複雑な計算処理を要するアプリケーションには、従来の開発手法を選択した方が良いでしょう。&lt;/p&gt;
&lt;h2 id=&quot;power-appsの基本機能と活用方法&quot;&gt;Power Appsの基本機能と活用方法&lt;/h2&gt;
&lt;p&gt;Power Appsには様々な機能が搭載されていますが、ここでは基本的な機能の一つである「検索機能」の実装方法を紹介します。&lt;/p&gt;
&lt;h2 id=&quot;検索機能の実装例&quot;&gt;検索機能の実装例&lt;/h2&gt;
&lt;p&gt;Power Appsでは、Search関数を使って簡単に検索機能を実装できます。&lt;/p&gt;
&lt;p&gt;例えば、テキストボックスに入力した値をもとにレコード一覧をフィルタリングする機能は以下のように実装できます：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;検索用のテキストボックスを配置（例：SearchTextBox1）&lt;/li&gt;
&lt;li&gt;データを表示するギャラリーを配置&lt;/li&gt;
&lt;li&gt;ギャラリーのItemsプロパティに以下のような式を設定&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Search&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(データソース, SearchTextBox1.Text, 検索対象の列名)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;この実装により、テキストボックスに文字を入力するたびにリアルタイムでフィルタリングされる「インスタント検索」機能が実現できます。&lt;/p&gt;
&lt;p&gt;入力の都度Enterキーを押す必要がなく、ユーザー体験が向上します。&lt;/p&gt;
&lt;p&gt;このような関数はPower Fxと呼ばれる専用の関数ではあるものの、Excel関数にも似たところが多様にあります。&lt;/p&gt;
&lt;p&gt;日頃からExcelを使いこなす方は違和感なく入り込めるでしょう。&lt;/p&gt;
&lt;h2 id=&quot;power-appsを始めるための具体的ステップ&quot;&gt;Power Appsを始めるための具体的ステップ&lt;/h2&gt;
&lt;p&gt;Power Appsを始めるには、以下のステップを踏むことをおすすめします：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;環境準備&lt;/strong&gt;: Microsoftアカウントを用意し、Power Appsにログインします。企業で使うMicrosoftのプランであれば、基本的にどれもPower Appsが使えるようになっているはずです。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;基本操作の学習&lt;/strong&gt;: マイクロソフト公式のラーニングパスやYouTube動画を活用して、基本的な操作方法を学びます。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;サンプルアプリの作成&lt;/strong&gt;: シンプルな業務報告アプリなど、小さなアプリから始めてみましょう。例えば以下のようなステップで作成できます：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Power Apps Studioで新しいキャンバスアプリを作成&lt;/li&gt;
&lt;li&gt;データソース（SharePointリストやExcelなど）を接続&lt;/li&gt;
&lt;li&gt;画面レイアウトをデザイン&lt;/li&gt;
&lt;li&gt;コントロールに動作を設定&lt;/li&gt;
&lt;li&gt;保存してテスト実行&lt;/li&gt;
&lt;li&gt;問題がなければ公開して共有&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;実務への適用&lt;/strong&gt;: 小さな成功体験を得たら、実際の業務課題に適用していきます。最初は簡単な業務から始め、徐々に範囲を広げていくのがコツです。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;まとめpower-appsで実現するdxと業務効率化&quot;&gt;まとめ：Power Appsで実現するDXと業務効率化&lt;/h2&gt;
&lt;p&gt;Power Appsは、プログラミングの専門知識がなくても業務アプリを開発できる革新的なツールです。&lt;/p&gt;
&lt;p&gt;「市民開発者」と呼ばれる現場の社員がアプリを開発できるようになることで、IT部門の負担軽減とDX推進の両立が可能になります。&lt;/p&gt;
&lt;p&gt;デジタル化の波が加速する今、Power Appsを活用したローコード開発の取り組みは、企業の競争力強化に直結する重要な戦略となっています。&lt;/p&gt;
&lt;p&gt;ぜひ本ブログを参考に、Power Appsの導入と活用を検討してみてください。&lt;/p&gt;</content:encoded></item><item><title>Power Appsでカメラコントロールを使って写真撮影・添付ファイルとして保存する方法</title><link>https://shiminkaihatsu.com/powerapps-cam-sp/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-cam-sp/</guid><description>Power Appsでカメラコントロールを使って写真撮影・添付ファイルとして保存する方法</description><pubDate>Mon, 16 Mar 2026 15:46:52 GMT</pubDate><content:encoded>&lt;p&gt;Power Appsのカメラコントロールを使えば、スマホやタブレットのカメラで撮影した写真をそのままSharePointに添付ファイルとして保存できます。現場で写真を撮ってすぐ記録に残せるので、点検・巡回・施設管理などのアプリで重宝します。&lt;/p&gt;
&lt;p&gt;私が最初に作ったカメラ連携アプリは配送現場の荷物破損記録用でした。スマホで撮ってボタン1つで記録完了、という流れにしたところ「これは便利」と現場から喜ばれました。実装自体はそこまで複雑ではないので、この記事で仕組みをまとめます。&lt;/p&gt;
&lt;h2 id=&quot;カメラコントロールの基本&quot;&gt;カメラコントロールの基本&lt;/h2&gt;
&lt;p&gt;カメラコントロールをキャンバスに追加すると、実行時にデバイスのカメラ映像がリアルタイムで表示されます。Photoプロパティに現在のカメラ映像（またはスナップショット）が入るので、これを使って画像を取り扱います。&lt;/p&gt;
&lt;h3 id=&quot;streamと静止画の違い&quot;&gt;Streamと静止画の違い&lt;/h3&gt;
&lt;p&gt;カメラコントロールには2つの重要なプロパティがあります。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;プロパティ&lt;/th&gt;
&lt;th&gt;内容&lt;/th&gt;
&lt;th&gt;用途&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Stream&lt;/td&gt;
&lt;td&gt;カメラのリアルタイム映像&lt;/td&gt;
&lt;td&gt;プレビュー表示&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Photo&lt;/td&gt;
&lt;td&gt;シャッターを押した瞬間の静止画&lt;/td&gt;
&lt;td&gt;保存・送信に使う&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;StreamはImageコントロールのImageプロパティに入れるとリアルタイムプレビューとして機能します。撮影後の確認画面を作るには、撮影後にCamera1.PhotoをImageコントロールに表示する構成にします。&lt;/p&gt;
&lt;h3 id=&quot;撮影ボタンとプレビューの実装&quot;&gt;撮影ボタンとプレビューの実装&lt;/h3&gt;
&lt;p&gt;シャッターはCamera1のOnSelectプロパティに処理を書くことで実装します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 撮影ボタンのOnSelect&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Set&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(varPhoto, Camera1.Photo)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;varPhotoに撮影した画像を保存して、ImageコントロールのImageプロパティにvarPhotoをセットすれば、撮影後の確認プレビューが表示されます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-cam-sp02-1.C_wvqstG_9mBaE.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;撮影した写真をsharepointに保存する&quot;&gt;撮影した写真をSharePointに保存する&lt;/h2&gt;
&lt;p&gt;撮影した写真をSharePointリストの添付ファイルとして保存するには、Power Automateを経由する方法が確実です。Power Apps単体ではSharePointの添付ファイルAPIに直接アクセスするのが難しいためです。&lt;/p&gt;
&lt;h3 id=&quot;automateを使う場合の流れ&quot;&gt;Automateを使う場合の流れ&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Power AutomateでPower Appsトリガーのフローを作成&lt;/li&gt;
&lt;li&gt;AppsからBase64文字列に変換した画像データをフローに渡す&lt;/li&gt;
&lt;li&gt;フロー内でSharePointの「添付ファイルの追加」アクションで保存する&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Apps側で画像をBase64に変換する数式はこうなります。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 保存ボタンのOnSelect&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;FlowName.&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Run&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Text&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Today&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(), &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;yyyy-mm-dd&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Mid&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(varPhoto, &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Find&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;,&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, varPhoto) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;varPhotoはデータURIスキーム（data:image/png;base64,……）の形式になっているので、カンマ以降のBase64部分だけを切り出してフローに渡します。Mid関数とFind関数の組み合わせでこれが実現できます。&lt;/p&gt;
&lt;h3 id=&quot;ファイル名の設定&quot;&gt;ファイル名の設定&lt;/h3&gt;
&lt;p&gt;SharePointの添付ファイルとして保存するとき、ファイル名はフロー側で設定します。撮影日時をファイル名に含めると後から管理しやすくなります。フロー内で「添付ファイルの追加」アクションに次のように入力します。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ファイル名：@{triggerBody()?[‘text’]}_photo.png&lt;/li&gt;
&lt;li&gt;ファイルコンテンツ：base64ToBinary(triggerBody()?[‘base64’])&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-cam-sp03.BUvFtcnB_15kUbq.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;670&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;sharepointのaddattachmentで直接保存する方法&quot;&gt;SharePointのAddAttachmentで直接保存する方法&lt;/h2&gt;
&lt;p&gt;Automateを使わず、Power AppsのPatch関数とAddAttachment関数を組み合わせてSharePointリストの添付ファイルを直接操作する方法もあります。ただしAddAttachmentはレコードが既に存在していないと動かないため、先にPatchで新規レコードを作成してからAddAttachmentで添付する、という手順になります。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// まずレコードを作成&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Patch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(記録リスト, &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Defaults&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(記録リスト), {タイトル: TextInput1.Text});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 作成したレコードのIDを取得してから添付&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;AddAttachment&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    記録リスト,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Last&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Sort&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(記録リスト, ID, Descending)).ID,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;    &quot;photo.png&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    varPhoto&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;このやり方は処理がシンプルですが、最後のレコードIDを取る部分がやや不安定です。Automateを経由するほうが確実なケースが多いので、個人的にはAutomate経由を選びがちです。&lt;/p&gt;
&lt;h2 id=&quot;実装時の注意点&quot;&gt;実装時の注意点&lt;/h2&gt;
&lt;h3 id=&quot;カメラ権限の確認&quot;&gt;カメラ権限の確認&lt;/h3&gt;
&lt;p&gt;スマホやタブレットでカメラを使うには、アプリにカメラへのアクセス権限を付与する必要があります。初回実行時にOSからカメラ使用の許可を求めるダイアログが表示されます。企業のモバイル管理（MDM）環境では事前に権限設定が必要なこともあります。&lt;/p&gt;
&lt;h3 id=&quot;画像のサイズに注意&quot;&gt;画像のサイズに注意&lt;/h3&gt;
&lt;p&gt;スマホのカメラで撮影すると数MBの画像になることがあります。SharePointの添付ファイルの上限は既定で250MBですが、大きすぎるとフローのタイムアウトやAppsの動作遅延の原因になります。カメラコントロールのResolutionプロパティを下げるか、Medium程度に設定しておくと扱いやすくなります。&lt;/p&gt;
&lt;p&gt;SharePointへの書き込み全般については、こちらの記事も参考にしてください。&lt;/p&gt;
&lt;p&gt;→ &lt;a href=&quot;/powerapps-sharepoint-crud/&quot;&gt;Power AppsでSharePointリストのデータを読み書きする——基本のCRUDパターン&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;Power Appsのカメラコントロールは、Camera1.PhotoにBase64の画像データが入ります。SharePointへの保存はAutomate経由が確実で、Base64データをフローに渡してSharePointの「添付ファイルの追加」アクションで保存する流れが定番です。&lt;/p&gt;
&lt;p&gt;写真撮影→即記録という流れは、点検や現場業務のアプリに特に効果的です。紙の記録票をなくしてスマホ1台で完結できるようになると、現場からの反響が大きいですよ。ぜひ試してみてください。&lt;/p&gt;</content:encoded></item><item><title>Power Appsのコレクション（Collection）活用入門。一時データ操作の基本</title><link>https://shiminkaihatsu.com/powerapps-collection/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-collection/</guid><description>Power Appsのコレクション（Collection）活用入門。一時データ操作の基本</description><pubDate>Sun, 15 Mar 2026 10:50:00 GMT</pubDate><content:encoded>&lt;p&gt;Power Appsのコレクションは、アプリの中だけで使える一時的なデータテーブルです。SharePointに都度アクセスしなくてもデータを操作できるので、使い方を知っておくとアプリ設計の幅が大きく広がります。&lt;/p&gt;
&lt;h2 id=&quot;コレクションとは何か&quot;&gt;コレクションとは何か&lt;/h2&gt;
&lt;h3 id=&quot;アプリ内だけの一時テーブル&quot;&gt;アプリ内だけの一時テーブル&lt;/h3&gt;
&lt;p&gt;コレクションとは、Power Appsアプリのメモリ上に存在する一時的なデータテーブルです。SharePointリストやExcelとは異なり、アプリを閉じると消えます。永続的に保存したいデータはSharePointなどのデータソースに書き込む必要があります。&lt;/p&gt;
&lt;p&gt;コレクションの使いどころは主に3つです。SharePointへのアクセス回数を減らしてパフォーマンスを上げる、入力途中のデータをアプリ内で一時的に保持する、委任できないFilterやSearchをかけるためのローカルデータを用意する、というものです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-collection01.CL3uzxIK_Z29o9w9.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;670&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;変数との違い&quot;&gt;変数との違い&lt;/h3&gt;
&lt;p&gt;Power Appsの変数（Set / UpdateContext）は単一の値を保存するものです。コレクションは複数の行と列を持つテーブルを保存します。ギャラリーのItemsにコレクションを設定して一覧表示できる点が、変数との最大の違いです。&lt;/p&gt;
&lt;h2 id=&quot;コレクションの基本操作&quot;&gt;コレクションの基本操作&lt;/h2&gt;
&lt;h3 id=&quot;clearcollect作成全置き換え&quot;&gt;ClearCollect：作成・全置き換え&lt;/h3&gt;
&lt;p&gt;ClearCollect はコレクションを初期化してデータを入れる関数です。既存のコレクションがあれば中身をすべて消してから新しいデータを入れます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// SharePointリストの内容をコレクションに取り込む&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;ClearCollect&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(colShinsei, &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(申請リスト, 担当者 &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; User&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;().DisplayName))&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;画面が開いたタイミング（OnVisible）でこれを実行しておくと、以降は colShinsei というコレクションを使って表示や検索ができます。SharePointへのアクセスは最初の1回だけで済むため、その後の操作がスムーズになります。&lt;/p&gt;
&lt;h3 id=&quot;collect追加&quot;&gt;Collect：追加&lt;/h3&gt;
&lt;p&gt;Collect は既存のコレクションに行を追加します。ClearCollect と違ってコレクションを消しません。入力フォームで1件ずつデータを追加していく場面で使います。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// フォームの入力内容をコレクションに追加する&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Collect&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    colDraft,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        商品名: テキスト入力_商品名.Text,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        数量: テキスト入力_数量.Text,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        単価: テキスト入力_単価.Text&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;受発注アプリや日報アプリで、複数の明細行を入力してから一括保存するパターンでよく使います。コレクションに貯めてギャラリーで確認させ、最後に確認ボタンでSharePointに一括Patchするというフローです。&lt;/p&gt;
&lt;h3 id=&quot;removeremoveif行の削除&quot;&gt;Remove・RemoveIf：行の削除&lt;/h3&gt;
&lt;p&gt;コレクションから特定の行を削除したいときは Remove または RemoveIf を使います。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// ThisItemで指している行を削除（ギャラリー内のボタンから）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Remove&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(colDraft, ThisItem)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 条件に一致する行をすべて削除&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;RemoveIf&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(colDraft, 数量 &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;入力途中の明細リストから1行削除したいとき、ギャラリー内の削除ボタンに Remove(colDraft, ThisItem) を書きます。これだけで該当行がコレクションから消え、ギャラリーの表示もリアルタイムに更新されます。&lt;/p&gt;
&lt;h3 id=&quot;patchでコレクションの特定行を更新する&quot;&gt;Patchでコレクションの特定行を更新する&lt;/h3&gt;
&lt;p&gt;コレクションに対して Patch を使うと、特定の行の値を更新できます。&lt;a href=&quot;/powerapps-patch-function/&quot;&gt;Patch関数&lt;/a&gt;はSharePointだけでなく、コレクションにも使えます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// コレクションの特定行を更新する&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Patch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(colDraft, ThisItem, {数量: テキスト入力_数量.Text})&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ギャラリーで選択した行の数量だけを書き換えるといった使い方ができます。コレクション上で編集してから、最後にまとめてSharePointに保存するというパターンの骨格がこれです。&lt;/p&gt;
&lt;h2 id=&quot;コレクションの実用パターン&quot;&gt;コレクションの実用パターン&lt;/h2&gt;
&lt;h3 id=&quot;onvisibleで取り込んでパフォーマンスを上げる&quot;&gt;OnVisibleで取り込んでパフォーマンスを上げる&lt;/h3&gt;
&lt;p&gt;SharePointリストを直接ギャラリーの Items に設定すると、画面を操作するたびにSharePointへの通信が発生します。アイテム数が増えてくると表示が遅くなりがちです。&lt;/p&gt;
&lt;p&gt;OnVisibleで一度ClearCollectしてコレクションに落とし、ギャラリーのItemsをコレクションにする設計にすると、初回読み込み以降はSharePointへの通信なしで動作します。検索や絞り込みもコレクション上で行えるので、委任の制約も受けません。&lt;/p&gt;
&lt;p&gt;ただし画面を開いたときの初回読み込みに時間がかかるというトレードオフがあります。データ件数が少ない（数百件以内）なら有効な手法ですが、数千件になるとむしろ遅くなるので注意しましょう。&lt;/p&gt;
&lt;h3 id=&quot;入力データを一時保存してから一括登録する&quot;&gt;入力データを一時保存してから一括登録する&lt;/h3&gt;
&lt;p&gt;複数の明細行を入力してから一括で登録したい場合、コレクションを使うと自然な設計ができます。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;入力フォームで1行分のデータを入力&lt;/li&gt;
&lt;li&gt;追加ボタンでCollectしてコレクションに追加&lt;/li&gt;
&lt;li&gt;ギャラリーでコレクションの中身を表示・確認&lt;/li&gt;
&lt;li&gt;登録ボタンでForAll + Patchを実行してSharePointに一括保存&lt;/li&gt;
&lt;li&gt;ClearCollect（またはClear）でコレクションを空にする&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;このパターンは受発注の明細入力、日報の複数行入力、棚卸しのスキャン登録など、一度に複数件を登録する業務アプリで繰り返し使っています。&lt;/p&gt;
&lt;h3 id=&quot;コレクションの中身をデバッグで確認する&quot;&gt;コレクションの中身をデバッグで確認する&lt;/h3&gt;
&lt;p&gt;コレクションの中身は、Power Appsスタジオの左側メニューにある変数パネルから確認できます。テスト実行中にコレクションに何が入っているかをリアルタイムで見られるので、デバッグに役立ちます。&lt;/p&gt;
&lt;p&gt;また、一時的にギャラリーをコレクションにつないで中身を表示させるのもよい方法です。思ったデータが入っているかを視覚的に確認できます。&lt;/p&gt;
&lt;h2 id=&quot;コレクションを使うときの注意点&quot;&gt;コレクションを使うときの注意点&lt;/h2&gt;
&lt;h3 id=&quot;アプリを閉じると消える&quot;&gt;アプリを閉じると消える&lt;/h3&gt;
&lt;p&gt;コレクションはアプリのメモリ上にしか存在しないため、アプリを閉じた瞬間に中身が消えます。入力途中のデータをコレクションに溜めていて、うっかりアプリを閉じるとそのデータは失われます。重要なデータは随時SharePointに保存する設計にするか、ユーザーにこのままアプリを閉じると入力中のデータが消えますと警告を出す設計を入れましょう。&lt;/p&gt;
&lt;h3 id=&quot;件数の上限を意識する&quot;&gt;件数の上限を意識する&lt;/h3&gt;
&lt;p&gt;ClearCollectでSharePointリストから取り込めるデータ件数は、データ行の制限の設定値まで（デフォルト500件、最大2000件）です。&lt;a href=&quot;/powerapps-delegation-warning/&quot;&gt;委任の警告の記事&lt;/a&gt;でも触れましたが、2000件を超えるデータをすべてコレクションに入れることはできません。コレクションに取り込む前にFilter（委任可能な条件）でデータを絞り込んでおくことが重要です。&lt;/p&gt;
&lt;p&gt;Filter・Search・LookUpとコレクションの使い分けについては&lt;a href=&quot;/powerapps-filter-search-lookup/&quot;&gt;Filter・Search・LookUp関数の記事&lt;/a&gt;も参考にしてみてください。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;コレクションはPower Appsの中でも特に実務でよく使う機能です。ClearCollectで取り込み・Collectで追加・RemoveIfで削除・Patchで更新という4パターンを押さえておけば、たいていのユースケースはカバーできます。&lt;/p&gt;
&lt;p&gt;まずはOnVisibleでSharePointリストをコレクションに取り込んで、ギャラリーにつなぐところから始めてみてください。アプリの操作感が変わるのを実感できると思います。市民開発の積み重ねがここでも活きてきます。&lt;/p&gt;</content:encoded></item><item><title>Power Apps 初心者がハマりやすいミス10選｜よくある「なぜ動かない」の答えを全部まとめた</title><link>https://shiminkaihatsu.com/powerapps-common-mistakes/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-common-mistakes/</guid><description>Power Apps 初心者がハマりやすいミス10選｜よくある「なぜ動かない」の答えを全部まとめた</description><pubDate>Sat, 18 Apr 2026 08:45:32 GMT</pubDate><content:encoded>&lt;p&gt;Power Appsを使い始めた頃にハマりやすいミスは、ほぼパターンが決まっています。この記事では、動かない、表示されない、保存されない系のよくある落とし穴を10個まとめました。&lt;/p&gt;
&lt;p&gt;この記事はエラー・デバッグクラスターのサテライト記事です。エラーの種類別の調べ方は&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-error-guide/&quot;&gt;Power Apps 数式エラー解決の全体マップ&lt;/a&gt;で整理しています。&lt;/p&gt;
&lt;h2 id=&quot;ミスonstartに変数を書いたのに起動直後に使えない&quot;&gt;ミス①：OnStartに変数を書いたのに起動直後に使えない&lt;/h2&gt;
&lt;p&gt;OnStartに書いた処理はアプリ起動時に実行されますが、すべてのOnStartが終わってから最初の画面が表示されます。ところが、OnStartの処理の中で非同期的に実行される部分があると、変数の初期化が完了する前に画面が表示されてしまうことがあります。&lt;/p&gt;
&lt;p&gt;また、Power Apps Studioでプレビューを実行したとき、アプリの再起動ではなく、戻る/進むでページを移動するとOnStartが再実行されないため、変数が空のまま動作することがあります。これは開発中にしか起きない現象ですが、初心者が混乱しやすいポイントです。&lt;/p&gt;
&lt;p&gt;OnStartとOnVisibleの使い分けについては&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-onstart-onvisible/&quot;&gt;OnStartとOnVisibleの使い分け&lt;/a&gt;の記事を参照してください。初期化処理は原則としてOnVisibleに書くことをおすすめします。&lt;/p&gt;
&lt;h2 id=&quot;ミスgalleryselectedをそのままpatchに渡してエラー&quot;&gt;ミス②：Gallery.SelectedをそのままPatchに渡してエラー&lt;/h2&gt;
&lt;p&gt;ギャラリーで選んだ行のデータをPatchで更新しようとするとき、Gallery1.SelectedをそのままPatchの第2引数に渡すと意図しない動作になることがあります。特に、ギャラリーの選択が解除されたタイミングでPatchが動くと、Selectedが空レコードになってしまいます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 危険：Gallery.Selectedをそのまま使う&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Patch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(SP_Tasks, Gallery1.Selected, {Status: {Value: &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;完了&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;}})&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 安全：ギャラリー選択時にvarRecordに格納しておく&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// ギャラリーのOnSelect：&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Set&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(varSelectedRecord, ThisItem)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// PatchはvarRecordを使う&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Patch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(SP_Tasks, varSelectedRecord, {Status: {Value: &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;完了&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;}})&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ギャラリーで行を選んだ瞬間にOnSelectでvarRecordなどの変数に格納し、以降の処理はその変数を使うのが安全なパターンです。&lt;/p&gt;
&lt;h2 id=&quot;ミス変数を初期化せずに使う&quot;&gt;ミス③：変数を初期化せずに使う&lt;/h2&gt;
&lt;p&gt;Power Appsの変数は、SetやUpdateContextで代入する前はブランク（空）の状態です。初回起動時に変数を参照する処理が走ると、ブランクが返ってきます。&lt;/p&gt;
&lt;p&gt;例えばフラグ管理に使うBoolean型の変数を初期化せずに `If(varIsApproved, …)` と書くと、初回はブランクが返るため `false` として扱われます。意図通りに動いているように見えて、実は初期化されていないだけというケースがあります。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// OnVisibleで変数を初期化する&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Set&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(varIsApproved, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Set&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(varCount, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Set&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(varMessage, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-variables/&quot;&gt;グローバル変数とコンテキスト変数の使い方&lt;/a&gt;でも触れていますが、変数は使い始める前に初期値を設定する習慣をつけると、予期しない挙動を防げます。&lt;/p&gt;
&lt;h2 id=&quot;ミスdropdownのitemsに文字列を直接書こうとする&quot;&gt;ミス④：DropdownのItemsに文字列を直接書こうとする&lt;/h2&gt;
&lt;p&gt;ドロップダウンコントロールのItemsプロパティには、テキストの配列を渡す必要があります。文字列を1つそのまま書いてもエラーになります。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// NG：文字列を1つだけ書く&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;Dropdown1.Items &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot;選択肢A&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// OK：配列形式で書く&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;Dropdown1.Items &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; [&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;選択肢A&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;選択肢B&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;選択肢C&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// SharePointの選択肢列から動的に取得する場合&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;Dropdown1.Items &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; Choices&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(SP_Tasks.Status)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;選択肢の内容をSharePointの選択肢列から引っ張ってくるときはChoices()関数を使います。こうするとSharePoint側で選択肢を追加・変更したとき、アプリ側を修正しなくても自動で反映されます。&lt;/p&gt;
&lt;h2 id=&quot;ミステキスト入力の値をtextなしで参照する&quot;&gt;ミス⑤：テキスト入力の値を.Textなしで参照する&lt;/h2&gt;
&lt;p&gt;テキスト入力コントロール（TextInput）の入力値を取得するには、`.Text` プロパティを参照する必要があります。コントロール名だけ書くとコントロールオブジェクト全体を参照することになり、文字列として扱えません。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// NG：コントロール名だけ書く&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;Label1.Text &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; TextInput1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// OK：.Textプロパティを参照する&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;Label1.Text &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; TextInput1.Text&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// Patchに渡すときも同様&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Patch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(SP_Tasks, &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Defaults&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(SP_Tasks), {Title: TextInput_Title.Text})&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-common-mistakes01.CSW3xNoM_Z5dprR.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;p&gt;他にもDropdownの選択値は `.Selected.Value`、Toggleのオン/オフは `.Value`、DatePickerの選択日は `.SelectedDate` と、コントロールの種類によって参照するプロパティが変わります。最初は迷いますが、使っているうちに自然と覚えます。&lt;/p&gt;
&lt;h2 id=&quot;ミスsharepointの選択肢列をvalueなしで参照する&quot;&gt;ミス⑥：SharePointの選択肢列を.Valueなしで参照する&lt;/h2&gt;
&lt;p&gt;SharePointの選択肢列（Choice型）をラベルに表示したり、文字列として比較したりするとき、列名だけで参照すると `{Value: “選択肢名”}` というレコード形式で返ってきます。これを直接ラベルに渡すと `[object Object]` と表示されます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// NG：選択肢列を直接ラベルに表示しようとする&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;Label1.Text &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; ThisItem.Status&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 結果：[object Object]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// OK：.Valueで文字列部分を取り出す&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;Label1.Text &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; ThisItem.Status.Value&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 結果：&quot;進行中&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// Filter条件で比較するときも同様&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(SP_Tasks, Status.Value &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot;進行中&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;ミスフォームを開いたら前回の入力が残っている&quot;&gt;ミス⑦：フォームを開いたら前回の入力が残っている&lt;/h2&gt;
&lt;p&gt;EditFormを使って新規登録フォームを実装したとき、前に入力した内容が次回も残っていることがあります。これはフォームのDefaultModeプロパティの設定が原因です。&lt;/p&gt;
&lt;p&gt;新規入力フォームとして使う場合は、画面のOnVisibleでNewForm()を実行してフォームをリセットするのが確実です。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 画面のOnVisibleでフォームをリセットする&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;NewForm&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(Form1)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// または編集フォームとして特定のレコードを表示する場合&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;EditForm&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(Form1);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;Form1.Item &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; varSelectedRecord&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;ミスデータが500件以上あるのに全件取得できない&quot;&gt;ミス⑧：データが500件以上あるのに全件取得できない&lt;/h2&gt;
&lt;p&gt;Power AppsのFilter・Search・LookUp関数は、データソース側で処理（委任）できない書き方をすると、アプリ側で処理する形になります。このとき取得できるのは最大500件（設定変更で2000件まで）です。データが増えてきた段階で突然、件数が合わないという症状が出ます。&lt;/p&gt;
&lt;p&gt;数式バーに黄色の波線（委任警告）が出ている状態はこのリスクがあります。委任の仕組みと対処法は&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-delegation-warning/&quot;&gt;委任の警告とは？意味と対処法&lt;/a&gt;で詳しく解説しています。データが少ないうちに対処しておくことをおすすめします。&lt;/p&gt;
&lt;h2 id=&quot;ミスonchangeに書いた処理が初回は動かない&quot;&gt;ミス⑨：OnChangeに書いた処理が初回は動かない&lt;/h2&gt;
&lt;p&gt;テキスト入力やDropdownのOnChangeプロパティに処理を書いた場合、そのコントロールの値がユーザーの操作によって変更されたときだけ発火します。画面が開いた初回は発火しません。&lt;/p&gt;
&lt;p&gt;例えばDropdownの選択値が変わったときに変数を更新する処理をOnChangeに書いても、画面を開いた直後のデフォルト選択の状態では処理が走りません。初回から変数に値を持たせたい場合は、OnVisibleでDropdownのSelectedプロパティを参照して初期化しておく必要があります。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 画面のOnVisibleで初期値を設定する&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Set&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(varSelectedCategory, Dropdown_Category.Selected.Value)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// Dropdownのコントロール自体のOnChangeで更新する&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Set&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(varSelectedCategory, Self.Selected.Value)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;ミスupdatecontextが別の画面で使えない&quot;&gt;ミス⑩：UpdateContextが別の画面で使えない&lt;/h2&gt;
&lt;p&gt;UpdateContext()で設定したコンテキスト変数は、設定した画面の中でしか使えません。別の画面に移動すると参照できなくなります。複数の画面をまたいで使いたい変数はSet()（グローバル変数）を使う必要があります。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;関数&lt;/th&gt;
&lt;th&gt;スコープ&lt;/th&gt;
&lt;th&gt;使いどき&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Set(変数名, 値)&lt;/td&gt;
&lt;td&gt;アプリ全体&lt;/td&gt;
&lt;td&gt;画面をまたいで使う変数&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;UpdateContext({変数名: 値})&lt;/td&gt;
&lt;td&gt;その画面のみ&lt;/td&gt;
&lt;td&gt;その画面だけで使う一時的な状態管理&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;UpdateContext()は同じ画面の中で使う分には問題ありません。ダイアログの表示/非表示フラグや、フォームの入力モード切り替えなど、画面ローカルな状態管理に向いています。画面間でデータを受け渡したいときは、Navigate()の第3引数でコンテキストを渡すか、Set()でグローバル変数にする方法を選んでください。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;10個のミスを振り返ると、共通するテーマが3つあります。変数の型と初期化、コントロールのプロパティ参照の正しい書き方、そしてスコープの理解です。この3つを押さえると、初心者がハマりやすい問題の大半は回避できます。&lt;/p&gt;
&lt;p&gt;最初は同じミスを何度か繰り返すのが普通です。でも繰り返すうちに、あ、またこのパターンだと気づける瞬間が必ずきます。市民開発はそういう地道な積み上げで成長するものです。&lt;/p&gt;</content:encoded></item><item><title>Power AppsのConcat関数｜コンボボックスの複数選択をメール宛先に変換する方法</title><link>https://shiminkaihatsu.com/powerapps-concat/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-concat/</guid><description>Power AppsのConcat関数｜コンボボックスの複数選択をメール宛先に変換する方法</description><pubDate>Sun, 22 Mar 2026 11:17:43 GMT</pubDate><content:encoded>&lt;p&gt;コンボボックスで複数選択した値を1本の文字列にまとめたい。Concat関数を使えば、テーブルの内容をカンマ区切りや改行でつなぎ合わせられます。複数選択をメールのTo行に変換する場面でも活躍します。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-concat01.QwM31_Hl_2saGFh.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;concatとconcatenateの違い&quot;&gt;ConcatとConcatenateの違い&lt;/h2&gt;
&lt;p&gt;Power Appsには文字列を結合する関数が2つあります。まず違いを整理しておきます。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;関数&lt;/th&gt;
&lt;th&gt;対象&lt;/th&gt;
&lt;th&gt;用途&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Concatenate&lt;/td&gt;
&lt;td&gt;複数の文字列（固定の値）&lt;/td&gt;
&lt;td&gt;“A” &amp;amp; “B” &amp;amp; “C” のような固定値の結合&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Concat&lt;/td&gt;
&lt;td&gt;テーブルの各行&lt;/td&gt;
&lt;td&gt;コレクションやコンボボックスの選択値など、行数が変わるデータの結合&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;ほとんどの場面でConcatが必要になるのは、データの件数が実行時まで決まらないケースです。固定の2〜3個の文字列をつなぐだけなら、&amp;amp; 演算子で十分です。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-concat02.BRcEo7Ig_16CBUX.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;concatの基本構文&quot;&gt;Concatの基本構文&lt;/h2&gt;
&lt;p&gt;Concat関数の引数は3つです。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Concat&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(テーブル, 数式 [, 区切り文字])&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;第2引数には、各行に対して評価する数式を書きます。シンプルな例として、リスト内の全フルーツ名をカンマ区切りで結合するには次のように書きます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Concat&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;([&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;りんご&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;みかん&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;ぶどう&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;], Value, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;, &quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 結果：りんご, みかん, ぶどう&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;第3引数の区切り文字はPower Apps 2023年以降のバージョンから追加されたオプションです。古いバージョンでは区切り文字を数式の中に含める必要があります。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 区切り文字引数がない場合の書き方&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Concat&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;([&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;りんご&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;みかん&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;ぶどう&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;], Value &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot;, &quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 末尾に不要なカンマが残るため、後処理が必要&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;実例3パターン&quot;&gt;実例3パターン&lt;/h2&gt;
&lt;h3 id=&quot;コンボボックスの複数選択をpower-automateに渡す&quot;&gt;コンボボックスの複数選択をPower Automateに渡す&lt;/h3&gt;
&lt;p&gt;コンボボックスで選択された担当者のメールアドレスをカンマ区切りで結合し、Power AutomateのHTTPリクエストや承認フローのTo行として渡す場面です。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Concat&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(ComboBox_Assignees.SelectedItems, Email, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;;&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;OutlookやTeamsの複数宛先はセミコロン区切りが一般的です。Power AppsからPower Automateのフローを呼び出す方法については&lt;a href=&quot;/powerapps-powerautomate/&quot;&gt;こちらの記事&lt;/a&gt;で解説しています。Teams通知への活用は&lt;a href=&quot;/powerautomate-teams-notify/&quot;&gt;Power AutomateのTeams通知記事&lt;/a&gt;も参考にしてください。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-concat03.3W8ARgZt_5gQp6.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;コンボボックスの選択値でfilterをかける&quot;&gt;コンボボックスの選択値でFilterをかける&lt;/h3&gt;
&lt;p&gt;コンボボックスで複数のカテゴリを選択し、そのいずれかに該当するデータをギャラリーに表示したい場合、ConcatとInを組み合わせます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    商品リスト,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    カテゴリ &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; ComboBox_Category.SelectedItems.Value&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;このケースではConcatではなくInを使うほうがシンプルですが、選択値を画面上に文字列として表示したいときはConcatが必要になります。ギャラリーの使い方は&lt;a href=&quot;/powerapps-gallery/&quot;&gt;こちらの記事&lt;/a&gt;を参考にしてください。&lt;/p&gt;
&lt;h3 id=&quot;コレクション内の値を改行でまとめる&quot;&gt;コレクション内の値を改行でまとめる&lt;/h3&gt;
&lt;p&gt;承認フローなどで、選択されたアイテムの一覧をメモ欄にまとめて表示したい場面です。Char(10)で改行を挟みながらConcatで結合できます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Concat&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    colSelectedItems,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    品名 &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot;：&quot;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; 数量 &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot;個&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Char&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;このようにして生成した文字列をPatchでSharePointの複数行テキスト列に保存することもできます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-concat04.BFOdvHYz_Z1avQwT.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;よくある間違いconcatの結果をテーブルと混同する&quot;&gt;よくある間違い：Concatの結果をテーブルと混同する&lt;/h2&gt;
&lt;p&gt;Concatはテーブルを受け取り、文字列を返します。Split（文字列をテーブルに変換）とは逆向きの関数です。ConcatとSplitを組み合わせると、テーブルと文字列を相互に変換できます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// テーブル → 文字列&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Concat&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(colItems, Value, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;,&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 文字列 → テーブル&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Split&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;りんご,みかん,ぶどう&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;,&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;この2つの関係を覚えておくと、データの受け渡し場面で役立ちます。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;Concatは「テーブルを文字列に変換する関数」です。コンボボックスの複数選択をメール宛先にする、コレクションの内容をまとめて表示する、といった場面で繰り返し使います。&lt;/p&gt;
&lt;p&gt;文字列を組み立てる別のアプローチとして、文字列補間という構文もあります。$“…” を使ったシンプルな書き方については&lt;a href=&quot;/powerapps-string-interpolation/&quot;&gt;こちらの記事をご覧ください&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;Power Appsのその他のテキスト関数についての完全ガイドは&lt;a href=&quot;/powerapps-text-functions/&quot;&gt;こちらの記事をご覧ください&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;少し地味ですが、実務でよく使う関数です。ぜひ手に馴染ませてみてください。&lt;/p&gt;</content:encoded></item><item><title>Power Appsは万能ツールじゃない。デメリットあれこれ</title><link>https://shiminkaihatsu.com/powerapps-cons/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-cons/</guid><description>Power Appsは万能ツールじゃない。デメリットあれこれ</description><pubDate>Sun, 05 May 2024 18:32:42 GMT</pubDate><content:encoded>&lt;p&gt;Power Appsは万能なツールではありません。&lt;/p&gt;
&lt;p&gt;エンジニアが作成するプログラムと比較すると機能は貧弱でメンテナンス性は悪く、プロから見たらデメリットだらけな環境らしいです。&lt;/p&gt;
&lt;p&gt;そこで今回は、現役のPower Platform開発者が実際に感じるデメリットを紹介します。&lt;/p&gt;
&lt;h2 id=&quot;power-appsのデメリット&quot;&gt;Power Appsのデメリット&lt;/h2&gt;
&lt;p&gt;思いつくままに挙げていきます。&lt;/p&gt;
&lt;h3 id=&quot;大量のデータの取り扱いは難あり&quot;&gt;大量のデータの取り扱いは難あり&lt;/h3&gt;
&lt;p&gt;Power Appsでは、標準だと500件まで、上限でも2,000件までのデータしか一度に読み込むことができません。&lt;/p&gt;
&lt;p&gt;それ以上のデータを取り扱う場合はあらためて読み込みが必要になりますが、そこに委任の問題も絡んできます。委任問題を回避できない場合は、どんなに頑張っても2,000件以上のデータが取得できません。&lt;/p&gt;
&lt;p&gt;2,000件というのはExcelでいうところの2,000行です。&lt;/p&gt;
&lt;p&gt;例えば自部署の20人が使用する日報アプリを Power Apps で作ったと仮定し、1日20件データが蓄積され、1ヶ月20日間の計算として月のデータ件数は400件です。&lt;/p&gt;
&lt;p&gt;委任できない処理を含んだアプリの場合、わずか5ヶ月（400件×5ヶ月：2,000件）でそのデータソースは上限2,000件を迎えてしまい、新たに別のデータソースと切り替えなければいけません。&lt;/p&gt;
&lt;p&gt;仮に委任可能な処理を施していたとしても、SharePoint Listsはデータ量が多くなるとパフォーマンスが低下する性質があるため、上限3,000件〜4,000件に留めることになります。&lt;/p&gt;
&lt;p&gt;データベースにDataverseを使えばこれらの問題は解決されますが、有料契約が必要です。&lt;/p&gt;
&lt;h3 id=&quot;パフォーマンスが悪い&quot;&gt;パフォーマンスが悪い&lt;/h3&gt;
&lt;p&gt;1つのアプリに500を超えるコントロールを配置すると、アプリの挙動が極端に悪くなります。&lt;/p&gt;
&lt;p&gt;コントロールというのは、Label1、TextInput1、DropDown1がアプリ内に存在していれば、コントロールは3ということです。&lt;/p&gt;
&lt;p&gt;アプリが複雑化するほどコントロールが増大し、Power Apps Studio（アプリを作成する画面）がもっさりしたり、アプリのパフォーマンス低下に繋がります。&lt;/p&gt;
&lt;p&gt;他にもデータソースが30を超えたり、スクリーンが20を超えてくると同様にパフォーマンスが低下します。&lt;/p&gt;
&lt;p&gt;大量のデータはギャラリー表示するなどして対策が必要になります。&lt;/p&gt;
&lt;h3 id=&quot;無い機能は使えない&quot;&gt;無い機能は使えない&lt;/h3&gt;
&lt;p&gt;Power Appsに備わっていない機能はどうやっても追加することができません。&lt;/p&gt;
&lt;p&gt;一般的なプログラミングであれば、卓越した技術を持った人の個人開発ソースを使うなどして機能の追加が実現できたりするらしいのですが、Power Apps では Microsoft が動いてくれない限り、どうやっても拡張性が限られます。&lt;/p&gt;
&lt;h3 id=&quot;ms製品に依存してしまう&quot;&gt;MS製品に依存してしまう&lt;/h3&gt;
&lt;p&gt;Power Appsは基本的に外部サービスとの連携がほとんどできないため、どうしてもMicrosoftに依存したツールになります。&lt;/p&gt;
&lt;h3 id=&quot;ゆえに大規模なアプリは作れない&quot;&gt;ゆえに大規模なアプリは作れない&lt;/h3&gt;
&lt;p&gt;ここまでに挙げた理由から、Power Apps で大規模なアプリ作成はできません。&lt;/p&gt;
&lt;p&gt;プログラミングの専門知識を必要としない Power Apps は、参入障壁が低い代わりに出せるパフォーマンスも限られます。&lt;/p&gt;
&lt;p&gt;既存業務のシステムをすべて Power Apps に置き換えていくなんてことは天地がひっくり返っても無理です。&lt;/p&gt;
&lt;h3 id=&quot;ネット速度に依存してしまう&quot;&gt;ネット速度に依存してしまう&lt;/h3&gt;
&lt;p&gt;テザリングで作業をしていると速度が遅くなりますが、そういう時に Power Apps Studio で作業すると、正しく入力したはずの Power Fx が反応しなかったり、保存が途中で止まってしまうことがあります。&lt;/p&gt;
&lt;p&gt;開発するにあたってネットの速度は非常に重要だと感じます。&lt;/p&gt;
&lt;h3 id=&quot;基本的に社内でしか使えない&quot;&gt;（基本的に）社内でしか使えない&lt;/h3&gt;
&lt;p&gt;Power Appsは基本的に社内のみでの使用に限られます。&lt;/p&gt;
&lt;p&gt;取引先とアプリを共有したければ、次の条件をすべて満たす必要があります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;先方の企業がPower Appsを使えるライセンス契約をしていること&lt;/li&gt;
&lt;li&gt;データベースを共有していること&lt;/li&gt;
&lt;li&gt;アプリを共有していること&lt;/li&gt;
&lt;li&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;バージョン管理ができない&quot;&gt;バージョン管理ができない&lt;/h3&gt;
&lt;p&gt;Power Apps はバージョンを分けて保存することができません。&lt;/p&gt;
&lt;p&gt;上書き保存したら過去のデータには戻れないため、特定のタイミングでZipでエクスポートしておくなど事前の準備が必要です。&lt;/p&gt;
&lt;h3 id=&quot;費用対効果が小さい&quot;&gt;費用対効果が小さい&lt;/h3&gt;
&lt;p&gt;苦労して作ったアプリも、実はそれ1つだけでは業務改善に与えるインパクトは非常に小さかったりします。&lt;/p&gt;
&lt;p&gt;そもそも Power Apps は市民開発のための手段で、少ない労力でかゆいところに手が届くツールです。&lt;/p&gt;
&lt;p&gt;何十時間もかけて作ったアプリのわりには、削減時間がたった数時間しかないなんてこともよくあります。&lt;/p&gt;
&lt;p&gt;数をたくさん作らないといけません。&lt;/p&gt;
&lt;h3 id=&quot;英語ができないと非効率的&quot;&gt;英語ができないと非効率的&lt;/h3&gt;
&lt;p&gt;開発でわからないことをネット検索するにしても生成系AIを使うにしても、英語ができるのとそうでないのとでは、得られる情報に天地の差があります。&lt;/p&gt;
&lt;p&gt;プログラミングは英語を使いますので、ネット上は必然的に英語での情報が多くなります。&lt;/p&gt;
&lt;p&gt;Power Apps も同じで、英語に抵抗感がなければ、ぜひ英語のブログ記事や英語のYouTubeを積極的に使うことをおすすめします。&lt;/p&gt;
&lt;h2 id=&quot;デメリットを理解した上で使うもの&quot;&gt;デメリットを理解した上で使うもの&lt;/h2&gt;
&lt;p&gt;ここで挙げたデメリットを理解した上で Power Apps と付き合っていく必要があります。&lt;/p&gt;
&lt;p&gt;できることとできないこと、得意なことと不得意なことを理解し、割り切りが必要です。&lt;/p&gt;
&lt;p&gt;どんなに頑張っても Power Apps には限界がありますし、純粋なプログラミングには逆立ちしても機能面で勝つことはできません。&lt;/p&gt;
&lt;p&gt;Power Apps（Power Platform）が得意とするのは、エンジニアに高いお金をかけて発注するまでもない、身近な業務改善のためのフィールドです。&lt;/p&gt;
&lt;p&gt;日報をまとめるだけのアプリを、うん百万円も払って外注することはありませんし、社内承認が得られるはずがありません。&lt;/p&gt;
&lt;p&gt;でも日報のExcel管理が大変だし、集計が手間だし、手間に感じているかもしれません。&lt;/p&gt;
&lt;p&gt;それなら自前で好きな仕様で作ってしまおうというのが Power Apps です。&lt;/p&gt;
&lt;p&gt;単純なCRUD（登録（Create）、読み込み（Read）、更新（Update）、削除（Delete））のアプリでいいなら、10分で出来上がってしまいます（見た目や使い勝手はともかく）。&lt;/p&gt;
&lt;p&gt;市民開発とはこういう地道な事柄の積み重ねだと思っています。&lt;/p&gt;</content:encoded></item><item><title>Power Apps コンテナの子要素の配置・整列・重なりを制御する方法</title><link>https://shiminkaihatsu.com/powerapps-container-alignment/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-container-alignment/</guid><description>Power Apps コンテナの子要素の配置・整列・重なりを制御する方法</description><pubDate>Mon, 06 Apr 2026 22:40:39 GMT</pubDate><content:encoded>&lt;p&gt;Power Apps のコンテナでレイアウトを組むとき、子要素の整列とサイズ配分を制御するプロパティを理解しているかどうかで、完成度が大きく変わります。この記事ではオートレイアウトで使う主要プロパティを一通り整理します。&lt;/p&gt;
&lt;h2 id=&quot;整列を制御する2つのプロパティ&quot;&gt;整列を制御する2つのプロパティ&lt;/h2&gt;
&lt;h3 id=&quot;layoutalignitems交差軸方向の整列&quot;&gt;LayoutAlignItems：交差軸方向の整列&lt;/h3&gt;
&lt;p&gt;LayoutAlignItems は、コンテナの主軸（方向）と垂直に交差する軸上での子要素の並び方を制御します。縦方向（Vertical）のコンテナなら左右方向、横方向（Horizontal）のコンテナなら上下方向の整列が対象です。設定できる値は Start・Center・End・Stretch の4択です。&lt;/p&gt;
&lt;p&gt;Start にすると子要素がコンテナの左端（縦コンテナの場合）に寄ります。Center にすると中央揃え、End にすると右端寄せになります。Stretch はコンテナの幅いっぱいに子要素を引き伸ばします。個人的に一番使うのは Stretch で、子要素の幅を親コンテナに合わせて自動的に広げてくれるので、画面幅が変わっても崩れにくいレイアウトが作れます。&lt;/p&gt;
&lt;h3 id=&quot;layoutjustifycontent主軸方向の配置&quot;&gt;LayoutJustifyContent：主軸方向の配置&lt;/h3&gt;
&lt;p&gt;LayoutJustifyContent は、主軸方向（縦コンテナなら上下、横コンテナなら左右）での子要素全体の配置方法を制御します。設定できる値は Start・Center・End・SpaceBetween・SpaceAround の5択です。&lt;/p&gt;
&lt;p&gt;SpaceBetween が特に便利で、最初の子要素をコンテナの先頭に、最後の子要素をコンテナの末尾に配置し、残りを等間隔に並べます。たとえばヘッダーバーの左端にタイトル、右端に更新ボタンを置きたいとき、横コンテナに2つの要素を入れて LayoutJustifyContent を SpaceBetween にするだけで実現できます。私のアプリでも cntBI_1stL（KPIカードの上段コンテナ）でこのパターンをよく使っています。Gap で間隔を細かく調整するより、SpaceBetween のほうがスッキリ書けます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-container-alignment01.7CooykgZ_Z1cFNUj.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;サイズ配分を制御するプロパティ&quot;&gt;サイズ配分を制御するプロパティ&lt;/h2&gt;
&lt;h3 id=&quot;fillportions比率でスペースを分割する&quot;&gt;FillPortions：比率でスペースを分割する&lt;/h3&gt;
&lt;p&gt;FillPortions は子要素に設定するプロパティで、コンテナ内の余白を比率で分け合う仕組みです。たとえば左カラムに FillPortions: 3、右カラムに FillPortions: 2 と設定すると、利用可能なスペースを3:2で分割します。全体幅が変わっても比率は保たれるので、レスポンシブ対応に非常に便利です。&lt;/p&gt;
&lt;p&gt;よくある使い方は「左側にサイドメニュー、右側にメインコンテンツ」の2カラムレイアウトです。サイドメニューに FillPortions: 1、メインコンテンツに FillPortions: 3 と設定すれば、画面幅に関わらず常に1:3の比率が維持されます。Width に直接数値を書くよりはるかに管理が楽で、画面サイズが変わるたびに計算し直す手間がなくなります。&lt;/p&gt;
&lt;h3 id=&quot;固定サイズとfillportionsの組み合わせ&quot;&gt;固定サイズとFillPortionsの組み合わせ&lt;/h3&gt;
&lt;p&gt;FillPortions は固定サイズと組み合わせて使うとさらに強力になります。たとえばヘッダーの高さを Height: 60 で固定し、残りのボディ部分に FillPortions: 1 を設定すると、ヘッダーは常に60pxを確保しつつ、ボディが残りの高さをすべて占有します。画面の高さが変わってもヘッダーは60pxのまま、ボディだけが伸び縮みします。&lt;/p&gt;
&lt;p&gt;この組み合わせは、固定ヘッダー＋スクロール可能なボディというよくある画面レイアウトの基本パターンになっています。FlexibleHeight プロパティでも同様のことが実現できますが、FillPortions のほうが直感的に比率をコントロールできるので私はこちらをよく使います。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-container-alignment02.SKdzSgzM_qguCj.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;間隔余白を制御するプロパティ&quot;&gt;間隔・余白を制御するプロパティ&lt;/h2&gt;
&lt;h3 id=&quot;gapとpaddingの違いを押さえる&quot;&gt;GapとPaddingの違いを押さえる&lt;/h3&gt;
&lt;p&gt;Gap はコンテナ内の子要素同士の間隔をピクセルで指定します。一方 Padding はコンテナ自身の内縁と子要素の間の余白です。Gap は子要素間の隙間、Padding はコンテナの壁と中身の間の余白です。&lt;/p&gt;
&lt;p&gt;たとえばカード一覧で各カードの間に16pxの隙間を空けたい場合は Gap: 16 を設定します。一覧全体の外側にも余白が欲しいときは PaddingLeft・PaddingRight などを追加します。Gap だけで全部やろうとすると、最初と最後の要素の外側に余白が出せないので、役割を分けて使うのが正解です。&lt;/p&gt;
&lt;h3 id=&quot;minimumwidthとminimumheight崩れを防ぐ最小サイズ&quot;&gt;MinimumWidthとMinimumHeight：崩れを防ぐ最小サイズ&lt;/h3&gt;
&lt;p&gt;FillPortions や Flexible Width・Height を使うと、画面が極端に小さくなったときにコントロールが潰れて表示が崩れることがあります。これを防ぐのが MinimumWidth と MinimumHeight です。たとえば MinimumWidth: 200 と設定しておくと、どんなに親コンテナが縮んでも子要素の幅は200px未満にはなりません。&lt;/p&gt;
&lt;p&gt;ボタンやラベルなど、一定以下のサイズになるとテキストが読めなくなるコントロールには積極的に設定することをおすすめします。設定しておかないと、タブレットや小さいウィンドウで開いたときに想定外の崩れが起きることがあります。体感的に、最小幅80〜120px程度を目安にしていることが多いです。&lt;/p&gt;
&lt;h2 id=&quot;スクロールと折り返し&quot;&gt;スクロールと折り返し&lt;/h2&gt;
&lt;h3 id=&quot;overflowscrollコンテナをスクロール可能にする&quot;&gt;Overflow（Scroll）：コンテナをスクロール可能にする&lt;/h3&gt;
&lt;p&gt;子要素の合計サイズがコンテナの表示領域を超えた場合の挙動を制御するのが Overflow プロパティです。Overflow: Scroll に設定すると、コンテナの範囲を超えた分はスクロールで表示できるようになります。縦方向と横方向でそれぞれ独立して設定できます。&lt;/p&gt;
&lt;p&gt;よくある使い方は、画面下部に固定フッターを置きつつ、メインコンテンツ部分だけをスクロールさせたい場合です。ボディ部分のコンテナに Overflow: Scroll を設定し、FillPortions で残りの高さを占有させれば、フッターが画面外に消えることなくボディだけがスクロールする構造が作れます。Power Apps はギャラリーのスクロールが標準ですが、コンテナ単位でスクロールを制御できると設計の幅が大きく広がります。&lt;/p&gt;
&lt;h3 id=&quot;wrap横コンテナでの折り返し&quot;&gt;Wrap：横コンテナでの折り返し&lt;/h3&gt;
&lt;p&gt;横方向（Horizontal）のオートレイアウトコンテナで Wrap を有効にすると、子要素が横幅に収まらない場合に次の行に折り返します。タイル状のカードレイアウトや、ボタンが増えたときに自動で折り返すツールバーを作るときに便利です。&lt;/p&gt;
&lt;p&gt;注意点として、Wrap を使うと子要素の高さが行ごとに変わる場合があります。各行の高さを揃えたい場合は LayoutAlignItems: Stretch と組み合わせて使うと整いやすいです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-container-alignment03.TtY6NEiC_ZPhrcE.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;重なりを使うテクニック&quot;&gt;重なりを使うテクニック&lt;/h2&gt;
&lt;h3 id=&quot;manual-layout内でのz順活用&quot;&gt;Manual Layout内でのZ順活用&lt;/h3&gt;
&lt;p&gt;オートレイアウトは子要素を一列に並べる仕組みなので、コントロールを重ねるデザインには向いていません。重なりが必要な場合は Manual Layout のコンテナを使い、ツリービューでのコントロールの順序（Z順）を利用します。ツリービューで下にあるコントロールほど画面手前に表示されます。&lt;/p&gt;
&lt;p&gt;よくある使い方は、画像の上にテキストを重ねるヒーローバナーや、グラフの上にアイコンや数値ラベルを重ねるKPIカードです。Manual Layout コンテナの中で X・Y・Z 順を使い分けると、オートレイアウトだけでは実現できないリッチなデザインが作れます。&lt;/p&gt;
&lt;p&gt;コンテナの使い方全般については&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-container-guide/&quot;&gt;Power Apps コンテナ完全ガイド&lt;/a&gt;でまとめて解説しているので、あわせて参照してください。&lt;/p&gt;
&lt;h2 id=&quot;プロパティの全体像をまとめる&quot;&gt;プロパティの全体像をまとめる&lt;/h2&gt;
&lt;p&gt;ここまで解説したプロパティを表で整理します。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;プロパティ&lt;/th&gt;
&lt;th&gt;設定場所&lt;/th&gt;
&lt;th&gt;主な使い道&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;LayoutAlignItems&lt;/td&gt;
&lt;td&gt;コンテナ&lt;/td&gt;
&lt;td&gt;交差軸方向の整列（Start/Center/End/Stretch）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LayoutJustifyContent&lt;/td&gt;
&lt;td&gt;コンテナ&lt;/td&gt;
&lt;td&gt;主軸方向の配置（SpaceBetween等）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FillPortions&lt;/td&gt;
&lt;td&gt;子要素&lt;/td&gt;
&lt;td&gt;余白を比率で分割&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gap&lt;/td&gt;
&lt;td&gt;コンテナ&lt;/td&gt;
&lt;td&gt;子要素間の間隔（ピクセル）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Padding（各辺）&lt;/td&gt;
&lt;td&gt;コンテナ&lt;/td&gt;
&lt;td&gt;コンテナ内縁の余白&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MinimumWidth/Height&lt;/td&gt;
&lt;td&gt;子要素&lt;/td&gt;
&lt;td&gt;最小サイズの保証&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Overflow&lt;/td&gt;
&lt;td&gt;コンテナ&lt;/td&gt;
&lt;td&gt;スクロール有無の制御&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Wrap&lt;/td&gt;
&lt;td&gt;コンテナ&lt;/td&gt;
&lt;td&gt;横コンテナでの折り返し&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;これらのプロパティは単体で使うより、組み合わせて使うことで真価を発揮します。たとえば「LayoutAlignItems: Stretch ＋ FillPortions ＋ MinimumWidth」の組み合わせは、レスポンシブなカラムレイアウトの定番セットです。最初から全部覚えようとせず、まず LayoutAlignItems と Gap だけ試してみて、物足りなくなったら他のプロパティを加えていくと身につきやすいです。&lt;/p&gt;
&lt;p&gt;コンテナの基本概念から学びたい場合は&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-container-vs-dragdrop/&quot;&gt;座標配置とコンテナの違いを解説した記事&lt;/a&gt;が入口になります。また、手動レイアウトとオートレイアウトのどちらを選ぶかの判断基準は&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-container-manual-vs-auto/&quot;&gt;手動レイアウトとオートレイアウトの使い分け&lt;/a&gt;の記事で詳しく扱っています。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;整列と配置を制御するプロパティは数が多いように見えますが、役割ごとに整理すると覚えやすくなります。LayoutAlignItems と LayoutJustifyContent が並び方、FillPortions と Gap・Padding が間隔とサイズ、Overflow と Wrap がはみ出し時の挙動です。この分類で頭に入れておくと、実際にレイアウトを組むときにどのプロパティを触ればいいかがすぐ判断できます。市民開発とはこういう地道な知識の積み重ねだと思っています。一つひとつ実際のアプリで試しながら身につけていきましょう。&lt;/p&gt;</content:encoded></item><item><title>Power Apps コンテナを使ってすべてのコントロールに角丸（ボーダーラジアス）を適用する方法</title><link>https://shiminkaihatsu.com/powerapps-container-border-radius/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-container-border-radius/</guid><description>Power Apps コンテナを使ってすべてのコントロールに角丸（ボーダーラジアス）を適用する方法</description><pubDate>Mon, 06 Apr 2026 22:29:03 GMT</pubDate><content:encoded>&lt;p&gt;Power Apps で角丸デザインを実現したいと思っても、DropdownやDatePickerなど一部のコントロールは BorderRadius プロパティを持っていません。コンテナで包んでしまえばこの問題は解決します。しかも、アプリ全体の角丸を変数1つで一括管理できるようになります。&lt;/p&gt;
&lt;h2 id=&quot;角丸が設定できないコントロールが存在する&quot;&gt;角丸が設定できないコントロールが存在する&lt;/h2&gt;
&lt;p&gt;Power Apps のコントロールには、モダンコントロールとクラシックコントロールの2種類があります。モダンコントロールはネイティブに BorderRadius プロパティを持っているので、プロパティパネルから直接角丸の値を指定できます。問題はクラシックコントロールです。Dropdown・DatePicker・ComboBox といったよく使うコントロールの多くがクラシック扱いで、BorderRadius プロパティが存在しません。&lt;/p&gt;
&lt;p&gt;モダンコントロールに全面移行すればこの問題は解決しますが、既存アプリをそのまま使い続けている場合や、モダンコントロールではまだサポートされていない機能が必要な場合は、クラシックコントロールを使い続ける必要があります。私のアプリでもDatePickerはクラシックを使い続けており、どうしても角丸が揃わない箇所が出てしまっていました。これを解決したのがコンテナを使ったラップのテクニックです。&lt;/p&gt;
&lt;p&gt;コンテナクラスターの全体像は&lt;a href=&quot;/powerapps-container-guide/&quot;&gt;Power Apps コンテナ完全ガイド&lt;/a&gt;にまとめています。このテクニックを使いこなすために、コンテナの基本概念を先に押さえておくと理解が深まります。&lt;/p&gt;
&lt;h2 id=&quot;コンテナで包むと-borderradius-が子要素に伝播する&quot;&gt;コンテナで包むと BorderRadius が子要素に伝播する&lt;/h2&gt;
&lt;p&gt;Power Apps のコンテナには、BorderRadius を設定すると内側の子要素にも角丸が適用される仕組みがあります。つまり、BorderRadius を持たないクラシックコントロールをコンテナに入れて、コンテナ側に BorderRadius を設定すれば、見た目上は角丸になります。&lt;/p&gt;
&lt;p&gt;手順はシンプルです。まずコンテナを追加し、角丸を付けたいコントロールをその中に移動します。次にコンテナの BorderRadius プロパティに値を入れます。これだけで、コンテナの形状に沿った角丸がコントロール全体に適用されます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// コンテナ側の設定例&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;BorderRadius: &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;8&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;注意点が一つあります。コンテナの Width と Height をコントロールと完全に一致させてください。コンテナがコントロールより大きかったり小さかったりすると、角丸の位置がずれて見えます。コントロールを親コンテナ（Auto Layout）内に配置している場合は、Flexible Width / Flexible Height を活用してサイズを自動追従させるのが確実です。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-container-border-radius01.DHB8hG4b_Zatlfp.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;変数でアプリ全体の角丸を一元管理する&quot;&gt;変数でアプリ全体の角丸を一元管理する&lt;/h2&gt;
&lt;p&gt;コンテナごとに BorderRadius を個別に設定していくと、後から「やっぱり角丸を少し小さくしたい」となったときに全コンテナを修正して回らなければなりません。コントロールが50個あれば50回修正が必要です。これは現実的ではないです。&lt;/p&gt;
&lt;p&gt;そこで有効なのが、角丸の値を変数として管理する方法です。App.OnStart または App.Formulas で変数を定義し、全コンテナの BorderRadius をその変数で参照するようにします。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// App.OnStart に定義&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Set&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(varRadiusBI, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;各コンテナの BorderRadius プロパティには固定値ではなくこの変数を指定します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 各コンテナの BorderRadius&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;BorderRadius: varRadiusBI&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;こうしておけば、varRadiusBI の値を変えるだけでアプリ全体の角丸が一括で変わります。デザインの方向性が途中で変わっても、1か所を書き換えるだけで済む。これは実際に開発していてとても助かっています。以前は個別に設定していたのですが、デザインレビューで角丸を変えることになった際に全部修正が必要で、かなり時間を取られました。それ以来、見た目に関わる値はできるだけ変数に逃がすようにしています。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-container-border-radius02.Dg3i3b-z_ZKIvmU.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;上だけ角丸にするパターン&quot;&gt;上だけ角丸にするパターン&lt;/h2&gt;
&lt;p&gt;角丸は4辺すべてに均等に設定するだけではありません。上辺だけ角丸にして下辺はフラットにする、というデザインもよく使います。カードコンポーネントの上部だけ丸くして、下部はボーダーレスにする場合などです。&lt;/p&gt;
&lt;p&gt;Power Apps のコンテナには BorderRadius とは別に、RadiusTopLeft・RadiusTopRight・RadiusBottomLeft・RadiusBottomRight という4辺個別のプロパティがあります。これを使えば非対称な角丸が実現できます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 上だけ角丸にするパターン&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;RadiusTopLeft: varRadiusBI&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;RadiusTopRight: varRadiusBI&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;RadiusBottomLeft: &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;RadiusBottomRight: &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;私のアプリでは cntCard_3rd1〜3 という3枚のKPIカードでこのパターンを使っています。カードの上部は varRadiusBI で丸く、下部は 0 にしてフラットにすることで、カードを並べたときに視覚的にすっきり見えるようにしています。上下の角丸を変えるだけでカードの印象がかなり変わるので、一度試してみることをおすすめします。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-container-border-radius03.D56CLu5b_1CTtDh.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;モダンコントロールとの使い分け&quot;&gt;モダンコントロールとの使い分け&lt;/h2&gt;
&lt;p&gt;ここまで説明してきたコンテナラップのテクニックは、あくまでクラシックコントロールを使い続ける場合の対処法です。モダンコントロールに移行できるなら、コンテナでラップする必要はなく、直接 BorderRadius を設定できます。&lt;/p&gt;
&lt;p&gt;ではどちらを選ぶべきか。私の判断基準はシンプルで、新規アプリはモダンコントロールを基本にして、クラシックが必要な箇所だけ使う。既存アプリは全面移行のコストが高いのでクラシックのまま維持して、このコンテナラップで角丸を対応する。これで大半のケースはカバーできています。&lt;/p&gt;
&lt;p&gt;半分正解、半分間違いという感じですが、モダン一択にはまだなれない現実があります。ComboBox のカスタム候補表示や DatePicker の細かい制御はクラシックにしかない機能もあるので、過信しすぎは禁物です。コントロールの選択と UI 設計の考え方については&lt;a href=&quot;/powerapps-uiux/&quot;&gt;Power Apps の見た目と使いやすさにこだわった設計&lt;/a&gt;の記事で詳しく触れています。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;クラシックコントロールの角丸問題は、コンテナで包む・変数で一元管理する、この2ステップで解決します。個別に設定して回る時代はもう終わりにしましょう。varRadiusBI を一つ定義しておくだけで、アプリのデザイン変更に柔軟に対応できるようになります。地道なようですが、こういった設計の積み重ねがメンテナンスしやすいアプリにつながっていきます。&lt;/p&gt;</content:encoded></item><item><title>Power Apps コンテナで再利用できるカスタムコントロールを作る方法｜カスタムボタン・プログレスバーの実装</title><link>https://shiminkaihatsu.com/powerapps-container-custom-control/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-container-custom-control/</guid><description>Power Apps コンテナで再利用できるカスタムコントロールを作る方法｜カスタムボタン・プログレスバーの実装</description><pubDate>Mon, 06 Apr 2026 22:29:03 GMT</pubDate><content:encoded>&lt;p&gt;Power Apps でボタンやプログレスバーを作るとき、標準コントロールのデザインだと物足りないことがあります。コンテナを使って複数のコントロールをまとめることで、見た目も動作も自分好みのカスタムコントロールを作れます。しかも一度作ればコピペで量産できます。&lt;/p&gt;
&lt;h2 id=&quot;カスタムコントロールとは何か&quot;&gt;カスタムコントロールとは何か&lt;/h2&gt;
&lt;p&gt;Power Apps におけるカスタムコントロールとは、複数のコントロールをコンテナにまとめて一つの部品として扱えるようにしたものです。コンポーネント（Component Library）という仕組みも似たようなことができますが、コンポーネントは複数画面での再利用を前提にしていて、設定が少し複雑です。一方、コンテナを使ったカスタムコントロールは同一画面内での量産・使い回しに向いていて、コピペするだけで増やせるのが強みです。&lt;/p&gt;
&lt;p&gt;コンテナを使ったレイアウト設計の全体像は&lt;a href=&quot;/powerapps-container-guide/&quot;&gt;Power Apps コンテナ完全ガイド&lt;/a&gt;で解説しています。このページではその応用として、カスタムコントロールの実装パターンを具体的に掘り下げます。&lt;/p&gt;
&lt;p&gt;私がよく作るのはカスタムボタンとプログレスバーの2種類です。どちらも標準コントロールだと痒いところに手が届かない場面があり、コンテナで自作することにしました。一度パターンを作ってしまえば、以降は複製して中身を変えるだけなので、2つ目からの作業はとても速くなります。&lt;/p&gt;
&lt;h2 id=&quot;カスタムボタンの作り方&quot;&gt;カスタムボタンの作り方&lt;/h2&gt;
&lt;p&gt;標準の Button コントロールはシンプルで使いやすいですが、アイコンとテキストを横並びにしたい、テキストの左右にそれぞれ要素を置きたい、といった要件には対応しにくいです。そこでコンテナを使ってボタンを自作します。&lt;/p&gt;
&lt;p&gt;構成はシンプルです。Auto Layout の水平コンテナを作り、中にアイコン（または Icon コントロール）とラベルを横並びで入れます。さらに透明な Button コントロールを同じコンテナに重ねてタップ判定を担当させます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;cntCustomBtn（水平 Auto Layout コンテナ）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;├─ Icon コントロール（アイコン表示）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;├─ Label（テキスト表示）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;└─ Classic&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;Button（Fill: Transparent、タップ判定専用）&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Button の Fill を Color.Transparent にしてコンテナ全体を覆うように配置することで、見た目はアイコン＋テキストのカスタムデザインのまま、クリック・タップの判定は Button が受け持つという役割分担ができます。OnSelect の処理は Button コントロールに書きます。&lt;/p&gt;
&lt;h3 id=&quot;コピペで量産する方法&quot;&gt;コピペで量産する方法&lt;/h3&gt;
&lt;p&gt;このカスタムボタンを別の場所に使い回したいときは、コンテナごとコピーします。コンテナをコピーすると中の子要素も全員ついてきます。コピー後に変える箇所は Label の Text プロパティと Button の OnSelect だけです。アイコンの種類を変えたい場合は Icon プロパティも変えますが、それだけで別のボタンとして機能します。&lt;/p&gt;
&lt;p&gt;私のアプリでは更新ボタン・フィルタークリアボタン・CSVエクスポートボタンをすべてこのパターンで作っています。最初の1つを作るのに10分かかっても、2つ目以降は3分で完成します。コンポーネントを使うほどではないけれど、同じ画面で何度も使うボタンがあるなら、このコンテナ量産パターンが一番コスパが良いです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-container-custom-control01.DVc-H-C6_Z1MKjQV.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;カスタムプログレスバーの作り方&quot;&gt;カスタムプログレスバーの作り方&lt;/h2&gt;
&lt;p&gt;Power Apps には標準のプログレスバーコントロールがありません（モダンコントロールのProgressBar は存在しますが、デザインの自由度が低い）。コンテナと Rectangle を組み合わせると、自由なデザインのプログレスバーが作れます。&lt;/p&gt;
&lt;p&gt;構造はこうです。外側コンテナがバー全体の背景（グレーなど）を担当し、内側コンテナが進捗部分（グリーンなど）を担当します。内側コンテナの Width を進捗率に応じた式で動的に変えることで、バーの長さが変化します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;cntBar（外側コンテナ：背景色・角丸設定）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;├─ recLeft（Rectangle：進捗部分、Width は動的計算）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;└─ recRight（Rectangle：残余部分、Width は残り幅）&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;進捗部分の Width 式はこう書きます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// recLeft の Width（進捗部分）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;Parent.Width &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; varSubmittedCount &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; varTotalCount&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Parent.Width はバー全体の幅、varSubmittedCount は完了件数、varTotalCount は総件数です。完了件数が30で総件数が100なら、バーは全体の30%の長さになります。残余部分（recRight）の Width は Parent.Width - recLeft.Width で計算すると、合計が常にバー全体の幅になります。&lt;/p&gt;
&lt;h3 id=&quot;件数ゼロのときのエラーを防ぐ&quot;&gt;件数ゼロのときのエラーを防ぐ&lt;/h3&gt;
&lt;p&gt;varTotalCount がゼロのとき、ゼロ除算エラーになります。データがまだない初日や、フィルターで全件が除外された場合などに起きます。これを防ぐには If 式で分母がゼロの場合を分岐させます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// ゼロ除算を防ぐ式&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    varTotalCount &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;    0&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    Parent.Width &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; varSubmittedCount &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; varTotalCount&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;私はこのプログレスバーを船舶の作業進捗表示に使っています。varTotalCount が全船舶数、varSubmittedCount が作業提出済み船舶数です。朝一番にアプリを開いたとき、バーがどこまで埋まっているかで今日の進捗が一目でわかります。数字だけ見るより直感的で、チームへの共有にも使いやすいです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-container-custom-control02.B1MrAJ7R_Z1BJecb.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;コンポーネントとの違いと使い分け&quot;&gt;コンポーネントとの違いと使い分け&lt;/h2&gt;
&lt;p&gt;コンポーネント（Component Library）はプロパティを外部から注入できるため、複数の画面・複数のアプリで同じ部品を共通化したい場合に向いています。一方、コンテナを使ったカスタムコントロールは同一画面内での使い回しに向いています。設定の複雑さとスコープで使い分けるのが現実的です。&lt;/p&gt;
&lt;p&gt;まとめると、同一画面で3つ以上同じデザインのボタンやバーを使う場合はコンテナ量産パターン、複数画面や複数アプリに展開したい場合はコンポーネントという判断基準で問題ないです。市民開発の現場では、コンポーネントを設計する時間が取れないことも多いので、まずコンテナで作って後からコンポーネント化するというステップが現実的です。&lt;/p&gt;
&lt;p&gt;角丸をコンテナで実現するテクニックは&lt;a href=&quot;/powerapps-container-border-radius/&quot;&gt;コンテナを使ってすべてのコントロールに角丸を適用する方法&lt;/a&gt;で解説しています。カスタムコントロールにも同じ考え方が使えるので、合わせて確認してみてください。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;コンテナを使ったカスタムコントロールは、作る手間より使い回しのメリットの方がはるかに大きいです。最初の1個を丁寧に作っておけば、あとはコピペと中身の差し替えだけで量産できます。プログレスバーのように標準コントロールにないものも自作できるのがコンテナの強みです。市民開発はこういった小さな工夫の積み重ねで、アプリの品質が上がっていきます。楽しみながら試してみてください。&lt;/p&gt;</content:encoded></item><item><title>Power Apps コンテナのドロップシャドウと FillPortions でカードUIに奥行きを出す方法</title><link>https://shiminkaihatsu.com/powerapps-container-dropshadow/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-container-dropshadow/</guid><description>Power Apps コンテナのドロップシャドウと FillPortions でカードUIに奥行きを出す方法</description><pubDate>Mon, 06 Apr 2026 22:29:03 GMT</pubDate><content:encoded>&lt;p&gt;Power Apps のコンテナには DropShadow プロパティがあります。カードに影をつけることで画面に奥行きが生まれ、どこがタップ可能でどこが背景かが直感的に伝わります。ただし使い方を間違えると影が二重になったり、全体がうるさい印象になったりするので注意が必要です。&lt;/p&gt;
&lt;h2 id=&quot;dropshadow-プロパティの種類と使い分け&quot;&gt;DropShadow プロパティの種類と使い分け&lt;/h2&gt;
&lt;p&gt;Power Apps のコンテナの DropShadow プロパティには5段階の設定があります。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;設定値&lt;/th&gt;
&lt;th&gt;影の強さ&lt;/th&gt;
&lt;th&gt;主な用途&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;なし&lt;/td&gt;
&lt;td&gt;レイアウト専用コンテナ（影不要）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Light&lt;/td&gt;
&lt;td&gt;弱い&lt;/td&gt;
&lt;td&gt;サブカード・補足的な要素&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Regular&lt;/td&gt;
&lt;td&gt;中程度&lt;/td&gt;
&lt;td&gt;標準的なカードUI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Semibold&lt;/td&gt;
&lt;td&gt;やや強い&lt;/td&gt;
&lt;td&gt;強調したいカード・選択状態&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bold&lt;/td&gt;
&lt;td&gt;強い&lt;/td&gt;
&lt;td&gt;ポップアップ・モーダル的な要素&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;私のアプリでは KPIカードに Regular を使っています。Light だと影が弱すぎてカードの存在感が出ず、Semibold 以上だと3枚並べたときにくどくなりました。画面全体のトーンを見ながら Regular か Light を起点に調整するのがおすすめです。&lt;/p&gt;
&lt;p&gt;コンテナクラスターにおけるデザイン設計の全体的な考え方は&lt;a href=&quot;/powerapps-container-guide/&quot;&gt;Power Apps コンテナ完全ガイド&lt;/a&gt;でまとめているので、DropShadow を活用する前の前提知識として目を通しておくと理解が早まります。&lt;/p&gt;
&lt;h2 id=&quot;変数でアプリ全体のシャドウを一元管理する&quot;&gt;変数でアプリ全体のシャドウを一元管理する&lt;/h2&gt;
&lt;p&gt;角丸の変数管理と同じ発想で、DropShadow も変数で一元管理できます。App.OnStart に変数を定義し、全カードコンテナの DropShadow をその変数で参照するようにすれば、後から変更するときに1か所だけ書き換えればよくなります。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// App.OnStart に定義&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Set&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(varDropShadowBI, DropShadow.Regular);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 各カードコンテナの DropShadow プロパティ&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;DropShadow: varDropShadowBI&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;DropShadow の値は DropShadow.Regular のように列挙型で指定します。文字列や数値ではないので注意してください。変数に代入するときも DropShadow.Regular をそのまま入れれば動きます。&lt;/p&gt;
&lt;p&gt;一元管理しておくと、例えばダークモード対応を検討したときに影の強さを画面全体で一括調整できます。角丸の一元管理については&lt;a href=&quot;/powerapps-container-border-radius/&quot;&gt;コンテナを使った角丸の一元管理&lt;/a&gt;でも同じパターンを紹介しています。DropShadow も同じ思想で管理できます。&lt;/p&gt;
&lt;h2 id=&quot;影を付けるコンテナと付けないコンテナの判断基準&quot;&gt;影を付けるコンテナと付けないコンテナの判断基準&lt;/h2&gt;
&lt;p&gt;ネストされたコンテナ構造では、どのコンテナに DropShadow を設定するかが重要です。すべてのコンテナに設定してしまうと、親と子の両方に影がついて影が二重に重なって見えます。これは視覚的にうるさく、逆に品質が下がります。&lt;/p&gt;
&lt;p&gt;判断基準はシンプルです。カードの外枠コンテナにだけ DropShadow を設定し、カード内部のレイアウト用コンテナはすべて DropShadow.None にします。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// カード外枠コンテナ（影あり）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;DropShadow: varDropShadowBI&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// カード内部のレイアウト用コンテナ（影なし・必ず None に）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;DropShadow: DropShadow.None&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;これを意識せずに作ると、カードの中に入っているセクションコンテナにまで影がついて、カード内部に謎の陰影が発生します。私も最初にこれをやらかして、なんか変だなと思いながら原因がわからずしばらく悩みました。ネストしているコンテナが多いほどこの問題は起きやすいので、内側のコンテナは明示的に DropShadow.None を書いておく習慣をつけるといいです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-container-dropshadow01.DpEGh_BU_Z2mxUvB.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;fillportions-でカードを比率で分割する&quot;&gt;FillPortions でカードを比率で分割する&lt;/h2&gt;
&lt;p&gt;複数のカードを横並びにするとき、幅を均等に分割したい場面が多いです。ピクセル値で指定すると画面幅が変わったときに崩れるため、FillPortions プロパティを使った比率指定が便利です。&lt;/p&gt;
&lt;p&gt;FillPortions は Auto Layout コンテナの子要素に設定するプロパティで、親コンテナの余白をどの割合で占有するかを指定します。3枚のカードを均等に並べるなら、全カードに FillPortions: 1 を設定します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 3枚均等配置&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;cntCard_3rd1: FillPortions &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;cntCard_3rd2: FillPortions &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;cntCard_3rd3: FillPortions &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 1&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;2枚を6：4の比率にしたい場合は FillPortions: 3 と FillPortions: 2 を設定します。3と2の比率が6：4と同じになるからです。比率で指定しているので、親コンテナの幅が変わっても自動的に追従します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 6:4 の比率で2分割&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;cntCardA: FillPortions &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;cntCardB: FillPortions &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 2&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;FillPortions を使う場合、対象のコンテナには Width プロパティに固定値や式を設定しないでください。FillPortions と Width の両方が設定されていると FillPortions が無視されます。Width はブランクのままにしておくのが基本です。&lt;/p&gt;
&lt;h2 id=&quot;fill-と-dropshadow-の組み合わせ透明コンテナの落とし穴&quot;&gt;Fill と DropShadow の組み合わせ：透明コンテナの落とし穴&lt;/h2&gt;
&lt;p&gt;カード内部のレイアウト用コンテナを透明にする場合、Fill を Color.Transparent に設定します。このとき DropShadow.None を設定し忘れると、透明なコンテナにも影がついてしまい、カードの背景に謎の影が重なって見えます。&lt;/p&gt;
&lt;p&gt;Fill=Color.Transparent と DropShadow.None はセットで設定するものだと覚えておくと事故が減ります。レイアウト専用のコンテナは見た目に関わるプロパティをすべてオフにする、という原則を持っておくと、後から原因不明の見た目のバグに悩まされにくくなります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-container-dropshadow02.CqC_9Day_Z2jVeF.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;よくある落とし穴すべてのコンテナに影をつけてしまう&quot;&gt;よくある落とし穴：すべてのコンテナに影をつけてしまう&lt;/h2&gt;
&lt;p&gt;コンテナを新規追加するたびに、デフォルトのまま DropShadow が None 以外になっていることがあります（設定によって異なります）。そのままネストしていくと、知らないうちに全コンテナに影がついて、画面がごちゃごちゃした印象になります。&lt;/p&gt;
&lt;p&gt;これを防ぐには、コンテナを追加したら最初に DropShadow を確認する習慣をつけることです。カード外枠だけ影あり、それ以外は None。このルールを最初から徹底しておけば、後から修正して回る手間がなくなります。&lt;/p&gt;
&lt;p&gt;DropShadow と FillPortions を組み合わせて KPI ダッシュボードカードを実装する具体例は、&lt;a href=&quot;/powerapps-container-kpi-card/&quot;&gt;コンテナで KPI ダッシュボードカードを作る方法&lt;/a&gt;で詳しく解説する予定です。今回の内容を踏まえた上で読むとコードの意味がよりわかりやすくなります。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;DropShadow はシンプルなプロパティですが、ネスト構造と組み合わせると細かいルールが必要になります。カード外枠だけに影をつける、内側は必ず None にする、透明コンテナには None をセットで設定する。この3つを守るだけで、影が意図通りに機能するようになります。FillPortions との組み合わせで均等分割も簡単にできます。試行錯誤しながら自分のアプリに合ったデザインを見つけていきましょう。&lt;/p&gt;</content:encoded></item><item><title>Power Apps ギャラリー内にコンテナを使ったレイアウト設計｜TemplateWidth・カスタムパディングのパターン</title><link>https://shiminkaihatsu.com/powerapps-container-gallery/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-container-gallery/</guid><description>Power Apps ギャラリー内にコンテナを使ったレイアウト設計｜TemplateWidth・カスタムパディングのパターン</description><pubDate>Mon, 06 Apr 2026 22:29:04 GMT</pubDate><content:encoded>&lt;p&gt;Power Apps のギャラリーは、そのままでは細かいレイアウト調整が難しいコントロールです。内側にコンテナを組み合わせることで、余白・整列・パディングを自由にコントロールできるようになります。&lt;/p&gt;
&lt;h2 id=&quot;なぜギャラリー内にコンテナが必要なのか&quot;&gt;なぜギャラリー内にコンテナが必要なのか&lt;/h2&gt;
&lt;p&gt;ギャラリーコントロールには TemplatePadding というプロパティがあります。これは各行（テンプレート）の外縁に均等に余白を設定するプロパティです。問題は、すべての辺に同じ値が適用されること。上下に10px、左だけ16px、右は0pxといった非対称なパディングは、TemplatePadding だけでは実現できません。&lt;/p&gt;
&lt;p&gt;さらに、テンプレート内のコントロールを右寄せにしたい、あるいは特定の要素を下端に揃えたいといったレイアウト要件も、コントロールを直接ギャラリーに置くだけでは対応しにくいです。ギャラリーの基本的な使い方については&lt;a href=&quot;/powerapps-gallery/&quot;&gt;ギャラリーコントロールの基本と検索・選択の組み合わせ方&lt;/a&gt;で解説していますが、ここではその先の細かいレイアウト調整を掘り下げます。&lt;/p&gt;
&lt;p&gt;こうした問題を解決するのが、ギャラリーのテンプレート内にコンテナを設置するアプローチです。TemplatePadding を 0 にしてギャラリー側の余白管理を放棄し、コンテナ側でパディング・整列・サイズをすべて制御します。&lt;/p&gt;
&lt;h2 id=&quot;ルートコンテナの基本設定&quot;&gt;ルートコンテナの基本設定&lt;/h2&gt;
&lt;p&gt;まず、ギャラリーのテンプレート直下に配置するルートコンテナの設定です。このコンテナはテンプレート全体を覆うように配置するため、以下の4つのプロパティをこの値に設定します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;X: &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;Y: &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;Width: Parent.TemplateWidth&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;Height: Parent.TemplateHeight&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Parent.TemplateWidth と Parent.TemplateHeight を参照することで、ギャラリーのテンプレートサイズが変わっても自動的に追従します。絶対値（ピクセル数）で書くと、ギャラリーの幅を後から変更したときにコンテナだけ合わなくなるという事故が起きます。必ず Parent 参照で書きましょう。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-container-gallery01.BKIII-lY_ZNVCRr.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;templatepadding-を-0-に設定する&quot;&gt;TemplatePadding を 0 に設定する&lt;/h2&gt;
&lt;p&gt;ルートコンテナを配置したら、ギャラリー本体の TemplatePadding プロパティを 0 に設定します。これでギャラリー側の余白管理を完全にオフにします。以降のパディング・整列はすべてコンテナ側で行います。&lt;/p&gt;
&lt;p&gt;この設定を忘れると、コンテナに Padding を設定してもギャラリー側の TemplatePadding が加算されてしまい、意図した余白より広くなる、という現象が起きます。余白を設定したのになぜか大きいと感じたときは、まず TemplatePadding を確認してみてください。&lt;/p&gt;
&lt;h2 id=&quot;カスタムパディングの2つのパターン&quot;&gt;カスタムパディングの2つのパターン&lt;/h2&gt;
&lt;h3 id=&quot;パターンコンテナのサイズをテンプレートより小さくする&quot;&gt;パターン①：コンテナのサイズをテンプレートより小さくする&lt;/h3&gt;
&lt;p&gt;最もシンプルな方法は、コンテナのサイズをテンプレートより少し小さくして、その差分を余白として使うやり方です。例えば幅を TemplateWidth の 90% にして、残りの 10% を左右の余白として活用します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;Width: Parent.TemplateWidth &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 0.9&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;X: Parent.TemplateWidth &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 0.05&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;垂直方向のセンタリングは少し計算が必要です。コンテナの Height を Parent.TemplateHeight より小さくした上で、Y プロパティに次の式を入れます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;Y: (Parent.TemplateHeight &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; Self.Height) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 2&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;テンプレートの高さからコンテナの高さを引いた差を2で割ることで、上下均等に余白が入ります。難しく見えますが、余った空間を半分ずつ上下に振り分けるという発想です。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-container-gallery02.J07r9hh0_Z4S4WH.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;パターン外側コンテナ内側コンテナの2層構造&quot;&gt;パターン②：外側コンテナ＋内側コンテナの2層構造&lt;/h3&gt;
&lt;p&gt;より柔軟な方法は、透明な外側コンテナと見た目を担当する内側コンテナの2層構造にすることです。外側コンテナはパディングだけを担当し（PaddingLeft・PaddingRight・PaddingTop・PaddingBottomをそれぞれ独立して設定）、内側コンテナがカードの見た目（背景色・ボーダー・シャドウなど）を担当します。&lt;/p&gt;
&lt;p&gt;この方法の利点は、非対称なパディングが自然に書けることです。左だけ16px、上下は8px、右は0pxといった指定も、外側コンテナのPaddingプロパティを4辺個別に設定すれば実現できます。&lt;/p&gt;
&lt;p&gt;内側コンテナには Fill でカード背景色を設定し、外側コンテナは Fill=Color.Transparent にします。これで余白と見た目の責任が分離されるため、後からどちらかだけを変更しやすくなります。&lt;/p&gt;
&lt;h2 id=&quot;実例templatesize-計算式の読み方&quot;&gt;実例：TemplateSize 計算式の読み方&lt;/h2&gt;
&lt;p&gt;実際のアプリで使っている colResentVessel というコレクションのギャラリーで、TemplateSize プロパティにこんな式が入っています。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(Self.Height &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; Self.TemplatePadding &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 10&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 9&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;一見複雑ですが、読み解くと単純です。このギャラリーは9行表示を想定しています。ギャラリー全体の高さ（Self.Height）から、行間のパディング合計（TemplatePadding × 10）を引いた残りを9等分する、という計算です。TemplatePadding が10倍になっているのは、9行の間に行間が10箇所あるからです（上端・各行間・下端）。&lt;/p&gt;
&lt;p&gt;こういった高さから逆算して行数で割るパターンは、ギャラリーをスクロールさせずにぴったり収めたいときによく使います。体感的に、表示件数が固定されている管理リスト系のアプリでは特に重宝します。&lt;/p&gt;
&lt;h2 id=&quot;セパレーター区切り線を追加する&quot;&gt;セパレーター（区切り線）を追加する&lt;/h2&gt;
&lt;p&gt;ギャラリー行間に区切り線を入れたい場合、Rectangle（四角形）コントロールをテンプレート内に配置して使います。Height を 1 に設定し、Y を 0（テンプレートの一番上）に置くと、各行の上部に区切り線が入ります。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;Height: &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;Y: &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;Width: Parent.TemplateWidth&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;Fill: &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;RGBA&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;220&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;220&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;220&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;BorderStyle を Dashed にすると点線のセパレーターになります。デザインによって実線・点線を使い分けてみてください。コンテナのネスト構造と命名規則を整理しながら作業を進めると、ツリービューが複雑になりにくいです。コンテナのネスト構造の考え方については&lt;a href=&quot;/powerapps-container-nesting/&quot;&gt;コンテナのネスト構造を作る方法&lt;/a&gt;の記事を先に読んでおくと理解が深まります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-container-gallery03.CSX1b1At_R4wCU.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;ギャラリー内のレイアウトを細かく制御したいなら、コンテナを使うのが最善の方法です。TemplatePadding を 0 にしてコンテナに管理を移すことで、非対称な余白・整列・複数要素の配置がすべて柔軟に扱えるようになります。&lt;/p&gt;
&lt;p&gt;最初の一歩はルートコンテナをテンプレートと同じサイズで配置するだけです。あとはコンテナのパディングやネスト構造で、やりたいレイアウトに近づけていきましょう。市民開発はこうした地道な積み重ねの連続ですが、一度パターンを覚えると次からは迷わなくなります。&lt;/p&gt;
&lt;p&gt;コンテナを使ったレイアウト設計全体の体系については&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-container-guide/&quot;&gt;Power Apps コンテナ完全ガイド&lt;/a&gt;にまとめているので、より深く学びたい場合はそちらも参照してください。&lt;/p&gt;</content:encoded></item><item><title>Power Apps ギャラリーでレコードのステータスを一覧表示するレイアウト｜ボタンで状態を色分けする実装</title><link>https://shiminkaihatsu.com/powerapps-container-gallery-status/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-container-gallery-status/</guid><description>Power Apps ギャラリーでレコードのステータスを一覧表示するレイアウト｜ボタンで状態を色分けする実装</description><pubDate>Mon, 06 Apr 2026 22:29:04 GMT</pubDate><content:encoded>&lt;p&gt;Power Apps のギャラリーでレコードのステータスを色分けして一覧表示したい、というニーズは現場でよく出てきます。AddColumns で計算列を追加し、If 式で色を切り替えるパターンを覚えておけば、たいていの一覧表示要件に対応できます。&lt;/p&gt;
&lt;h2 id=&quot;addcolumns-でギャラリーに計算列を追加する&quot;&gt;AddColumns でギャラリーに計算列を追加する&lt;/h2&gt;
&lt;p&gt;ギャラリーの Items に AddColumns を使うと、データソースを変更せずに表示専用の列を動的に追加できます。例えば最終更新日や件数をギャラリーの各行に持たせたい場合、AddColumns で LookUp や CountRows の計算結果を列として付与します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// ギャラリーの Items 式&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;AddColumns&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    colResentVessel,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;    &quot;LastSubmittedDate&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    LookUp&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(colSubmitLog, VesselID &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; ThisRecord.ID, SubmittedDate),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;    &quot;SubmitCount&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    CountRows&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(colSubmitLog, VesselID &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; ThisRecord.ID))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;colResentVessel が船舶リストのコレクション、colSubmitLog が提出ログのコレクションです。AddColumns の第2引数以降に列名と計算式のペアを並べます。ここでは LastSubmittedDate（最終提出日）と SubmitCount（提出件数）の2列を追加しています。&lt;/p&gt;
&lt;p&gt;このパターンの利点はデータソース（SharePointリストなど）を直接変更しないことです。表示のためだけの計算列をデータソースに追加してしまうと、Power Automate や他のアプリとのデータ連携が複雑になります。AddColumns であれば Power Apps のメモリ上だけで計算が完結します。&lt;/p&gt;
&lt;p&gt;ギャラリー内のレイアウト設計の基礎は&lt;a href=&quot;/powerapps-container-guide/&quot;&gt;Power Apps コンテナ完全ガイド&lt;/a&gt;で触れています。AddColumns と組み合わせてより実践的なギャラリーを構築する方法がこの記事の主題です。&lt;/p&gt;
&lt;h2 id=&quot;テンプレートサイズの均等計算&quot;&gt;テンプレートサイズの均等計算&lt;/h2&gt;
&lt;p&gt;ギャラリーの各行（テンプレート）の高さを均等にするには、ギャラリー全体の高さから行間のパディングを引いて行数で割る式を使います。例えば9行表示する場合の式はこうです。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// TemplateSize プロパティ&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(Self.Height &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; Self.TemplatePadding &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 10&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 9&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;TemplatePadding * 10 は上端・各行間・下端のパディングが合計10か所あるためです（9行の間には10か所の境界がある）。この式でギャラリーの高さが変わっても自動的に9行がぴったり収まります。ギャラリーをスクロールさせずに全件表示したい一覧系の画面でよく使うパターンです。&lt;/p&gt;
&lt;h2 id=&quot;行レイアウトの構成&quot;&gt;行レイアウトの構成&lt;/h2&gt;
&lt;h3 id=&quot;横並び要素の配置&quot;&gt;横並び要素の配置&lt;/h3&gt;
&lt;p&gt;1行の中に船舶名・最終更新日・件数・ステータスボタンを横並びで表示します。各要素の幅を固定値で決めて、X 座標を前の要素の X + Width で連結していくと位置が確実に決まります。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 各要素の X 座標と幅&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;lblVesselName:   X &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,   Width &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 160&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;lblLastDate:     X &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 160&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, Width &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 120&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;lblSubmitCount:  X &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 280&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, Width &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 80&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;btnStatus:       X &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 360&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, Width &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 100&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;X を前の要素の X+Width で連結することで、1要素の幅を変えても後続のずれが発生しません。コンテナの Auto Layout を使う方法もありますが、ギャラリーテンプレート内では絶対座標で管理した方がシンプルなケースも多いです。テンプレート内コンテナのレイアウト設計については&lt;a href=&quot;/powerapps-container-gallery/&quot;&gt;ギャラリー内にコンテナを使ったレイアウト設計&lt;/a&gt;の記事で詳しく解説しています。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-container-gallery-status01.DyJTRtf0_1wxnwv.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;条件付きボタンで状態を色分けする&quot;&gt;条件付きボタンで状態を色分けする&lt;/h2&gt;
&lt;p&gt;ステータスボタンは件数が0かどうかで Color・Fill・Text を切り替えます。AddColumns で付与した SubmitCount を使います。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// ステータスボタンの Text&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(ThisItem.SubmitCount &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;提出済&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;未提出&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// ステータスボタンの Fill&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(ThisItem.SubmitCount &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;RGBA&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;46&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;139&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;87&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;), &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;RGBA&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;210&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;100&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;50&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;))&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;提出済みは緑（SeaGreen相当）、未提出はオレンジ（DarkOrange相当）にしています。私のアプリでは1日の船舶作業提出状況をこのギャラリーで管理しています。朝9時の時点でオレンジが多いと現場に声をかけるきっかけになります。色で状態がわかるというのは、文字で読むより判断が速いので現場に好評です。&lt;/p&gt;
&lt;h2 id=&quot;colorfade-で背景色とテキスト色を自動対応させる&quot;&gt;ColorFade で背景色とテキスト色を自動対応させる&lt;/h2&gt;
&lt;p&gt;ボタンの背景色と文字色を手動でそれぞれ設定すると、色を変更するたびに2か所修正が必要になります。ColorFade を使うと、背景色から自動で対応する薄い色を生成できます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// ボタンの文字色（Color）はFillを70%淡くした色&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;ColorFade&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(Self.Fill, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;0.7&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ColorFade(Self.Fill, 0.7) は Fill の色を70%薄くした色を返します。背景が緑なら文字は薄い緑、背景がオレンジなら文字は薄いオレンジになります。色の組み合わせを考える手間がなくなる上に、どの色でも一貫した見た目になります。これは体感的にかなり便利で、色の組み合わせを試行錯誤していた時間が大幅に減りました。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-container-gallery-status02.C00Ba5Jc_2gUqUs.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;displaymodeview-でステータスボタンをクリック不可にする&quot;&gt;DisplayMode.View でステータスボタンをクリック不可にする&lt;/h2&gt;
&lt;p&gt;ステータスボタンは状態を表示するためのものなので、クリックさせる必要はありません。DisplayMode を View に設定するとクリックイベントが発生しなくなります。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// ステータスボタンの DisplayMode&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;DisplayMode.View&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;DisplayMode.View にすると見た目はボタンのままでクリックできない状態になります。Edit にするとクリックでき、Disabled にするとグレーアウトします。ステータスの色分けは表示専用なので View が適切です。Navigate や詳細画面への遷移を担うボタンは別に用意して、役割をはっきり分けておくとコードが読みやすくなります。&lt;/p&gt;
&lt;h2 id=&quot;区切り線を追加する&quot;&gt;区切り線を追加する&lt;/h2&gt;
&lt;p&gt;ギャラリー行間に区切り線を入れるには、Rectangle を Y=0・Height=1 で配置します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// セパレーター Rectangle の設定&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;Y: &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;Height: &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;Width: Parent.TemplateWidth&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;Fill: &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;RGBA&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;220&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;220&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;220&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;BorderStyle: &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;BorderStyle.Dashed&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;BorderStyle.Dashed にすると点線になります。実線にしたい場合は BorderStyle.Solid を使います。行数が多いギャラリーでは区切り線があるだけで視認性がかなり上がります。1行ずつの境界がはっきりすることで、横並びのデータを目で追いやすくなります。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;AddColumns で計算列を追加し、If で色を切り替え、ColorFade で色を自動対応させる。この3つのパターンを組み合わせれば、データソースを変更することなくリッチなステータス一覧が作れます。DisplayMode.View で表示専用ボタンを作る考え方も、アプリ設計をすっきりさせる上で重要です。市民開発はこういった小さな積み重ねで、現場で本当に使われるアプリに育っていきます。&lt;/p&gt;</content:encoded></item><item><title>Power Apps コンテナ完全ガイド｜モダンUIを作るための基礎・レイアウト設計・実践テクニック</title><link>https://shiminkaihatsu.com/powerapps-container-guide/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-container-guide/</guid><description>Power Apps コンテナ完全ガイド｜モダンUIを作るための基礎・レイアウト設計・実践テクニック</description><pubDate>Mon, 06 Apr 2026 22:58:08 GMT</pubDate><content:encoded>&lt;p&gt;Power Apps でモダンなUIを作りたいなら、コンテナの設計を避けて通れません。コントロールをばらばらに並べる時代は終わりました。&lt;/p&gt;
&lt;p&gt;私が最初にコンテナを触ったときは、正直なところこれ、何が便利なの？と思っていました。座標でコントロールを置いていく旧来のやり方に慣れていたので、コンテナの概念が最初はピンとこなかったのです。ところが使い込むうちに、画面設計の考え方そのものが変わりました。コントロールをどこに置くかではなく、コントロール同士の関係をどう定義するか——この記事では、そういう設計思想の転換点から始めて、レイアウト設計・実践テクニック・実装事例・開発者向けの管理術まで、コンテナに関するすべてをまとめます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-container-guide01.Dp37bIfZ_Z28WAT6.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;コンテナとは何か旧来の座標配置との根本的な違い&quot;&gt;コンテナとは何か——旧来の座標配置との根本的な違い&lt;/h2&gt;
&lt;p&gt;Power Apps にはコントロールの配置方法が2世代あります。旧来は X・Y 座標を使った絶対配置で、画面の左上を基準にピクセル単位でコントロールを固定していました。地図に緯度と経度でピンを打つイメージです。これはシンプルで直感的ですが、コントロールが増えるほど管理コストが跳ね上がります。デバイスサイズが変わるたびに全コントロールの座標を手動で修正しなければならず、20個・30個と増えていくとにっちもさっちも行かなくなります。&lt;/p&gt;
&lt;p&gt;コンテナを使った配置は、親コンテナとの相対関係で位置やサイズを決めます。&lt;code&gt;Width: Parent.Width * 0.6&lt;/code&gt; のように書けば、親の幅が変わっても60%という関係性は保たれます。駅から徒歩3分、という感覚です。駅の場所が動いても、3分という関係は変わらない。この思想の転換が、コンテナ設計の核心です。&lt;/p&gt;
&lt;p&gt;絶対座標が悪いわけではありません。小規模・固定サイズのアプリでは絶対座標のほうがシンプルで速いケースもあります。コンテナの真価はコントロール数が増えたとき・複数デバイスへの対応が必要なときに現れます。&lt;a href=&quot;/powerapps-container-vs-dragdrop/&quot;&gt;座標配置とコンテナの違いを詳しく解説した記事&lt;/a&gt;も合わせて読むと、この転換がより腹落ちするはずです。&lt;/p&gt;
&lt;h2 id=&quot;コンテナの2種類手動とオートレイアウトの使い分け&quot;&gt;コンテナの2種類——手動とオートレイアウトの使い分け&lt;/h2&gt;
&lt;p&gt;コンテナには手動レイアウト（Manual Layout）とオートレイアウト（Auto Layout）の2種類があります。この選択が後のレスポンシブ対応に大きく影響します。&lt;/p&gt;
&lt;p&gt;手動レイアウトは、子要素を自由に配置できるコンテナです。自由度が高い反面、レスポンシブ対応は自分で書く必要があります。オートレイアウトは子要素を縦（Vertical）または横（Horizontal）の一方向に並べ、サイズ・間隔・整列を自動で管理してくれます。シンプルなカード・リスト型にはオートレイアウト、重なりや自由な配置が必要な場合は手動レイアウトと使い分けるのが基本です。&lt;/p&gt;
&lt;p&gt;よくある失敗は、全部手動レイアウトで作り始めてしまい、後からレスポンシブ対応ができなくなるパターンです。私も最初の頃はそれをやりました。最初の設計段階でどちらを使うか判断しておくことが重要です。&lt;a href=&quot;/powerapps-container-manual-vs-auto/&quot;&gt;手動レイアウトとオートレイアウトの詳しい使い分け基準&lt;/a&gt;をまとめた記事も参考にしてください。&lt;/p&gt;
&lt;h2 id=&quot;画面設計の基本セクション分割とネスト構造&quot;&gt;画面設計の基本。セクション分割とネスト構造&lt;/h2&gt;
&lt;p&gt;コンテナ設計で最初にやることは、画面をセクションに分割することです。コードより先に、どう分割するかを決めます。私がよくやるのは、仕切り板を1枚入れるとしたらどちらの向きか、という問いを立てることです。縦に入れてもすべてのセクションが片側に収まるなら垂直コンテナ、横に入れてもすべて片側に収まるなら水平コンテナがルートになります。&lt;/p&gt;
&lt;p&gt;ヘッダー・フィルター・ギャラリーが縦積みなら垂直コンテナ、サイドメニューとメインコンテンツが横並びなら水平コンテナです。どちらを試してもセクションが分断されてしまう場合は、粒度が粗すぎるサインです。一段階内側の要素に対して同じ問いを繰り返します。&lt;a href=&quot;/powerapps-container-section-design/&quot;&gt;セクション分割の設計思想を詳しく説明した記事&lt;/a&gt;に、ケース別の判断基準をまとめています。&lt;/p&gt;
&lt;p&gt;セクションが決まったら、その中にさらにコンテナを入れていきます。これがネスト構造です。PCのフォルダ構造をイメージすると分かりやすく、ドライブ→フォルダ→サブフォルダ→ファイルが、画面→ルートコンテナ→セクションコンテナ→個別コントロールに対応します。各階層で向きを決めれば、あとは同じ判断の繰り返しです。ネストが深くなりすぎると管理が辛くなるので、3〜4階層を目安にするとよいです。&lt;/p&gt;
&lt;h2 id=&quot;配置整列プロパティを使いこなす&quot;&gt;配置・整列プロパティを使いこなす&lt;/h2&gt;
&lt;p&gt;オートレイアウトコンテナには、子要素の配置を細かく制御するプロパティが揃っています。主なものをまとめます。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;プロパティ&lt;/th&gt;
&lt;th&gt;役割&lt;/th&gt;
&lt;th&gt;よく使う値&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;LayoutAlignItems&lt;/td&gt;
&lt;td&gt;交差軸方向の整列&lt;/td&gt;
&lt;td&gt;Start / Center / End / Stretch&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LayoutJustifyContent&lt;/td&gt;
&lt;td&gt;主軸方向の配置&lt;/td&gt;
&lt;td&gt;SpaceBetween / Center / Start / End&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FillPortions&lt;/td&gt;
&lt;td&gt;子要素の幅・高さの比率&lt;/td&gt;
&lt;td&gt;数値（例：3と2で60:40に分割）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gap&lt;/td&gt;
&lt;td&gt;子要素間の余白&lt;/td&gt;
&lt;td&gt;ピクセル数&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Wrap&lt;/td&gt;
&lt;td&gt;横コンテナでの折り返し&lt;/td&gt;
&lt;td&gt;true / false&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;特によく使うのが LayoutJustifyContent の SpaceBetween です。更新ボタンと最終更新日を両端に置くような配置が、これ1行で実現できます。FillPortions は子要素に FillPortions: 3 と FillPortions: 2 を設定すれば60対40の比率で幅が分かれます。Padding（コンテナ外縁の余白）と Gap（子要素間の余白）の違いも最初は混乱しやすいので覚えておきましょう。&lt;a href=&quot;/powerapps-container-alignment/&quot;&gt;配置・整列プロパティの全詳細&lt;/a&gt;はこちらの記事に整理しています。&lt;/p&gt;
&lt;h2 id=&quot;実践テクニック角丸カスタムコントロールドロップシャドウ&quot;&gt;実践テクニック。角丸・カスタムコントロール・ドロップシャドウ&lt;/h2&gt;
&lt;h3 id=&quot;角丸をコンテナで一元管理する&quot;&gt;角丸をコンテナで一元管理する&lt;/h3&gt;
&lt;p&gt;Dropdown や DatePicker など一部のクラシックコントロールは、ネイティブに BorderRadius プロパティを持ちません。コンテナでラップして、コンテナ側に BorderRadius を設定すると子要素に伝播します。さらに、App.OnStart で変数（例：&lt;code&gt;varRadiusBI&lt;/code&gt;）を定義しておき、全コンテナで参照する形にすると、1箇所変えるだけでアプリ全体の角丸が変わります。上だけ角丸にするパターンでは RadiusTopLeft / RadiusTopRight のみ設定して下を0にします。カードの上辺だけ丸くするデザインでよく使います。&lt;/p&gt;
&lt;h3 id=&quot;カスタムコントロールをコンテナで作る&quot;&gt;カスタムコントロールをコンテナで作る&lt;/h3&gt;
&lt;p&gt;Label と 透明なボタン（Fill=Transparent）をオートレイアウト水平コンテナにまとめると、コピペで量産できるカスタムボタンができます。コピー後は Label の Text と Button の OnSelect を変えるだけで別ボタンになります。プログレスバーは外側コンテナ（背景色・角丸）に内側コンテナ（進捗色）を入れ、内側の Width を &lt;code&gt;Parent.Width * varSubmitted / varAll&lt;/code&gt; のように動的に設定する構造です。&lt;/p&gt;
&lt;h3 id=&quot;ドロップシャドウとfillportionsでカードuiに奥行きを出す&quot;&gt;ドロップシャドウとFillPortionsでカードUIに奥行きを出す&lt;/h3&gt;
&lt;p&gt;DropShadow プロパティは None / Light / Regular / Semibold / Bold の5段階があります。カード外枠のコンテナにシャドウを設定し、内部のレイアウト用コンテナは必ず DropShadow.None にします。両方に設定すると境界線のように影が二重になって視認性が下がります。これは地味に気づきにくい落とし穴で、私も最初しばらく原因がわからなかったです。&lt;/p&gt;
&lt;h2 id=&quot;実装事例kpiカードsvgグラフステータスギャラリー&quot;&gt;実装事例。KPIカード・SVGグラフ・ステータスギャラリー&lt;/h2&gt;
&lt;p&gt;コンテナの使い方を理解したら、実際のダッシュボード実装に応用できます。KPIカードは外側コンテナ（DropShadow・BorderRadius）→内側AutoLayout垂直コンテナ（Padding）→Label群という3層構造が基本形です。3枚均等レイアウトなら水平AutoLayoutコンテナの中で各カードに FillPortions: 1 を設定します。&lt;/p&gt;
&lt;p&gt;SVGグラフは &lt;code&gt;&amp;quot;data:image/svg+xml,&amp;quot; &amp;amp; EncodeUrl(&amp;quot;...SVGコード...&amp;quot;)&lt;/code&gt; のパターンで Image コントロールに表示します。棒グラフなら LookUp でカウントを取得して棒の長さを動的計算し、ドーナツグラフなら stroke-dasharray と stroke-dashoffset で円弧を描きます。コンテナと組み合わせることで、レイアウト内にグラフを美しく収められます。&lt;/p&gt;
&lt;p&gt;ギャラリーでステータスを色分けするには、Count &amp;gt; 0 を条件に Color / Fill / Text を切り替える If 式を使います。ColorFade を使えば &lt;code&gt;ColorFade(Self.Color, 70%)&lt;/code&gt; でテキスト色と背景色を自動的に対応させられるので、色の一貫性を保ちながらコード量を減らせます。&lt;/p&gt;
&lt;h2 id=&quot;開発者ux命名規則とyaml共有&quot;&gt;開発者UX。命名規則とYAML共有&lt;/h2&gt;
&lt;p&gt;コントロールが200件を超えると、ツリービューの検索だけでは追えなくなります。命名規則を決めておくことが大切です。推奨プレフィックスは cnt（コンテナ）/ lbl（ラベル）/ btn（ボタン）/ col（ギャラリー）/ img（イメージ）/ rec（レクタングル）。さらに &lt;code&gt;cntBI_1stL&lt;/code&gt;（BI領域の1行目・左）のように場所と階層番号を含めると、構造が名前から読めるようになります。&lt;/p&gt;
&lt;p&gt;Power Apps Studio のコンテナ右クリック → コードのコピーで YAML 形式のコードが取得できます。別画面・別アプリに貼り付けると構造ごと再現されます。旧来のグループでは子コントロールを1つずつ選択して再配置する必要がありましたが、コンテナなら親を1つコピーするだけで子も全員ついてきます。Slack や Notion にYAMLを貼り付けてチームで共有するワークフローを使えば、デザインの属人化も防げます。&lt;/p&gt;
&lt;p&gt;このピラー記事で紹介したコンテナ設計の各テーマは、それぞれ詳細な解説記事に分けています。&lt;a href=&quot;/powerapps-uiux/&quot;&gt;UI/UX設計の全体的な考え方&lt;/a&gt;と合わせて読むと、コンテナをどういう文脈で使うべきかの判断がより明確になります。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;コンテナ設計は、Power Apps 開発のUIクオリティを一段引き上げる技術です。最初は概念の理解に時間がかかりますが、仕切り板1枚の問い・フォルダ構造のアナロジー・プロパティの一元管理という3つの考え方を体得すれば、どんな画面でも同じプロセスで設計できるようになります。&lt;/p&gt;
&lt;p&gt;市民開発とはこういう地道な設計の積み重ねだと、私はつくづく感じています。コードの書き方より先に、どう分割してどう関係を定義するかを考える習慣を身につけると、開発スピードも保守性も大きく変わります。&lt;/p&gt;</content:encoded></item><item><title>Power Apps コンテナでKPIダッシュボードカードを作る｜今月件数・前月比・直近7日のカード実装</title><link>https://shiminkaihatsu.com/powerapps-container-kpi-card/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-container-kpi-card/</guid><description>Power Apps コンテナでKPIダッシュボードカードを作る｜今月件数・前月比・直近7日のカード実装</description><pubDate>Mon, 06 Apr 2026 22:29:05 GMT</pubDate><content:encoded>&lt;p&gt;Power Apps でダッシュボードを作るとき、KPIカードは画面の顔になります。今月の件数・前月比・直近7日間の3枚を横並びで並べて、アプリを開いた瞬間に現場の状況が把握できるようにする。コンテナを使えばこのレイアウトを崩れなく、メンテナンスしやすい構造で実装できます。&lt;/p&gt;
&lt;h2 id=&quot;カード1枚の基本構造&quot;&gt;カード1枚の基本構造&lt;/h2&gt;
&lt;p&gt;KPIカードは2層のコンテナで作ります。外側コンテナがカードの見た目（DropShadow・BorderRadius・Fill）を担当し、内側コンテナがコンテンツのレイアウト（Padding・整列）を担当します。内側はAuto Layout の垂直コンテナにして、タイトルラベル・数値ラベル・補足ラベルを上から順に積み上げます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;cntCard_3rd1（外側コンテナ：DropShadow・BorderRadius・Fill）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;└─ cntCard_3rd1_inner（内側垂直コンテナ：Padding・LayoutAlignItems）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;   ├─ lblCard1Title（タイトルラベル）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;   ├─ lblCard1Value（数値ラベル：大きいフォント）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;   └─ lblCard1Sub（補足ラベル：前月比など）&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;外側コンテナの Fill には背景色を設定し、内側コンテナは Fill=Color.Transparent にします。DropShadow は外側だけに設定し、内側は必ず DropShadow.None にします。ネストしたコンテナで両方に影をつけると二重影になるので注意してください。&lt;/p&gt;
&lt;p&gt;コンテナクラスターの設計思想の全体像は&lt;a href=&quot;/powerapps-container-guide/&quot;&gt;Power Apps コンテナ完全ガイド&lt;/a&gt;でまとめています。KPIカードの実装はその集大成の一つです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-container-kpi-card01.CRQPM-xO_Z1pF0Vq.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;3枚均等レイアウトの組み方&quot;&gt;3枚均等レイアウトの組み方&lt;/h2&gt;
&lt;p&gt;3枚のカードを均等に横並びにするには、親の水平AutoLayoutコンテナに3枚のカードを入れて、各カードに FillPortions=1 を設定します。これで親コンテナの幅が変わっても自動的に3等分されます。&lt;/p&gt;
&lt;p&gt;ピクセル値で幅を計算する場合は次の式を使います。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 3枚均等のピクセル計算式（FillPortionsを使わない場合）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(Parent.Width &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; Parent.LayoutGap &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 3&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;LayoutGap * 2 は左右のカード間のギャップが2か所あるためです（カード①とカード②の間、カード②とカード③の間）。残った幅を3等分した値が各カードの Width になります。私は基本的に FillPortions を使う派ですが、カードの最小幅を MinimumWidth で保証したい場合はこのピクセル計算式と組み合わせることがあります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-container-kpi-card02.2G9dILSB_ZKWw9h.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;今月件数カードの実装&quot;&gt;今月件数カードの実装&lt;/h2&gt;
&lt;h3 id=&quot;3層のラベル構成&quot;&gt;3層のラベル構成&lt;/h3&gt;
&lt;p&gt;今月件数カードはタイトルラベル・数値ラベル・前月比ラベルの3層で構成します。数値ラベルは FontSize を大きくして視認性を上げ、タイトルと補足ラベルはそれより小さくして情報の階層を作ります。垂直コンテナに入れているので、LayoutAlignItems を Center にすれば横方向の中央揃えが自動でかかります。&lt;/p&gt;
&lt;p&gt;各ラベルの Height は固定値か FillPortions で配分します。タイトルを20%・数値を50%・補足を30%にする場合は FillPortions を 1・2.5・1.5 のような比率で設定します。コンテナの高さが変わっても比率が保たれるので、画面サイズを後から変更する際に修正が楽です。&lt;/p&gt;
&lt;h3 id=&quot;前月比の表示ロジック&quot;&gt;前月比の表示ロジック&lt;/h3&gt;
&lt;p&gt;前月比をプラスマイナス付きで表示するには If 式で符号を動的に付与します。varDiff に前月同日比の差分件数が入っている前提で、次のように書きます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 前月比ラベルの Text 式&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(varDiff &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;+&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; Text&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(varDiff, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;0&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot;件&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;varDiff がプラスのときだけ + を付け、マイナスのときは Text 関数が自動でマイナス記号を付けてくれます。ゼロのときは符号なしで 0件 と表示されます。変数の基本については&lt;a href=&quot;/powerapps-variables/&quot;&gt;Power Apps のグローバル変数とコンテキスト変数&lt;/a&gt;の記事で詳しく解説しています。&lt;/p&gt;
&lt;p&gt;さらに varDiff の正負で文字色を切り替えると視認性が上がります。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 補足ラベルの Color 式&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(varDiff &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;RGBA&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;46&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;139&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;87&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;), &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;RGBA&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;210&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;70&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;70&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;))&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;プラスなら緑、マイナスなら赤にすることで、数字を読まなくても瞬時に良し悪しが判断できます。ダッシュボードはこういった情報設計の積み重ねが大切です。シンプルですが、実際の現場で使うと見やすいと好評でした。&lt;/p&gt;
&lt;h2 id=&quot;未対応件数カードの実装&quot;&gt;未対応件数カードの実装&lt;/h2&gt;
&lt;p&gt;未対応件数カードは、総件数から完了件数を引いた差分を表示します。数値ラベルの Text 式はシンプルです。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 未対応件数の計算&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Text&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(varTotalCount &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; varCompletedCount, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;0&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot;件&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;未対応件数がゼロかどうかで補足テキストを切り替えると、アラートとして機能するカードになります。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 補足ラベルの Text 式&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    varTotalCount &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; varCompletedCount &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;    &quot;要対応あり&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;    &quot;すべて完了&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;要対応ありのときは文字を赤にして、すべて完了のときは緑にする。私のチームでは毎朝の船舶管理確認にこのカードを使っていて、赤が出ている日は即対応を確認するようにしています。朝のミーティングでこのカードを映した瞬間に全員が状況を把握できるので、言葉で説明する手間が省けます。&lt;/p&gt;
&lt;h2 id=&quot;直近7日カードの実装&quot;&gt;直近7日カードの実装&lt;/h2&gt;
&lt;p&gt;直近7日の件数は、Filter で期間を絞ったコレクションの CountRows を表示します。ClearCollect でデータを取得しているコレクションが colData だとすると、次のように書きます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 直近7日の件数&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Text&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    CountRows&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;        Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(colData, UpdatedDate &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; DateAdd&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Today&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(), &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;7&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;TimeUnit.Days&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    ),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;    &quot;0&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot;件&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;DateAdd(Today(), -7, TimeUnit.Days) で7日前の日付を計算し、それ以降のレコードだけを Filter で絞り込んで CountRows で件数を取得します。コレクションはすでにメモリ上にあるので委任の問題が起きません。データソースに直接 Filter をかけると委任の警告が出ることがありますが、ClearCollect で手元に落としてから Filter すれば全件カウントできます。&lt;a href=&quot;/powerapps-collection/&quot;&gt;コレクションの基本と使いどころ&lt;/a&gt;も合わせて確認しておくと理解が深まります。&lt;/p&gt;
&lt;h2 id=&quot;データ取得とスピナー制御&quot;&gt;データ取得とスピナー制御&lt;/h2&gt;
&lt;p&gt;KPIカードのデータは画面を開いたときと更新ボタンを押したときに取得します。更新ボタンの OnSelect に ClearCollect を書いて、取得中はスピナーを表示する設計が使いやすいです。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 更新ボタンの OnSelect&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Set&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(varSpinner, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;ClearCollect&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(colData, DataSource);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Set&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(varSpinner, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;varSpinner が true のあいだはローディング表示のコンテナを Visible にして、false になったらカードを表示する切り替えです。データ件数が多いと取得に数秒かかることがあるので、スピナーがないとアプリが固まったように見えます。私も最初はスピナーなしで作っていましたが、現場から「ボタンを押しても何も起きない」と言われてから必ず入れるようにしました。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-container-kpi-card03.BhvPy5wx_BQ1TD.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;KPIカードはコンテナの構造・変数管理・Filter の組み合わせで作ります。カード1枚の構造を覚えてしまえば、3枚目でも5枚目でも同じパターンで作れます。前月比の符号表示や色の切り替えなど、細かい仕掛けを一つ入れるだけで現場での使い勝手がぐっと上がります。ダッシュボードは地道な積み重ねで育てていくものです。&lt;/p&gt;</content:encoded></item><item><title>Power Apps 手動レイアウトとオートレイアウトの使い分け｜選ぶ基準と切り替え方</title><link>https://shiminkaihatsu.com/powerapps-container-manual-vs-auto/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-container-manual-vs-auto/</guid><description>Power Apps 手動レイアウトとオートレイアウトの使い分け｜選ぶ基準と切り替え方</description><pubDate>Mon, 06 Apr 2026 22:40:39 GMT</pubDate><content:encoded>&lt;p&gt;Power Apps のコンテナには手動レイアウトとオートレイアウトの2種類があります。どちらを選ぶかでアプリの設計の自由度と保守のしやすさが大きく変わるので、最初に整理しておくことをおすすめします。&lt;/p&gt;
&lt;h2 id=&quot;2種類のコンテナの概要&quot;&gt;2種類のコンテナの概要&lt;/h2&gt;
&lt;h3 id=&quot;手動レイアウトmanual-layoutとは&quot;&gt;手動レイアウト（Manual Layout）とは&lt;/h3&gt;
&lt;p&gt;手動レイアウトは、コンテナの中に追加した子コントロールを、引き続き X・Y 座標や Width・Height で自由に配置できる方式です。コンテナという箱を用意しつつも、中の配置は自分でコントロールするため、座標配置に近い感覚で使えます。&lt;/p&gt;
&lt;p&gt;イメージとしては区画は決まっているが、家具の置き方は自由な部屋のようなものです。コンテナで画面をいくつかの領域に分割しつつ、各領域の中はドラッグ&amp;amp;ドロップで好きなように配置できます。複雑なレイアウトや、コントロール同士が重なり合うデザインを実現したいときには、手動レイアウトが向いています。&lt;/p&gt;
&lt;h3 id=&quot;オートレイアウトauto-layoutとは&quot;&gt;オートレイアウト（Auto Layout）とは&lt;/h3&gt;
&lt;p&gt;オートレイアウトは、コンテナ内の子要素を縦方向（Vertical）または横方向（Horizontal）の一方向に自動的に並べる方式です。子要素の間隔・整列・折り返しを Wrap・Gap・Align などのプロパティで一元管理できます。子コントロールの X・Y 座標は自分では設定せず、コンテナが自動的に計算して並べます。&lt;/p&gt;
&lt;p&gt;等間隔に並べて、要素が増えても自動で詰めてくれる棚のようなイメージです。商品を追加したら棚が自動で整列し直してくれる感覚です。カード型の一覧表示やボタンを横並びにするナビゲーションバーなど、規則的な繰り返しのレイアウトにとても向いています。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-container-manual-vs-auto01._WvvysTz_1hFx1x.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;どちらを選ぶか判断基準&quot;&gt;どちらを選ぶか：判断基準&lt;/h2&gt;
&lt;p&gt;2種類の使い分けを表でまとめます。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;場面&lt;/th&gt;
&lt;th&gt;おすすめ&lt;/th&gt;
&lt;th&gt;理由&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;カード一覧・リスト表示&lt;/td&gt;
&lt;td&gt;オートレイアウト（縦）&lt;/td&gt;
&lt;td&gt;要素の増減に自動追従する&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;横並びのボタン・ナビ&lt;/td&gt;
&lt;td&gt;オートレイアウト（横）&lt;/td&gt;
&lt;td&gt;間隔・整列を自動管理できる&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;コントロールを重ねるデザイン&lt;/td&gt;
&lt;td&gt;手動レイアウト&lt;/td&gt;
&lt;td&gt;重なりや自由配置が必要なため&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;複雑な非構造的デザイン&lt;/td&gt;
&lt;td&gt;手動レイアウト&lt;/td&gt;
&lt;td&gt;オートレイアウトでは実現しにくいことがある&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;将来的にレスポンシブ対応したい&lt;/td&gt;
&lt;td&gt;オートレイアウト&lt;/td&gt;
&lt;td&gt;相対サイズ・自動整列でデバイス対応しやすい&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;シンプルなカードやフォームのように、縦か横に規則的に並べたい場合はオートレイアウトを選ぶのが基本です。一方、コントロールが複雑に重なり合うダッシュボードや、グラフと数値を重ねて表示するような場面では、手動レイアウトのほうが作りやすいです。&lt;/p&gt;
&lt;h3 id=&quot;オートレイアウトの主要プロパティ&quot;&gt;オートレイアウトの主要プロパティ&lt;/h3&gt;
&lt;p&gt;オートレイアウトを使い始めたときに最初に設定することになるプロパティを整理します。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Direction（方向）：Vertical（縦）か Horizontal（横）か。最初に決める一番重要なプロパティ&lt;/li&gt;
&lt;li&gt;Gap（間隔）：子要素同士の間隔をピクセルで指定。0 にすると間隔なしで詰まる&lt;/li&gt;
&lt;li&gt;AlignItems（整列）：主軸と交差軸方向の整列を制御。Center・Start・End・Stretch から選ぶ&lt;/li&gt;
&lt;li&gt;Wrap（折り返し）：子要素が横幅に収まらない場合、次の行に折り返すかどうかを制御する&lt;/li&gt;
&lt;li&gt;Padding（余白）：コンテナの内側の余白。上下左右それぞれ設定できる&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-container-manual-vs-auto02.CDT_GMha_ZjiV1N.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;コンテナの種類の切り替え方&quot;&gt;コンテナの種類の切り替え方&lt;/h2&gt;
&lt;h3 id=&quot;追加後でも-variant-プロパティで変更できる&quot;&gt;追加後でも Variant プロパティで変更できる&lt;/h3&gt;
&lt;p&gt;コンテナを挿入した後でも、Variant（バリアント）プロパティを変更すれば手動レイアウトとオートレイアウトを切り替えられます。値は ManualLayout か VerticalAuto・HorizontalAuto のいずれかです。&lt;/p&gt;
&lt;p&gt;最初にどちらで作ったか気にしすぎなくても大丈夫で、設計途中でやっぱりオートレイアウトにしたいと思ったら切り替えればいいだけです。ただし切り替えると既存の子要素の配置が変わることがあるので、子要素の数が多い状態で変更するとレイアウトが崩れる可能性があります。なるべく早い段階で決める方が安全です。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-container-manual-vs-auto03.BsiKAJZ8_2rInM2.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;よくある失敗パターン&quot;&gt;よくある失敗パターン&lt;/h2&gt;
&lt;h3 id=&quot;全部手動で作ってしまいレスポンシブ対応できなくなる&quot;&gt;全部手動で作ってしまいレスポンシブ対応できなくなる&lt;/h3&gt;
&lt;p&gt;私が社内でアプリのレビューをしていてよく見かけるのが、コンテナを使っているのに全部手動レイアウトにしてしまっているケースです。コンテナで画面を区切りつつ、中はすべて座標配置の感覚で作ってしまうパターンで、これだと座標配置との違いが活かせていません。&lt;/p&gt;
&lt;p&gt;後からタブレット対応やスマホ対応の要望が来たとき、全部手動レイアウトで作ってあると修正範囲が広くなってしまいます。最初からオートレイアウトを使っておけば、Gap や AlignItems の調整だけで大部分が自動追従してくれます。設計段階で少し頭を使うだけで、後の工数が大きく変わります。&lt;/p&gt;
&lt;h3 id=&quot;オートレイアウトに何でも詰め込もうとする&quot;&gt;オートレイアウトに何でも詰め込もうとする&lt;/h3&gt;
&lt;p&gt;逆に、オートレイアウトを知ってから全部オートレイアウトで作ろうとして、重なりが必要な部分で詰まってしまうことも多いです。オートレイアウトは子要素を一方向に整列する仕組みなので、コントロールを重ねるような設計には向いていません。グラフの上にラベルを重ねたいとか、画像にテキストをかぶせたいといった場面では手動レイアウトが必要です。&lt;/p&gt;
&lt;p&gt;2種類の使い分けを覚えたら、このセクションはリスト状に並べたいからオートレイアウト、このセクションは重なりが必要だから手動レイアウトと、コンテナごとに方針を変えていくのが実践的な使い方です。コンテナは何段でもネストできるので、外側のコンテナはオートレイアウト、内側の特定のコンテナだけ手動レイアウトという組み合わせも全く問題ありません。&lt;/p&gt;
&lt;p&gt;また、コンテナとドラッグ&amp;amp;ドロップ配置の根本的な違いについては&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-container-vs-dragdrop/&quot;&gt;Power Apps コンテナと旧来の座標配置との違い&lt;/a&gt;の記事で解説しています。コンテナを使い始める前に読んでおくと、この記事の内容もスムーズに理解できます。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;手動レイアウトは自由度が高いぶん、自分で配置を管理する必要があります。オートレイアウトは整列・間隔を自動管理してくれるぶん、重なりや複雑な配置は苦手です。どちらが正解というわけではなく、作りたいレイアウトに合わせて選ぶことが重要です。&lt;/p&gt;
&lt;p&gt;最初はオートレイアウトを使ってみることをおすすめします。カード一覧やボタン並びの場面で使ってみると、ああ、これは楽だと実感できると思います。手動レイアウトが必要な場面はそのうち自然とわかってくるので、まずはオートレイアウトを使える場面で積極的に使ってみてください。楽しみながらコンテナを使いこなしていきましょう。&lt;/p&gt;
&lt;p&gt;慣れてくると総合的にコンテナの理解が深まってきますので、&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-container-guide/&quot;&gt;あらためて全体をまとめて確認してみましょう。&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title>Power Apps コンテナの命名規則とツリービュー整理術｜階層が深くなっても迷わない管理方法</title><link>https://shiminkaihatsu.com/powerapps-container-naming/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-container-naming/</guid><description>Power Apps コンテナの命名規則とツリービュー整理術｜階層が深くなっても迷わない管理方法</description><pubDate>Mon, 06 Apr 2026 22:29:03 GMT</pubDate><content:encoded>&lt;p&gt;Power Apps でアプリが大きくなってきたとき、ツリービューがカオスになった経験はありませんか。コントロールが増えるにつれて、あのボタンどこだっけ、このラベルは何のためにあるのかという状況が必ず訪れます。命名規則とツリービューの整理術を最初から意識しておくだけで、後からの修正コストが劇的に下がります。&lt;/p&gt;
&lt;h2 id=&quot;命名規則がなぜ必要なのか&quot;&gt;命名規則がなぜ必要なのか&lt;/h2&gt;
&lt;p&gt;Power Apps Studio のツリービューは、コントロール数が増えると一覧で確認するだけでも時間がかかります。体感ですが、コントロールが200件を超えたあたりから検索だけでは追いきれなくなります。私が最初に作ったアプリはまさにそれで、Button1・Button2・Button3が乱立していて、どのボタンが何をするのか自分でも把握できなくなっていました。&lt;/p&gt;
&lt;p&gt;命名規則がない状態でチーム開発をすると、さらに問題が深刻になります。Power Apps はコントロール名がそのまま数式の参照先になるため、名前が不明瞭だと数式を読んでいるときにこれは何を参照しているのかが一瞬でわからなくなります。自分が書いた数式でも、数週間後に見直すと意味がわからなくなるのが正直なところです。&lt;/p&gt;
&lt;p&gt;コンテナ構造を使うアプリでは特にこの問題が顕著です。コンテナは階層が深くなりやすいため、ツリービュー上のどのコンテナがどのセクションに対応しているかが、名前だけで判断できる状態にしておくことが重要です。コンテナの設計思想については&lt;a href=&quot;/powerapps-container-guide/&quot;&gt;Power Apps コンテナ完全ガイド&lt;/a&gt;で全体像を整理しているので、合わせて参照してください。&lt;/p&gt;
&lt;h2 id=&quot;推奨プレフィックス一覧&quot;&gt;推奨プレフィックス一覧&lt;/h2&gt;
&lt;p&gt;コントロールの種類ごとにプレフィックスを決めておくと、名前を見ただけでコントロールの型がわかるようになります。以下が私が実際に使っているプレフィックスです。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;プレフィックス&lt;/th&gt;
&lt;th&gt;コントロール種別&lt;/th&gt;
&lt;th&gt;例&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;cnt&lt;/td&gt;
&lt;td&gt;コンテナ（Container）&lt;/td&gt;
&lt;td&gt;cntHeader、cntBIArea&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;lbl&lt;/td&gt;
&lt;td&gt;ラベル（Label）&lt;/td&gt;
&lt;td&gt;lblTitle、lblLastUpdate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;btn&lt;/td&gt;
&lt;td&gt;ボタン（Button）&lt;/td&gt;
&lt;td&gt;btnSave、btnRefreshBI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;gal / col&lt;/td&gt;
&lt;td&gt;ギャラリー（Gallery）&lt;/td&gt;
&lt;td&gt;galRecords、colResentVessel&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;img&lt;/td&gt;
&lt;td&gt;イメージ（Image）&lt;/td&gt;
&lt;td&gt;imgIcon、imgBarchart&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;rec&lt;/td&gt;
&lt;td&gt;レクタングル（Rectangle）&lt;/td&gt;
&lt;td&gt;recSeparator、recLeft&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;txt&lt;/td&gt;
&lt;td&gt;テキスト入力（TextInput）&lt;/td&gt;
&lt;td&gt;txtSearch、txtComment&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ddl&lt;/td&gt;
&lt;td&gt;ドロップダウン（Dropdown）&lt;/td&gt;
&lt;td&gt;ddlStatus、ddlDepartment&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ico&lt;/td&gt;
&lt;td&gt;アイコン（Icon）&lt;/td&gt;
&lt;td&gt;icoEdit、icoDelete&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;frm&lt;/td&gt;
&lt;td&gt;フォーム（Form）&lt;/td&gt;
&lt;td&gt;frmDetail、frmEdit&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;最初はプレフィックスを覚えるのが面倒に感じるかもしれません。ですが一度習慣にしてしまえば、逆にプレフィックスなしでは落ち着かなくなります。私も今では命名なしでコントロールを置くことが気持ち悪く感じるくらいです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-container-naming01.BYwAngTC_26xILv.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;階層と場所を名前に含める&quot;&gt;階層と場所を名前に含める&lt;/h2&gt;
&lt;p&gt;プレフィックスだけでは不十分です。コンテナのネスト構造が深くなると、どのコンテナがどの画面のどのエリアに属しているかが名前からわからなくなります。そこで「場所＋階層番号」を名前に含める方法が有効です。&lt;/p&gt;
&lt;p&gt;私のアプリ scrHome での実例を紹介します。ホーム画面のBIエリアには次のような命名をしています。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;cntAll_Home（ルートコンテナ・ホーム画面全体）&lt;/li&gt;
&lt;li&gt;cntRight_Home（右エリア・ホーム画面）&lt;/li&gt;
&lt;li&gt;cntBI（BIセクション全体）&lt;/li&gt;
&lt;li&gt;cntBI_1stL（BIの1行目・左側）&lt;/li&gt;
&lt;li&gt;cntBI_2ndL（BIの2行目・左側）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;この命名を見るだけで、ツリービューのどこを開けばよいかが名前から推測できます。1stL・2ndL という連番は1行目・2行目の意味で、L は Left（左）を指しています。コンテナのネスト構造の設計については&lt;a href=&quot;/powerapps-container-nesting/&quot;&gt;コンテナのネスト構造を作る方法&lt;/a&gt;で詳しく解説しているので、階層設計と合わせて読んでもらえると理解が深まります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-container-naming02.r8BjgeSX_Z1cSkpC.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;役割を名前に含める&quot;&gt;役割を名前に含める&lt;/h2&gt;
&lt;p&gt;コントロールの名前には、そのコントロールが何をするものかという役割も入れるべきです。プレフィックスで型がわかり、本体部分で役割がわかる。この2要素が揃って初めて名前が機能します。&lt;/p&gt;
&lt;p&gt;具体的な例を見てみましょう。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;btnRefreshBI：BIエリアのデータを更新するボタン&lt;/li&gt;
&lt;li&gt;lblLastUpdate：最終更新日時を表示するラベル&lt;/li&gt;
&lt;li&gt;txtSearchKeyword：検索キーワードを入力するテキストボックス&lt;/li&gt;
&lt;li&gt;galVesselList：船舶一覧を表示するギャラリー&lt;/li&gt;
&lt;li&gt;ddlPhaseFilter：フェーズでフィルタリングするドロップダウン&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;名前が長くなりすぎることを気にする人がいますが、個人的には多少長くても役割がわかる名前のほうが絶対によいと思っています。Power Apps Studio の数式バーにはオートコンプリートがあるので、名前の途中まで入力すれば候補が出ます。長い名前は入力コストにならない。短すぎて意味が取れない名前のほうが、後々のコストが高くつきます。&lt;/p&gt;
&lt;h2 id=&quot;ツリービューでの並び替えと選択操作&quot;&gt;ツリービューでの並び替えと選択操作&lt;/h2&gt;
&lt;p&gt;命名規則を整備したら、ツリービュー上の操作もスムーズになります。いくつか知っておくと便利な操作をまとめます。&lt;/p&gt;
&lt;h3 id=&quot;並び替えの方法&quot;&gt;並び替えの方法&lt;/h3&gt;
&lt;p&gt;コンテナ内の子要素はツリービュー上でドラッグ＆ドロップで順序を変更できます。ただしドラッグが効かない場合があり、その場合は対象のコントロールを右クリックして表示されるメニューから並び替えを選びます。&lt;/p&gt;
&lt;p&gt;注意点として、コンテナをオートレイアウト（Auto Layout）に設定している場合、子要素の並び順がそのまま画面上の表示順になります。ツリービューで上にあるほど画面の上（または左）に表示されます。見た目の調整はプロパティではなくツリービューの順序で制御する、という感覚を覚えておくとよいです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-container-naming03.DF2VjTvc_DWt7c.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;セクション単位での全選択&quot;&gt;セクション単位での全選択&lt;/h3&gt;
&lt;p&gt;コンテナ構造の大きなメリットのひとつが、セクション単位での全選択が容易になることです。旧来の平坦なツリービューでは、ヘッダーエリアのコントロールを全選択しようとすると、Ctrlキーを押しながら1つずつ選ぶしかありませんでした。&lt;/p&gt;
&lt;p&gt;コンテナがあれば、cntHeader を1クリックするだけでその中のすべての子コントロールが選択対象になります。移動・複製・削除もコンテナ単位で行えるため、画面レイアウトの大規模な調整がずっと楽になります。ヘッダーをまるごと別の画面に移植したいとき、コンテナごとコピーするだけで子コントロールも全員ついてくる点は特に便利です。この点についてはYAML共有の観点からも&lt;a href=&quot;/powerapps-container-yaml-share/&quot;&gt;コンテナをYAMLコードで共有する方法&lt;/a&gt;で詳しく紹介しています。&lt;/p&gt;
&lt;h2 id=&quot;深くなりすぎたときのリファクタリング基準&quot;&gt;深くなりすぎたときのリファクタリング基準&lt;/h2&gt;
&lt;p&gt;命名規則を守っていても、ネストが深くなりすぎるとツリービューが読めなくなってきます。目安として3〜4階層が限界で、それ以上は設計を見直すサインと考えてください。&lt;/p&gt;
&lt;p&gt;よくある失敗パターンは、レイアウト調整のためにコンテナを積み重ねていくうちに、気づいたら6〜7階層になっていたというケースです。1コントロールしか持たないコンテナが連続している場合は、そのコンテナが本当に必要かどうかを見直す余地があります。ただし整列・パディング目的で1コントロールのコンテナを使うことは正当な理由になります。判断が難しければ、コンテナを省いたときに見た目が崩れるかどうかを試してみましょう。&lt;/p&gt;
&lt;p&gt;深すぎる階層に気づいたら、思い切ってフラット化するリファクタリングを行います。一見面倒に見えますが、命名規則が整っていればcntBI_1stL 配下を全部整理するという作業がコンテナ単位で完結するため、旧来の方法より遥かに作業量が少なくて済みます。&lt;/p&gt;
&lt;h2 id=&quot;チームで命名ルールを共有する方法&quot;&gt;チームで命名ルールを共有する方法&lt;/h2&gt;
&lt;p&gt;個人開発ならば自分が守れれば十分ですが、チームで Power Apps を開発する場合は命名規則をドキュメント化しておく必要があります。口頭で伝えるだけではすぐに崩れます。&lt;/p&gt;
&lt;p&gt;私がチームでの勉強会で使っているのは、プレフィックス一覧をSharePointリストに登録しておき、いつでも参照できる状態にしておく方法です。表をひとつ共有するだけで、新しくメンバーが加わったときも命名の統一が保てます。&lt;/p&gt;
&lt;p&gt;命名規則がドキュメント化されていると、コードレビューのときに指摘しやすくなります。感覚的な指摘ではなく、ルールに基づいた指摘ができるため、受け取る側も納得しやすいです。社内での Power Platform 推進を担っている立場としては、こういったルール整備が長期的な品質維持に直結すると感じています。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;命名規則は地味な作業ですが、その恩恵はアプリが大きくなるほど効いてきます。最初にルールを決めてしまえば、後から名前を付け直す作業がほぼなくなります。プレフィックス・場所・役割の3要素を名前に含めるだけで、ツリービューの可読性は大きく変わります。&lt;/p&gt;
&lt;p&gt;市民開発とはこういう地道な事柄の積み重ねだと思っています。命名規則ひとつ整えるだけで、1か月後の自分がずっと楽になる。まずは自分のプロジェクトのプレフィックス表を1枚作るところから始めてみてください。&lt;/p&gt;</content:encoded></item><item><title>Power Apps コンテナのネスト構造を作る方法｜フォルダ階層のように考えると整理しやすい</title><link>https://shiminkaihatsu.com/powerapps-container-nesting/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-container-nesting/</guid><description>Power Apps コンテナのネスト構造を作る方法｜フォルダ階層のように考えると整理しやすい</description><pubDate>Mon, 06 Apr 2026 22:29:04 GMT</pubDate><content:encoded>&lt;p&gt;Power Apps でコンテナを使い始めると、すぐに直面するのがネスト（入れ子）構造です。コンテナの中にさらにコンテナを入れる。これが理解できると、画面設計の見通しが一気に良くなります。&lt;/p&gt;
&lt;h2 id=&quot;ネスト構造とは何か&quot;&gt;ネスト構造とは何か&lt;/h2&gt;
&lt;p&gt;ネストとは、コンテナの中にさらにコンテナを入れる構造のことです。マトリョーシカ人形を思い浮かべる方もいるかもしれませんが、実際の操作感はPCのフォルダ構造に近いです。ドライブの中にフォルダがあり、その中にサブフォルダがあり、さらにその中にファイルが入っている。Power Apps のコンテナもこれと同じ考え方で設計します。&lt;/p&gt;
&lt;p&gt;具体的に対応させると、こうなります。ドライブが画面（Screen）、その直下にルートコンテナ、その中にセクションコンテナ、さらに内側に個別のコントロール（ラベルやボタン）が並ぶイメージです。フォルダ階層を整理するのと同じ感覚で画面を設計できるようになると、コントロール数が増えても迷わなくなります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-container-nesting01.Bstg2tx6_hmPFz.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;実例で追うネスト構造scrhomeの4階層&quot;&gt;実例で追うネスト構造：scrHomeの4階層&lt;/h2&gt;
&lt;p&gt;実際に私が業務で使っているアプリのホーム画面（scrHome）を例に取ると、ネスト構造は4階層になっています。ざっくりとした骨格はこうです。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;cntAll_Home（垂直コンテナ：画面全体）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;└─ cntRight_Home（垂直コンテナ：メインコンテンツ領域）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;   └─ cntBI（水平コンテナ：KPI表示エリア）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;      └─ cntBI_1stL（水平コンテナ：KPI行の左側）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;         └─ lblLastUpdate（ラベル：最終更新日）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;         └─ btnRefreshBI（ボタン：更新）&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;このYAMLの階層を追いながらなぜここで入れ子にするのかを考えると、構造の意図が見えてきます。cntAll_Home は画面全体を縦に積み上げる垂直コンテナです。その中の cntRight_Home はメインコンテンツを管理する垂直コンテナで、ここでヘッダーとボディの上下関係を制御しています。さらに内側の cntBI は複数のKPIカードを横並びにする水平コンテナ、cntBI_1stL はその中の1行目の左エリアをさらに水平に分割するコンテナです。&lt;/p&gt;
&lt;p&gt;各階層でやることはたった一つ。この親コンテナの子要素を縦に並べるか、横に並べるかを決めるだけです。この問いを内側に向かって繰り返すのが、ネスト設計の本質です。コンテナとセクション設計の考え方については、&lt;a href=&quot;/powerapps-container-section-design/&quot;&gt;画面をセクションに分割する設計の考え方&lt;/a&gt;の記事でより詳しく解説しています。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-container-nesting02.DDSOo1Nd_1XsghM.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;階層ごとの判断仕切り板の向きだけを決める&quot;&gt;階層ごとの判断：仕切り板の向きだけを決める&lt;/h2&gt;
&lt;p&gt;ネスト設計で迷うポイントは、ほぼ一つに集約されます。このコンテナは縦方向（垂直）か横方向（水平）か、という判断です。コンテナの追加後でも Variant プロパティを変更すればいつでも切り替えられますが、最初から方向を意識しておくと後の修正が少なくなります。&lt;/p&gt;
&lt;p&gt;判断の基準としてよく使うのが仕切り板を1枚入れるとしたらという問いです。&lt;/p&gt;
&lt;p&gt;縦に仕切り板を入れると左右に分かれる。横に仕切り板を入れると上下に分かれる。分けたい子要素がその片側に全部収まる方向が、そのコンテナに設定すべき方向です。これを最初の階層から繰り返すだけで、どれだけ画面が複雑になっても設計プロセス自体は変わりません。&lt;/p&gt;
&lt;h3 id=&quot;子コンテナが1コントロールしか持たないケース&quot;&gt;子コンテナが1コントロールしか持たないケース&lt;/h3&gt;
&lt;p&gt;ネストを組んでいると、子コンテナの中にコントロールが1つしか入らないケースが出てきます。これは省略できるかどうかを判断するポイントです。整列やパディングの目的でコンテナを使っている場合はそのまま残しましょう。一方、単純に場所を決めるためだけに存在しているコンテナであれば、コントロールを直接親コンテナに入れたほうがシンプルになります。&lt;/p&gt;
&lt;p&gt;個人的には、後から子要素が増えそうなら残す、増えない確信があるなら省略する、という判断をしています。コンテナの追加は後からでもできますが、後から省略するのは意外と面倒なので、迷ったら残しておく方が無難です。&lt;/p&gt;
&lt;h2 id=&quot;よくある失敗ネストが深くなりすぎる&quot;&gt;よくある失敗：ネストが深くなりすぎる&lt;/h2&gt;
&lt;p&gt;ネスト構造に慣れてくると、今度は深くなりすぎるという問題が出てきます。5階層、6階層と深くなると、ツリービューを縦にスクロールしても全体像が把握できなくなります。私も最初の頃はこれをやってしまいました。ツリービューを開いた瞬間にどこに何があるかわからないという状態になるのは、深すぎるネストのサインです。&lt;/p&gt;
&lt;p&gt;目安として、3〜4階層を超えたら設計を見直すことをおすすめします。階層が深くなる原因のほとんどは、1つのコンテナが担う役割が多すぎることです。このコンテナは何のために存在するかを1文で言えないなら、分割・整理のタイミングです。命名規則と合わせてツリービューを整理する方法は、&lt;a href=&quot;/powerapps-container-naming/&quot;&gt;コンテナの命名規則とツリービュー整理術&lt;/a&gt;の記事でまとめています。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-container-nesting03.DVdBndiL_Z2gx84g.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;同じ問いを内側に向かって繰り返すだけ&quot;&gt;同じ問いを内側に向かって繰り返すだけ&lt;/h2&gt;
&lt;p&gt;ネスト設計の良いところは、覚えることがほとんどないことです。縦か横かを決める。この問いを内側に向かって繰り返す。それだけです。最初の画面で慣れてしまえば、次の画面でも同じプロセスで設計できます。&lt;/p&gt;
&lt;p&gt;どこから手を付けていいかわからないという段階から、この画面は垂直コンテナから始めて、内側を水平で分けて…と考えられるようになると、Power Apps の開発がぐっと楽になります。ギャラリーの中でコンテナを活用するレイアウト設計については、&lt;a href=&quot;/powerapps-container-gallery/&quot;&gt;ギャラリー内にコンテナを使ったレイアウト設計&lt;/a&gt;の記事で続きを解説しています。ぜひ合わせて読んでみてください。&lt;/p&gt;
&lt;p&gt;コンテナを使ったレイアウト設計全体の体系については&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-container-guide/&quot;&gt;Power Apps コンテナ完全ガイド&lt;/a&gt;にまとめているので、より深く学びたい場合はそちらも参照してください。&lt;/p&gt;</content:encoded></item><item><title>Power Apps 画面をセクションに分割する設計の考え方｜仕切り板1枚で方向を決める</title><link>https://shiminkaihatsu.com/powerapps-container-section-design/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-container-section-design/</guid><description>Power Apps 画面をセクションに分割する設計の考え方｜仕切り板1枚で方向を決める</description><pubDate>Mon, 06 Apr 2026 22:40:38 GMT</pubDate><content:encoded>&lt;p&gt;Power Apps でコンテナを使ってレイアウトを組むとき、最初につまずくのがどこからコンテナを入れ始めるかです。この記事では、画面をセクションに分割するときの考え方を一つのシンプルな問いに落とし込んで解説します。&lt;/p&gt;
&lt;h2 id=&quot;設計はコードより先に始まる&quot;&gt;設計はコードより先に始まる&lt;/h2&gt;
&lt;h3 id=&quot;ワイヤーフレームで分割を決めてから手を動かす&quot;&gt;ワイヤーフレームで分割を決めてから手を動かす&lt;/h3&gt;
&lt;p&gt;コンテナのレイアウト設計で一番やってはいけないのは、Power Apps を開いてからその場でコンテナを置き始めることです。行き当たりばったりで作ると、途中で構造を見直したくなったときに大幅な作り直しが発生します。まず紙でもスライドでもいいので、画面に必要なセクションを書き出してから手を動かすのが正解です。&lt;/p&gt;
&lt;p&gt;ワイヤーフレームといっても大げさなものは必要ありません。ヘッダー・フィルターエリア・一覧エリア・フッターのような大まかな区切りを四角形で描くだけで十分です。この時点でどの要素がどのグループに属するかを考えることが、コンテナ設計の核心です。&lt;/p&gt;
&lt;h3 id=&quot;画面テンプレートを出発点にする&quot;&gt;画面テンプレートを出発点にする&lt;/h3&gt;
&lt;p&gt;ゼロからコンテナ構造を組むのが難しいと感じる場合は、Power Apps の画面テンプレートを活用するのも一つの手です。新規画面を追加するときに選べる Sidebar・Header and main などのテンプレートは、最初からコンテナが適切に配置された構造になっています。これを土台にして、自分のアプリの要件に合わせてコンテナを追加・削除していく進め方は、特に慣れないうちは効果的です。&lt;/p&gt;
&lt;p&gt;テンプレートから学べることも多く、ああ、こういう方向でコンテナを組むのかという感覚が身につきます。私もコンテナを使い始めた最初の頃はテンプレートのコンテナ構造を一段ずつ追いかけて理解しました。&lt;/p&gt;
&lt;h2 id=&quot;方向を決めるシンプルな問い&quot;&gt;方向を決めるシンプルな問い&lt;/h2&gt;
&lt;p&gt;コンテナの方向（縦か横か）を決めるときに私がいつも使っている問いが、仕切り板を1枚入れるとしたら、縦と横どちらに入れるかです。仕切り板を入れたとき、すべてのセクションが分断されずそれぞれ片側に収まる方向が、そのコンテナの正しい方向です。&lt;/p&gt;
&lt;p&gt;たとえばヘッダー・フィルターエリア・一覧エリアが縦に積み重なっている画面なら、横に仕切り板を入れると各セクションが上下に分かれます。つまりこの画面のルートコンテナは縦方向（Vertical）です。一方、サイドメニューとメインコンテンツが左右に並んでいる画面なら、縦に仕切り板を入れると左右に分かれます。この場合は横方向（Horizontal）のコンテナが正解です。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-container-section-design01.DrZ45M7A_Z1af4q2.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;縦分割が正解のケース&quot;&gt;縦分割が正解のケース&lt;/h3&gt;
&lt;p&gt;ヘッダー・検索バー・ギャラリー・フッターのように画面の要素が縦に積み重なっている場合は、ルートコンテナを Vertical（縦方向）にします。各セクションを縦に並べるので、子コンテナの追加・削除・順序変更がすべて縦方向に影響します。横方向の変更が他のセクションに波及しません。&lt;/p&gt;
&lt;p&gt;社内で使う業務アプリの多くはこのパターンです。一覧を見てフォームに入力して保存する、というシンプルなフローのアプリは大体ヘッダーと本文が縦積みになっています。まずこのパターンから覚えておくと応用が利きます。&lt;/p&gt;
&lt;h3 id=&quot;横分割が正解のケース&quot;&gt;横分割が正解のケース&lt;/h3&gt;
&lt;p&gt;左側にナビゲーションメニュー、右側にメインコンテンツという2カラム構成の場合は、ルートコンテナを Horizontal（横方向）にします。左右のカラムがそれぞれ独立して縦に伸縮できるようになります。&lt;/p&gt;
&lt;p&gt;タブレット向けのアプリや、画面幅が広いことを前提にしたダッシュボード系のアプリでよく使うパターンです。ナビゲーションはどの画面でも固定幅にしたい場合は Width を固定値にして、メインコンテンツ側に FillPortions を設定すれば残りの幅を自動で埋めてくれます。整列プロパティの使い方については&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-container-alignment/&quot;&gt;コンテナの配置・整列プロパティの解説記事&lt;/a&gt;も参考にしてください。&lt;/p&gt;
&lt;h2 id=&quot;どちらに仕切っても分断される場合&quot;&gt;どちらに仕切っても分断される場合&lt;/h2&gt;
&lt;h3 id=&quot;粒度が粗すぎるサイン&quot;&gt;粒度が粗すぎるサイン&lt;/h3&gt;
&lt;p&gt;縦に仕切っても横に仕切っても、セクションが分断されてしまう場合があります。これは分割しようとしている単位が大きすぎるサインです。一段階内側の要素に対して同じ問いを繰り返してみてください。&lt;/p&gt;
&lt;p&gt;たとえばKPIカードが横に3枚並んでいて、その下に折れ線グラフがある画面を考えます。仕切り板を縦に入れると3枚のKPIカードが分断されます。横に入れると、KPIカード群とグラフが上下に分かれます。この場合、横方向の仕切りが正しい。上段（KPIカード群全体）と下段（グラフ）を縦方向のルートコンテナで並べ、上段コンテナの中で3枚のカードを横方向に並べる、という2段階の設計になります。&lt;/p&gt;
&lt;h3 id=&quot;共通の親を持てるかという別アプローチ&quot;&gt;共通の親を持てるかという別アプローチ&lt;/h3&gt;
&lt;p&gt;仕切り板の問いと同じことを別の角度から考える方法もあります。この要素たちは共通の親コンテナを持てるか、という問いです。ヘッダー・本文・フッターは縦に積み重なる兄弟なので、親は縦方向コンテナです。サイドメニューとメインコンテンツは横に並ぶ兄弟なので、親は横方向コンテナです。&lt;/p&gt;
&lt;p&gt;どちらのアプローチも本質は同じで、要素の関係性から方向を決めるという考え方です。仕切り板の問いのほうが直感的に判断しやすいと感じる方もいれば、親子関係で整理したほうがしっくりくる方もいます。どちらでも答えは同じになるので、自分が使いやすい方で考えてください。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-container-section-design02.SdmuTP-c_1LwCCS.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;設計の手順をまとめると&quot;&gt;設計の手順をまとめると&lt;/h2&gt;
&lt;p&gt;ここまでの考え方を実際の作業手順に落とし込むと、次のようになります。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;画面に必要なセクションを紙やスライドに書き出す&lt;/li&gt;
&lt;li&gt;一番外側の要素群に対して、仕切り板を1枚入れるとしたら縦か横かを問う&lt;/li&gt;
&lt;li&gt;答えが出たらルートコンテナの方向を決める&lt;/li&gt;
&lt;li&gt;各セクションに対して同じ問いを繰り返し、内側のコンテナの方向を決める&lt;/li&gt;
&lt;li&gt;どちらでも分断される場合は粒度を細かくして問い直す&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-container-section-design03.CNHm5yAX_Z2nBKed.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;p&gt;このプロセスを一回覚えると、どんな画面でも同じ手順で考えられます。コンテナの方向を迷うたびに仕切り板どっち？と自問するだけです。コンテナを使ったレイアウト設計全体の体系については&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-container-guide/&quot;&gt;Power Apps コンテナ完全ガイド&lt;/a&gt;にまとめているので、より深く学びたい場合はそちらも参照してください。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;コンテナのセクション設計は、どこに置くかではなくどう分類するかの問いです。分類が決まれば方向は自然に決まります。仕切り板の問いはシンプルですが、どんな複雑な画面でも同じ問いを繰り返すだけで方向が出せます。設計の前に一度立ち止まって構造を考える習慣をつけると、後からの修正が格段に減ります。地道な設計の積み重ねが、長く使えるアプリにつながります。&lt;/p&gt;</content:encoded></item><item><title>Power Apps コンテナ内にSVGで棒グラフ・ドーナツグラフを作る方法｜コードで動くチャートの実装</title><link>https://shiminkaihatsu.com/powerapps-container-svg-chart/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-container-svg-chart/</guid><description>Power Apps コンテナ内にSVGで棒グラフ・ドーナツグラフを作る方法｜コードで動くチャートの実装</description><pubDate>Mon, 06 Apr 2026 22:29:04 GMT</pubDate><content:encoded>&lt;p&gt;Power Apps のネイティブグラフコントロールはデザインのカスタマイズに限界があります。SVGコードを Image コントロールで表示すれば、棒グラフもドーナツグラフも自分で設計できます。コードが動くグラフなので、データが変われば見た目も自動で変わります。&lt;/p&gt;
&lt;h2 id=&quot;なぜ-svg-を使うのか&quot;&gt;なぜ SVG を使うのか&lt;/h2&gt;
&lt;p&gt;Power Apps のネイティブグラフコントロール（Chart コントロール）は手軽ですが、色・サイズ・フォント・レイアウトの自由度が低いです。デザインを統一したいダッシュボードで使うと、KPIカードとの見た目の差が出てしまいます。かといって PowerBI を埋め込むのはライセンスの問題があります。&lt;/p&gt;
&lt;p&gt;SVG はテキストベースのベクターグラフィック形式です。Power Apps の Image コントロールは SVG コードを直接表示できるので、コード内にコレクションや変数の値を差し込めば動的なグラフになります。ファイルサイズも軽く、拡大しても画質が落ちません。私がダッシュボードにSVGグラフを採用したのは、デザインの自由度とパフォーマンスの両方を満たせるからです。&lt;/p&gt;
&lt;p&gt;コンテナ内にSVGグラフを組み込む方法はコンテナクラスターの実装事例の一つです。クラスター全体の設計思想は&lt;a href=&quot;/powerapps-container-guide/&quot;&gt;Power Apps コンテナ完全ガイド&lt;/a&gt;でまとめています。&lt;/p&gt;
&lt;h2 id=&quot;image-コントロールで-svg-を表示する基本&quot;&gt;Image コントロールで SVG を表示する基本&lt;/h2&gt;
&lt;p&gt;Image コントロールの Image プロパティに次のパターンで SVG を渡します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;data:image/svg+xml,&quot;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; EncodeUrl&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;SVGコード&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;EncodeUrl で SVG コードを URL エンコードすることで、ブラウザが SVG を画像として認識します。SVGコードの中に Power Apps の式（コレクション参照・変数参照）を文字列として埋め込めるのが重要なポイントです。例えば棒の長さを変数で指定したい場合、SVGコード内の width 属性に &amp;amp; で変数を連結します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;data:image/svg+xml,&quot;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; EncodeUrl&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;    &quot;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;    &quot;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;    &quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;varBarWidth の値が変わると棒の幅が自動で変わります。この仕組みを理解しておくと、棒グラフもドーナツグラフも同じ発想で作れます。&lt;/p&gt;
&lt;h2 id=&quot;棒グラフの実装&quot;&gt;棒グラフの実装&lt;/h2&gt;
&lt;p&gt;複数フェーズの件数を棒グラフで表示する場合、コレクション colPhaseCount に Phase（フェーズ名）と Count（件数）の列が入っているとします。各フェーズの棒の長さは最大値に対する相対値で計算します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 各フェーズの棒幅の計算式（最大値に対する比率×グラフ最大幅）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;LookUp&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(colPhaseCount, Phase &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot;荷役中&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;).Count &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; Max&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(colPhaseCount, Count) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 160&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Max(colPhaseCount, Count) でコレクション内の最大件数を取得し、各フェーズの件数をその最大値で割って比率を出します。160 はグラフの最大幅（ピクセル）です。件数が最も多いフェーズが幅160になり、他のフェーズはその比率に応じた長さになります。&lt;/p&gt;
&lt;p&gt;これを各フェーズ分 SVG の rect タグで並べるとグラフになります。フェーズが3つあれば rect を3行書きます。y 座標は各行の高さ×インデックスで計算します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;data:image/svg+xml,&quot;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; EncodeUrl&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;    &quot;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;    &quot;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;    &quot;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;    &quot;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;    &quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;rx=‘4’ は棒の角丸です。コンテナの BorderRadius と統一しておくとデザインに一体感が出ます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-container-svg-chart01.IA0zrKfX_Z2cjCBQ.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;ドーナツグラフの実装&quot;&gt;ドーナツグラフの実装&lt;/h2&gt;
&lt;p&gt;ドーナツグラフはSVGの circle タグと stroke-dasharray・stroke-dashoffset の組み合わせで作ります。少し数学的な話になりますが、仕組みを一度理解すれば応用できます。&lt;/p&gt;
&lt;p&gt;半径 38px の円の円周は 2×π×38 ≈ 238.8 です。stroke-dasharray=“238.8” を設定すると、円周全体が1本の線として扱われます。そこに stroke-dashoffset で「この長さだけ線をずらす」と指定することで、円の一部だけを表示できます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;data:image/svg+xml,&quot;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; EncodeUrl&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;    &quot;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;    &quot;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;    &quot;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;    &quot;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; Text&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(varCompletedRate &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 100&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;0&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot;%&quot;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;    &quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;stroke-dashoffset に 238.8×(1-完了率) を設定することで、完了率が100%なら offset=0（全部表示）、0%なら offset=238.8（全部隠れる）となります。transform=‘rotate(-90 50 50)’ で開始位置を12時方向に合わせています。SVGのデフォルトは3時方向から始まるので、-90度回転させています。&lt;/p&gt;
&lt;p&gt;varCompletedRate は 0〜1 の小数で持っておくと計算式がシンプルになります。完了件数÷総件数で出します。ゼロ除算の対処は If 式で同様に対応してください。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-container-svg-chart02.CmWCm5U8_1goNa3.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;不可視ラベルで中間値を保持するパターン&quot;&gt;不可視ラベルで中間値を保持するパターン&lt;/h2&gt;
&lt;p&gt;SVGのImage式の中に長い計算式を直接書くと、EncodeUrl の中でエラーが出たときにどこが悪いかわかりにくくなります。そこで、中間値をラベルに保持しておいてImage式からそのラベルを参照する方法が有効です。&lt;/p&gt;
&lt;p&gt;Visible=false のラベル（例：lblCalcBarWidth）を画面に置いて、Text プロパティに計算式を書きます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// lblCalcBarWidth の Text プロパティ&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Text&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;LookUp&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(colPhaseCount, Phase &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot;荷役中&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;).Count &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; Max&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(colPhaseCount, Count) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 160&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;0&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Image コントロールの Image 式ではラベルのテキストを参照します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// Image式内での参照&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;width=&apos;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; lblCalcBarWidth.Text &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot;&apos;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;これでImage式がすっきりし、計算結果をラベルで目視確認しながらデバッグできます。私もSVGグラフを初めて作ったとき、EncodeUrl の中でエラーが出て何時間も悩みました。それ以来、複雑な計算はすべて不可視ラベルに出してから Image 式で使うようにしています。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;SVGグラフは最初のとっつきにくさがありますが、仕組みを理解すれば自由度が高くパフォーマンスも良い選択肢です。棒グラフはデータの最大値に対する比率で棒幅を計算する、ドーナツグラフは stroke-dashoffset で円弧を切り取る。この2パターンを覚えておけば、ダッシュボードのグラフ表現の幅が大きく広がります。デバッグは不可視ラベルを使いながら進めると格段にやりやすくなります。&lt;/p&gt;</content:encoded></item><item><title>Power Apps コンテナとは？旧来の座標配置との違いを絶対値 vs 相対値で理解する</title><link>https://shiminkaihatsu.com/powerapps-container-vs-dragdrop/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-container-vs-dragdrop/</guid><description>Power Apps コンテナとは？旧来の座標配置との違いを絶対値 vs 相対値で理解する</description><pubDate>Mon, 06 Apr 2026 22:40:39 GMT</pubDate><content:encoded>&lt;p&gt;Power Apps のコンテナを使うと、アプリのレイアウト管理がまるで別物になります。旧来の座標配置との違いを理解しておくだけで、画面サイズ対応やコントロールの並び替えがぐっと楽になるので、ぜひ最後まで読んでください。&lt;/p&gt;
&lt;h2 id=&quot;旧来の配置方式とは何か&quot;&gt;旧来の配置方式とは何か&lt;/h2&gt;
&lt;h3 id=&quot;xy座標でコントロールを固定する仕組み&quot;&gt;X・Y座標でコントロールを固定する仕組み&lt;/h3&gt;
&lt;p&gt;Power Apps の旧来のアプリ（いわゆる1st Generation、または座標配置モード）では、すべてのコントロールを画面の左上を原点として X プロパティと Y プロパティで配置します。たとえばこのボタンは画面の左から 100px、上から 200px の位置に置くという指定方法です。地図にピンを打つとき、緯度と経度を直接指定するイメージに近い感覚です。&lt;/p&gt;
&lt;p&gt;この方式はシンプルで直感的です。ドラッグ&amp;amp;ドロップでコントロールを動かすと X・Y の数値が更新され、何も考えなくても配置できます。小規模なアプリや、画面サイズが固定されている PC 専用ツールなら、これで十分なことも多い。私も最初の頃はこの方法でアプリを作っており、特に困ることはありませんでした。&lt;/p&gt;
&lt;h3 id=&quot;絶対座標の限界が見えてくるとき&quot;&gt;絶対座標の限界が見えてくるとき&lt;/h3&gt;
&lt;p&gt;問題はアプリが成長したときです。コントロールが 10 個から 50 個、100 個と増えていくにつれ、座標管理のコストが一気に上がります。あるコントロールの幅を変えたら、その右に並んでいる 10 個のコントロールの X 座標をすべて手動でズラさなければならない。テキストラベルの横幅を少し広げるだけで連鎖的に修正が発生する、という経験はないでしょうか。&lt;/p&gt;
&lt;p&gt;さらに深刻なのがデバイス対応です。PC で作ったアプリをタブレットやスマホで開くと、コントロールが画面からはみ出したり、間隔がバラバラになったりします。絶対座標は特定の解像度に依存した設計なので、前提が変わるたびに全コントロールの X・Y を見直す必要があります。社内でデバイスの種類が増えるたびに修正を繰り返すのは、正直しんどい作業です。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-container-vs-dragdrop01.DLElbOIG_Z2fPFFz.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;コンテナが解決すること&quot;&gt;コンテナが解決すること&lt;/h2&gt;
&lt;h3 id=&quot;配置の基準が親との関係に変わる&quot;&gt;配置の基準が親との関係に変わる&lt;/h3&gt;
&lt;p&gt;コンテナを使うと、子コントロールの位置とサイズを親コンテナとの相対関係で定義できます。たとえば &lt;code&gt;Width: Parent.Width * 0.6&lt;/code&gt; と書けば、親コンテナの幅が変わっても自動的に 60% の幅を保ちます。緯度・経度で固定するのではなく、駅から徒歩 3 分のような相対的な場所の示し方に切り替わるイメージです。基準点（駅）が動いても、3 分という関係性は変わらない。&lt;/p&gt;
&lt;p&gt;この仕組みのおかげで、コンテナのサイズや画面の解像度が変わっても、中のコントロールが自動的に追従します。コントロールを 1 個追加したり順序を入れ替えたりしても、その影響は親コンテナの範囲に留まり、画面全体には波及しません。修正の影響範囲を局所化できることが、座標配置との最大の違いです。&lt;/p&gt;
&lt;h3 id=&quot;コントロール間の関係を設計する考え方&quot;&gt;コントロール間の関係を設計する考え方&lt;/h3&gt;
&lt;p&gt;コンテナを使うと、アプリ設計の思考がコントロールをどこに置くかからコントロール同士の関係をどう定義するかへと変わります。これは地味に大きな転換です。場所を指定するのではなく、構造を設計する感覚です。&lt;/p&gt;
&lt;p&gt;ツリービューで見ると、コンテナが親になりその中に子コントロールが並ぶ階層構造になります。どのコントロールがどのグループに属しているかが一目瞭然です。座標配置だとすべてのコントロールがフラットに並ぶため、画面に要素が増えるほどツリービューが読みにくくなります。コンテナを使うと、このあたりの管理しやすさが格段に上がります。&lt;/p&gt;
&lt;p&gt;一応私は社内でアプリを教える立場なので、この構造的な設計の話はよく研修でも取り上げます。座標配置で作ったアプリを後から引き継いで修正しようとすると、コントロールの意図が読み取れなくて困ることが多い。コンテナで階層化されていると、ツリービューを見るだけでレイアウトの意図が伝わるので、メンテナンス性がまったく違います。&lt;/p&gt;
&lt;h2 id=&quot;2つの配置方式を比較する&quot;&gt;2つの配置方式を比較する&lt;/h2&gt;
&lt;p&gt;座標配置とコンテナ配置の違いを 4 つの軸で整理すると、それぞれの特性がはっきりします。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;比較軸&lt;/th&gt;
&lt;th&gt;座標配置（旧来）&lt;/th&gt;
&lt;th&gt;コンテナ配置&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;基準点&lt;/td&gt;
&lt;td&gt;画面の左上が固定原点（X=0, Y=0）&lt;/td&gt;
&lt;td&gt;親コンテナが基準（Parent.Width など）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;変更時の影響&lt;/td&gt;
&lt;td&gt;周囲のコントロールに連鎖しやすい&lt;/td&gt;
&lt;td&gt;影響がコンテナ内に限定される&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;画面サイズ対応&lt;/td&gt;
&lt;td&gt;自分で数式を組む必要がある&lt;/td&gt;
&lt;td&gt;相対指定で自動追従しやすい&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;コントロール間の関係&lt;/td&gt;
&lt;td&gt;フラットで関係性が見えにくい&lt;/td&gt;
&lt;td&gt;親子階層で構造が明確&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;表を見てわかるように、コンテナが圧倒的に有利な場面はコントロールが多いときと複数デバイス対応が必要なときです。逆に言えば、コントロールが少なく固定サイズの PC 専用アプリであれば、座標配置のほうがシンプルで早いこともあります。どちらが正解というわけではなく、アプリの規模と要件に合わせて選ぶものです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-container-vs-dragdrop02.Bb2kyDp2_ZzMgzs.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;絶対座標が悪いわけではない&quot;&gt;絶対座標が悪いわけではない&lt;/h2&gt;
&lt;p&gt;ここまでコンテナの良さを話してきましたが、座標配置を全否定するつもりはありません。単機能のアプリや、プロトタイプをとにかく速く作りたいときは座標配置のほうが手早い。Power Apps の学習を始めたばかりのころも、まず座標配置でアプリの動きを覚えてから、コンテナの概念を学ぶほうが順序として入りやすいと思います。&lt;/p&gt;
&lt;p&gt;コンテナの真価が発揮されるのは、コントロール数が増えてきたとき、複数人が同じアプリを引き継ぎながら運用するとき、タブレット・PC など複数デバイスで使うことが決まっているとき、の3つのいずれかに当てはまってからです。最初から全部コンテナで作る必要はありませんが、このアプリは将来大きくなりそうだなと感じたら、設計段階からコンテナを使う習慣をつけておくと後で楽になります。&lt;/p&gt;
&lt;p&gt;なお、手動レイアウトとオートレイアウトの2種類のコンテナの使い分けについては、&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-container-manual-vs-auto/&quot;&gt;手動レイアウトとオートレイアウトの使い分け&lt;/a&gt;の記事で詳しく解説しています。どちらを選ぶかで設計の自由度がかなり変わるので、合わせて読んでみてください。&lt;/p&gt;
&lt;h2 id=&quot;コンテナの使い方を学ぶ前に押さえるべきこと&quot;&gt;コンテナの使い方を学ぶ前に押さえるべきこと&lt;/h2&gt;
&lt;h3 id=&quot;power-apps-のui設計全般に通じる考え方&quot;&gt;Power Apps のUI設計全般に通じる考え方&lt;/h3&gt;
&lt;p&gt;コンテナの話をすると、UI/UX 設計の話題とセットになることが多いです。コンテナは配置の技術的な仕組みですが、その背景には使いやすいアプリをどう設計するかという考え方があります。Power Apps の UI 設計全般については&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-uiux/&quot;&gt;Power Apps の UI/UX 設計の考え方&lt;/a&gt;の記事が参考になります。コンテナを使いこなす前に、なぜ見た目と構造を整えることが重要なのかを理解しておくと、コンテナの学習がスムーズになります。&lt;/p&gt;
&lt;p&gt;また、アプリのパフォーマンスという観点からも、コンテナを使った構造化設計は有効です。コンテナを使って画面上のコントロール数を適切に管理することは、&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-performance/&quot;&gt;アプリが重い・遅いときの改善方法&lt;/a&gt;にも間接的につながってきます。設計の段階から構造を意識することが、後からの改善コストを下げることになります。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;座標配置はどこに置くかをピンポイントで決める方式で、シンプルさが魅力です。一方コンテナはどう関係するかを定義する方式で、アプリが大きくなるほど管理の楽さが実感できます。どちらが絶対的に正しいということはなく、アプリの規模と将来の拡張を見越して選ぶことが重要です。&lt;/p&gt;
&lt;p&gt;コンテナを使い始めると、最初は少し考えることが増えます。でも慣れてくると、コントロールの位置をいちいち手動で調整しなくて済む設計の快適さがわかってきます。市民開発とはこういう地道な設計の積み重ねだと思っています。コンテナをうまく使いこなして、メンテナンスしやすいアプリを作っていきましょう。&lt;/p&gt;
&lt;p&gt;慣れてくると総合的にコンテナの理解が深まってきますので、&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-container-guide/&quot;&gt;あらためて全体をまとめて確認してみましょう。&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title>Power Apps の YAML コードでコンテナをチームに共有する方法｜コピペで再利用する実践ワークフロー</title><link>https://shiminkaihatsu.com/powerapps-container-yaml-share/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-container-yaml-share/</guid><description>Power Apps の YAML コードでコンテナをチームに共有する方法｜コピペで再利用する実践ワークフロー</description><pubDate>Mon, 06 Apr 2026 22:29:02 GMT</pubDate><content:encoded>&lt;p&gt;Power Apps には、コンテナをそのままYAMLコードとして書き出し、別のアプリや画面に貼り付けて再現できる機能があります。デザインの属人化を防ぎ、チームで同じUIコンポーネントを使い回す上で非常に強力な方法です。&lt;/p&gt;
&lt;h2 id=&quot;yamlコピー機能とは&quot;&gt;YAMLコピー機能とは&lt;/h2&gt;
&lt;p&gt;Power Apps Studio では、コンテナやコントロールを右クリックしてコードのコピーを選ぶと、そのコントロールの構造がYAML形式のテキストとして取得できます。YAMLはインデントで階層を表現するテキスト形式で、コンテナのネスト構造がそのまま文字列として出力されます。&lt;/p&gt;
&lt;p&gt;この機能が強力なのは、親コンテナをコピーすると子コントロールもすべて含まれる点です。旧来のグループ機能を使っていたころは、子コントロールを1つずつ選択して再配置する必要がありました。コンテナであれば、親を1つコピーするだけで子が全員ついてくる。この違いは実際に試してみると感動するレベルです。&lt;/p&gt;
&lt;p&gt;コンテナの設計思想と合わせて理解することで、このYAML共有の価値がより明確になります。&lt;a href=&quot;/powerapps-container-guide/&quot;&gt;Power Apps コンテナ完全ガイド&lt;/a&gt;でコンテナ全体の概念を整理しているので、YAMLを活用する前に読んでおくと理解が深まります。&lt;/p&gt;
&lt;h2 id=&quot;コードのコピーと貼り付けの手順&quot;&gt;コードのコピーと貼り付けの手順&lt;/h2&gt;
&lt;h3 id=&quot;コードをコピーする方法&quot;&gt;コードをコピーする方法&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Power Apps Studio でコピーしたいコンテナをツリービューまたはキャンバス上で選択する&lt;/li&gt;
&lt;li&gt;右クリックメニューを開き、コードのコピーを選択する&lt;/li&gt;
&lt;li&gt;クリップボードにYAML形式のテキストがコピーされる&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-container-yaml-share01.DmguiIN9_ZFic5B.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;コードを貼り付ける方法&quot;&gt;コードを貼り付ける方法&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;貼り付け先の画面またはコンテナをツリービューで選択する（子として挿入したい親コンテナを選ぶ）&lt;/li&gt;
&lt;li&gt;右クリックメニューからコードから貼り付けを選択する&lt;/li&gt;
&lt;li&gt;コピーしたYAMLが解析され、コンテナ構造ごと再現される&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;貼り付け後は、コントロール名が重複しないよう自動的に番号が付与されます。数式内でのコントロール名参照はそのまま引き継がれるため、変数名やコレクション名が一致していれば数式がそのまま動作します。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-container-yaml-share02.BTjrX1bI_LYd8W.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;コンテナ単位での再利用の実例&quot;&gt;コンテナ単位での再利用の実例&lt;/h2&gt;
&lt;p&gt;私が実際にYAMLコピーを使った場面を紹介します。物流管理アプリを作っていたとき、ホーム画面のBIカード（KPIを表示するカードエリア）を別の管理画面にも配置したくなりました。旧来のグループ方式ならラベル・ボタン・レクタングルをひとつずつ選んで配置し直す作業になりますが、コンテナのYAMLコピーを使えばcntBIを右クリック1回でコピーして貼り付けるだけです。&lt;/p&gt;
&lt;p&gt;貼り付け後にデータソースの参照先（コレクション名や変数名）を書き換えれば、まったく別のデータを表示するカードとして動き出します。見た目のコードをゼロから書き直す必要がありません。体感で作業時間が半分以下になりました。&lt;/p&gt;
&lt;p&gt;このような再利用に向いているのは、カスタムボタンやカード型レイアウトなどのUIパターンです。&lt;a href=&quot;/powerapps-container-custom-control/&quot;&gt;コンテナで再利用できるカスタムコントロールを作る方法&lt;/a&gt;で紹介しているカスタムボタン・プログレスバーの実装も、YAMLでコピーして使い回すと効率が上がります。&lt;/p&gt;
&lt;h2 id=&quot;チームでyamlを共有するワークフロー&quot;&gt;チームでYAMLを共有するワークフロー&lt;/h2&gt;
&lt;p&gt;個人での再利用だけでなく、チームでのUI共有にも使えます。具体的なワークフローを紹介します。&lt;/p&gt;
&lt;h3 id=&quot;共有の手順&quot;&gt;共有の手順&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;共有したいコンテナを「コードのコピー」でYAMLテキストとして取得する&lt;/li&gt;
&lt;li&gt;そのテキストをSlackのコードブロック・Notionのコードブロックなどにそのままペーストしてチームメンバーに共有する&lt;/li&gt;
&lt;li&gt;受け取り側は、Power Apps Studio を開いて貼り付け先の画面を準備する&lt;/li&gt;
&lt;li&gt;コードから貼り付けでYAMLを読み込み、コンテナが再現される&lt;/li&gt;
&lt;li&gt;変数名・コレクション名などのアプリ固有の参照先を修正して完成&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;このワークフローのよい点は、デザインの再現に画像やスクリーンショットが不要なことです。テキスト1つを共有するだけで、レイアウト・サイズ・色・数式まで全部移植されます。Slackのメッセージ1本でUIコンポーネントのやり取りができるのは、慣れると手放せなくなります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-container-yaml-share03.QS7Ki8FO_Z1Hvv9.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;notionやsharepointでのテンプレート管理&quot;&gt;NotionやSharePointでのテンプレート管理&lt;/h3&gt;
&lt;p&gt;よく使うUIパターンをNotionのデータベースやSharePointリストにYAMLとして保存しておく方法もあります。「ヘッダーコンポーネント」「KPIカード」「検索フォーム」のように用途別にページを作り、YAMLコードを貼り付けておくだけです。&lt;/p&gt;
&lt;p&gt;新しいアプリを作り始めるとき、このテンプレート集から必要なコンポーネントをコピーして貼り付ければ、UIのベースが数分で完成します。私はこれをUIライブラリと呼んでいて、社内推進の勉強会でも紹介しています。エンジニアがコンポーネントライブラリを持つように、非エンジニアがYAMLライブラリを持つという発想です。&lt;/p&gt;
&lt;h2 id=&quot;貼り付け後に確認すべきこと&quot;&gt;貼り付け後に確認すべきこと&lt;/h2&gt;
&lt;p&gt;YAMLの貼り付けはほぼ自動で完了しますが、いくつかのエラーが出やすい箇所があります。&lt;/p&gt;
&lt;h3 id=&quot;変数コレクション名の不一致&quot;&gt;変数・コレクション名の不一致&lt;/h3&gt;
&lt;p&gt;貼り付け先のアプリに存在しない変数名やコレクション名を参照している数式があると、エラーが発生します。エラーが出た場合は、Power Apps Studio の「数式バーのエラーマーク」か「App Checker」で一覧確認できます。参照先の名前を修正するか、App.OnStart にその変数・コレクションの定義を追加して対応します。&lt;/p&gt;
&lt;h3 id=&quot;コントロール名の重複&quot;&gt;コントロール名の重複&lt;/h3&gt;
&lt;p&gt;Power Apps はコントロール名が重複すると自動的に番号を付与しますが（例：cntHeader_1）、数式内の参照先は元の名前のままになっています。そのため、貼り付け後にこのコントロール名は何番になったかを確認してから数式を修正する必要があります。&lt;/p&gt;
&lt;p&gt;この問題を防ぐには、命名規則を徹底することが有効です。&lt;a href=&quot;/powerapps-container-naming/&quot;&gt;コンテナの命名規則とツリービュー整理術&lt;/a&gt;で紹介しているように、プレフィックスと役割を組み合わせた命名をしておくと、貼り付け後の名前重複が起きにくくなります。&lt;/p&gt;
&lt;h3 id=&quot;テーマカラー変数の依存&quot;&gt;テーマカラー・変数の依存&lt;/h3&gt;
&lt;p&gt;varRadiusBI や varDropShadowBI のように App.OnStart で定義したテーマ変数を参照している場合、貼り付け先のアプリに同じ変数定義がないとエラーになります。貼り付けるコンポーネントが依存している変数のリストを事前にメモしておき、貼り付け先にも同じ定義を追加する手順を踏むとスムーズです。&lt;/p&gt;
&lt;h2 id=&quot;コンポーネントとの使い分け&quot;&gt;コンポーネントとの使い分け&lt;/h2&gt;
&lt;p&gt;Power Apps にはコンポーネントライブラリという仕組みもあります。YAMLコピーとコンポーネントはどちらも再利用を目的としていますが、得意な場面が異なります。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;比較項目&lt;/th&gt;
&lt;th&gt;YAMLコピー&lt;/th&gt;
&lt;th&gt;コンポーネントライブラリ&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;使い回しの範囲&lt;/td&gt;
&lt;td&gt;同一アプリ内・別アプリ（コピペ）&lt;/td&gt;
&lt;td&gt;複数アプリ（ライブラリから参照）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;変更の反映&lt;/td&gt;
&lt;td&gt;コピー後は独立。変更は各コピーに個別適用が必要&lt;/td&gt;
&lt;td&gt;ライブラリ更新で全アプリに反映できる&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;プロパティの外部注入&lt;/td&gt;
&lt;td&gt;不可。貼り付け後に直接編集&lt;/td&gt;
&lt;td&gt;可能。カスタムプロパティで値を渡せる&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;習得コスト&lt;/td&gt;
&lt;td&gt;低い。右クリック2回で完結&lt;/td&gt;
&lt;td&gt;やや高い。コンポーネントの作成・公開手順が必要&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;向いている場面&lt;/td&gt;
&lt;td&gt;同じアプリ内での使い回し・一時的なUI移植&lt;/td&gt;
&lt;td&gt;組織全体で統一UIを使い回す・デザインシステム構築&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;個人開発や小規模なチームであればYAMLコピーで十分です。組織全体でUIを統一したい場合や、変更を一括反映したい場面ではコンポーネントライブラリが向いています。最初はYAMLコピーから始めて、必要になったらコンポーネントに移行するというステップが無理のない進め方だと思っています。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;YAMLコピーはコンテナ構造を活かした再利用の仕組みです。右クリックで取り出せるYAMLは、テキストとして自由に持ち運べるUIコンポーネントと考えると、使い道がぐっと広がります。&lt;/p&gt;
&lt;p&gt;チームで使う場合は、よく使うUIパターンをYAMLライブラリとして蓄積しておく習慣をつけるとよいです。市民開発とはこういう地道な資産の積み上げだと思っています。一度作ったUIをゼロから作り直さなくてすむ仕組みを整えておくと、次のアプリ開発が確実に速くなります。&lt;/p&gt;</content:encoded></item><item><title>Power Appsでデータベースから簡単にアプリを作る手順の紹介</title><link>https://shiminkaihatsu.com/powerapps-db/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-db/</guid><description>Power Appsでデータベースから簡単にアプリを作る手順の紹介</description><pubDate>Wed, 07 Feb 2024 22:00:04 GMT</pubDate><content:encoded>&lt;p&gt;Power Appsでアプリを作るには、データベース（DB）との接続が基本になります。DBの種類によって作り方が異なりますので、Excel・SharePoint（Lists）・Dataverseそれぞれの手順を解説します。&lt;/p&gt;
&lt;p&gt;なお、すでにPower Appsライセンスが使用可能な環境であることを前提とします。&lt;/p&gt;
&lt;h2 id=&quot;アプリ作成ができるようになるまでの流れ&quot;&gt;アプリ作成ができるようになるまでの流れ&lt;/h2&gt;
&lt;p&gt;Power Appsは基本的にデータベース（DB）と接続し、そのデータをアプリで表示したり、入力データをDBに保存します。&lt;/p&gt;
&lt;p&gt;DBとはつまり、データの入れ物と捉えるとわかりやすいです。&lt;/p&gt;
&lt;p&gt;市民開発者レベルで使うDBは主に3種類あります。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Excel&lt;/li&gt;
&lt;li&gt;SharePoint（Lists）&lt;/li&gt;
&lt;li&gt;Dataverse（データバース）&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;理由は後で紹介しますが、社内で複数人が利用することを考えると、SharePoint（Lists）、またはDataverseがおすすめです。&lt;/p&gt;
&lt;p&gt;Dataverseは高機能で優秀なDBな一方、プレミアムプランが必要なこと、使いこなすのに知識が必要なことから、SharePoint（Lists）を使う機会が多いかもしれません。&lt;/p&gt;
&lt;p&gt;Excelは、アプリを使うのが自分一人しかいない場合や、データ量が少ないアプリを作る場合をのぞき、基本的には選択肢から外してしまってもいいでしょう。&lt;/p&gt;
&lt;p&gt;Excelをデータソースにするかどうか迷っている方は、&lt;a href=&quot;https://shiminkaihatsu.com/excel-datasource/&quot;&gt;Power AppsのデータソースでExcelを評価した記事&lt;/a&gt;もあわせて参考にしてください。&lt;/p&gt;
&lt;p&gt;ここから先は使用するDB別に紹介しますので、必要な項目をクリックして進んでください。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#excel&quot;&gt;Excelを使う&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sharepoint&quot;&gt;SharePoint（Lists）を使う&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#dataverse&quot;&gt;Dataverseを使う&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;excelを使う場合&quot;&gt;Excelを使う場合&lt;/h2&gt;
&lt;p&gt;あまり使う機会はないかもしれませんが、Excelからアプリを作るケースの紹介です。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;STEP&lt;/p&gt;
&lt;p&gt;OneDriveにExcelファイルを作成する&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/howtomakeapps02.BQQgO24o_ZTbN71.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;496&quot;&gt;&lt;/p&gt;
&lt;p&gt;OneDriveにExcelを作成します。タイトルはわかりやすいもので大丈夫です。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;STEP&lt;/p&gt;
&lt;p&gt;テーブルを作成する&lt;/p&gt;
&lt;p&gt;Excelではテーブルを作成する必要があります。&lt;/p&gt;
&lt;p&gt;順を追って説明しますね。&lt;/p&gt;
&lt;p&gt;まず下のような一覧表を作ります（内容はなんでもいいです）。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;次に作成した一覧を選択し、『テーブルとして書式設定』ボタンを押下します。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;どんな見た目にするかを聞かれますので、ここでは仮に青色を選択します。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;見出しとして使用するにチェックを入れ、OKを押下します。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;これでExcelにテーブルが作成されました。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;Power AppsとExcelを繋げるためには、必ずテーブルが必要になりますので覚えておきましょう。&lt;/p&gt;
&lt;p&gt;テーブルまで作成できたら、Excelは閉じておいてください。開いたままだと、この先アプリを作成した時にエラーが出てしまいます。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;STEP&lt;/p&gt;
&lt;p&gt;Power Appsにアクセスして作成を進める&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;Power Appsのページにアクセスし、『＋作成』を押下します。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;Excelを押下します。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;STEP&lt;/p&gt;
&lt;p&gt;OneDrive for Businessに接続する&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;『＋新しい接続』を押下します。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;OneDrive for Businessを見つけ、『作成』ボタンを押下します。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;自分のアカウントでログインし、『Allow Access』を押下します。これで接続に OneDrive for Businessが追加されました。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;STEP&lt;/p&gt;
&lt;p&gt;Excelと接続する&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;STEP1で作成したExcelが選択できるようになっているので、そのファイルを押下します。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;STEP2で作成したテーブルを選択し、『接続』を押下します。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;STEP&lt;/p&gt;
&lt;p&gt;アプリが完成&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;しばらくすると、このようにアプリが完成しました。簡単ですね。&lt;/p&gt;
&lt;p&gt;Ctrl+S、または画面右上の保存アイコンを押下し、アプリを保存しておきましょう。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;アプリを開くと画面が真っ白のままだったり、『要求されたリソースはロックされています』というエラーが出る場合、開いたままになっているExcelを閉じましょう。Excelが開いていると Power Appsは使えません。&lt;/p&gt;
&lt;h2 id=&quot;sharepointlistsを使う場合&quot;&gt;SharePoint（Lists）を使う場合&lt;/h2&gt;
&lt;p&gt;DB（データベース）でSharePointを使用する場合、Lists（リスト）というものを使います。&lt;/p&gt;
&lt;p&gt;見た目はExcelのような表計算に見えますが、中身は違います。&lt;/p&gt;
&lt;p&gt;ListsはSharePointサイトに紐づいているサービスですので、使い始めるためにはまずSharePointサイトから作る必要があります。SharePoint Listsを使ったデータの読み書き（追加・更新・削除）の詳細は、&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-sharepoint-crud/&quot;&gt;Power AppsでSharePointリストのデータを読み書きする記事&lt;/a&gt;で詳しく解説しています。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;STEP&lt;/p&gt;
&lt;p&gt;SharePointサイトを作る&lt;/p&gt;
&lt;p&gt;まずSharePointサイトを作りましょう。&lt;/p&gt;
&lt;p&gt;SharePointサイトの作り方は2通りあります。&lt;/p&gt;
&lt;p&gt;会社によっては新規サイトを自由に作れないよう制限している場合があるため、ここで紹介するどちらかのやり方を使ってSharePointサイトを作りましょう。&lt;/p&gt;
&lt;p&gt;まず1つ目が、無難に作成ボタンから進める方法です。&lt;/p&gt;
&lt;p&gt;Microsoft 365などのページにいくと、画面左上にアイコンメニューがあるので、それを押下します。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;その中にSharePointのメニューがあれば、それを押下します。&lt;/p&gt;
&lt;p&gt;もしSharePointが見当たらない場合、下部の『全てのアプリを探索する』を押下します。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;さらにその先で『すべてのアプリ』を押下し、表示された先でSharePointを探して押下しましょう。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;すべてのアプリを押下し、&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;その中からSharePointを見つけましょう&lt;/p&gt;
&lt;p&gt;無事にSharePointページに飛んだら、次は『サイトの作成』を押下します。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;チームサイトの作成を押下します。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;標準チームを選択します。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;サイト名を決めましょう。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;ここでは、社内のどの範囲に向けたアプリを作るかによって名付けを考える必要があります。&lt;/p&gt;
&lt;p&gt;例えば自分が所属する営業部だけで使うアプリであれば、サイト名はわかりやすく『営業部DX』がいいかもしれません。&lt;/p&gt;
&lt;p&gt;会社の全社員を対象にしたアプリを作るなら、『全社向けサイト』かもしれません。&lt;/p&gt;
&lt;p&gt;グループメールアドレスとサイトアドレスも自由に決めることができますので、わかりやすいのがいいでしょう。&lt;/p&gt;
&lt;p&gt;全て決まったら『次へ』を押下します。&lt;/p&gt;
&lt;p&gt;追加するメンバーを聞かれますが、この時点では空欄でも構いません。&lt;/p&gt;
&lt;p&gt;すでに決まっているメンバーがいれば、追加してもいいですね。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;完了ボタンを押下すると、これでようやくSharePointサイトが出来上がりました。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;このやり方でSharePointサイトが作れた人は、STEP2に進んでください。&lt;/p&gt;
&lt;p&gt;会社によっては新規サイトの作成が制限されているかもしれません。&lt;/p&gt;
&lt;p&gt;その場合、Teamsでチームを作るとSharePointサイトが付随して自動で作成される特性を活かし、次のやり方をおすすめします。&lt;/p&gt;
&lt;p&gt;まず、Teamsを立ち上げます。Webでもアプリでもどちらでも構いません。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;Teamsが立ち上がったら、左のメニューの中から『チーム』を選択し、右上のプラスボタンを押下します。&lt;/p&gt;
&lt;p&gt;表示されるメニュから『チームを作成』を選択します。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;どのようにチームを作成するか聞かれますので、『最初から』を押下します。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;次にプライバシー（誰がアクセス可能か）を聞かれます。&lt;/p&gt;
&lt;p&gt;これもアプリをどの範囲に向けて作るのかによって選択が変わります。&lt;/p&gt;
&lt;p&gt;部単位で作るなら『プライベート』ですし、全社員向けなら『パブリック』『組織全体』ですね。&lt;/p&gt;
&lt;p&gt;ここでは『プライベート』を選択することにします。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;チームの名前を決めます。&lt;/p&gt;
&lt;p&gt;『営業部DX』とか『企画部DX』など、わかりやすいものがおすすめです。&lt;/p&gt;
&lt;p&gt;説明は空欄でかまいません。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;名前が決まったら『作成』を押して次に進みます。&lt;/p&gt;
&lt;p&gt;追加するメンバーは空欄で進めます。&lt;/p&gt;
&lt;p&gt;この時点でメンバーが決まっていれば、追加しておいていいでしょう。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;無事にTeamsのチームに追加されましたね。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;こうやって新しいチームを作ると、自動的にSharePointサイトが1つ作成されます。&lt;/p&gt;
&lt;p&gt;どこからSharePointサイトが確認できるかというと、まず次の画像のように、今作成したチームの『一般』スレッドを選択します。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;三点リーダー（･･･）を押下すると『SharePointで開く』とありますので、それを選択します。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;するとどうでしょう、SharePointサイトが開きました。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;このサイトはブックマークしておくといいですね。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;STEP&lt;/p&gt;
&lt;p&gt;SharePointサイトからListsを新規作成する&lt;/p&gt;
&lt;p&gt;STEP1で作成したSharePointサイトにアクセスし、新規ボタンを選択します。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;『リスト』という項目が出てきますので、それを押下します。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;『空白のリスト』を選択します。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;作成するリストの名前を聞かれますので、わかりやすい名前にしましょう。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;ここでは例として、次のようにしました。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;『サイトナビゲーションに表示』のチェックは外しておきましょう。&lt;/p&gt;
&lt;p&gt;はい、これで無事Listsが作成できました。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;次はこれに列を作成していきます。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;STEP&lt;/p&gt;
&lt;p&gt;Listsの列を作成する&lt;/p&gt;
&lt;p&gt;作成したリストに列を作成します。&lt;/p&gt;
&lt;p&gt;まずは『列の追加』を選択します。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;ここでは列に入れる値の種類を選択する必要があります。&lt;/p&gt;
&lt;p&gt;今回は『テキスト』を選択し、次へを押下します。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;なんという列名にするか聞かれますので、ここでは仮に『名前』と入力します。&lt;/p&gt;
&lt;p&gt;それ以外の項目は変更しなくて大丈夫です。&lt;/p&gt;
&lt;p&gt;保存を押しましょう。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;ここではわかりやすく日本語で列を作りましたが、実際には英語で作ることをおすすめします（Nameなど）。日本語で作ると列の内部名が非常に複雑になるため、扱いづらくなってしまいます。&lt;/p&gt;
&lt;p&gt;これで『名前』列が新しく作成されました。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;今と同じことを3回繰り返します。&lt;/p&gt;
&lt;p&gt;列の追加-テキスト-好きな食べ物（名前）&lt;br/&gt;
列の追加-テキスト-好きな教科（名前）&lt;br/&gt;
列の追加-テキスト-住所（名前）&lt;/p&gt;
&lt;p&gt;ここまで入力すると、下の画像のように列が完成したことでしょう。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;ここで気になる『タイトル』という列。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;実はこれ、Listsを作成すると最初から1つだけ自動作成されている列なのですが、私はいつも使っていません。&lt;/p&gt;
&lt;p&gt;なぜかというと、この列の種類はテキストしか選択することができず、汎用性に乏しいからです。&lt;/p&gt;
&lt;p&gt;種類というのはこれのことですね。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;Listsは列ごとに保存できる値の種類を明確に決めることができます。&lt;/p&gt;
&lt;p&gt;選択肢の列、日付・時刻列の列、数値の列、通貨の列など、さまざまです。&lt;/p&gt;
&lt;p&gt;タイトルはこの種類がテキストしか選べず、使い勝手が良くないのです。&lt;/p&gt;
&lt;p&gt;ですので、使わないタイトル列は非表示にしてしまいましょう。（削除もできないのがタイトル列のやっかいな点です）&lt;/p&gt;
&lt;p&gt;タイトルをクリックし、下の画像のように進みます。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;タイトルのチェックマークを外し、左上の適用を選択しましょう。&lt;/p&gt;
&lt;p&gt;これでタイトル列が非表示になります。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;STEP&lt;/p&gt;
&lt;p&gt;Listsに値を入力する&lt;/p&gt;
&lt;p&gt;列ができましたので、必要な値を入力していきます。&lt;/p&gt;
&lt;p&gt;まずは新規ボタンを押下します。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;値を入力する画面が立ち上がります。&lt;/p&gt;
&lt;p&gt;この時、さきほど非表示にしたはずのタイトル列が表示されますが（仕様です）、ここには入力しないようにしましょう。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;名前、好きな食べ物、好きな教科、住所に値を入力して『保存』を選択すると、まるでExcelのような見た目になってきました。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;これと同じことを繰り返しましょう。&lt;/p&gt;
&lt;p&gt;なお、いちいち入力画面から入力するのが面倒な場合、『グリッドビューの編集』を選択することもできます。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;Excelのようにセル1つ1つに直接入力ができるようになりました。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;どちらが入力しやすいかは好みです。&lt;/p&gt;
&lt;p&gt;ちなみに私はグリッドビュー入力のほうが好きです。&lt;/p&gt;
&lt;p&gt;全て入力が終わると、次のようになりました。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;これでListsへのデータ入力が完成です。&lt;/p&gt;
&lt;p&gt;ちなみに、不要な行が入ってしまい、それを削除したい時があると思います。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;そんな時は、列の左側にチェックマークを入れ、三点リーダー（･･･）から削除することができますよ。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;STEP&lt;/p&gt;
&lt;p&gt;ListsからPower Appsを作成する&lt;/p&gt;
&lt;p&gt;Listsが完成しましたので、Listsをベースにしてアプリを作っていきます。&lt;/p&gt;
&lt;p&gt;Power Appsのページから『＋作成』ボタンを押下します。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;SharePointを選択します。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;『＋新しい接続』を選択します。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;接続先から『SharePoint』を探して選択します。&lt;/p&gt;
&lt;p&gt;直接接続を選択し、作成ボタンを押下します。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;『Allow access』を押下して接続が完了です。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;（画像左側）接続にSharePointが追加されました。&lt;/p&gt;
&lt;p&gt;（画像右側）STEP1で作成したSharePointサイトが掲載されていますので、それを選択します。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;一覧の選択では、STEP2で作成したリストが表示されますので、それを選択します。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;しばらくすると、アプリが自動生成されました。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;これでSharePoint（Lists）からアプリを作る方法は完了です。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;dataverseを使う場合&quot;&gt;Dataverseを使う場合&lt;/h2&gt;
&lt;p&gt;Dataverse（データバース）は、Listsよりもより高機能で多くのデータを格納することができるDBのこと。&lt;/p&gt;
&lt;p&gt;Listsから乗り換える人は、テーブルの作成でつまづくかもしれませんので、紹介していきますね。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;STEP&lt;/p&gt;
&lt;p&gt;テーブルを作成する&lt;/p&gt;
&lt;p&gt;Dataverseではテーブルを作成し、そこにデータを格納していきます。&lt;/p&gt;
&lt;p&gt;まずPower Appsの『テーブル』項目を選択します。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;『＋新しいテーブル』を選択します。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;Dataverseは最初からテーブルが自動で作成されているため、画像右下にテーブルが存在しています。&lt;/p&gt;
&lt;p&gt;『列とデータを追加』を選択します。&lt;/p&gt;
&lt;p&gt;『高度なプロパティを設定する』から作ることもありますが、ここでは割愛します。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;これで新しいテーブルが作成されました。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;STEP&lt;/p&gt;
&lt;p&gt;テーブル名、列名を入力する&lt;/p&gt;
&lt;p&gt;まず、新しいテーブルに名前をつけます。&lt;/p&gt;
&lt;p&gt;鉛筆アイコンを押下し、表示名（テーブルの名前）を入力しましょう。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;ここでは『市民開発.com』という表示名にしました。（『複数形の名前』は自動で同じ名前が入力されます）&lt;/p&gt;
&lt;p&gt;『高度なオプション』を選択します。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;スキーマ名とは、わかりやすくテーブルの内部名称とおぼえておきましょう。&lt;/p&gt;
&lt;p&gt;テーブル名にあわせたわかりやすいものを設定しておきます。&lt;/p&gt;
&lt;p&gt;保存して次に進みます。&lt;/p&gt;
&lt;p&gt;テーブル名を英語にすると、入力した英語がそのままスキーマ名に自動入力されます。&lt;/p&gt;
&lt;p&gt;続いて『新しい列』クリック▶『列の編集』に進みます。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;表示名を『名前』とし、データの種類をテキスト→プレーンテキストにします。&lt;/p&gt;
&lt;p&gt;ここではわかりやすく日本語で列を作りましたが、実際には英語で作ることをおすすめします（Nameなど）。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;『高度なオプション』を選択し、スキーマ名を入力して更新ボタンを押下します。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;これで名前列が完成しました。&lt;/p&gt;
&lt;p&gt;今と同じ要領で、&lt;/p&gt;
&lt;p&gt;好きな食べ物-テキスト-プレーンテキスト&lt;br/&gt;
好きな教科-テキスト-プレーンテキスト&lt;br/&gt;
住所-テキスト-プレーンテキスト&lt;/p&gt;
&lt;p&gt;で列を作ります。&lt;/p&gt;
&lt;p&gt;スキーマ名も忘れず設定しておきましょう。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;STEP&lt;/p&gt;
&lt;p&gt;テーブルにデータを入力する&lt;/p&gt;
&lt;p&gt;完成したテーブルに、データを入れます。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;『作成』を押下し、これでテーブルが完成しました。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;本来はデータベース設計を考慮した、もう少し複雑なテーブルが必要になりますが、今回は割愛します。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;STEP&lt;/p&gt;
&lt;p&gt;Dataverseからアプリを作成する&lt;/p&gt;
&lt;p&gt;完成したテーブルからアプリを作ります。&lt;/p&gt;
&lt;p&gt;『＋作成』を選択します。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;Dataverseを選択します。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;接続の種類からDataverseを探し、『作成』を押下します。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;無事に接続されると、右側に先程作成したテーブルが表示されますので、それを選択します。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;キャンバスアプリが立ち上がりました。&lt;/p&gt;
&lt;p&gt;これでアプリが出来上がりました。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;アプリ設計に合わせたdbを選択しよう&quot;&gt;アプリ設計に合わせたDBを選択しよう&lt;/h2&gt;
&lt;p&gt;おさらいです。&lt;/p&gt;
&lt;p&gt;市民開発者レベルで使うDBは主に3種類あります。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Excel&lt;/li&gt;
&lt;li&gt;SharePoint（Lists）&lt;/li&gt;
&lt;li&gt;Dataverse（データバース）&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;今回は、DBをもとに簡単にアプリを作成する方法を解説しました。&lt;/p&gt;
&lt;p&gt;アプリ作りは本来、空の状態から自由に作ることで、Power Apps本来の持ち味を発揮します。まずはDBから自動生成したアプリを触りながら、Power Appsのインターフェースに慣れていきましょう。&lt;/p&gt;
&lt;p&gt;Power Appsのアプリ開発全体の流れや設計の考え方については、Power Apps開発の全体マップ記事でまとめて解説しています。あわせて参考にしてください。&lt;/p&gt;
&lt;p&gt;手を動かすほど、できることが増えていきます。楽しみながら進めましょう。&lt;/p&gt;</content:encoded></item><item><title>Power Apps 式が動かないときの調べ方｜ラベルに式を貼って確認するデバッグ入門</title><link>https://shiminkaihatsu.com/powerapps-debug-formula/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-debug-formula/</guid><description>Power Apps 式が動かないときの調べ方｜ラベルに式を貼って確認するデバッグ入門</description><pubDate>Sat, 18 Apr 2026 08:45:33 GMT</pubDate><content:encoded>&lt;p&gt;Power Appsで式を書いたのに動かない、変数に値が入っているはずなのに画面に出ない。そういうときに使えるデバッグ手法を整理します。難しいツールは必要ありません。ラベルを1つ置くだけで大半の問題は特定できます。&lt;/p&gt;
&lt;p&gt;この記事はエラー・デバッグクラスターのサテライト記事です。エラーの種類の全体像と調べ方の地図は&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-error-guide/&quot;&gt;Power Apps 数式エラー解決の全体マップ&lt;/a&gt;で整理しています。&lt;/p&gt;
&lt;h2 id=&quot;ラベルデバッグとは何か&quot;&gt;ラベルデバッグとは何か&lt;/h2&gt;
&lt;p&gt;ラベルデバッグとは、画面に一時的なラベルコントロールを置き、確認したい式をそのままTextプロパティに書いて結果を目で見る方法です。Power AppsにはVisual Studioのようなステップ実行機能がないため、今この瞬間の値が何かを確認するには、画面に表示するか、Monitorツールを使うかのどちらかになります。&lt;/p&gt;
&lt;p&gt;私がPower Appsを使い始めた頃、変数に値が入っているかどうかを確認する方法が分からず、とにかく式を書き直しては試すという非効率な作業を繰り返していました。ラベルデバッグを知ってからは、問題の特定にかかる時間が体感で半分以下になりました。&lt;/p&gt;
&lt;p&gt;手順はシンプルです。ラベルを追加して式を書き、アプリを実行して値を確認し、確認が終わったらラベルを非表示にする。これだけです。&lt;/p&gt;
&lt;h2 id=&quot;変数の中身を確認する&quot;&gt;変数の中身を確認する&lt;/h2&gt;
&lt;h3 id=&quot;グローバル変数を確認する手順&quot;&gt;グローバル変数を確認する手順&lt;/h3&gt;
&lt;p&gt;グローバル変数（Set関数で設定した変数）の中身を確認するには、ラベルのTextプロパティに変数名を直接書きます。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;画面にラベルコントロールを追加する&lt;/li&gt;
&lt;li&gt;Textプロパティに確認したい変数名を書く（例：varUserName）&lt;/li&gt;
&lt;li&gt;アプリを実行して、そのラベルに表示される値を確認する&lt;/li&gt;
&lt;li&gt;確認後はラベルを選択してVisibleプロパティを false に設定するか、削除する&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-debug-formula01.BME5XlML_63JJr.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;p&gt;変数の値がテキスト型以外の場合は、Text()関数でラップして表示します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 数値型の変数を表示する&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Text&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(varCount)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 日付型の変数を表示する&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Text&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(varSelectedDate, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;yyyy/mm/dd&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 論理型（true/false）の変数を表示する&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Text&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(varIsApproved)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-variables/&quot;&gt;グローバル変数とコンテキスト変数の使い方&lt;/a&gt;でも触れていますが、変数の型は最初の代入時に決まります。型が分からなくなったときも、このラベルデバッグで実際の値と型を確認できます。&lt;/p&gt;
&lt;h3 id=&quot;複数変数を一度に確認する&quot;&gt;複数変数を一度に確認する&lt;/h3&gt;
&lt;p&gt;複数の変数を同時に確認したいときは、&amp;amp; 演算子で結合して1つのラベルにまとめると効率的です。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;ID: &quot;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; Text&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(varSelectedId) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot; / 名前: &quot;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; varUserName &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot; / フラグ: &quot;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; Text&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(varIsApproved)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;これでラベル1つに複数変数の状態がまとめて表示されます。デバッグ専用のラベルとして画面の隅に固定しておくと、複数の操作を試しながら状態を追いやすくなります。&lt;/p&gt;
&lt;h2 id=&quot;ギャラリーのデータが出ないときの確認&quot;&gt;ギャラリーのデータが出ないときの確認&lt;/h2&gt;
&lt;h3 id=&quot;件数ゼロの原因を切り分ける&quot;&gt;件数ゼロの原因を切り分ける&lt;/h3&gt;
&lt;p&gt;ギャラリーにデータが表示されないとき、原因は大きく2つです。データソース自体が空か、Filter関数の条件が厳しすぎてヒットしていないかです。この2つを切り分けるためにCountRowsを使います。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;ラベルのTextプロパティに `Text(CountRows(データソース名))` を書く&lt;/li&gt;
&lt;li&gt;アプリを実行してラベルの数値を確認する&lt;/li&gt;
&lt;li&gt;0より大きい数が出ればデータソースにはデータがある。Filter条件が原因&lt;/li&gt;
&lt;li&gt;0が出ればデータソースへの接続か権限の問題&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-debug-formula02.DiHcX72V_Z198GrT.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;p&gt;次に、ギャラリーに適用しているFilter条件だけを取り出してCountRowsで確認します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// ギャラリーのItemsに書いているFilter式をそのままCountRowsに入れて件数確認&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Text&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;CountRows&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(SP_Tasks, Status &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot;進行中&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)))&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;0が返ってきたら、条件の文字列が列の値と一致していないことが多いです。列の実際の値（英語・全角半角・スペースなど）と比較している値が一致しているかを確認してください。&lt;/p&gt;
&lt;h2 id=&quot;複雑な式を分解してデバッグする&quot;&gt;複雑な式を分解してデバッグする&lt;/h2&gt;
&lt;h3 id=&quot;with関数で中間値を確認する&quot;&gt;With関数で中間値を確認する&lt;/h3&gt;
&lt;p&gt;長い式の途中の値を確認したいときは、With関数を使うと便利です。With関数はローカルな中間変数を定義できる関数で、式の途中の状態を名前付きで取り出せます。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-with/&quot;&gt;With関数で数式をすっきり書く方法&lt;/a&gt;の記事でも解説していますが、デバッグ目的でも非常に有効です。例えば以下のような複雑な式があったとします。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// デバッグしたい元の式&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Text&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;DateDiff&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;LookUp&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(SP_Projects, ID &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; varProjectId).StartDate, &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Today&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(), Days))&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;この式をWith関数で分解して、中間値をラベルに表示します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// With関数で分解してデバッグ&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;With&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        targetRecord: &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;LookUp&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(SP_Projects, ID &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; varProjectId),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        startDate: &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;LookUp&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(SP_Projects, ID &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; varProjectId).StartDate&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;    &quot;レコード: &quot;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; Text&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;IsBlank&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(targetRecord)) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&amp;#x26;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;    &quot; / 開始日: &quot;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; Text&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(startDate, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;yyyy/mm/dd&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&amp;#x26;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;    &quot; / 経過日数: &quot;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; Text&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;DateDiff&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(startDate, &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Today&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(), Days))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;これをラベルのTextプロパティに書いてアプリを実行すると、LookUpがレコードを取得できているか、StartDateに値が入っているか、DateDiffが計算できているかを一度に確認できます。&lt;/p&gt;
&lt;h3 id=&quot;バイナリサーチ的に問題を絞り込む&quot;&gt;バイナリサーチ的に問題を絞り込む&lt;/h3&gt;
&lt;p&gt;式が長くてどこでおかしくなっているか分からないときは、式を半分に切って動くかどうかを確認します。動けば後半が問題、動かなければ前半が問題です。これを繰り返すことで原因箇所を素早く特定できます。&lt;/p&gt;
&lt;p&gt;ネストが深い式の場合は内側から外側に向かって確認します。まず一番内側の関数だけをラベルに書いて確認し、正しい値が返ってきたら一段外側の関数を加えて確認する、という順番です。&lt;/p&gt;
&lt;h2 id=&quot;iferror関数で実行時エラーをキャッチする&quot;&gt;IfError関数で実行時エラーをキャッチする&lt;/h2&gt;
&lt;h3 id=&quot;iferrorの基本的な使い方&quot;&gt;IfErrorの基本的な使い方&lt;/h3&gt;
&lt;p&gt;式の書き方に問題はないのに実行したときだけエラーが起きる場合は、IfError関数でエラーの内容をキャッチして画面に表示します。IfError関数は第1引数の式がエラーになったとき、第2引数の値または処理を実行します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// Patch操作のエラーをキャッチして画面に表示する&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;IfError&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Patch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        SP_Tasks,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;        Defaults&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(SP_Tasks),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        {Title: TextInput_Title.Text, Status: &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;未着手&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    ),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Notify&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;エラー: &quot;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; FirstError.Message, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;NotificationType.Error&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;FirstError.Message には発生したエラーの詳細メッセージが入ります。Notify関数と組み合わせると、アプリ上部にバナーとしてエラー内容が表示されます。&lt;/p&gt;
&lt;p&gt;エラーメッセージに列名が含まれている場合は、その列の型や値が正しいかを確認します。Patchで列が見つからない系のエラーが出たときは、SharePointの列の内部名（英語名）とPowerAppsで指定している列名が一致しているかを見直してください。&lt;/p&gt;
&lt;h3 id=&quot;onstartやonvisibleの初期化エラーを確認する&quot;&gt;OnStartやOnVisibleの初期化エラーを確認する&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-onstart-onvisible/&quot;&gt;OnStartとOnVisibleの使い分け&lt;/a&gt;の記事でも触れていますが、OnStartやOnVisibleに書いた処理でエラーが起きると、変数が初期化されないまま画面が表示されます。そのため、変数が空のままという症状として現れることがあります。&lt;/p&gt;
&lt;p&gt;OnStartやOnVisibleの処理をIfErrorでラップしておくと、初期化時のエラーをNotifyで表示できます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// OnVisibleの処理全体をIfErrorでラップする&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;IfError&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    ClearCollect&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(colUsers, SP_Users);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Set&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(varCurrentUser, &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;LookUp&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(colUsers, Email &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; User&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;().Email)),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Notify&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;初期化エラー: &quot;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; FirstError.Message, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;NotificationType.Error&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;デバッグ用ラベルの後片付けルール&quot;&gt;デバッグ用ラベルの後片付けルール&lt;/h2&gt;
&lt;p&gt;デバッグに使ったラベルを放置しておくと、アプリが重くなる原因になります。確認が終わったらすぐに片付ける習慣をつけてください。&lt;/p&gt;
&lt;p&gt;削除するのが一番すっきりしますが、後でまた使うかもしれない場合はVisibleプロパティをfalseにして非表示にしておく方法もあります。ただし、非表示のラベルでも数式は評価されるため、パフォーマンスへの影響がゼロではありません。長期間放置するなら削除することをおすすめします。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;後片付け方法&lt;/th&gt;
&lt;th&gt;メリット&lt;/th&gt;
&lt;th&gt;デメリット&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;削除する&lt;/td&gt;
&lt;td&gt;式が評価されなくなる。アプリが軽い&lt;/td&gt;
&lt;td&gt;また使いたいときに書き直しが必要&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Visible: false&lt;/td&gt;
&lt;td&gt;式を残しておける。すぐ確認再開できる&lt;/td&gt;
&lt;td&gt;式は評価され続けるため微妙に重くなる&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;別画面に移動&lt;/td&gt;
&lt;td&gt;デバッグ専用画面として集約できる&lt;/td&gt;
&lt;td&gt;管理が複雑になる&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;私は開発中は Visible: false で残しておき、公開前にまとめて削除するやり方をとっています。公開直前に一度ツリービューを上から確認して、デバッグ用のラベルが残っていないかチェックする癖をつけると安心です。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;ラベルデバッグは地味ですが、Power Appsで最も頼りになる確認手段です。ラベル1つで変数の状態、ギャラリーの件数、式の途中の値をすべて確認できます。&lt;/p&gt;
&lt;p&gt;デバッグが速くなると、開発のリズムが変わります。エラーで詰まる時間が減る分、機能を作る時間が増える。市民開発を続けていく上で、デバッグの習慣は早めに身につけておくと後々かなり楽になります。&lt;/p&gt;</content:encoded></item><item><title>Power Apps 委任（Delegation）完全ガイド｜仕組み・非委任関数・回避策・データソース比較</title><link>https://shiminkaihatsu.com/powerapps-delegation-guide/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-delegation-guide/</guid><description>Power Apps 委任（Delegation）完全ガイド｜仕組み・非委任関数・回避策・データソース比較</description><pubDate>Thu, 02 Apr 2026 16:50:25 GMT</pubDate><content:encoded>&lt;p&gt;委任を知らずにアプリを作ることは、ユーザーに見えないバグを仕込むことと同じです。Power Appsの委任（Delegation）は、すべてのアプリ開発者が最初に理解しておくべき仕組みです。&lt;/p&gt;
&lt;h2 id=&quot;委任を無視したアプリが危険な理由&quot;&gt;委任を無視したアプリが危険な理由&lt;/h2&gt;
&lt;p&gt;委任の警告（黄色い三角マーク・青い下線）はPower Appsの編集画面にしか表示されません。アプリを使うユーザーの画面には何も出ません。検索しても結果が少ない、一覧に出ないデータがある、選択肢に新しいカテゴリが出てこない。こうした症状がユーザー側で静かに起き続けます。&lt;/p&gt;
&lt;p&gt;社内の承認フローや日報管理など、意思決定に使われるアプリで委任問題を放置すると、見えていないデータに基づいて判断を下すことになります。作った本人は気づかないまま、ユーザーだけが不完全な情報を見続ける状況は、無責任なアプリと言わざるを得ません。私が社内でアプリ開発を教えるとき、委任の話を最初にする理由はここにあります。&lt;/p&gt;
&lt;h2 id=&quot;委任とは何か&quot;&gt;委任とは何か&lt;/h2&gt;
&lt;p&gt;委任とは、Power Appsがデータの処理をデータソース側に丸投げすることです。丸投げできる＝委任できる、丸投げできない＝委任問題が発生する、というのが基本の構図です。&lt;/p&gt;
&lt;p&gt;Filter関数はSharePointに仕事を投げられます。SharePointサーバーが絞り込みを実行して結果を返すので、10万件のリストでも正しく動きます。一方、Search関数はSharePointが処理を断ります。先頭500件だけブラウザに送られ、ブラウザ上のJavaScriptで検索が走ります。残りのデータは最初から存在しない扱いです。&lt;/p&gt;
&lt;p&gt;Power Appsが何もしない＝良いこと、というのが委任の核心です。直感に反しますが、この考え方を掴むと設計の判断が大きく変わります。委任の仕組みと、データが消える具体的な症状については&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-delegation-missing-data/&quot;&gt;委任とデータの欠落を解説した入門記事&lt;/a&gt;で詳しく扱っています。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-delegation-guide01.Z6Pb6qsv_Z1AzFjB.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;委任問題が引き起こす3つの症状&quot;&gt;委任問題が引き起こす3つの症状&lt;/h2&gt;
&lt;h3 id=&quot;ギャラリーの件数不足&quot;&gt;ギャラリーの件数不足&lt;/h3&gt;
&lt;p&gt;ギャラリーはデフォルトで先頭100件しか読み込みません。Search関数を使った検索では、先頭500件の中からしか結果を返しません。リストが成長するほど、新しいデータが検索対象から外れます。数年問題なく動いていたアプリが、ある時期から最新の申請を表示しなくなる、というのが最もよくある症状です。&lt;/p&gt;
&lt;h3 id=&quot;searchとdistinctの無警告バグ&quot;&gt;SearchとDistinctの無警告バグ&lt;/h3&gt;
&lt;p&gt;Search関数は委任警告が表示されますが、Distinctは警告が出ません。Distinct(リスト, 列名) でドロップダウンの選択肢を生成していると、先頭500件にしか存在しない値しかリストアップされません。新しいカテゴリを追加しても選択肢に出てこない、という問題が警告なしで進行します。&lt;/p&gt;
&lt;h3 id=&quot;collectionに逃げても解消しない&quot;&gt;Collectionに逃げても解消しない&lt;/h3&gt;
&lt;p&gt;ClearCollectでSharePointのデータをコレクションに入れれば委任問題が解消する、という誤解が広まっています。ClearCollect自体が委任の対象なので、先頭500件しかコレクションに入りません。委任警告が消えることで解決したと勘違いしやすい、最も危険なパターンです。&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-collection/&quot;&gt;コレクションの使い方と委任の関係&lt;/a&gt;も参照してください。&lt;/p&gt;
&lt;h2 id=&quot;主な回避策の概観&quot;&gt;主な回避策の概観&lt;/h2&gt;
&lt;p&gt;委任問題への対処は大きく3つです。それぞれの詳細は&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-delegation-mastering/&quot;&gt;委任の回避策を深掘りした記事&lt;/a&gt;にまとめています。&lt;/p&gt;
&lt;h3 id=&quot;startswithを使う&quot;&gt;StartsWithを使う&lt;/h3&gt;
&lt;p&gt;Search関数の代わりに、Filter内でStartsWith(列名, 検索文字) を使う方法です。SharePointで委任可能な前方一致検索になります。名前の先頭文字で絞り込む要件であれば、これで十分です。&lt;/p&gt;
&lt;h3 id=&quot;filterとsearchをネストする&quot;&gt;FilterとSearchをネストする&lt;/h3&gt;
&lt;p&gt;委任できるFilterで先にレコード数を500件以内に絞り込んでから、その結果にSearchをかける方法です。完全な解決策ではありませんが、ドロップダウン選択後にフリーワード検索するような場面では現実的な選択肢です。&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-filter-search-lookup/&quot;&gt;FilterとSearchの使い分け基礎&lt;/a&gt;も参考になります。&lt;/p&gt;
&lt;h3 id=&quot;データソースを移行する&quot;&gt;データソースを移行する&lt;/h3&gt;
&lt;p&gt;DataverseやSQL ServerはSearch関数も委任できます。リストが1万件を超える見込みがある、意思決定に使われる重要なアプリ、SearchやDistinctを避けられない要件がある。このいずれかに当てはまるなら、データソースの移行が根本的な解決策になります。委任対策はアプリのパフォーマンス改善とも直結するので、&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-performance/&quot;&gt;Power Appsのパフォーマンス改善記事&lt;/a&gt;も合わせて読むと判断の材料が増えます。&lt;/p&gt;
&lt;h2 id=&quot;データソース別の委任力マップ&quot;&gt;データソース別の委任力マップ&lt;/h2&gt;
&lt;p&gt;どのデータソースが何を委任できるかを整理します。移行を検討するときの参考にしてください。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;機能&lt;/th&gt;
&lt;th&gt;SharePoint&lt;/th&gt;
&lt;th&gt;Dataverse&lt;/th&gt;
&lt;th&gt;SQL&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Filter&lt;/td&gt;
&lt;td&gt;◎委任可&lt;/td&gt;
&lt;td&gt;◎委任可&lt;/td&gt;
&lt;td&gt;◎委任可&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Search&lt;/td&gt;
&lt;td&gt;✗委任不可&lt;/td&gt;
&lt;td&gt;◎委任可&lt;/td&gt;
&lt;td&gt;◎委任可&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Distinct&lt;/td&gt;
&lt;td&gt;✗委任不可（無警告）&lt;/td&gt;
&lt;td&gt;要確認&lt;/td&gt;
&lt;td&gt;要確認&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;StartsWith&lt;/td&gt;
&lt;td&gt;◎委任可&lt;/td&gt;
&lt;td&gt;◎委任可&lt;/td&gt;
&lt;td&gt;◎委任可&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;ユーザーフィルターへの橋渡し&quot;&gt;ユーザーフィルターへの橋渡し&lt;/h2&gt;
&lt;p&gt;委任を正しく理解した上で次に必要になるのが、ログインユーザーのデータだけ表示するフィルターです。自分の申請だけ表示する、自分宛の承認依頼だけ表示するといった要件は、ほぼすべてのビジネスアプリで発生します。&lt;/p&gt;
&lt;p&gt;SharePointではCreated By.Emailで組み、DataverseではAzure AD Object IDで合わせるのが基本です。実装の全パターンは&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-filter-by-user/&quot;&gt;ユーザーフィルターの実装ガイド&lt;/a&gt;にまとめています。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-delegation-guide02.fdi7V3mb_tKxaS.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;このクラスターの読み方&quot;&gt;このクラスターの読み方&lt;/h2&gt;
&lt;p&gt;委任を初めて知る方はまず入門記事から読み始めることをすすめます。症状の確認と仕組みの理解が先にあると、回避策の話が腹落ちしやすくなります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;委任の仕組みとCollectionの罠を知りたい → &lt;a href=&quot;https://shiminkaihatsu.com/powerapps-delegation-missing-data/&quot;&gt;Power Apps でデータが足りない原因は委任にある&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;回避策の選び方・データソース移行の判断基準を知りたい → &lt;a href=&quot;https://shiminkaihatsu.com/powerapps-delegation-mastering/&quot;&gt;Power Apps 委任 完全理解ガイド&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;ログインユーザーのデータだけ表示したい → &lt;a href=&quot;https://shiminkaihatsu.com/powerapps-filter-by-user/&quot;&gt;Power Apps でユーザーフィルターを実装する&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;委任警告の表示の意味が分からない → &lt;a href=&quot;https://shiminkaihatsu.com/powerapps-delegation-warning/&quot;&gt;委任の警告とは？意味と対処法&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;委任はPower Appsにおける設計の根幹です。知っていると知らないとでは、アプリの信頼性に大きな差が出ます。症状を知り、原因を理解し、要件に合わせて回避策を選ぶ。この流れを身につけておくことが、ユーザーに使ってもらえるアプリを作る上で欠かせません。&lt;/p&gt;
&lt;p&gt;Power Apps全体の開発フローについては&lt;a href=&quot;https://shiminkaihatsu.com/app-development-map/&quot;&gt;Power Apps開発の全体マップ&lt;/a&gt;も参照してください。市民開発とはこういう地道な積み重ねだと、個人的には思っています。&lt;/p&gt;</content:encoded></item><item><title>Power Apps 委任 完全理解ガイド｜回避策・Distinctの罠・データソース比較・テスト手法</title><link>https://shiminkaihatsu.com/powerapps-delegation-mastering/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-delegation-mastering/</guid><description>Power Apps 委任 完全理解ガイド｜回避策・Distinctの罠・データソース比較・テスト手法</description><pubDate>Thu, 02 Apr 2026 16:50:26 GMT</pubDate><content:encoded>&lt;p&gt;委任問題を知っているだけでは足りません。どの回避策を選ぶか、そしてデータソースをどのタイミングで移行するか、その判断基準を持っているかどうかが、アプリの品質を左右します。&lt;/p&gt;
&lt;h2 id=&quot;大きなリストはpower-appsで使えない-は誤解&quot;&gt;大きなリストはPower Appsで使えない は誤解&lt;/h2&gt;
&lt;p&gt;10,000件のSharePointリストがあるとき、Power Appsでは使えないと思っている方がいます。これは半分正解、半分間違いです。委任問題は関数の問題であって、リストのサイズの問題ではありません。&lt;/p&gt;
&lt;p&gt;Filterのように委任できる関数を使えば、10,000件のリストでも問題なく動きます。ギャラリーをスクロールし続ければ全件にアクセスすることも原理上は可能です。問題が起きるのは、Search関数やDistinctのように委任できない関数を使ったときだけです。大きなリストが悪いのではなく、非委任関数と大きなリストの組み合わせが問題だということを最初に押さえておきましょう。&lt;/p&gt;
&lt;h2 id=&quot;委任の定義を再確認する&quot;&gt;委任の定義を再確認する&lt;/h2&gt;
&lt;p&gt;委任とは、Power Appsがデータの絞り込みや処理をデータソース側に任せることです。先頭500件をブラウザに送り、ブラウザ側のJavaScriptで検索処理が行われます。&lt;/p&gt;
&lt;p&gt;仕組みの詳細については&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-delegation-missing-data/&quot;&gt;委任の基礎とCollectionの罠をまとめた記事&lt;/a&gt;で解説しています。この記事では症状の説明は最小限にとどめ、どう対処するかに絞って話を進めます。&lt;/p&gt;
&lt;h2 id=&quot;500件の意味するもの&quot;&gt;500件の意味するもの&lt;/h2&gt;
&lt;p&gt;非委任クエリの上限は500件（デフォルト値）です。ただしこれは、条件に一致する先頭500件という意味ではありません。リスト全体の先頭500レコードのうち、条件に一致するもの、という意味です。この違いは重要です。&lt;/p&gt;
&lt;p&gt;SharePointのリストはレコードが追加された順に並んでいます。新しいレコードはIDが大きく、末尾に積み上がっていきます。リストが育つほど、最近登録されたデータは先頭500件から遠ざかります。Search関数で検索しても最新の申請が見つからない、という症状は、この構造から必然的に生まれます。リストを長期運用するほど深刻化する、構造的な問題です。&lt;/p&gt;
&lt;h2 id=&quot;警告が出ない非委任の罠&quot;&gt;警告が出ない非委任の罠&lt;/h2&gt;
&lt;h3 id=&quot;distinctは青線が出ないまま非委任で動く&quot;&gt;Distinctは青線が出ないまま非委任で動く&lt;/h3&gt;
&lt;p&gt;Power Appsの編集画面では、委任できない関数に青線や黄色い三角マークが付きます。ただし、Distinctはこの警告が出ないまま非委任で動作します。警告がないから大丈夫、と思っていると痛い目を見ます。&lt;/p&gt;
&lt;p&gt;Distinctでドロップダウンの選択肢を生成しているとき、実際には先頭500件にしか存在しない種類しかリストアップされません。新しいカテゴリを追加しても選択肢に出てこない、という問題が静かに進行します。CollectionもClearCollect段階で委任を受けるため、同様の問題があります。青線が消えた＝解決した、は間違いです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-delegation-mastering01.DLvz-0_m_1T1e9Q.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;回避策-startswithを使う&quot;&gt;回避策① StartsWithを使う&lt;/h2&gt;
&lt;p&gt;Search関数の代わりに、Filter内でStartsWith関数を使う方法です。StartsWith(列名, “検索文字”) はSharePointで委任可能なため、10,000件のリストでも正しく絞り込めます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// Search関数（委任不可）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Search&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(Mega, TextInput1.Text, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;AnimalName&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// StartsWithに置き換え（委任可）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(Mega, &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;StartsWith&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(AnimalName, TextInput1.Text))&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;StartsWithは前方一致です。入力した文字列で始まるレコードを返します。検索ワードが先頭から一致していればよい要件、たとえば名前の先頭文字で絞り込む場合はこれで十分です。&lt;/p&gt;
&lt;p&gt;一方で、文字列の途中に含まれるものも検索したい場合にはStartsWith単体では対応できません。たとえば田中太郎を太郎で検索してヒットさせたいケースは、StartsWithでは拾えません。この場合は回避策②を使います。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-delegation-mastering02.Cbn-ZvFf_Z1RPjGS.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;回避策-filterとsearchをネストする&quot;&gt;回避策② FilterとSearchをネストする&lt;/h2&gt;
&lt;p&gt;Filter（委任可）で先にレコード数を大幅に絞り込んでから、その結果に対してSearch（委任不可）を重ねる方法です。FilterがSharePointに仕事を投げてレコード数を減らすことで、Searchが処理する対象を500件以内に収めることを狙います。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// FilterとSearchのネスト&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Search&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(Mega, AnimalColor &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; Dropdown1.Selected.Value),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    TextInput1.Text,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;    &quot;AnimalName&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;たとえばFilterで絞り込んだ後のレコードが400件以内であれば、そこにSearch関数をかけても全件対象にできます。ただしFilter後のレコード数が500件を超える場合は、Search側でまた漏れが出る可能性があります。&lt;/p&gt;
&lt;p&gt;この回避策は完全な解決策ではありませんが、Filter単体では物足りない場面、たとえばドロップダウンで絞り込んだ結果をさらにフリーワード検索したい場合に現実的な選択肢になります。Filterネストのより詳細な実装パターンについては&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-gallery-filter-advanced/&quot;&gt;ギャラリーの複合フィルター解説記事&lt;/a&gt;も参考にしてください。&lt;/p&gt;
&lt;h2 id=&quot;回避策の使い分け基準&quot;&gt;回避策の使い分け基準&lt;/h2&gt;
&lt;p&gt;どちらの回避策を使うかは、要件によって決まります。以下の表を判断の基準にしてください。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;要件&lt;/th&gt;
&lt;th&gt;推奨回避策&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;名前の先頭文字・コードの前方一致検索&lt;/td&gt;
&lt;td&gt;① StartsWith&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;複数列にまたがるフリーワード検索&lt;/td&gt;
&lt;td&gt;② Filter＋Searchネスト&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;どちらも使えない（部分一致・大量データ）&lt;/td&gt;
&lt;td&gt;データソース移行を検討&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;前方一致で十分な要件であれば①、複数列をまとめて検索したいなら②、というシンプルな判断フローです。②で対応しきれない場合はデータソース自体を変えることを考える必要があります。&lt;/p&gt;
&lt;h2 id=&quot;データソース移行の判断基準&quot;&gt;データソース移行の判断基準&lt;/h2&gt;
&lt;p&gt;DataverseやSQL ServerはSearch関数も委任できます。SharePointで委任問題に悩んでいるなら、データソースの移行が根本的な解決策になります。ただしDataverseはライセンスコストが別途かかるため、費用対効果のトレードオフが必要です。&lt;/p&gt;
&lt;p&gt;移行を検討するタイミングの目安として、私はいくつかの条件を持っています。リストが継続的に成長して1万件を超える見込みがある。SearchやDistinctを使わざるを得ない要件が複数ある。アプリが意思決定に使われる重要な業務に組み込まれている、このいずれかに当てはまるなら、移行コストを払う価値があります。反対に、使用者が少なく件数も増えない運用なら、SharePointのまま回避策で対応する判断もあります。データソース別の委任対応状況は以下の表にまとめています。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;機能&lt;/th&gt;
&lt;th&gt;SharePoint&lt;/th&gt;
&lt;th&gt;Dataverse&lt;/th&gt;
&lt;th&gt;SQL&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Filter&lt;/td&gt;
&lt;td&gt;◎委任可&lt;/td&gt;
&lt;td&gt;◎委任可&lt;/td&gt;
&lt;td&gt;◎委任可&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Search&lt;/td&gt;
&lt;td&gt;✗委任不可&lt;/td&gt;
&lt;td&gt;◎委任可&lt;/td&gt;
&lt;td&gt;◎委任可&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Distinct&lt;/td&gt;
&lt;td&gt;✗委任不可&lt;/td&gt;
&lt;td&gt;要確認&lt;/td&gt;
&lt;td&gt;要確認&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;StartsWith&lt;/td&gt;
&lt;td&gt;◎委任可&lt;/td&gt;
&lt;td&gt;◎委任可&lt;/td&gt;
&lt;td&gt;◎委任可&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;pro-tip本番投入前の委任チェックリスト&quot;&gt;Pro Tip｜本番投入前の委任チェックリスト&lt;/h2&gt;
&lt;p&gt;アプリをリリースする前に、以下の項目を必ず確認するようにしています。委任限界値を1にするテスト手法については&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-delegation-missing-data/&quot;&gt;委任の基礎記事&lt;/a&gt;で紹介しているので、そちらを参照してください。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;確認箇所&lt;/th&gt;
&lt;th&gt;チェック内容&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;ギャラリー&lt;/td&gt;
&lt;td&gt;Filter条件は委任可能な関数だけで構成されているか&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ドロップダウン&lt;/td&gt;
&lt;td&gt;選択肢の生成にDistinctを使っていないか（使っている場合は件数が少ないか）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;検索ボックス&lt;/td&gt;
&lt;td&gt;SearchをStartsWith or Filterネストに置き換えられているか&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;コレクション&lt;/td&gt;
&lt;td&gt;ClearCollectのデータソースが500件を超えないか&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;委任の警告はメーカー画面にしか出ません。ユーザーは何も知らないまま不完全なデータを見続けます。回避策を選んだ根拠と、その限界をドキュメントに残しておくことが、責任ある開発者の習慣だと思っています。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;委任の回避策は、要件と現実のデータ量に合わせて選ぶものです。StartsWithで済むなら①、複合条件が必要なら②、それでも足りないならデータソースの移行を検討する、というフローで考えると整理しやすくなります。&lt;/p&gt;
&lt;p&gt;委任を正しく理解して設計に反映させることが、長く使えるアプリを作る上で欠かせません。地道な確認の積み重ねが、ユーザーへの信頼につながります。楽しみながら開発を続けていきましょう。&lt;/p&gt;</content:encoded></item><item><title>Power Apps でデータが足りない原因は委任にある｜仕組み・非委任関数・Collectionの罠・テスト法</title><link>https://shiminkaihatsu.com/powerapps-delegation-missing-data/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-delegation-missing-data/</guid><description>Power Apps でデータが足りない原因は委任にある｜仕組み・非委任関数・Collectionの罠・テスト法</description><pubDate>Thu, 02 Apr 2026 16:50:25 GMT</pubDate><content:encoded>&lt;p&gt;Power Appsのギャラリーに表示されるデータが少ない。その原因の大半は委任（Delegation）の問題です。Search関数で検索しても結果が足りない、Collectionに入れても解決しない、その理由をこの記事で整理します。&lt;/p&gt;
&lt;h2 id=&quot;ギャラリーに100件しか表示されない謎&quot;&gt;ギャラリーに100件しか表示されない謎&lt;/h2&gt;
&lt;h3 id=&quot;デフォルトで先頭100件しか読み込まない&quot;&gt;デフォルトで先頭100件しか読み込まない&lt;/h3&gt;
&lt;p&gt;Power Appsのギャラリーは、デフォルトで先頭100件しかデータを読み込みません。10,002件のSharePointリストにギャラリーをつないでも、最初に表示されるのは100件です。これはPower Appsの仕様であり、バグではありません。&lt;/p&gt;
&lt;p&gt;実際の件数を確認したいときは、データソース全体のカウントとギャラリーが取得している件数を別々に出してみると差がよくわかります。なぜ100件しかないんだろうと首をかしげる前に、まずこの仕様を把握しておくことが大切です。&lt;/p&gt;
&lt;h3 id=&quot;スクロールで増えるが全件ではない&quot;&gt;スクロールで増えるが全件ではない&lt;/h3&gt;
&lt;p&gt;ギャラリーを下にスクロールし続けると、次の100件、さらに次の100件と追加で読み込まれます。無限スクロールのような挙動です。ただし、スクロールで全件取得できるかというとそうではありません。ブラウザが保持できるメモリには上限があり、実測で8,000件前後からクラッシュリスクが高まります。スクロールで増える＝全件取得できている、と考えないようにしましょう。&lt;/p&gt;
&lt;h2 id=&quot;委任クエリとは何か&quot;&gt;委任クエリとは何か&lt;/h2&gt;
&lt;p&gt;委任とは、Power Appsがデータの処理をデータソース側（SharePointやDataverseなど）に丸投げすることです。丸投げできる＝委任できる、というのが基本の考え方です。&lt;/p&gt;
&lt;h3 id=&quot;filter関数はsharepointに仕事を投げる&quot;&gt;Filter関数はSharePointに仕事を投げる&lt;/h3&gt;
&lt;p&gt;たとえば Filter(Mega, AnimalColor = “Red”) という式を書くと、SharePointサーバーが AnimalColor が Red のレコードを絞り込んで、最初の100件をPower Appsに返します。Power Apps側は何も計算していません。この状態が委任できている状態です。&lt;/p&gt;
&lt;p&gt;Power Appsが何もしない＝良いこと、というのは直感に反しますが、これが委任の核心です。サーバーが絞り込んでくれるので、10万件のリストでも先頭100件として正しい結果が返ってきます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-delegation-missing-data01.DoVZyfRF_Zm0B3M.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;非委任クエリの正体&quot;&gt;非委任クエリの正体&lt;/h2&gt;
&lt;h3 id=&quot;search関数はsharepointで委任できない&quot;&gt;Search関数はSharePointで委任できない&lt;/h3&gt;
&lt;p&gt;Search関数はSharePointで委任できません。Search関数を使うと、SharePointは先頭500件をまとめてブラウザに送り、ブラウザ上のJavaScriptが検索処理を実行します。残り9,500件はそもそもPower Appsの手元に届いていないので、検索対象にすら含まれません。&lt;/p&gt;
&lt;p&gt;10,000件のリストでSearchを使った場合、実態は先頭500件の中から探しているだけです。リストが育つほど、新しいレコード（IDが大きく末尾に並ぶもの）が検索に引っかからなくなります。個人的には、SharePointとSearchの組み合わせは使わない方針で設計するようにしています。&lt;/p&gt;
&lt;h3 id=&quot;ユーザーには委任警告が一切見えない&quot;&gt;ユーザーには委任警告が一切見えない&lt;/h3&gt;
&lt;p&gt;Power Appsの編集画面では、委任できていない関数の下に黄色い三角マークや青い下線が表示されます。しかしこの警告はメーカー（アプリを作る側）にしか見えません。アプリを使うユーザーの画面には何も表示されません。&lt;/p&gt;
&lt;p&gt;ユーザーからすると、検索しても結果が少ない、一覧に載っていないデータがある、といった状況が起きるだけです。アプリが壊れているのかと思うかもしれませんが、実際には委任問題が静かに動いています。これが委任を無視したアプリが無責任と言われる理由です。委任警告の表示の見方については&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-delegation-warning/&quot;&gt;委任警告の基礎記事&lt;/a&gt;も参考にしてみてください。&lt;/p&gt;
&lt;h3 id=&quot;よくある現場の症状&quot;&gt;よくある現場の症状&lt;/h3&gt;
&lt;p&gt;私が現場でよく見るのは、数年間問題なく運用していたのに、ある時期から最新の申請が一覧に出てこなくなる、というパターンです。レコード数が積み重なって委任の限界を超えたタイミングで、新しいデータが見えなくなります。長く使われているアプリほどこのリスクが高くなります。&lt;/p&gt;
&lt;p&gt;委任の上限が500件のうちはリストが育っていなければ表面上は問題ありません。ところがリストが成長した途端に症状が出始めます。アプリ作成時点では気づきにくいので、設計段階から委任を意識しておく必要があります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-delegation-missing-data02.D1wttE2u_Z1sHvhp.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;collectionに逃げても解決しない&quot;&gt;Collectionに逃げても解決しない&lt;/h2&gt;
&lt;h3 id=&quot;clearcollectも委任上限を受ける&quot;&gt;ClearCollectも委任上限を受ける&lt;/h3&gt;
&lt;p&gt;ClearCollect(colStuff, Mega) というように、SharePointのデータをコレクションに入れれば委任の問題が解消する、と思っている方が多いです。残念ながらこれは誤りです。ClearCollect自体が委任の対象であり、Megaから先頭500件（または設定した上限件数）しかコレクションに入りません。&lt;/p&gt;
&lt;p&gt;コレクションに入れると委任警告が消えることがあります。これはコレクションはローカルデータなので委任の概念がないためであり、問題が解決したわけではありません。警告が消えた＝解決した、という勘違いが最も危険です。コレクションの詳しい使い方については&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-collection/&quot;&gt;コレクション活用の基礎記事&lt;/a&gt;を参照してください。&lt;/p&gt;
&lt;h3 id=&quot;distinctも委任されないしかも無警告&quot;&gt;Distinctも委任されない（しかも無警告）&lt;/h3&gt;
&lt;p&gt;Distinct(Mega, AnimalType) はドロップダウンの選択肢を生成するときによく使います。ところがDistinctはSharePointで委任できません。しかも委任警告が表示されないまま、委任上限内のレコードからしか選択肢を生成しないという問題を抱えています。&lt;/p&gt;
&lt;p&gt;具体的に考えてみます。ネコ・サカナ・イヌ・シマウマ・ウシの5種類が入った10,000件のリストがあるとします。先頭500件にネコしか登録されていなかった場合、Distinct(Mega, AnimalType) の結果はネコだけになります。残りの4種類は存在していても選択肢に出てきません。新しいカテゴリを追加しても選択肢に反映されない、という問題が静かに起きているわけです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-delegation-missing-data03.C5wPVVQo_Z1VAECj.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;pro-tip委任限界値を1にしてテストする&quot;&gt;Pro Tip｜委任限界値を1にしてテストする&lt;/h2&gt;
&lt;p&gt;委任問題を手軽に確認する方法があります。Power Appsの設定から、データ行の制限（行数の上限）を500から1に変更するやり方です。この方法はこの記事だけで紹介するProTipとして、ぜひ習慣化してほしいです。&lt;/p&gt;
&lt;p&gt;設定 → 一般 → データ行の制限 と進み、値を1に変更します。この状態でアプリを実行すると、非委任クエリは必ず1件しか返さなくなります。大量のテストデータがなくても委任問題を可視化できる、確実な手段です。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Power Apps スタジオを開く&lt;/li&gt;
&lt;li&gt;設定 → 一般 → データ行の制限 を探す&lt;/li&gt;
&lt;li&gt;値を500から1に変更する&lt;/li&gt;
&lt;li&gt;アプリを実行して、ギャラリーやドロップダウンの件数を確認する&lt;/li&gt;
&lt;li&gt;テスト後は元の値（500）に戻す&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-delegation-missing-data04.Dnp5t3gZ_1NbY1C.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;897&quot;&gt;&lt;/p&gt;
&lt;p&gt;私はアプリを本番に出す前にこのテストを必ずやるようにしています。開発中は少量のデータしか入れていないことが多く、実運用で件数が増えてから問題が出るケースが後を絶ちません。1にして正しく動くかチェックするだけで、多くの委任バグを事前に潰せます。&lt;/p&gt;
&lt;h2 id=&quot;次のステップへ&quot;&gt;次のステップへ&lt;/h2&gt;
&lt;p&gt;ここまでで委任の仕組みと、よくある落とし穴を整理しました。では実際にどう対策するのか。StartsWithを使った回避策、FilterとSearchをネストするパターン、データソース移行の判断基準については&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-delegation-mastering/&quot;&gt;委任 完全理解ガイド&lt;/a&gt;で解説しています。また、ログインユーザーのデータだけ表示する実践的なフィルター実装は&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-filter-by-user/&quot;&gt;ユーザーフィルター実装の記事&lt;/a&gt;にまとめています。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;委任を理解していないアプリは、データが少ない・検索がおかしい・選択肢が出てこない、という症状を静かに起こします。しかもユーザーには何も伝わりません。アプリを作る側が責任を持って委任を把握しておくことが、使えるアプリを作る第一歩です。&lt;/p&gt;
&lt;p&gt;委任の問題は奥が深いですが、まず仕組みを理解するところから始めましょう。知っているだけで設計の判断が大きく変わります。市民開発とはこういう地道な積み重ねだと、個人的には思っています。&lt;/p&gt;</content:encoded></item><item><title>Power Appsの委任の警告とは？意味と対処法を初心者向けに解説</title><link>https://shiminkaihatsu.com/powerapps-delegation-warning/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-delegation-warning/</guid><description>Power Appsの委任の警告とは？意味と対処法を初心者向けに解説</description><pubDate>Wed, 11 Mar 2026 21:36:53 GMT</pubDate><content:encoded>&lt;p&gt;Power Appsでフィルターを使ったとき、数式バーに黄色い三角のマークが出た経験はありませんか。あれは委任の警告と呼ばれるもので、放置するとデータが正しく表示されない可能性があります。&lt;/p&gt;
&lt;h2 id=&quot;委任の警告とは何か&quot;&gt;委任の警告とは何か&lt;/h2&gt;
&lt;h3 id=&quot;黄色い三角マークの正体&quot;&gt;黄色い三角マークの正体&lt;/h3&gt;
&lt;p&gt;委任の警告は、Power Appsが「この処理をサーバー側に任せることができない」と教えてくれるサインです。簡単にいえば、フィルターや検索の処理がアプリ側（クライアント側）で実行されており、データの取得に上限が生じてしまう状態を意味します。&lt;/p&gt;
&lt;p&gt;Power Appsは基本的に、フィルターや並び替えの処理をデータソース（SharePointやDataverseなど）のサーバー側に委任して実行します。これが委任という仕組みです。委任できれば、データが何万件あっても条件に合うものだけをきちんと取得できます。ところが、データソースやPower Appsが対応していない処理の組み合わせでは、委任が成立しません。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-delegation-warning01.Dm12Ux08_Z1riaMU.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;670&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;500件の壁&quot;&gt;500件の壁&lt;/h3&gt;
&lt;p&gt;委任できない処理が発生すると、Power Appsはデータソースから最大500件（設定を変えれば最大2000件）しかデータを取得しません。その限られたデータの中で条件に合うものを絞り込むため、500件以降に存在するデータは見えなくなります。&lt;/p&gt;
&lt;p&gt;具体的なイメージをつかんでおきましょう。SharePointリストに1000件の受注データがあるとします。委任できないFilterを使うと、先頭500件の中から条件に合うものだけが画面に表示されます。残り500件は存在しなかったことになる。現場で使うアプリでこれが起きたら、正しい業務判断ができなくなります。&lt;/p&gt;
&lt;p&gt;私も最初は知らずにSearchを使っていて、勉強会で参加者から「なんか件数少なくないですか？」と言われて気づいたことがありました。黄色い三角は気になっていたものの、動いているから大丈夫だと思っていたんですよね。あの経験から、委任の警告は必ず潰す習慣がつきました。&lt;/p&gt;
&lt;h2 id=&quot;どの関数が委任できてどれが委任できないか&quot;&gt;どの関数が委任できて、どれが委任できないか&lt;/h2&gt;
&lt;h3 id=&quot;filterとsearchの委任可否&quot;&gt;FilterとSearchの委任可否&lt;/h3&gt;
&lt;p&gt;Filter関数は、条件の書き方によって委任可否が変わります。SharePointリストを使っている場合、等号や比較演算子（=、&amp;lt;、&amp;gt;）、StartsWith などは委任可能です。一方で、Mid、Left、Len、Trim、EndsWith など文字列の中間を操作する関数は委任できません。&lt;/p&gt;
&lt;p&gt;Search関数はあいまい検索ができて便利ですが、SharePointに対しては委任できません。Dataverseなら委任対応していますが、SharePointで全文検索したいときは工夫が必要です。データソースとFilterの組み合わせを以下にまとめます。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;関数・条件&lt;/th&gt;
&lt;th&gt;SharePoint&lt;/th&gt;
&lt;th&gt;Dataverse&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Filter（=、&amp;lt;、&amp;gt;）&lt;/td&gt;
&lt;td&gt;委任可能&lt;/td&gt;
&lt;td&gt;委任可能&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Filter（StartsWith）&lt;/td&gt;
&lt;td&gt;委任可能&lt;/td&gt;
&lt;td&gt;委任可能&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Filter（in 演算子）&lt;/td&gt;
&lt;td&gt;委任不可&lt;/td&gt;
&lt;td&gt;委任可能&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Filter（Mid、Left など文字列操作）&lt;/td&gt;
&lt;td&gt;委任不可&lt;/td&gt;
&lt;td&gt;委任不可&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Search&lt;/td&gt;
&lt;td&gt;委任不可&lt;/td&gt;
&lt;td&gt;委任可能&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sort（単一列）&lt;/td&gt;
&lt;td&gt;委任可能&lt;/td&gt;
&lt;td&gt;委任可能&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CountIf&lt;/td&gt;
&lt;td&gt;委任不可&lt;/td&gt;
&lt;td&gt;委任不可&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&quot;委任できないのはどんな処理か&quot;&gt;委任できないのはどんな処理か&lt;/h3&gt;
&lt;p&gt;委任が成立しない主なパターンは3つです。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;データソースが対応していない関数の組み合わせ（例：SharePointでのSearch、CountIf）&lt;/li&gt;
&lt;li&gt;列に対して計算や変換を行う式（例：Left(タイトル, 2) = “東京” のような書き方）&lt;/li&gt;
&lt;li&gt;コレクションに対するFilter（これはコレクション自体がローカルなので警告は出ますが件数制限の問題は起きません）&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;2番目のパターンはついやりがちです。たとえば、列の値の先頭2文字を切り取って比較したいとき、Left関数を使うとSharePointへの委任が成立しません。代わりにStartsWithを使えば委任できるので、前方一致の検索ではStartsWithに書き直す習慣をつけましょう。&lt;/p&gt;
&lt;h2 id=&quot;データソースによって委任の対応範囲が変わる&quot;&gt;データソースによって委任の対応範囲が変わる&lt;/h2&gt;
&lt;h3 id=&quot;dataversesharepointexcelの違い&quot;&gt;Dataverse、SharePoint、Excelの違い&lt;/h3&gt;
&lt;p&gt;委任の対応範囲はデータソースによって大きく異なります。最も対応が広いのはDataverseで、ほぼすべての関数で委任が成立します。大量データを扱う業務アプリならDataverseが第一候補です。ただし、Microsoft 365のライセンスだけでは使えず、Power Apps Premiumの有料ライセンスが必要になります。&lt;/p&gt;
&lt;p&gt;SharePointリストは委任の対応範囲がやや限定的ですが、Microsoft 365を持っていれば追加費用なく使えるので、現場では一番よく選ばれています。委任の制約を把握した上で設計すれば、業務改善の用途では十分に実用的です。&lt;a href=&quot;/splist_mslist/&quot;&gt;SharePointリストとMicrosoft Listsの違いについてはこちらの記事&lt;/a&gt;でも解説しています。&lt;/p&gt;
&lt;p&gt;ExcelをOneDriveやSharePointに置いてデータソースとして使う場合は注意が必要です。ExcelはFilterやSortを含むほとんどの処理で委任が成立しないため、どんな条件を書いても先頭500件（最大2000件）しか取得できません。データ量が少いならいいのですが、増えてくると途端に危うくなります。Excelをデータソースにするときの考え方は&lt;a href=&quot;/excel-datasource/&quot;&gt;こちらの記事&lt;/a&gt;も参考にしてみてください。&lt;/p&gt;
&lt;h3 id=&quot;上限件数を2000件まで拡張する方法&quot;&gt;上限件数を2000件まで拡張する方法&lt;/h3&gt;
&lt;p&gt;Power Appsの設定から、データ行の制限を最大2000件まで引き上げることができます。Power Appsスタジオのメニューから 設定 → 全般 を開き、データ行の制限の値を変更します。デフォルトは500件です。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-delegation-warning02.DtJ0AebO_vaoRz.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;843&quot;&gt;&lt;/p&gt;
&lt;p&gt;ただし、これは根本的な解決ではありません。2000件を超えるデータを扱う可能性があるなら、設計を見直す必要があります。上限を上げることで問題を先送りにするのではなく、委任できる書き方に変えることを先に検討してください。&lt;/p&gt;
&lt;h2 id=&quot;委任の警告が出たときの対処法&quot;&gt;委任の警告が出たときの対処法&lt;/h2&gt;
&lt;h3 id=&quot;委任できる書き方に変える&quot;&gt;委任できる書き方に変える&lt;/h3&gt;
&lt;p&gt;一番基本的な対処は、委任対応の書き方に変えることです。前方一致の検索をしたいなら、SearchではなくStartsWithを使います。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 委任不可（SharePointの場合）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(受注リスト, &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Search&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(受注リスト, テキスト入力1.Text, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;件名&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 委任可能（前方一致で代替）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(受注リスト, &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;StartsWith&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(件名, テキスト入力1.Text))&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;前方一致に限定するだけで委任が成立します。部分一致が必要な要件かどうかを一度立ち止まって確認してみると、実は前方一致で十分というケースも多いです。&lt;/p&gt;
&lt;h3 id=&quot;clearcollectでデータを取得してからfilterする&quot;&gt;ClearCollectでデータを取得してからFilterする&lt;/h3&gt;
&lt;p&gt;委任できない処理をどうしても使いたい場合、OnVisibleなどのタイミングでClearCollectを使い、データをコレクションに取り込んでから絞り込む方法があります。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 画面の OnVisible で全件取得（委任可能な条件で絞り込んでおく）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;ClearCollect&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(colJuchu, &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(受注リスト, 担当者 &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; User&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;().Email))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// ギャラリーの Items で部分一致検索（コレクションなので委任の問題なし）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(colJuchu, テキスト入力1.Text &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; 件名)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;コレクションはローカルに存在するデータなので、委任の制約を受けません。ただし、ClearCollectに取り込める件数も最大2000件までです。取り込むタイミングでSharePoint側で絞り込み（委任可能な条件で）、件数を絞ってからコレクションに入れるのがポイントです。&lt;/p&gt;
&lt;h3 id=&quot;データ設計を見直す&quot;&gt;データ設計を見直す&lt;/h3&gt;
&lt;p&gt;根本的には、2000件を超えるような設計をしないことが最善策です。データを年度や部署ごとにリストを分ける、古いデータをアーカイブリストに移す、といった方針をあらかじめ決めておくと安心です。&lt;/p&gt;
&lt;p&gt;私が社内で作った日報アプリを例にすると、1日20件の日報が毎営業日蓄積されます。月400件、年間4000〜5000件になるペースです。SharePointリストを使い続けると3年も経たないうちに2000件を超えます。そこで設計段階から、年度ごとにリストを分ける方針にしました。最初に計算しておくだけで後からの手戻りがかなり減ります。&lt;/p&gt;
&lt;p&gt;Power Appsの基本的な仕組みや設計の考え方については&lt;a href=&quot;/powerapps-basic/&quot;&gt;Power Appsとは？完全ガイド&lt;/a&gt;や&lt;a href=&quot;/powerappstips/&quot;&gt;Power Appsで使える実用テクニック&lt;/a&gt;も合わせて読んでみてください。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;委任の警告は、Power Appsが出してくれる親切なサインです。動いているからといって無視して作り続けると、本番稼働後にデータが正しく表示されないという事態になりかねません。&lt;/p&gt;
&lt;p&gt;まずは使っているデータソースと、どの関数が委任できるかを確認することから始めましょう。完璧に委任を通すのが難しいケースも正直あります。そういうときはClearCollectで逃げるか、データ設計を見直すか、割り切りが必要です。ただ、知っているのと知らないのでは大違いです。&lt;/p&gt;
&lt;p&gt;委任の制約を理解した上で設計を組み立てていく。これがPower Appsを使いこなすうえで避けては通れない第一歩だと思っています。地道な積み重ねですが、それが後から余計な手戻りを防いでくれます。&lt;/p&gt;</content:encoded></item><item><title>Power Apps で編集可能グリッドを作る｜コレクション×ギャラリーコントロールの基本設計</title><link>https://shiminkaihatsu.com/powerapps-editable-grid-basics/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-editable-grid-basics/</guid><description>Power Apps で編集可能グリッドを作る｜コレクション×ギャラリーコントロールの基本設計</description><pubDate>Sun, 29 Mar 2026 19:06:15 GMT</pubDate><content:encoded>&lt;p&gt;Power Apps でExcelのように行を直接編集できるUIを作りたいなら、コレクションとギャラリーを組み合わせた編集グリッドが最適解です。フォームを使わずにデータを画面内で即時編集できる、使い勝手のいいパターンです。&lt;/p&gt;
&lt;h2 id=&quot;編集グリッドとは何か&quot;&gt;編集グリッドとは何か&lt;/h2&gt;
&lt;p&gt;編集グリッドとは、ギャラリーの各行にテキスト入力・ドロップダウンなどの入力コントロールを配置して、Excelのような行編集UIを実現したものです。通常のギャラリーは読み取り専用のリスト表示ですが、編集グリッドは行ごとに値を直接変更できます。&lt;/p&gt;
&lt;p&gt;簡単にいえば、Excelのシートを Power Apps の画面上で再現するイメージです。業務の現場では、複数件のデータを一覧で確認しながら一括で修正したい場面がよくあります。フォームを1件ずつ開いて保存するよりも、表形式で直接編集できるほうが圧倒的に速いです。&lt;/p&gt;
&lt;p&gt;ただし Power Apps の編集グリッドはデータソースを直接編集するのではなく、一時的なコレクションを中間バッファとして使うのが鉄則です。その理由を含めて、設計の考え方から解説していきます。&lt;/p&gt;
&lt;h2 id=&quot;コレクションをベースにする理由&quot;&gt;コレクションをベースにする理由&lt;/h2&gt;
&lt;p&gt;編集グリッドにコレクションを使う理由は2つあります。パフォーマンスと操作の自由度です。&lt;/p&gt;
&lt;p&gt;SharePoint や Dataverse などのデータソースを直接ギャラリーの Items に渡して、各行を編集しようとすると、行を変更するたびにデータソースへのアクセスが発生します。行が多い場合や通信環境が悪い場合、操作のたびに待ち時間が生じます。コレクションを中間に挟むことで、編集中はローカルのメモリ上で操作が完結し、保存ボタンを押したときだけデータソースに書き込む設計になります。&lt;/p&gt;
&lt;p&gt;操作の自由度という意味では、コレクションを使うと行の追加・削除・並び替えをメモリ上で自由に行えます。未保存の状態でキャンセルしたいときも、コレクションを元のデータで上書きすれば簡単に戻せます。コレクションの基本的な使い方は&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-collection/&quot;&gt;Power Apps のコレクション活用入門&lt;/a&gt;で解説しているので、あわせて確認しておくと理解が深まります。&lt;/p&gt;
&lt;h2 id=&quot;clearcollect-でコレクションを初期化する&quot;&gt;ClearCollect でコレクションを初期化する&lt;/h2&gt;
&lt;p&gt;編集グリッドの起点は ClearCollect です。OnVisible や画面の読み込みタイミングで、データソースのデータをコレクションに読み込みます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;ClearCollect&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(colTasks, Tasks)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;これでデータソース Tasks の内容が colTasks というコレクションに複製されます。ギャラリーの Items には colTasks を設定します。&lt;/p&gt;
&lt;h3 id=&quot;列の型を定義するコツ&quot;&gt;列の型を定義するコツ&lt;/h3&gt;
&lt;p&gt;コレクションの列型は最初のレコードで決まります。ところが実データで ClearCollect すると、数値列が文字列になってしまったり、日付型が崩れるケースがあります。これを防ぐため、空のレコードを先に ClearCollect してから本データを Collect する方法があります。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;ClearCollect&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(colTasks,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;  {タスク名: &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, 担当者: &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, 優先度: &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, 完了: &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Clear&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(colTasks);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Collect&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(colTasks, Tasks)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;空のレコードで列型を定義してから Clear し、実データを Collect することで、型の不整合を防げます。これは地味ですが、後から数式エラーに悩まされないための重要な一手間です。私もこれを知る前に数値列の比較でエラーが出て、原因究明に時間をかけた経験があります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-editable-grid-basics01.CLlE4uaU_237rFW.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;ギャラリーに入力コントロールを配置する&quot;&gt;ギャラリーに入力コントロールを配置する&lt;/h2&gt;
&lt;p&gt;ギャラリーのテンプレートに TextInput・Dropdown・ラベルを配置して、編集グリッドを構成します。TextInput は編集可能な列、ラベルは読み取り専用で表示したい列に使います。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;ギャラリーを追加し、Items に colTasks を設定する&lt;/li&gt;
&lt;li&gt;テンプレート内に TextInput を追加する&lt;/li&gt;
&lt;li&gt;TextInput の Default プロパティに ThisItem.タスク名 を設定する&lt;/li&gt;
&lt;li&gt;必要に応じて Dropdown を追加し、Items に選択肢リストを設定する&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-editable-grid-basics02.pQ-hspaz_Z1Tolul.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;textinput-の-default-設定&quot;&gt;TextInput の Default 設定&lt;/h3&gt;
&lt;p&gt;TextInput の Default プロパティには ThisItem.列名 を設定します。これでギャラリーが表示されたとき、各行の現在の値がテキスト入力に自動的に入ります。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;ThisItem.タスク名&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;注意点として、Default は初期表示値を設定するだけで、ユーザーが入力した後は Default の値は反映されません。ギャラリーが再描画されたときに Default が適用されるため、コレクションを更新する前に TextInput のリセットが必要な場面があります。この挙動を最初から理解しておくと、保存ロジックの設計で迷いません。&lt;/p&gt;
&lt;h3 id=&quot;dropdown-の-items-と-selectedvalue&quot;&gt;Dropdown の Items と Selected.Value&lt;/h3&gt;
&lt;p&gt;ドロップダウンを使う列では、Items に選択肢のテーブルを渡します。たとえば優先度列に高・中・低の3択を出す場合はこうなります。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;高&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;中&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;低&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ドロップダウンの現在の選択値は Dropdown.Selected.Value で取得できます。後でコレクションにPatchするときに使うため、変数や直接の参照で値を渡せるよう設計しておきます。&lt;/p&gt;
&lt;p&gt;Dropdown の Default プロパティには ThisItem.優先度 を設定して、現在のコレクションの値がドロップダウンに選択済みの状態で表示されるようにします。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-editable-grid-basics03.DTopjZ-U_Z17DCer.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;displaymode-で非編集時の見た目を整える&quot;&gt;DisplayMode で非編集時の見た目を整える&lt;/h2&gt;
&lt;p&gt;編集グリッドをずっと編集モードにしておくと、誤操作のリスクがあります。たとえば通常は読み取り専用にしておき、編集ボタンを押したときだけ入力を受け付けるという設計がよく使われます。&lt;/p&gt;
&lt;p&gt;これを実現するには、TextInput の DisplayMode プロパティで制御します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(varEditMode, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;DisplayMode.Edit&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;DisplayMode.View&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;varEditMode が true のときだけ編集可能にする、という設計です。編集ボタンを押したときに UpdateContext({varEditMode: true}) で切り替えます。&lt;/p&gt;
&lt;p&gt;DisplayMode.View と DisplayMode.Disabled の違いも押さえておきましょう。View は読み取り専用でテキストとして表示されます。Disabled はコントロールがグレーアウトされた非活性の見た目になります。UX的には View のほうが自然に見えるので、通常は View を使うことをおすすめします。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;DisplayMode&lt;/th&gt;
&lt;th&gt;見た目&lt;/th&gt;
&lt;th&gt;用途&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Edit&lt;/td&gt;
&lt;td&gt;入力可能なテキストボックス&lt;/td&gt;
&lt;td&gt;編集中&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;View&lt;/td&gt;
&lt;td&gt;テキスト表示（枠なし）&lt;/td&gt;
&lt;td&gt;閲覧中（推奨）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Disabled&lt;/td&gt;
&lt;td&gt;グレーアウトのテキストボックス&lt;/td&gt;
&lt;td&gt;無効状態を明示したいとき&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-editable-grid-basics04.B6L9B9SX_1lxI7n.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;670&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;編集グリッドの設計は、大きくまとめると次の3ステップです。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;ClearCollect でデータをコレクションに読み込む（型定義→Clear→Collect）&lt;/li&gt;
&lt;li&gt;ギャラリーの Items にコレクションを設定し、TextInput・Dropdown の Default を ThisItem で設定する&lt;/li&gt;
&lt;li&gt;DisplayMode で編集モードと閲覧モードを切り替える&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;この基盤ができたら、次のステップは行ごとの保存・新規行の追加・削除・全件保存の実装です。データの書き込みと IsNew フラグの使い方については、&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-editable-grid-save/&quot;&gt;編集グリッドのデータ保存の記事&lt;/a&gt;で詳しく解説します。&lt;/p&gt;
&lt;p&gt;Excelライクな編集UIは現場でも要望が多い機能です。設計パターンを覚えると、他のアプリでもすぐ応用できます。地道に一つずつ実装して、業務改善の幅を広げていきましょう。&lt;/p&gt;
&lt;p&gt;ギャラリーの使い方を&lt;a href=&quot;/powerapps-gallery-complete/&quot;&gt;一覧でまとめた記事はこちら&lt;/a&gt;からご覧ください。&lt;/p&gt;</content:encoded></item><item><title>Power Apps 編集グリッドのデータ保存｜Patch・IsNew・削除・一括保存の実装パターン</title><link>https://shiminkaihatsu.com/powerapps-editable-grid-save/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-editable-grid-save/</guid><description>Power Apps 編集グリッドのデータ保存｜Patch・IsNew・削除・一括保存の実装パターン</description><pubDate>Sun, 29 Mar 2026 19:06:15 GMT</pubDate><content:encoded>&lt;p&gt;編集グリッドの見た目を作るだけなら前の記事で完成しますが、実際に使えるアプリにするには保存・削除・一括保存のロジックが必要です。Patch関数とコレクション操作を組み合わせた実装パターンを一通り解説します。&lt;/p&gt;
&lt;p&gt;コレクションを中間バッファとして使う設計の基礎は、&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-editable-grid-basics/&quot;&gt;編集グリッドの基本設計の記事&lt;/a&gt;で解説しています。この記事はその続きとして、データの書き込み操作に特化した内容です。&lt;/p&gt;
&lt;h2 id=&quot;行ごとの保存フロッピーアイコンpatch&quot;&gt;行ごとの保存：フロッピーアイコン＋Patch&lt;/h2&gt;
&lt;p&gt;編集グリッドでよく使われる行ごとの保存パターンは、ギャラリーテンプレート内にアイコン（フロッピーディスク）を置き、OnSelect に Patch を書くというものです。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Patch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(Tasks, ThisItem,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;  {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    タスク名: TextInput_タスク名.Text,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    優先度: Dropdown_優先度.Selected.Value,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    担当者: TextInput_担当者.Text&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Patch の第1引数はデータソース（Tasks）、第2引数は更新対象のレコード（ThisItem）、第3引数は更新するフィールドと値のレコードです。ThisItem を指定することで、クリックした行のデータだけを更新できます。&lt;/p&gt;
&lt;p&gt;Patch 関数の使い方の基本は&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-patch-function/&quot;&gt;Patch 関数の解説記事&lt;/a&gt;で詳しく触れているので、あわせて確認しておくとより理解が深まります。&lt;/p&gt;
&lt;h3 id=&quot;value-関数で数値型変換が必要な理由&quot;&gt;Value 関数で数値型変換が必要な理由&lt;/h3&gt;
&lt;p&gt;TextInput から取り出した値は常にテキスト型です。数値列に Patch しようとするとエラーになります。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Patch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(Tasks, ThisItem,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;  {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    タスク名: TextInput_タスク名.Text,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    工数: &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Value&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(TextInput_工数.Text)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Value(TextInput_工数.Text) のように Value 関数で数値に変換してから渡します。入力欄が空のとき Value 関数は Blank を返すため、空白のまま保存されます。空白を 0 として扱いたい場合は Coalesce(Value(TextInput_工数.Text), 0) とすると安全です。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-editable-grid-save01.CH-u1NBU_NxsJl.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;isnew-フラグの役割&quot;&gt;IsNew フラグの役割&lt;/h2&gt;
&lt;p&gt;編集グリッドで行を追加するとき、既存のレコードと新規で追加した行を区別する仕組みが必要です。そのために IsNew フラグをコレクションに持たせます。&lt;/p&gt;
&lt;p&gt;新規行を追加するボタンの OnSelect はこのようになります。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Collect&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(colTasks,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;  {タスク名: &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, 優先度: &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;中&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, 担当者: &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, 工数: &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, IsNew: &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;IsNew: true を持つ行が新規追加行です。既存データを読み込んだ行には IsNew: false または IsNew フィールド自体がないため、Patch するときに新規か更新かを判断できます。&lt;/p&gt;
&lt;p&gt;IsNew フラグを使った保存ロジックはこうなります。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(ThisItem.IsNew,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;  Patch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(Tasks, &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Defaults&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(Tasks),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    {タスク名: TextInput_タスク名.Text, 優先度: Dropdown_優先度.Selected.Value}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;  ),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;  Patch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(Tasks, ThisItem,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    {タスク名: TextInput_タスク名.Text, 優先度: Dropdown_優先度.Selected.Value}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;  )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;IsNew が true の場合は Defaults(Tasks) を使って新規レコードとして作成し、false の場合は ThisItem を指定して既存レコードを更新します。Defaults(Tasks) はデータソースのデフォルト値を持つ空のレコードを返します。これが新規作成のサインです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-editable-grid-save02.CjtrGgc4_Z1DD1Wm.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;削除ボタンの実装&quot;&gt;削除ボタンの実装&lt;/h2&gt;
&lt;p&gt;削除も IsNew フラグで分岐します。新規行（まだデータソースに存在しない行）はコレクションから削除するだけで済みますが、既存行はデータソースからも削除が必要です。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(ThisItem.IsNew,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;  Remove&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(colTasks, ThisItem),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;  RemoveIf&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(Tasks, ID &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; ThisItem.ID);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;  Remove&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(colTasks, ThisItem)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;IsNew が true なら Remove(colTasks, ThisItem) でコレクションから取り除くだけです。既存行は RemoveIf でデータソースから削除した後、コレクションからも Remove します。セミコロンで複数の処理をつなぐことで1つの OnSelect にまとめられます。&lt;/p&gt;
&lt;h3 id=&quot;削除確認ダイアログを入れる&quot;&gt;削除確認ダイアログを入れる&lt;/h3&gt;
&lt;p&gt;削除は元に戻せません。誤操作を防ぐために確認ダイアログを挟むのが安全です。コンテナのVisibleを変数で制御する方法が一般的です。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;削除ボタンの OnSelect：UpdateContext({varDeleteTarget: ThisItem, varShowDeleteDialog: true})&lt;/li&gt;
&lt;li&gt;確認ダイアログコンテナの Visible：varShowDeleteDialog&lt;/li&gt;
&lt;li&gt;はいボタンの OnSelect：上記の削除ロジック実行 → UpdateContext({varShowDeleteDialog: false})&lt;/li&gt;
&lt;li&gt;いいえボタンの OnSelect：UpdateContext({varShowDeleteDialog: false})&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-editable-grid-save03.D7PV6laW_Z1LYBmD.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;670&quot;&gt;&lt;/p&gt;
&lt;p&gt;varDeleteTarget には削除対象の行（ThisItem）を入れておき、はいボタンの削除処理で varDeleteTarget.ID を参照して RemoveIf することで、正確な行を削除できます。&lt;/p&gt;
&lt;h2 id=&quot;全件保存ボタンの実装&quot;&gt;全件保存ボタンの実装&lt;/h2&gt;
&lt;p&gt;行ごとの保存ではなく、まとめて一括保存したい場合は ForAll を使います。コレクション全体をループして、IsNew フラグに応じて新規作成か更新かを切り替えます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;ForAll&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;  Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(colTasks, タスク名 &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&amp;#x3C;&gt;&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot;&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;  If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(IsNew,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Patch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(Tasks, &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Defaults&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(Tasks),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;      {タスク名: タスク名, 優先度: 優先度, 担当者: 担当者, 工数: 工数}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    ),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Patch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(Tasks, &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;LookUp&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(Tasks, ID &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; ThisRecord.ID),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;      {タスク名: タスク名, 優先度: 優先度, 担当者: 担当者, 工数: 工数}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;  )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ForAll の第1引数には Filter(colTasks, タスク名 &amp;lt;&amp;gt; “”) を使って空白行を除外してから渡します。タスク名が空の行を保存対象から外すことで、新規行ボタンを押しただけでまだ何も入力していない行が誤って保存されるのを防げます。&lt;/p&gt;
&lt;p&gt;既存行の更新には LookUp(Tasks, ID = ThisRecord.ID) で正確なレコードを取得してから Patch します。ForAll の内部では ThisItem の代わりに ThisRecord を使う点に注意が必要です。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-editable-grid-save04.CQUk3br9_djIgi.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;670&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;保存後にコレクションを再取得する&quot;&gt;保存後にコレクションを再取得する&lt;/h3&gt;
&lt;p&gt;一括保存が完了したら、コレクションをデータソースから再取得してリフレッシュします。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;ForAll&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(colTasks, タスク名 &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&amp;#x3C;&gt;&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot;&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;), ...);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;ClearCollect&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(colTasks, Tasks)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ForAll の後に ClearCollect でコレクションを上書きすることで、IsNew フラグがリセットされ、保存済みのデータが最新の状態で表示されます。この一行を忘れると、保存後も IsNew: true の行が残ってしまい、再度保存すると重複レコードが作られるという事故につながります。&lt;/p&gt;
&lt;h2 id=&quot;まとめ編集グリッドの保存ロジック全体像&quot;&gt;まとめ：編集グリッドの保存ロジック全体像&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;操作&lt;/th&gt;
&lt;th&gt;実装&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;行ごと保存&lt;/td&gt;
&lt;td&gt;Patch(DataSource, ThisItem, {…}) with Value() for 数値&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;新規行追加&lt;/td&gt;
&lt;td&gt;Collect(colTasks, {IsNew: true, …})&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;新規行保存&lt;/td&gt;
&lt;td&gt;Patch(DataSource, Defaults(DataSource), {…})&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;削除（新規行）&lt;/td&gt;
&lt;td&gt;Remove(colTasks, ThisItem)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;削除（既存行）&lt;/td&gt;
&lt;td&gt;RemoveIf + Remove(colTasks, ThisItem)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;一括保存&lt;/td&gt;
&lt;td&gt;ForAll(Filter(…)) + IsNew で分岐&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;保存後リフレッシュ&lt;/td&gt;
&lt;td&gt;ClearCollect(colTasks, DataSource)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;編集グリッドは最初の設計さえ固まれば、後は同じパターンを繰り返すだけです。私も最初に実装したときは ForAll の中での ThisRecord の使い方に戸惑いましたが、一度動くものを作ると次からは迷わなくなります。コレクション操作の基礎については&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-collection/&quot;&gt;コレクション活用入門の記事&lt;/a&gt;もあわせて確認してみてください。地道に実装して、使いやすいグリッドUIを完成させましょう。&lt;/p&gt;
&lt;p&gt;ギャラリーの使い方を&lt;a href=&quot;/powerapps-gallery-complete/&quot;&gt;一覧でまとめた記事はこちら&lt;/a&gt;からご覧ください。&lt;/p&gt;</content:encoded></item><item><title>Power Apps 数式エラー解決の全体マップ｜式が赤い・動かないを自力で直す</title><link>https://shiminkaihatsu.com/powerapps-error-guide/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-error-guide/</guid><description>Power Apps 数式エラー解決の全体マップ｜式が赤い・動かないを自力で直す</description><pubDate>Sat, 18 Apr 2026 08:45:34 GMT</pubDate><content:encoded>&lt;p&gt;Power Appsで数式が赤くなったとき、何から手をつければいいか分からなくなることがあります。エラーメッセージを読んでも意味がつかめない、直したつもりなのに別のところが壊れる。そういう経験は市民開発者なら誰でも通る道です。&lt;/p&gt;
&lt;p&gt;この記事では、数式エラーが起きたときの診断の順番とよくある原因のパターンを整理します。全体の流れを頭に入れておくと、どんなエラーが出てもあわてずに対処できるようになります。&lt;/p&gt;
&lt;h2 id=&quot;power-appsのエラーはなぜ読みにくいのか&quot;&gt;Power Appsのエラーはなぜ読みにくいのか&lt;/h2&gt;
&lt;p&gt;Power Appsのエラーメッセージは、初見だと意味がつかみにくいものが多いです。英語で表示されることもありますし、日本語でもこの関数は引数を2つ受け取りますのように、具体的に何が問題なのかすぐには分からない言い方をします。&lt;/p&gt;
&lt;p&gt;私が最初にPower Appsを触り始めた頃、数式バーが赤くなるたびに検索エンジンを頼っていました。ところが、検索で出てくる解説は前提知識が必要なものが多く、自分の状況と合致しているかどうかも判断しにくい。結果的に、エラーを直すたびに30分以上かかることもありました。&lt;/p&gt;
&lt;p&gt;そこで大切なのは、エラーの種類を素早く見分ける力です。Power Appsで起きるエラーは大きく3つに分類できます。構文エラー・型エラー・実行時エラーです。それぞれ原因が違うので、診断の方向性も変わります。&lt;/p&gt;
&lt;h2 id=&quot;数式エラーの3分類と見分け方&quot;&gt;数式エラーの3分類と見分け方&lt;/h2&gt;
&lt;h3 id=&quot;構文エラー式の書き方が間違っている&quot;&gt;構文エラー：式の書き方が間違っている&lt;/h3&gt;
&lt;p&gt;もっとも多いのが構文エラーです。括弧の閉じ忘れ、カンマの位置ミス、全角スペースや全角カンマが混入している、などが典型的な原因です。&lt;/p&gt;
&lt;p&gt;構文エラーは数式バーが赤くなる段階、つまりアプリを実行する前の時点で検出されます。エラー表示の下に波線が引かれている箇所が原因です。数式バーのカーソルをそこに合わせると、ツールチップでメッセージが表示されます。&lt;/p&gt;
&lt;p&gt;確認ポイントは以下の通りです。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;括弧の開き・閉じの数が合っているか（Visual Studioなどのエディタと違い、Power Appsは対応する括弧をハイライトしてくれません）&lt;/li&gt;
&lt;li&gt;引数の区切りがセミコロン（;）かカンマ（,）か（地域設定によって変わる）&lt;/li&gt;
&lt;li&gt;文字列のダブルクォートが正しく閉じているか&lt;/li&gt;
&lt;li&gt;コピペしたコードに全角文字が混じっていないか&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;特に全角文字の混入は見た目で気づきにくく、私も何度か引っかかりました。コピペで式を作ったときに起きやすいので、手で書き直すと解決することがあります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-error-guide-v202.sV4fj0Mx_Nuh89.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;型エラーデータの種類が合っていない&quot;&gt;型エラー：データの種類が合っていない&lt;/h3&gt;
&lt;p&gt;型エラーは、関数が期待するデータの種類（型）と、実際に渡している値の型が食い違っているときに起きます。例えば、テキスト型の列に数値を直接渡そうとした場合や、日付型の列に文字列を入れようとした場合です。&lt;/p&gt;
&lt;p&gt;よくある組み合わせミスを表にまとめます。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;やりがちなミス&lt;/th&gt;
&lt;th&gt;原因&lt;/th&gt;
&lt;th&gt;対処&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;数値列に &amp;amp; でテキスト結合しようとした&lt;/td&gt;
&lt;td&gt;&amp;amp; 演算子はテキスト型同士が必要&lt;/td&gt;
&lt;td&gt;Text() 関数で数値をテキストに変換&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;日付列に DateValue() を使わずに文字列を入れた&lt;/td&gt;
&lt;td&gt;文字列と日付型は別物&lt;/td&gt;
&lt;td&gt;DateValue(“2024/01/01”) で変換&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Patch で選択肢列に文字列を渡した&lt;/td&gt;
&lt;td&gt;選択肢列は {Value:“…”} の形式が必要&lt;/td&gt;
&lt;td&gt;{Value: “選択肢名”} に直す&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Filter の条件式に論理型でない値を書いた&lt;/td&gt;
&lt;td&gt;Filter の条件は true/false でなければならない&lt;/td&gt;
&lt;td&gt;= や &amp;lt;&amp;gt; で比較式にする&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;型変換が必要な場面では、Text()・Value()・DateValue()・DateTimeValue() の4つを覚えておけばほとんど対応できます。&lt;/p&gt;
&lt;h3 id=&quot;実行時エラー動かしてみて初めて出るエラー&quot;&gt;実行時エラー：動かしてみて初めて出るエラー&lt;/h3&gt;
&lt;p&gt;実行時エラーは、数式バーの段階では問題がないのに、アプリを動かしたときに起きるエラーです。データソースが見つからない、権限がない、レコードが存在しないといった、実際の処理を動かさないと分からない問題が原因です。&lt;/p&gt;
&lt;p&gt;実行時エラーが出たときは、アプリ上部にエラーバナーが表示されます。バナーをタップするか、モニター（Monitor）ツールを開くと詳細が確認できます。&lt;/p&gt;
&lt;p&gt;実行時エラーの主な原因は3つです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;SharePointリストやDataverseへのアクセス権限がない&lt;/li&gt;
&lt;li&gt;Patch関数で存在しない列名を指定している&lt;/li&gt;
&lt;li&gt;委任警告のある関数がデータ上限（2000件）を超えた部分で動作している&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;委任の問題は特に見落としやすいです。委任警告が出ていても動作するので直さなくていいと思いがちですが、データが増えた段階で突然おかしな動きをし始めます。&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-delegation-warning/&quot;&gt;委任の警告と対処法&lt;/a&gt;については別記事で詳しく解説しています。&lt;/p&gt;
&lt;h2 id=&quot;エラーを自力で特定する5ステップ&quot;&gt;エラーを自力で特定する5ステップ&lt;/h2&gt;
&lt;p&gt;エラーの種類が分かったら、次は原因を特定します。私が実際に使っている診断の手順を順番に紹介します。&lt;/p&gt;
&lt;h3 id=&quot;ステップ1エラーが出ているプロパティを確認する&quot;&gt;ステップ1：エラーが出ているプロパティを確認する&lt;/h3&gt;
&lt;p&gt;Power Appsでは、コントロールのプロパティごとに数式を書きます。どのプロパティでエラーが出ているかを最初に特定することが大切です。&lt;/p&gt;
&lt;p&gt;ツリービューでコントロールを選択し、プロパティドロップダウンを切り替えながら赤くなっているプロパティを探します。エラーアイコンが付いているプロパティが原因です。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;ツリービューで問題のコントロールをクリック&lt;/li&gt;
&lt;li&gt;画面上部のプロパティドロップダウンを確認&lt;/li&gt;
&lt;li&gt;赤いエラーマークが付いているプロパティを選択&lt;/li&gt;
&lt;li&gt;数式バーでエラーの内容を確認&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-error-guide-v203.B2OTQ9Le_Z12TmXp.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;ステップ2式を最小構成まで削る&quot;&gt;ステップ2：式を最小構成まで削る&lt;/h3&gt;
&lt;p&gt;エラーが出ている数式が複雑な場合は、式を分解して最小構成に削ることが有効です。&lt;/p&gt;
&lt;p&gt;例えばFilter関数にネストした条件が複数ある場合、まず条件を1つだけにして動くか確認します。動くなら条件を1つずつ追加していくことで、どの条件が問題かを切り分けられます。&lt;/p&gt;
&lt;p&gt;体感的に、複雑な数式のエラーの7割はこの「削る→確認→追加」のサイクルで特定できます。デバッグの基本は動く状態から育てることです。&lt;/p&gt;
&lt;h3 id=&quot;ステップ3作成compose相当でデバッグ変数に値を出す&quot;&gt;ステップ3：作成（Compose相当）でデバッグ変数に値を出す&lt;/h3&gt;
&lt;p&gt;式の途中の値が何になっているか確認したいときは、ラベルコントロールを使ってデバッグ表示する方法が便利です。&lt;/p&gt;
&lt;p&gt;画面上の適当な場所にラベルを追加し、Textプロパティに確認したい式を直接書きます。例えば、変数の値が正しいかどうかを確認するには以下のように書きます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;変数の値: &quot;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; Text&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(varMyValue)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;アプリを実行して、このラベルに表示される値を見ることで、数式の途中の状態を確認できます。確認が終わったらラベルを非表示（Visible: false）にするか削除します。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-performance/&quot;&gt;パフォーマンス改善の記事&lt;/a&gt;でも触れましたが、デバッグ用のラベルを大量に残したままにするとアプリが重くなります。確認が済んだらすぐに片付けることをおすすめします。&lt;/p&gt;
&lt;h3 id=&quot;ステップ4iferror関数でエラーを可視化する&quot;&gt;ステップ4：IfError関数でエラーを可視化する&lt;/h3&gt;
&lt;p&gt;実行時エラーが出るタイミングと場所をもっと詳しく特定したいときは、IfError関数が役に立ちます。IfError関数は、第1引数の式がエラーになったとき、第2引数の代替値（またはアクション）を返す関数です。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;IfError&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Patch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(データソース名, &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Defaults&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(データソース名), {列名: 値}),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Notify&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;エラーが発生しました: &quot;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; FirstError.Message, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;NotificationType.Error&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;FirstError.Message はエラーの詳細メッセージを取得できるプロパティです。Notify関数と組み合わせることで、画面上にエラーの内容を表示できます。本番アプリでも活用できるパターンです。&lt;/p&gt;
&lt;h3 id=&quot;ステップ5monitorツールで実行ログを確認する&quot;&gt;ステップ5：Monitorツールで実行ログを確認する&lt;/h3&gt;
&lt;p&gt;Power Appsにはモニター（Monitor）という公式のデバッグツールがあります。アプリの実行中にどんなAPIリクエストが発生しているか、どのデータソースにアクセスしているか、エラーが何件出ているかをリアルタイムで確認できます。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Power Apps スタジオの上部メニューから詳細設定→モニターを開く&lt;/li&gt;
&lt;li&gt;アプリのモニターをクリックしてモニターを起動&lt;/li&gt;
&lt;li&gt;別ウィンドウでアプリが開くので、エラーが起きる操作をする&lt;/li&gt;
&lt;li&gt;モニター画面にログが積み上がるので、エラー行（赤くなっている）をクリック&lt;/li&gt;
&lt;li&gt;右ペインで詳細を確認する&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-error-guide-v204-1.DBXtlHPp_Z27zBBT.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;p&gt;私はSharePointへのPatch操作が失敗するとき、必ずMonitorを確認します。エラーメッセージに列名が書かれていることが多く、この列の型が合っていないという原因が一発で分かります。&lt;/p&gt;
&lt;h2 id=&quot;よく出るエラーと解決パターン一覧&quot;&gt;よく出るエラーと解決パターン一覧&lt;/h2&gt;
&lt;p&gt;エラーの種類とよくある原因・解決策をまとめます。同じパターンを何度も調べることになりがちなので、手元に置いておくと役立ちます。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;エラーメッセージ（抜粋）&lt;/th&gt;
&lt;th&gt;よくある原因&lt;/th&gt;
&lt;th&gt;解決策&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Expected {Table}&lt;/td&gt;
&lt;td&gt;テーブル型が必要な場所にレコードや値を渡している&lt;/td&gt;
&lt;td&gt;データソース名を直接渡す。または Table() 関数でラップする&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Invalid argument type&lt;/td&gt;
&lt;td&gt;引数の型が期待されるものと違う&lt;/td&gt;
&lt;td&gt;型変換関数（Text, Value, DateValue）を使う&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The function ‘X’ has some invalid arguments&lt;/td&gt;
&lt;td&gt;引数の数か型が違う&lt;/td&gt;
&lt;td&gt;公式ドキュメントで引数の仕様を確認する&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Delegation warning（委任の警告）&lt;/td&gt;
&lt;td&gt;Filter・Search・LookUpが委任非対応の書き方になっている&lt;/td&gt;
&lt;td&gt;委任対応の書き方に変更するか、Collectionに取り込んでから処理する&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Network error&lt;/td&gt;
&lt;td&gt;SharePoint・Dataverseへの接続が切れた、または権限不足&lt;/td&gt;
&lt;td&gt;ブラウザをリロードしてみる。権限設定を確認する&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Record not found&lt;/td&gt;
&lt;td&gt;Patch・Remove・LookUpで対象レコードが見つからない&lt;/td&gt;
&lt;td&gt;条件式が正しいか確認。レコードが実際に存在するか確認&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;エラーを減らすための設計習慣&quot;&gt;エラーを減らすための設計習慣&lt;/h2&gt;
&lt;p&gt;エラーを直す力と同じくらい大切なのが、エラーを出にくくする設計の習慣です。&lt;/p&gt;
&lt;h3 id=&quot;変数の型をあらかじめ決める&quot;&gt;変数の型をあらかじめ決める&lt;/h3&gt;
&lt;p&gt;Power Appsの変数は型宣言がなく、Set関数で代入した値の型になります。途中で別の型の値を代入してしまうと、型エラーが起きます。変数を使い始めるときに、テキストなら空文字列（“”）、数値なら 0、テーブルなら ClearCollect で初期化しておく習慣をつけると型エラーが減ります。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// OnStart や OnVisible で変数を初期化する&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Set&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(varSelectedId, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;);   &lt;/span&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 数値型として初期化&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Set&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(varMessage, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;);      &lt;/span&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// テキスト型として初期化&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;ClearCollect&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(colItems, []); &lt;/span&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// テーブル型として初期化&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;数式を短い単位に分割する&quot;&gt;数式を短い単位に分割する&lt;/h3&gt;
&lt;p&gt;1つのプロパティに複雑な式を詰め込むほど、エラーが出たときの特定が難しくなります。With関数を使って式を分割したり、&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-named-formulas/&quot;&gt;名前付き計算式（App.Formulas）&lt;/a&gt;を使ってアプリ全体で使い回せる形にしたりすることで、デバッグのしやすさが大きく変わります。&lt;/p&gt;
&lt;h3 id=&quot;コンテナで構造を整理する&quot;&gt;コンテナで構造を整理する&lt;/h3&gt;
&lt;p&gt;画面の構造が複雑になるほど、どのコントロールのどのプロパティにエラーがあるかを追うのが大変になります。&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-container-guide/&quot;&gt;コンテナを活用してコントロールの階層を整理する&lt;/a&gt;ことで、ツリービューが見やすくなりエラーの発生場所を素早く特定できるようになります。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;数式エラーの診断は、構文エラー・型エラー・実行時エラーの3種類に分けて考えると整理しやすくなります。エラーの種類が分かれば、確認すべき場所と使うべき道具も自然と決まります。&lt;/p&gt;
&lt;p&gt;最初は一つひとつ調べながらで構いません。同じパターンのエラーを何度か直しているうちに、数式バーが赤くなった瞬間にこれは括弧の問題だなと分かるようになってきます。市民開発のデバッグスキルはそうやって地道に積み上げていくものです。&lt;/p&gt;</content:encoded></item><item><title>Power Apps でよく出るエラーメッセージ10選｜英語の意味と直し方チェックリスト</title><link>https://shiminkaihatsu.com/powerapps-error-messages/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-error-messages/</guid><description>Power Apps でよく出るエラーメッセージ10選｜英語の意味と直し方チェックリスト</description><pubDate>Sat, 18 Apr 2026 08:45:34 GMT</pubDate><content:encoded>&lt;p&gt;Power Appsのエラーメッセージは英語で出ることが多く、初心者には意味がつかみにくいです。でも、よく出るパターンは決まっています。10種類のエラーを、意味 → 原因 → 直し方の3点セットで整理しました。&lt;/p&gt;
&lt;p&gt;この記事はエラー・デバッグクラスターのサテライト記事です。エラーの種類の全体像は&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-error-guide/&quot;&gt;Power Apps 数式エラー解決の全体マップ&lt;/a&gt;で整理していますので、あわせて読んでおくと理解が深まります。&lt;/p&gt;
&lt;h2 id=&quot;なぜ英語のエラーが出るのか&quot;&gt;なぜ英語のエラーが出るのか&lt;/h2&gt;
&lt;p&gt;Power Appsの数式エンジンはMicrosoft製ですが、内部的には英語ベースで動いています。日本語の表示に対応しているものもありますが、数式に関するエラーは英語のまま出ることが多いです。&lt;/p&gt;
&lt;p&gt;私が最初に見たエラーは `Expected Text value` というものでした。当時はテキスト値が期待されていますという機械翻訳すら思いつかず、ただ途方に暮れていた記憶があります。今はこういったメッセージを見た瞬間に「あ、型変換が必要だな」と判断できるようになりましたが、それはひたすらエラーを直す経験を積んだからです。&lt;/p&gt;
&lt;p&gt;エラーメッセージを読む力は、繰り返しで身につきます。まず代表的な10パターンを頭に入れておきましょう。&lt;/p&gt;
&lt;h2 id=&quot;エラーメッセージ10選&quot;&gt;エラーメッセージ10選&lt;/h2&gt;
&lt;h3 id=&quot;1-expected-text-value&quot;&gt;1. Expected Text value&lt;/h3&gt;
&lt;p&gt;テキスト型の値を要求しているのに、数値や日付などの別の型が渡されているときに出るエラーです。もっとも多く遭遇するエラーのひとつです。&lt;/p&gt;
&lt;p&gt;典型的な発生パターンは、ラベルのTextプロパティに数値を直接置こうとしたときです。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// NG：数値をそのまま渡している&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;Label1.Text &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 100&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// OK：Text関数でテキスト型に変換する&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;Label1.Text &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; Text&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;100&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;文字列連結（&amp;amp; 演算子）でも同じエラーが出ます。数値・日付をテキストと結合したい場合は、Text()で変換してから結合します。&lt;/p&gt;
&lt;h3 id=&quot;2-expected-number-value&quot;&gt;2. Expected Number value&lt;/h3&gt;
&lt;p&gt;数値型が必要な場所にテキストが渡されているときに出ます。SharePointのテキスト列に数値を入力しているケースで特によく遭遇します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// NG：テキスト列の値をそのまま計算に使う&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;TextInput_Amount.Text &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 1.1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// OK：Value関数で数値型に変換する&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Value&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(TextInput_Amount.Text) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 1.1&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;テキスト入力コントロールの値は常にテキスト型です。これを数値として扱いたい場合は必ずValue()を通してください。&lt;/p&gt;
&lt;h3 id=&quot;3-incompatible-types-for-comparison&quot;&gt;3. Incompatible types for comparison&lt;/h3&gt;
&lt;p&gt;比較演算子（=, &amp;lt;&amp;gt;, &amp;lt;, &amp;gt;）の左右で型が違うときに出るエラーです。例えばテキスト型の変数と数値を = で比較しようとしたときです。&lt;/p&gt;
&lt;p&gt;変数の型は Set 関数で最初に代入した値によって決まります。途中で別の型を代入してしまうとこのエラーが起きます。&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-variables/&quot;&gt;グローバル変数とコンテキスト変数の使い方&lt;/a&gt;の記事でも触れていますが、変数を使い始めるときに型を意識して初期値を設定しておくことが大切です。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// NG：テキスト型に初期化した変数を数値と比較&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Set&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(varCount, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;);   &lt;/span&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// テキスト型として初期化&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(varCount &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, ...)  &lt;/span&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 数値と比較 → エラー&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// OK：数値型として初期化する&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Set&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(varCount, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;);    &lt;/span&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 数値型として初期化&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(varCount &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, ...)  &lt;/span&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 問題なし&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-error-messages01.DA_ek5uO_Z3VpAn.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;4-the-formula-contains-an-error数式にエラーが含まれています&quot;&gt;4. The formula contains an error（数式にエラーが含まれています）&lt;/h3&gt;
&lt;p&gt;構文エラーの総称です。括弧の閉じ忘れ・カンマの位置ミス・スペルミスなど、式の書き方そのものが正しくないときに出ます。&lt;/p&gt;
&lt;p&gt;このエラーが出たときにまず確認すべき箇所を順番に挙げます。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;括弧の開き ( と閉じ ) の数が合っているか&lt;/li&gt;
&lt;li&gt;カンマ（,）またはセミコロン（;）の区切りが正しい場所にあるか（地域設定によって違う）&lt;/li&gt;
&lt;li&gt;関数名のスペルが正しいか（大文字・小文字は問わないが、全角文字が混入していないか）&lt;/li&gt;
&lt;li&gt;文字列のダブルクォート（“）が正しく閉じているか&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-error-messages02.Cnov7_3I_Zf9owM.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;p&gt;コピペで式を貼り付けた際に全角スペースが混入することがあります。見た目では分かりにくいので、エラー箇所のテキストを一度消して手打ちし直すと解決することがあります。&lt;/p&gt;
&lt;h3 id=&quot;5-this-formula-has-external-side-effects-and-cannot-be-used-here&quot;&gt;5. This formula has external side effects and cannot be used here&lt;/h3&gt;
&lt;p&gt;Set・Collect・Patch・Navigate・Notify などの副作用のある関数を、使えないプロパティに書いたときに出ます。&lt;/p&gt;
&lt;p&gt;ItemsプロパティやVisibleプロパティ、ラベルのTextプロパティなどは値を返す式しか書けません。こういった場所にSetやCollectを書くとこのエラーになります。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// NG：ラベルのTextプロパティにSet関数を書く&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;Label1.Text &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; Set&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(varName, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;テスト&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// OK：Set関数はボタンのOnSelectなどのアクションプロパティに書く&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;Button1.OnSelect &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; Set&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(varName, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;テスト&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;副作用のある関数はボタンのOnSelect・タイマーのOnTimerEnd・ギャラリーのOnSelectなどユーザー操作やイベントに反応するプロパティに書くのが基本です。&lt;/p&gt;
&lt;h3 id=&quot;6-name-isnt-valid--is-not-recognized&quot;&gt;6. Name isn’t valid / is not recognized&lt;/h3&gt;
&lt;p&gt;コントロール名・列名・変数名のスペルが間違っているか、参照先が存在しないときに出るエラーです。&lt;/p&gt;
&lt;p&gt;よくある原因はコントロールをコピーして名前が変わっているケースです。例えば `TextInput1` を参照していたのに、コピー後のコントロール名が `TextInput1_1` になっていてエラーが出る、というパターンです。ツリービューでコントロールの名前を確認してから式を書く習慣をつけると防げます。&lt;/p&gt;
&lt;h3 id=&quot;7-circular-reference循環参照&quot;&gt;7. Circular reference（循環参照）&lt;/h3&gt;
&lt;p&gt;式の中で自分自身を参照しているときに出るエラーです。例えばLabel1のTextプロパティにLabel1.Textを参照するような式を書いてしまった場合です。&lt;/p&gt;
&lt;p&gt;意図せず起きるケースとしては、コレクションの初期化でClearCollectとCollectを混在させてしまい、お互いを参照し合う状態になることがあります。発生したらまず参照のチェーンをさかのぼって、どこで自分自身を参照しているかを探します。&lt;/p&gt;
&lt;h3 id=&quot;8-cannot-connect-to-the-server--データソースへの接続エラー&quot;&gt;8. Cannot connect to the server / データソースへの接続エラー&lt;/h3&gt;
&lt;p&gt;SharePointリストやDataverseなどのデータソースへの接続が失敗したときに出ます。数式の問題ではなく、ネットワークや権限の問題であることが多いです。&lt;/p&gt;
&lt;p&gt;確認すべきポイントは3つです。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;ブラウザをリロードして再接続を試みる&lt;/li&gt;
&lt;li&gt;そのSharePointサイトやDataverse環境にアクセス権限があるかを確認する&lt;/li&gt;
&lt;li&gt;Monitorツールを起動してHTTPステータスコードを確認する（403は権限不足、404は場所が違う）&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;同僚のアカウントでは動くのに自分のアカウントだと接続エラーになる場合は、権限設定の問題です。SharePoint管理者に確認してください。&lt;/p&gt;
&lt;h3 id=&quot;9-delegation-warning委任の警告&quot;&gt;9. Delegation warning（委任の警告）&lt;/h3&gt;
&lt;p&gt;これはエラーではありません。黄色い波線で表示される警告です。Filterなどの関数がデータソース側で処理できず、アプリ側で処理する形になっているときに出ます。&lt;/p&gt;
&lt;p&gt;この警告が出ていても動作はします。ただし、データが500件（デフォルト）または2000件（設定変更後の上限）を超えていると、それ以降のデータが無視されます。データが増えてきた段階で突然動作がおかしくなる原因になります。&lt;/p&gt;
&lt;p&gt;委任の仕組みと対処法については&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-delegation-warning/&quot;&gt;委任の警告と対処法&lt;/a&gt;の記事で詳しく解説しています。件数が少ないうちに対処しておくことをおすすめします。&lt;/p&gt;
&lt;h3 id=&quot;10-ラベルに-object-object-または-table-が表示される&quot;&gt;10. ラベルに [object Object] または [Table] が表示される&lt;/h3&gt;
&lt;p&gt;これはエラーメッセージではなく、表示の問題です。ラベルのTextプロパティにテーブル型またはレコード型の値をそのまま渡しているときに起きます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// NG：テーブル型をそのまま表示しようとしている&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;Label1.Text &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(リスト名, 条件)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// OK：件数を表示するならCountRows&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;Label1.Text &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; Text&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;CountRows&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(リスト名, 条件)))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// OK：最初の1件の列を表示するならFirst&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;Label1.Text &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; First&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(リスト名, 条件)).タイトル列&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ギャラリーのSelectedプロパティもレコード型を返します。`Gallery1.Selected` をそのままラベルに渡すと同じ現象が起きるので、`.列名` で特定の列を指定してください。&lt;/p&gt;
&lt;h2 id=&quot;エラーを素早く特定するための3つの習慣&quot;&gt;エラーを素早く特定するための3つの習慣&lt;/h2&gt;
&lt;p&gt;エラーに慣れてきたら、診断の速度を上げるための習慣を身につけていきましょう。&lt;/p&gt;
&lt;h3 id=&quot;まず型を疑う&quot;&gt;まず型を疑う&lt;/h3&gt;
&lt;p&gt;私の経験では、Power Appsで出るエラーの半分以上は型に関するものです。Expected Text・Expected Number・Incompatible types のどれかに当てはまります。エラーが出たら最初に型が合っているかを確認する癖をつけると診断が早くなります。&lt;/p&gt;
&lt;h3 id=&quot;式を短く削ってから確認する&quot;&gt;式を短く削ってから確認する&lt;/h3&gt;
&lt;p&gt;複雑な式でエラーが出たときは、式を最小構成まで削って動かしてみます。動くなら削った部分を少しずつ戻しながら、どこでエラーが起きるかを二分探索する要領で特定します。体感的に、この削る → 確認 → 追加のサイクルが一番確実です。&lt;/p&gt;
&lt;h3 id=&quot;エラーメッセージをそのまま検索する&quot;&gt;エラーメッセージをそのまま検索する&lt;/h3&gt;
&lt;p&gt;`Expected Text value Power Apps` のように、英語のエラーメッセージをそのまま検索エンジンに入れると解決策が見つかりやすいです。日本語に訳してから検索するより、英語のまま検索するほうが情報が多く出てきます。MicrosoftのLearnサイトやコミュニティフォーラムも活用してください。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;よく出るエラーパターンを覚えておくだけで、エラーを見たときの焦りが大きく減ります。最初は一覧を手元に置いておいて、出るたびに照合してみてください。3ヶ月もすれば見た瞬間に原因が浮かぶようになります。&lt;/p&gt;
&lt;p&gt;デバッグのスキルはアプリ開発の土台です。エラーを直す経験の積み重ねが、読める式の幅を広げていきます。トライしてみましょう。&lt;/p&gt;</content:encoded></item><item><title>Power Apps でギャラリーの選択データをCSVに出力してメール送信する｜多選択・JSON変換・フロー実装の全手順</title><link>https://shiminkaihatsu.com/powerapps-export-csv/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-export-csv/</guid><description>Power Apps でギャラリーの選択データをCSVに出力してメール送信する｜多選択・JSON変換・フロー実装の全手順</description><pubDate>Sun, 05 Apr 2026 10:18:36 GMT</pubDate><content:encoded>&lt;p&gt;Power Apps でギャラリーに並んだデータを選択してCSVに出力するには、Power Apps側とPower Automate側の役割を分けて考えることが出発点です。この分担を理解しているかどうかで、実装のスムーズさが大きく変わります。&lt;/p&gt;
&lt;h2 id=&quot;2ステージ構成で全体を把握する&quot;&gt;2ステージ構成で全体を把握する&lt;/h2&gt;
&lt;p&gt;この実装は2つのステージに分かれます。Power Apps側がデータを選択・整形してフローを呼び出す段階と、Power Automate側がCSVファイルを生成して出力する段階です。アプリがデータを整形し、フローがファイルを作る。この切り分けが全体設計の核心です。&lt;/p&gt;
&lt;p&gt;Power Apps側の処理の流れはこうなります。ギャラリーのチェックボックスで複数レコードを選択し、選択済みレコードをFilter関数で取り出し、JSON関数でJSON文字列に変換してフローに渡します。Power Automate側では、受け取ったJSON文字列をParse JSON（JSONの解析）アクションで解析し、Create CSV table（CSVテーブルの作成）アクションでCSVを生成し、メール添付やSharePoint保存など任意の出力先に渡します。&lt;/p&gt;
&lt;p&gt;この記事ではPower Automateのアクション名を日本語と英語の両方で記載します。画面上の表示名で迷ったときの参照にしてください。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-export-csv01.4IfFBbo2_RFOMl.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;ギャラリーにチェックボックスを追加する&quot;&gt;ギャラリーにチェックボックスを追加する&lt;/h2&gt;
&lt;p&gt;ギャラリーに多選択UIを実装するには、テンプレートエリアにチェックボックスを追加するところから始めます。ギャラリー自体の基本操作は&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-gallery/&quot;&gt;ギャラリーコントロールの基礎記事&lt;/a&gt;を先に確認しておくとスムーズです。&lt;/p&gt;
&lt;p&gt;ギャラリーのテンプレートエリアを選択した状態でInsertメニューからCheckboxを追加します。チェックボックスのDefaultプロパティにはvarSelectAllという変数名を設定します。このvarSelectAllは後述する全選択・全解除のトグルと連動するために使います。現時点ではOnStartなどで初期値をfalseに設定しておけば問題ありません。&lt;/p&gt;
&lt;p&gt;選択済みレコードを取り出すには、ギャラリーのAllItemsプロパティをFilterで絞り込みます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 選択済みレコードを取り出す&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(Gallery1.AllItems, Checkbox1.Value)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;このFilterの結果が後続のすべての処理の起点になります。この1行で選択されているレコードだけを集めたテーブルが得られるので、合計計算・JSON変換・フロー呼び出しはすべてここから始まります。コレクション操作との組み合わせについては&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-collection/&quot;&gt;コレクション操作の基礎記事&lt;/a&gt;もあわせて読むと理解が深まります。&lt;/p&gt;
&lt;h2 id=&quot;全選択全解除トグルを実装する&quot;&gt;全選択・全解除トグルを実装する&lt;/h2&gt;
&lt;p&gt;全選択ボタンを作るとき、varSelectAllをtrueにセットするだけでは連続して押したときに効かなくなります。一度trueにした後に再び同じボタンを押しても変数の値が変わらないため、コントロールが再レンダリングされないからです。&lt;/p&gt;
&lt;p&gt;解決策は、falseとtrueを連続してセットすることです。UpdateContext({varSelectAll: false})を先に実行してからUpdateContext({varSelectAll: true})を実行すると、一瞬falseを経由することでコントロールの再描画が起きて全チェックがかかります。ボタンのTextプロパティにIfを使って現在の選択状態に応じてラベルを切り替えると、ユーザーへの案内としてもわかりやすくなります。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 全選択ボタンのOnSelectプロパティ&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;UpdateContext&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;({varSelectAll: &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;UpdateContext&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;({varSelectAll: &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;})&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// ボタンのTextプロパティ&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;IsEmpty&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(Gallery1.AllItems, Checkbox1.Value)), &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;Select All&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;Deselect All&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;選択数合計を動的に表示する&quot;&gt;選択数・合計を動的に表示する&lt;/h2&gt;
&lt;p&gt;選択したレコードの件数や数値列の合計をリアルタイムで表示すると、ユーザーが選択状態を確認しながら操作できます。請求明細や在庫リストなど数値を扱う業務では、出力前に合計金額を確認できる設計が現場から喜ばれます。私が社内で作った棚卸しアプリでも、この表示を入れてから「選んだ数がすぐわかる」という声をもらいました。こういう小さな配慮がUXを変えます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 選択件数&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;CountRows&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(Gallery1.AllItems, Checkbox1.Value))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 選択行の合計（金額列の例）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Sum&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(Gallery1.AllItems, Checkbox1.Value), 金額)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ツールバーコンテナやラベルのVisibleプロパティにNot(IsEmpty(Filter(…)))を設定すると、何も選んでいないときはこれらの表示が消えます。選択がない状態では不要な情報を出さない。その配慮が使いやすいアプリと使いにくいアプリの差になります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-export-csv02.LrFwffEO_IYBjR.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;json関数で選択データを文字列に変換する&quot;&gt;JSON関数で選択データを文字列に変換する&lt;/h2&gt;
&lt;h3 id=&quot;基本的な使い方&quot;&gt;基本的な使い方&lt;/h3&gt;
&lt;p&gt;Power AppsからPower Automateにデータを渡すには、テーブル型のデータをJSON文字列に変換する必要があります。JSON関数とShowColumns関数を組み合わせて、必要な列だけを取り出したJSON配列を生成します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 選択データをJSON文字列に変換する&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;JSON&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    ShowColumns&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;        Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(Gallery1.AllItems, Checkbox1.Value),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;        &quot;商品名&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;        &quot;数量&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;        &quot;金額&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    ),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    JSONFormat.IndentFour&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;JSONFormat.IndentFourは整形出力のオプションです。改行・インデントが入って人が読みやすい形式になります。開発中はこの設定のままにしておくといいです。本番運用に移行するときにJSONFormat.Compressに変えると通信量が減ります。&lt;/p&gt;
&lt;h3 id=&quot;シリアライズできない列のエラーに注意する&quot;&gt;シリアライズできない列のエラーに注意する&lt;/h3&gt;
&lt;p&gt;ShowColumnsに指定できる列には制限があります。Checkboxコントロール・Choice列（選択肢列）・ルックアップ列はそのままShowColumnsに入れるとエラーになります。Power Appsが内部的にレコードとして持っているデータをJSON文字列にシリアライズできないためです。&lt;/p&gt;
&lt;p&gt;Choice列は表示値をText()で取り出してAddColumnsで新しい列として追加してから、ShowColumnsでその列名を指定します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// Choice列をText()で取り出してからShowColumnsに渡す&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;JSON&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    ShowColumns&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;        AddColumns&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;            Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(Gallery1.AllItems, Checkbox1.Value),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;            &quot;カテゴリ名&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Text&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(カテゴリ.Value)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        ),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;        &quot;商品名&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;        &quot;カテゴリ名&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;        &quot;金額&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    ),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    JSONFormat.IndentFour&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ルックアップ列（例：Supplier.SupplierName）も同様です。AddColumnsで仕入先名、Supplier.SupplierNameのように取り出してからShowColumnsに渡します。ShowColumns内でネストプロパティを直接参照しようとするとエラーになるので、必ずAddColumnsを経由する手順を守ってください。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-export-csv03.YBYITCOZ_Z1xVazy.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;power-automate側の実装&quot;&gt;Power Automate側の実装&lt;/h2&gt;
&lt;h3 id=&quot;parse-jsonでスキーマを自動生成する&quot;&gt;Parse JSONでスキーマを自動生成する&lt;/h3&gt;
&lt;p&gt;Power Apps側から受け取ったJSON文字列をParse JSON（JSONの解析）アクションに渡します。スキーマを手動で書く必要はありません。Power Appsから実際に出力されたサンプルのJSON文字列をコピーして、Parse JSONのサンプルから生成機能に貼り付けるだけで自動生成されます。&lt;/p&gt;
&lt;p&gt;スキーマが正しく生成されると、後続のCreate CSV table（CSVテーブルの作成）やCreate HTML table（HTMLテーブルの作成）で各列のデータ型が正しく認識されます。スキーマなしでJSONを扱おうとすると動的コンテンツの列名が表示されないため、必ずParse JSONを先に入れてください。&lt;/p&gt;
&lt;h3 id=&quot;create-csv-tableで列名と書式を整える&quot;&gt;Create CSV tableで列名と書式を整える&lt;/h3&gt;
&lt;p&gt;Create CSV table（CSVテーブルの作成）アクションのColumnsをCustom設定にすると、列名を日本語に変更したり、日付や数値のフォーマットを指定できます。自動設定のままでは列名がシステム名そのままで出力されることが多く、受け取った人が内容を把握しにくいCSVになります。渡す相手が使いやすい形に整えるひと手間が、ツールの完成度を大きく上げます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 日付列のフォーマット変換（Create CSV table内のValue設定）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;formatDateTime(item()?[&apos;申請日&apos;], &apos;yyyy&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;MM&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;dd&apos;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 数値列の通貨フォーマット&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;formatNumber(item()?[&apos;金額&apos;], &apos;C&apos;, &apos;ja&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;JP&apos;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;htmlテーブルをメール本文に埋め込む&quot;&gt;HTMLテーブルをメール本文に埋め込む&lt;/h3&gt;
&lt;p&gt;Create HTML table（HTMLテーブルの作成）アクションを使うと、同じデータをHTML形式のテーブルとして生成できます。このOutputをSend an email（V2）（メールの送信（V2））のBodyに差し込むだけで、メール本文にデータが表形式で表示されます。CSVファイルを添付しつつメール本文にもプレビューを表示する構成が実用的です。受信者がCSVを開かなくても概要を確認できる設計は、特に承認フローや報告業務で喜ばれます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-export-csv04.BzmScReB_7YaRa.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;出力先は用途に合わせて選ぶ&quot;&gt;出力先は用途に合わせて選ぶ&lt;/h2&gt;
&lt;p&gt;CSVファイルが生成できたら、出力先は用途に応じて選択できます。メール添付はすぐに担当者に送れて手軽ですが、SharePoint保存にすると他のフローや外部システムからもファイルにアクセスできるようになります。OneDriveに保存して共有リンクをメールで送るパターンも、添付制限に引っかかるような大容量ファイルで有効です。ファイルさえ生成してしまえば、後は配置先を変えるだけでさまざまな用途に転用できます。&lt;/p&gt;
&lt;h2 id=&quot;solutionにまとめてチームにexportする&quot;&gt;SolutionにまとめてチームにExportする&lt;/h2&gt;
&lt;p&gt;アプリとフローが完成したら、Solutionとしてパッケージしてチームに展開できます。Power Appsの画面でSolutionsを開き、Add existing → App または Cloud flowでアプリ・フローを追加します。Advanced → Add required objectsを選ぶと、参照しているDataverseテーブルや接続情報など依存するコンポーネントも一緒にパッケージされます。このSolutionを他のメンバーの環境にImportすることで、アプリとフローをセットで配布できます。社内でツールを横展開するときや本番環境への移行時に使える実務的なテクニックです。&lt;/p&gt;
&lt;p&gt;Patchを使ったデータ保存の設計については&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-patch-new-record/&quot;&gt;Patch関数で新規レコードを保存する方法の記事&lt;/a&gt;もあわせて読むと、データ操作全体の理解が深まります。生成したCSVをさらにExcelに変換してSharePointリストに取り込む応用的な使い方は、&lt;a href=&quot;https://shiminkaihatsu.com/powerautomate-csv-to-excel/&quot;&gt;Power Automate × Excel ScriptsでCSVをXLSXに変換する記事&lt;/a&gt;で詳しく扱っています。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;Power Appsでのデータ選択からCSV出力までは、アプリ側の整形とフロー側のファイル生成という2ステージの組み合わせで成り立っています。構造が見えてしまえば、実装は一つひとつの手順の積み重ねです。特にJSON関数のエラーは初見で戸惑いますが、Choice列とルックアップ列の処理パターンを一度理解すれば以降は同じ手順を適用するだけです。私もはじめてこれを組んだときにシリアライズエラーで詰まりましたが、AddColumnsで取り出してからShowColumnsに渡すという手順を身につけてからは、同じ問題で止まることがなくなりました。&lt;/p&gt;
&lt;p&gt;市民開発とはこういう地道な積み重ねです。一度動くものを作ってしまえば、それが次の応用の土台になります。楽しみながら進めていきましょう。&lt;/p&gt;</content:encoded></item><item><title>Power Apps でユーザーフィルターを実装する｜SharePoint・Dataverse 別 全パターン解説</title><link>https://shiminkaihatsu.com/powerapps-filter-by-user/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-filter-by-user/</guid><description>Power Apps でユーザーフィルターを実装する｜SharePoint・Dataverse 別 全パターン解説</description><pubDate>Thu, 02 Apr 2026 16:50:25 GMT</pubDate><content:encoded>&lt;p&gt;Power Appsのビジネスアプリでは、ほぼ必ずユーザーフィルターが必要になります。自分の申請だけ表示したい、自分宛の承認依頼だけ出したい。こうした要件を実現するための実装パターンを、SharePointとDataverseそれぞれで整理します。&lt;/p&gt;
&lt;h2 id=&quot;ユーザーフィルターが必要な場面&quot;&gt;ユーザーフィルターが必要な場面&lt;/h2&gt;
&lt;p&gt;申請管理アプリを作るとき、一覧画面には全員分のデータが表示されます。ところが実際の運用では、自分が出した申請だけを見たい、自分が承認者になっている案件だけを確認したい、という要件がほぼ必ず出てきます。ロールに応じた表示の切り替えは、ビジネスアプリの基本中の基本です。&lt;/p&gt;
&lt;p&gt;実装自体はシンプルです。ただし、データソースによって使えるプロパティが違うため、同じ感覚で書くと動かないことがあります。まずSharePoint、次にDataverseの順で順番に整理します。&lt;/p&gt;
&lt;h2 id=&quot;フィルター式を書く前に列の型を目で確認する&quot;&gt;フィルター式を書く前に列の型を目で確認する&lt;/h2&gt;
&lt;p&gt;フィルター式を組み立てるときに最初にやるべきことがあります。左辺、つまりデータがどういう型で保存されているかを先に目で確認することです。これをやらずに式を書き始めると、型のミスマッチで動かないまま時間を使うことになります。&lt;/p&gt;
&lt;p&gt;確認手順はシンプルです。ギャラリーのItemsに対象のデータソースをそのまま設定して実行し、ラベルコントロールのTextプロパティに ThisItem.‘Created By’ を入れます。すると画面上に値が表示されます。さらに .Email まで掘ると、メールアドレスの文字列が出てきます。これで左辺がどんな値を持っているかが目視できます。&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-gallery/&quot;&gt;ギャラリーの基本操作&lt;/a&gt;が初めての方はそちらを先に確認しておくとスムーズです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-filter-by-user01.BWavZTY-_1Jszne.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;sharepointのユーザーフィルター&quot;&gt;SharePointのユーザーフィルター&lt;/h2&gt;
&lt;h3 id=&quot;created-by-のプロパティはどれを使うか&quot;&gt;Created By のプロパティはどれを使うか&lt;/h3&gt;
&lt;p&gt;SharePointの Created By 列は、展開するといくつかのプロパティを持っています。Email、Claims、DisplayName、Department などです。どれを使えばいいか悩むところですが、結論から言うとEmailの一択です。&lt;/p&gt;
&lt;p&gt;Claimsはi:0#.f|membership|&lt;a href=&quot;mailto:user@domain.com&quot;&gt;user@domain.com&lt;/a&gt;のような形式で値が入っています。組織の設定によって形式が変わることがあり、式の中で扱うのに向いていません。DisplayNameは表示名なので、同姓同名がいる組織では正しくフィルターできません。結果として、SharePointでユーザーフィルターを組むときはEmailに絞って考えるのが現実的です。&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-sharepoint-crud/&quot;&gt;SharePointのCRUD操作の基礎&lt;/a&gt;と合わせて読むと、列の扱いについての理解が深まります。&lt;/p&gt;
&lt;h3 id=&quot;filter式の完成形&quot;&gt;Filter式の完成形&lt;/h3&gt;
&lt;p&gt;User()関数は現在ログインしているユーザーの情報を返す関数です。持っているプロパティはEmail、FullName、EntraObjectId、Imageの4つです。SharePointのCreated ByにはEntraObjectIdが存在しないため、EmailとEmailで合わせることになります。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// SharePointのユーザーフィルター&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(Employees, &apos;Created By&apos;.Email &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; User&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;().Email)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;左辺の ‘Created By’.Email が SharePoint 側のメールアドレス、右辺の User().Email がログインユーザーのメールアドレスです。同じ型・同じ形式で比較しているので委任も問題ありません。Filter関数はSharePointに委任できるので、件数が多くても全件から正しく絞り込めます。委任の仕組みについては&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-delegation-missing-data/&quot;&gt;委任とデータの欠落について解説した記事&lt;/a&gt;を参照してください。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-filter-by-user02.By7bBt3v_Z1QBFy3.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;emailを使う場合の弱点&quot;&gt;Emailを使う場合の弱点&lt;/h3&gt;
&lt;p&gt;Emailを識別子として使う場合、一点だけ覚えておく必要があります。メールアドレスは変わることがあるということです。結婚による改姓、社名変更、M&amp;amp;Aによるドメイン移行など、組織の都合でアドレスが変わるケースは珍しくありません。&lt;/p&gt;
&lt;p&gt;アドレスが変わると、変更前に登録されたレコードの Created By.Email と、変更後のUser().Email が一致しなくなります。過去の申請が一覧から消える、という状況が起きます。利用者が少なく、組織変更もほとんどないチームのアプリなら許容範囲です。ただし長期運用を前提にした重要業務のアプリなら、後述するObject IDを使う設計を最初から採用した方がいいです。&lt;/p&gt;
&lt;h2 id=&quot;dataverseのユーザーフィルターはobject-idを使う&quot;&gt;DataverseのユーザーフィルターはObject IDを使う&lt;/h2&gt;
&lt;h3 id=&quot;created-byはusersテーブルへのルックアップ&quot;&gt;Created ByはUsersテーブルへのルックアップ&lt;/h3&gt;
&lt;p&gt;DataverseをデータソースにしたときのCreated Byは、SharePointとは構造が違います。DataverseのCreated Byは、Usersテーブルへのルックアップ列です。アプリにDataverseのテーブルを追加すると、Usersテーブルも自動的に追加されます。初めて見ると驚きますが、正常な動作です。Dataverseがリレーションを自動で解決している結果です。&lt;/p&gt;
&lt;h3 id=&quot;azure-ad-object-idで合わせる&quot;&gt;Azure AD Object IDで合わせる&lt;/h3&gt;
&lt;p&gt;Created Byを展開すると、Azure AD Object IDというフィールドが出てきます。これはEntra Object IDと同一の値です。Azure Active DirectoryがMicrosoft Entraに名称変更された関係で、古い名称が残っています。右辺にはUser().EntraObjectIdを使います。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// DataverseのユーザーフィルターはObject IDで合わせる&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(ChewyDoggyData, &apos;Created By&apos;.&apos;Azure AD Object ID&apos; &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; User&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;().EntraObjectId)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;GUIDと呼ばれる識別子の形式で値が入っています。GUIDについての詳細は&lt;a href=&quot;https://shiminkaihatsu.com/dataverse-guid/&quot;&gt;DataverseのGUIDとIDの違いを解説した記事&lt;/a&gt;にまとめています。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-filter-by-user03.9_Rsa_M7_ZFwoCi.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;object-idが最強な理由&quot;&gt;Object IDが最強な理由&lt;/h3&gt;
&lt;p&gt;Object IDはメールアドレスとは違い、改名しても、ドメインが変わっても、絶対に変わりません。Microsoft Entraが発行する一意のIDであり、ユーザーが組織に存在し続ける限り固定です。SharePointでEmailを使う場合と比べて、データの一貫性が段違いに高くなります。&lt;/p&gt;
&lt;p&gt;個人的にも、Dataverseを使う案件では必ずObject IDでフィルターを組むようにしています。Emailで組んで後から直す手間を考えれば、最初から設計を正しくしておく方が圧倒的に楽です。&lt;/p&gt;
&lt;h2 id=&quot;自前の列に承認者担当者を保存するときもobject-idで&quot;&gt;自前の列に承認者・担当者を保存するときもObject IDで&lt;/h2&gt;
&lt;p&gt;Created Byではなく、自前で作った列に担当者や承認者を保存するケースもよくあります。このとき、メールアドレスで保存している設計をよく見かけます。上で説明した通り、メールアドレスは変わる可能性があります。最初からEntra Object IDで保存しておくことをすすめます。&lt;/p&gt;
&lt;p&gt;フォーム送信時やPatch実行時に、User().EntraObjectIdを一緒に保存しておく実装です。保存の書き方については&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-patch-new-record/&quot;&gt;Patch関数で新規レコードを保存する方法&lt;/a&gt;を参考にしてください。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 申請フォーム送信時にObject IDも一緒に保存する例&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Patch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    申請テーブル,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Defaults&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(申請テーブル),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        Title: TextInput_title.Text,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        申請者ID: &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;User&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;().EntraObjectId,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        申請者名: &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;User&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;().FullName&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;こうしておけば、後からフィルターするときに Filter(申請テーブル, 申請者ID = User().EntraObjectId) で正確に絞り込めます。アドレス変更の影響を受けない設計が最初から完成します。&lt;/p&gt;
&lt;h2 id=&quot;パターンの考え方まとめ&quot;&gt;パターンの考え方まとめ&lt;/h2&gt;
&lt;p&gt;ユーザーフィルターを実装するときは、次の手順で考えると迷いません。まずギャラリーで列の値を目視確認して左辺を確定します。次に User() のどのプロパティと型が合うかを確認して右辺を決めます。あとはFilterで等号でつなぐだけです。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;データソース&lt;/th&gt;
&lt;th&gt;左辺&lt;/th&gt;
&lt;th&gt;右辺&lt;/th&gt;
&lt;th&gt;注意点&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;SharePoint&lt;/td&gt;
&lt;td&gt;‘Created By’.Email&lt;/td&gt;
&lt;td&gt;User().Email&lt;/td&gt;
&lt;td&gt;アドレス変更リスクあり&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dataverse&lt;/td&gt;
&lt;td&gt;‘Created By’.‘Azure AD Object ID’&lt;/td&gt;
&lt;td&gt;User().EntraObjectId&lt;/td&gt;
&lt;td&gt;変更に強く長期運用向き&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;自前列（任意）&lt;/td&gt;
&lt;td&gt;保存した列名&lt;/td&gt;
&lt;td&gt;User().EntraObjectId&lt;/td&gt;
&lt;td&gt;保存時からObject IDで設計する&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;ハードコード（特定のメールアドレスを直接式に書く）は絶対に避けましょう。ユーザーが変わるたびにアプリを修正することになります。User()関数を使うことで、誰がログインしても正しく動くアプリになります。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;SharePointならEmail、DataverseならObject ID、自前列でもObject IDが基本です。データソースによって使えるプロパティが違うので、最初に左辺の型を目視確認する習慣をつけておくことが大切です。&lt;/p&gt;
&lt;p&gt;ユーザーフィルターは地味ですが、使い勝手に直結する重要な実装です。設計段階から正しい方法で組んでおくと、後から修正する手間が省けます。楽しみながら、丁寧に作っていきましょう。&lt;/p&gt;</content:encoded></item><item><title>Power AppsのFilter・Search・LookUp関数。3つの違いと使い分けガイド</title><link>https://shiminkaihatsu.com/powerapps-filter-search-lookup/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-filter-search-lookup/</guid><description>Power AppsのFilter・Search・LookUp関数。3つの違いと使い分けガイド</description><pubDate>Sat, 14 Mar 2026 11:30:00 GMT</pubDate><content:encoded>&lt;p&gt;Power AppsのFilter・Search・LookUpは、どれもデータを絞り込む関数です。ただし返り値の型と得意な使い方が違うため、場面によって使い分ける必要があります。&lt;/p&gt;
&lt;h2 id=&quot;3つの関数の根本的な違い&quot;&gt;3つの関数の根本的な違い&lt;/h2&gt;
&lt;h3 id=&quot;返り値の型がそれぞれ違う&quot;&gt;返り値の型がそれぞれ違う&lt;/h3&gt;
&lt;p&gt;最も重要な違いは、何を返すかです。Filter と Search はどちらも条件に合う複数のレコードをテーブル（表）として返します。LookUp は条件に一致した最初の1件だけをレコードとして返します。&lt;/p&gt;
&lt;p&gt;この差が使い分けの基本になります。ギャラリーの Items に設定するなど複数件を一覧表示したい場合は Filter か Search を使います。1件の特定レコードの特定列の値を取り出したい場合は LookUp を使います。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;関数&lt;/th&gt;
&lt;th&gt;返り値&lt;/th&gt;
&lt;th&gt;件数&lt;/th&gt;
&lt;th&gt;主な使い道&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Filter&lt;/td&gt;
&lt;td&gt;テーブル（Table）&lt;/td&gt;
&lt;td&gt;0件以上&lt;/td&gt;
&lt;td&gt;ギャラリーの一覧表示・絞り込み&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Search&lt;/td&gt;
&lt;td&gt;テーブル（Table）&lt;/td&gt;
&lt;td&gt;0件以上&lt;/td&gt;
&lt;td&gt;テキスト検索ボックスとの連携&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LookUp&lt;/td&gt;
&lt;td&gt;レコード（Record）&lt;/td&gt;
&lt;td&gt;最大1件&lt;/td&gt;
&lt;td&gt;特定レコードの値を取得・Patchの対象指定&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;LookUp の返り値はテーブルではなくレコードなので、LookUp の結果をギャラリーの Items に設定しようとするとエラーになります。これは初心者がよくはまるポイントです。&lt;/p&gt;
&lt;h3 id=&quot;委任delegationの対応状況も違う&quot;&gt;委任（delegation）の対応状況も違う&lt;/h3&gt;
&lt;p&gt;データが大量にある場合に気にしなければならない委任の可否も、3つの関数で異なります。委任の詳細は&lt;a href=&quot;/powerapps-delegation-warning/&quot;&gt;委任の警告についての記事&lt;/a&gt;で解説していますが、簡単にいえば委任できないとデータが500件（最大2000件）しか取得できなくなります。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;関数・条件&lt;/th&gt;
&lt;th&gt;SharePoint&lt;/th&gt;
&lt;th&gt;Dataverse&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Filter（=、&amp;lt;、&amp;gt;、StartsWith）&lt;/td&gt;
&lt;td&gt;委任可能&lt;/td&gt;
&lt;td&gt;委任可能&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Filter（in、Mid、Left）&lt;/td&gt;
&lt;td&gt;委任不可&lt;/td&gt;
&lt;td&gt;一部可能&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Search&lt;/td&gt;
&lt;td&gt;委任不可&lt;/td&gt;
&lt;td&gt;委任可能&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LookUp（=、&amp;lt;、&amp;gt;）&lt;/td&gt;
&lt;td&gt;委任可能&lt;/td&gt;
&lt;td&gt;委任可能&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;SharePointリストを使っているなら、Search は委任できないと覚えておくと安全です。件数が多くなる可能性があるデータソースで Search を使うと、500件以降のデータが検索に引っかからなくなります。&lt;/p&gt;
&lt;h2 id=&quot;filter関数の使い方&quot;&gt;Filter関数の使い方&lt;/h2&gt;
&lt;h3 id=&quot;基本の書き方&quot;&gt;基本の書き方&lt;/h3&gt;
&lt;p&gt;Filter はデータソースと条件式を渡すだけです。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// ステータスが「申請中」のレコードだけを返す&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(申請リスト, ステータス &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot;申請中&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 自分が申請したレコードだけを返す&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(申請リスト, 申請者 &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; User&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;().DisplayName)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 複数条件（AND）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(申請リスト, ステータス &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot;申請中&quot;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; &amp;#x26;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; 申請者 &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; User&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;().DisplayName)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;amp;&amp;amp;（アンパサンド2つ）で AND 条件、||（パイプ2つ）で OR 条件を書けます。SharePointリストで等号や比較演算子を使う場合は委任が成立するので、データ件数を気にせず使えます。&lt;/p&gt;
&lt;h3 id=&quot;テキスト入力と組み合わせた絞り込み&quot;&gt;テキスト入力と組み合わせた絞り込み&lt;/h3&gt;
&lt;p&gt;ギャラリーに絞り込み検索を実装する場合、Filter と StartsWith の組み合わせが定番です。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// タイトルの前方一致で絞り込む（SharePointで委任可能）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(申請リスト, &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;StartsWith&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(タイトル, 検索テキスト.Text))&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;テキスト入力が空のときは全件表示したい場合は、条件を追加します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    申請リスト,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    IsBlank&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(検索テキスト.Text) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;||&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; StartsWith&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(タイトル, 検索テキスト.Text)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;テキスト入力欄が空のとき（IsBlank）は全件表示し、値が入っているときは前方一致で絞り込むという書き方です。このパターンは実務で非常によく使います。&lt;/p&gt;
&lt;h2 id=&quot;search関数の使い方&quot;&gt;Search関数の使い方&lt;/h2&gt;
&lt;h3 id=&quot;複数列をまとめて検索できる&quot;&gt;複数列をまとめて検索できる&lt;/h3&gt;
&lt;p&gt;Search が Filter と異なる点は、複数の列をまとめてあいまい検索できることです。タイトルと担当者名のどちらに検索ワードが含まれていても一発で拾いたい、という場合に便利です。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// タイトルと担当者名の両方から部分一致で検索&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Search&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(申請リスト, 検索テキスト.Text, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;タイトル&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;担当者名&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;列名を文字列（ダブルクォーテーション）で渡すのが Filter との大きな違いです。複数列を指定するときはカンマで並べます。&lt;/p&gt;
&lt;h3 id=&quot;sharepointでsearchを使うときの注意&quot;&gt;SharePointでSearchを使うときの注意&lt;/h3&gt;
&lt;p&gt;繰り返しになりますが、SharePointリストに対してSearchを使うと委任の警告が出て、500件しかデータを取得できません。データ件数が少ないアプリや、コレクションに取り込んだデータに対してSearchを使うのであれば問題ありません。SharePointリスト直接に対して Search を使う場合は、件数の上限を意識した設計にしましょう。&lt;/p&gt;
&lt;p&gt;個人的には、SharePointリストを使うときは原則 Filter + StartsWith で代替できないか先に検討します。部分一致の検索どうしても必要な場合は、OnVisible で ClearCollect してコレクションに落としてから Search するという回避策を使っています。&lt;/p&gt;
&lt;h2 id=&quot;lookup関数の使い方&quot;&gt;LookUp関数の使い方&lt;/h2&gt;
&lt;h3 id=&quot;1件のレコードまたは列の値を取得する&quot;&gt;1件のレコードまたは列の値を取得する&lt;/h3&gt;
&lt;p&gt;LookUp は条件に合う最初の1件を返します。テーブルではなくレコードを返すため、特定の列の値を直接取り出すことができます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// IDが一致するレコードの「担当者名」列を取得&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;LookUp&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(申請リスト, ID &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; 選択ID, 担当者名)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 3番目の引数で取り出す列を指定できる&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;LookUp&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(マスタリスト, 部署コード &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; ドロップダウン1.Selected.Value, 部署名)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;3番目の引数で「どの列を返すか」を指定できます。省略するとレコード全体を返しますが、値だけが欲しいときは列名を指定したほうがシンプルです。&lt;/p&gt;
&lt;h3 id=&quot;patchと組み合わせた更新処理&quot;&gt;Patchと組み合わせた更新処理&lt;/h3&gt;
&lt;p&gt;LookUp の大事な使い道がもう1つあります。Patch 関数で更新対象のレコードを特定するときに使います。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// ギャラリー外から特定レコードを更新する&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Patch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    申請リスト,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    LookUp&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(申請リスト, ID &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; gv_SelectedID),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    {ステータス: &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;承認済み&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;グローバル変数 gv_SelectedID に保存している ID と一致するレコードを LookUp で見つけ、そのレコードを Patch で更新するパターンです。&lt;a href=&quot;/powerapps-patch-function/&quot;&gt;Patch関数の使い方&lt;/a&gt;と組み合わせると、ギャラリーから選択したレコードを別の画面で編集・更新するという設計が実現できます。&lt;/p&gt;
&lt;h3 id=&quot;条件に一致するレコードがない場合&quot;&gt;条件に一致するレコードがない場合&lt;/h3&gt;
&lt;p&gt;LookUp は一致するレコードが存在しない場合、Blank（空値）を返します。その後の処理で LookUp の結果を使うときは、IsBlank で存在チェックを入れるほうが安全です。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    IsBlank&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;LookUp&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(申請リスト, ID &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; gv_SelectedID)),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Notify&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;対象のレコードが見つかりませんでした&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;NotificationType.Warning&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;    // 更新処理を実行&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Patch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(申請リスト, &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;LookUp&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(申請リスト, ID &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; gv_SelectedID), {ステータス: &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;承認済み&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;})&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;少し冗長に見えますが、現場アプリでは複数人が同時に操作する可能性があります。誰かが削除した後に別の人が承認ボタンを押すといった事態も起こりえるので、このチェックは入れておいて損はありません。&lt;/p&gt;
&lt;h2 id=&quot;3つの関数を使い分ける判断フロー&quot;&gt;3つの関数を使い分ける判断フロー&lt;/h2&gt;
&lt;p&gt;まとめとして、どの関数を選ぶかの判断基準を整理します。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;複数件を一覧表示したい → Filter または Search&lt;/li&gt;
&lt;li&gt;1件のレコードまたは特定列の値を取得したい → LookUp&lt;/li&gt;
&lt;li&gt;条件が等号・比較・StartsWith で済む → Filter（SharePointでも委任可能）&lt;/li&gt;
&lt;li&gt;複数列をまとめてあいまい検索したい → Search（ただしSharePointでは件数に注意）&lt;/li&gt;
&lt;li&gt;Patchで更新対象を指定したい → LookUp&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;どれが正解というより、状況によって組み合わせて使うものです。ギャラリーの Items に Filter をかけて表示しつつ、承認ボタンでは LookUp + Patch で更新する、というパターンが実務では一番多いと思います。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;Filter・Search・LookUp の最大の違いは、返り値がテーブルかレコードかです。複数件の表示には Filter か Search、1件の取得や Patch の対象指定には LookUp。これを基本に使い分けましょう。&lt;/p&gt;
&lt;p&gt;SharePointリストを使うなら委任の問題も頭に入れておく必要があります。Search は件数が多いデータソースには向かないので、Filter + StartsWith で代替できないか先に考えるクセをつけるといいです。3つの関数が使いこなせると、Power Appsでのデータ操作がぐっと楽になります。&lt;/p&gt;</content:encoded></item><item><title>Power Apps フレキシブル高さギャラリー入門｜行ごとに高さが変わるAutoHeightの仕組み</title><link>https://shiminkaihatsu.com/powerapps-flexible-gallery-basics/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-flexible-gallery-basics/</guid><description>Power Apps フレキシブル高さギャラリー入門｜行ごとに高さが変わるAutoHeightの仕組み</description><pubDate>Sun, 29 Mar 2026 19:06:14 GMT</pubDate><content:encoded>&lt;p&gt;Power Apps の通常ギャラリーは行の高さが固定ですが、フレキシブル高さギャラリーを使えば内容に応じて各行の高さが自動で変わります。長いテキストが途中で切れてしまう問題をそのまま解決してくれる、地味ながら実用性の高い機能です。&lt;/p&gt;
&lt;h2 id=&quot;フレキシブル高さギャラリーとは&quot;&gt;フレキシブル高さギャラリーとは&lt;/h2&gt;
&lt;p&gt;通常のギャラリーコントロールは、TemplateSize プロパティで全行の高さを一律に固定します。内容が短い行も長い行も、表示領域は同じです。これは一覧表示には都合がいいですが、自由なテキスト（メモ・コメント・説明文など）を表示すると文字が途中で切れてしまいます。&lt;/p&gt;
&lt;p&gt;フレキシブル高さギャラリーは行ごとに高さが変わります。テキストが短ければ行は小さく、長ければ行は大きくなります。ニュースフィードやSNSのタイムラインのような、内容量がばらばらなリストに向いています。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;ギャラリーの種類&lt;/th&gt;
&lt;th&gt;行の高さ&lt;/th&gt;
&lt;th&gt;向いている用途&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;通常ギャラリー（Vertical）&lt;/td&gt;
&lt;td&gt;固定&lt;/td&gt;
&lt;td&gt;一覧・マスター画面・シンプルなリスト&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;フレキシブル高さ&lt;/td&gt;
&lt;td&gt;内容に応じて自動変化&lt;/td&gt;
&lt;td&gt;コメント一覧・ニュースフィード・説明文あり&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;追加方法&quot;&gt;追加方法&lt;/h2&gt;
&lt;p&gt;挿入メニューからギャラリーを選ぶとき、通常の Vertical Gallery ではなく Flexible Height を選びます。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Power Apps Studio の画面で Insert をクリックする&lt;/li&gt;
&lt;li&gt;Gallery → Flexible Height を選択する&lt;/li&gt;
&lt;li&gt;画面に追加されたギャラリーの Items にデータソースを設定する&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-flexible-gallery-basics01.dv5RM_14_1IRHp4.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;p&gt;追加直後は News feed レイアウトが適用されます。このレイアウトにはタイトル・本文・日時などを組み合わせたテンプレートが最初から用意されていて、フレキシブルギャラリーの動きを確認しやすいです。最初は News feed から始めて、不要なコントロールを削除しながら自分のレイアウトに近づけていくのが個人的なやり方です。&lt;/p&gt;
&lt;h2 id=&quot;autoheight-プロパティをオンにする&quot;&gt;AutoHeight プロパティをオンにする&lt;/h2&gt;
&lt;p&gt;フレキシブルギャラリー内でテキストを折り返して表示させるには、ラベルコントロールの AutoHeight プロパティを On にします。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;ギャラリーテンプレート内のラベルを選択する&lt;/li&gt;
&lt;li&gt;プロパティ一覧から AutoHeight を探して On に切り替える&lt;/li&gt;
&lt;li&gt;あるいは数式バーで AutoHeight プロパティに true を入力する&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;AutoHeight を On にすると、ラベルに表示するテキストの長さに応じて、ラベルの高さが自動的に広がります。テキストが1行に収まる場合は1行分の高さ、3行必要な場合は3行分の高さになります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-flexible-gallery-basics02.CWrLseB3_Z2d7Jr.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;templatesize-は自動計算される&quot;&gt;TemplateSize は自動計算される&lt;/h2&gt;
&lt;p&gt;通常のギャラリーでは TemplateSize に数値を直接入力して行の高さを固定します。フレキシブルギャラリーでは TemplateSize は自動で計算されるため、手動で設定する必要がありません。&lt;/p&gt;
&lt;p&gt;ここが最初に戸惑うポイントです。TemplateSize を変更しようとしても数式バーがグレーになっており、入力できません。これは仕様であり、バグではありません。テンプレート内のコントロールの高さの合計を Power Apps が自動計算して TemplateSize に反映する仕組みです。&lt;/p&gt;
&lt;p&gt;ですので、フレキシブルギャラリーで行の高さを調整したいときは、TemplateSize を変えようとするのではなく、テンプレート内の各コントロールの高さや余白を調整します。コントロールの Height が増えれば行の高さも増え、減らせば縮みます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-flexible-gallery-basics03.w_MHwZjk_1iCxM9.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;使う際の注意点&quot;&gt;使う際の注意点&lt;/h2&gt;
&lt;p&gt;フレキシブルギャラリーは便利ですが、いくつか割り切りが必要な点があります。&lt;/p&gt;
&lt;h3 id=&quot;スクロールのパフォーマンス&quot;&gt;スクロールのパフォーマンス&lt;/h3&gt;
&lt;p&gt;通常ギャラリーはスクロールが非常にスムーズです。一方、フレキシブルギャラリーは行ごとに高さを計算するため、データが多いと（体感では 50件超あたりから）スクロールが少しカクつくことがあります。委任で大量データを扱う場合は注意が必要です。委任の考え方については&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-delegation-warning/&quot;&gt;委任の警告と対処法&lt;/a&gt;の記事で詳しく解説しています。&lt;/p&gt;
&lt;h3 id=&quot;行の高さの最小値&quot;&gt;行の高さの最小値&lt;/h3&gt;
&lt;p&gt;テンプレート内のコントロールをすべて削除すると、行の高さが極端に小さくなります。最低限のパディングを持つコンテナや余白ラベルを残しておくと、行間が詰まりすぎるのを防げます。&lt;/p&gt;
&lt;h3 id=&quot;テンプレートのデザイン調整は手間がかかる&quot;&gt;テンプレートのデザイン調整は手間がかかる&lt;/h3&gt;
&lt;p&gt;通常ギャラリーと違い、行の高さが動的に変わる分、デザインの見通しが立てにくいです。特に長文と短文が混在するデータで見た目を整えるには、少し試行錯誤が必要です。そういうものだと割り切ってしまうと気が楽になります。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;フレキシブル高さギャラリーは、内容量がばらばらなテキストデータを表示するときにとても重宝します。AutoHeight を On にしてテンプレート内のラベルを伸縮させる、TemplateSize は自動計算に任せる、この2点を押さえれば基本的な使い方はマスターできます。&lt;/p&gt;
&lt;p&gt;フレキシブルギャラリーを発展させると、行ごとに展開・折りたたみができるアコーディオンUIも作れます。その実装パターンについては&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-flexible-gallery-expand/&quot;&gt;ギャラリーで展開・折りたたみを実装する記事&lt;/a&gt;で解説しています。まずは表示を動かしてみて、感触をつかんでみてください。&lt;/p&gt;
&lt;p&gt;ギャラリーの使い方を&lt;a href=&quot;/powerapps-gallery-complete/&quot;&gt;一覧でまとめた記事はこちら&lt;/a&gt;からご覧ください。&lt;/p&gt;</content:encoded></item><item><title>Power Apps ギャラリーで展開・折りたたみを実装する｜ボタン・ネストギャラリー・コレクションの3パターン</title><link>https://shiminkaihatsu.com/powerapps-flexible-gallery-expand/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-flexible-gallery-expand/</guid><description>Power Apps ギャラリーで展開・折りたたみを実装する｜ボタン・ネストギャラリー・コレクションの3パターン</description><pubDate>Sun, 29 Mar 2026 19:06:14 GMT</pubDate><content:encoded>&lt;p&gt;ギャラリーの各行をクリックすると詳細が展開され、もう一度クリックすると折りたたまれるUI、いわゆるアコーディオンを Power Apps で実装する方法は3パターンあります。それぞれの仕組みと使い分けを解説します。&lt;/p&gt;
&lt;p&gt;この記事はフレキシブル高さギャラリーの基礎知識を前提にしています。AutoHeight の仕組みや Flexible Height の追加方法が気になる方は、&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-flexible-gallery-basics/&quot;&gt;フレキシブル高さギャラリー入門の記事&lt;/a&gt;を先に読んでおくとスムーズです。&lt;/p&gt;
&lt;h2 id=&quot;なぜギャラリー内で変数が使えないのか&quot;&gt;なぜギャラリー内で変数が使えないのか&lt;/h2&gt;
&lt;p&gt;ギャラリーで展開・折りたたみを実装しようとすると、最初にぶつかる壁があります。ギャラリーの各行は同じテンプレートを使い回しているため、行固有の状態を変数で持てないという制約です。&lt;/p&gt;
&lt;p&gt;たとえば UpdateContext({varExpand: true}) を行ごとに持ちたくても、コンテキスト変数は画面単位の変数なのですべての行に影響します。1行目を展開しようとすると全行が展開されてしまうのです。グローバル変数も同じ理由で行ごとの状態管理には使えません。変数の種類と使い分けについては&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-variables/&quot;&gt;グローバル変数とコンテキスト変数の違いの記事&lt;/a&gt;でまとめています。&lt;/p&gt;
&lt;p&gt;この制約を回避する方法が3つあります。順番に見ていきましょう。&lt;/p&gt;
&lt;h2 id=&quot;パターンhtmlテキストコントロールで折りたたみを表現する&quot;&gt;パターン①：HTMLテキストコントロールで折りたたみを表現する&lt;/h2&gt;
&lt;p&gt;最もシンプルなパターンは、HTMLテキストコントロールと AutoHeight を組み合わせて、クリックで展開・折りたたみを切り替えるものです。ただし行ごとの変数は使えないため、この方法では1行だけ展開してあとは閉じるというトグル管理はできません。&lt;/p&gt;
&lt;p&gt;代わりに Toggle コントロールを使います。Toggle の Value は行ごとに独立した状態を持てます（内部的に行のテンプレートとして扱われるため）。ただしこれは Power Apps の仕様上の動きであり、必ずしも全バージョンで安定して動くとは限らない点は割り切りが必要です。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 詳細エリアの Visible プロパティ&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;Toggle1.Value&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;テンプレート内に Toggle を置き、詳細テキストを表示するラベルやコンテナの Visible を Toggle1.Value にします。Toggle がオンになった行だけ詳細エリアが表示され、フレキシブルギャラリーによって行の高さが自動で広がります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-flexible-gallery-expand01.DSF8CAHV_1AT0Jl.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;パターンネストギャラリーの高さを動的に計算する&quot;&gt;パターン②：ネストギャラリーの高さを動的に計算する&lt;/h2&gt;
&lt;p&gt;詳細エリアに別のテーブルデータ（たとえばタスクに紐づくコメント一覧）を表示したい場合、ネストギャラリーを使います。&lt;/p&gt;
&lt;p&gt;ネストギャラリーは親ギャラリーのテンプレート内に子ギャラリーを配置する構成です。子ギャラリーの高さを行数に応じて動的に計算することで、展開・折りたたみを実現します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 子ギャラリーの Height プロパティ&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;CountRows&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(GalleryComments.AllItems) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; GalleryComments.TemplateHeight&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;CountRows(GalleryComments.AllItems) は子ギャラリーに表示されているレコード数を返します。TemplateHeight は子ギャラリー1行分の高さです。この積が子ギャラリー全体の高さになります。&lt;/p&gt;
&lt;p&gt;折りたたみは子ギャラリーの Visible を Toggle1.Value でオン・オフするだけです。Visible が false のとき親ギャラリーのテンプレートは折りたたまれ、true のとき子ギャラリーの高さ分だけ行が展開されます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-flexible-gallery-expand02.BTCiCAgB_Z16OzdG.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;パターンコレクションに-showdetails-列を持たせる&quot;&gt;パターン③：コレクションに ShowDetails 列を持たせる&lt;/h2&gt;
&lt;p&gt;最も柔軟で安定したパターンは、コレクションに ShowDetails（boolean型）列を追加して、Patch で行ごとに切り替える方法です。変数ではなくコレクション自体に状態を持たせることで、行ごとの独立した展開・折りたたみが実現できます。&lt;/p&gt;
&lt;h3 id=&quot;コレクションの準備&quot;&gt;コレクションの準備&lt;/h3&gt;
&lt;p&gt;データを読み込む際に ShowDetails 列を追加します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;ClearCollect&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(colTasks,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;  AddColumns&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(Tasks, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;ShowDetails&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;AddColumns 関数でデータソースのテーブルに ShowDetails 列を追加しながらコレクションに格納します。初期値はすべて false（折りたたみ状態）です。&lt;/p&gt;
&lt;h3 id=&quot;展開折りたたみの切り替え&quot;&gt;展開・折りたたみの切り替え&lt;/h3&gt;
&lt;p&gt;ギャラリーの各行にある展開ボタンの OnSelect で、該当行の ShowDetails だけを反転させます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Patch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(colTasks, ThisItem, {ShowDetails: !ThisItem.ShowDetails})&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;!ThisItem.ShowDetails は現在の値の反転です。true なら false に、false なら true にします。Patch でコレクションのその行だけを更新するため、他の行の ShowDetails には一切影響しません。これが変数との決定的な違いです。&lt;/p&gt;
&lt;p&gt;詳細エリアの Visible は ThisItem.ShowDetails にするだけです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-flexible-gallery-expand03.CIaoJCl__wSoUB.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;expand-allcollapse-all-の実装&quot;&gt;Expand All・Collapse All の実装&lt;/h2&gt;
&lt;p&gt;全件展開・全件折りたたみのボタンも簡単に作れます。UpdateIf でコレクション全行の ShowDetails を一括更新します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 全件展開ボタン&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;UpdateIf&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(colTasks, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, {ShowDetails: &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;})&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 全件折りたたみボタン&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;UpdateIf&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(colTasks, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, {ShowDetails: &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;})&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;UpdateIf の第2引数に true を渡すことですべての行が条件に一致するため、全件更新になります。コレクション操作なのでデータソースへの書き込みはなく、画面のローカル状態だけが変わります。これが変数ではなくコレクションの Patch を使う理由です。変数をトグルすると全行に影響してしまい、行ごとの独立制御ができません。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://shiminkaihatsu.com/wp-content/uploads/2026/03/powerapps-flexible-gallery-expand04.webp&quot; alt/&gt;&lt;/p&gt;

&lt;h2 id=&quot;3パターンの比較&quot;&gt;3パターンの比較&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;パターン&lt;/th&gt;
&lt;th&gt;仕組み&lt;/th&gt;
&lt;th&gt;向いている用途&lt;/th&gt;
&lt;th&gt;難易度&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;① Toggle + Visible&lt;/td&gt;
&lt;td&gt;Toggle.Value で詳細エリアを表示切替&lt;/td&gt;
&lt;td&gt;シンプルな展開・折りたたみ&lt;/td&gt;
&lt;td&gt;低&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;② ネストギャラリー&lt;/td&gt;
&lt;td&gt;子ギャラリーの高さを動的計算&lt;/td&gt;
&lt;td&gt;詳細に別テーブルデータを表示&lt;/td&gt;
&lt;td&gt;中&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;③ コレクション Patch&lt;/td&gt;
&lt;td&gt;ShowDetails 列をコレクションで管理&lt;/td&gt;
&lt;td&gt;行ごとの安定した状態管理・全件操作&lt;/td&gt;
&lt;td&gt;中&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;シンプルに始めたいならパターン①、詳細に別データを表示したいならパターン②、Expand All などの全件操作が必要ならパターン③を選ぶのがおすすめです。コレクション操作の基礎については&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-collection/&quot;&gt;コレクション活用入門の記事&lt;/a&gt;で改めて確認しておくと、パターン③の実装がよりスムーズになります。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;ギャラリー内の変数は全行共通になってしまうという制約さえ理解すれば、対処方法は明快です。Toggle・ネストギャラリー・コレクションの Patch、どれも一度作れば次から迷わず使えます。&lt;/p&gt;
&lt;p&gt;アコーディオンUIは使いやすいアプリの定番パターンのひとつです。画面のスペースを有効活用しながら情報を整理できるので、社内アプリでも喜ばれることが多いです。ぜひ試してみてください。&lt;/p&gt;
&lt;p&gt;ギャラリーの使い方を&lt;a href=&quot;/powerapps-gallery-complete/&quot;&gt;一覧でまとめた記事はこちら&lt;/a&gt;からご覧ください。&lt;/p&gt;</content:encoded></item><item><title>Power AppsのEditForm・NewForm・DisplayForm。フォームコントロールの仕組みと設定のポイント</title><link>https://shiminkaihatsu.com/powerapps-form-basics/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-form-basics/</guid><description>Power AppsのEditForm・NewForm・DisplayForm。フォームコントロールの仕組みと設定のポイント</description><pubDate>Mon, 16 Mar 2026 15:46:49 GMT</pubDate><content:encoded>&lt;p&gt;Power Appsでフォームを使うなら、EditForm・NewForm・DisplayFormの3種類を正しく使い分けることが基本です。これを曖昧にしたまま開発を進めると、データの読み書きでつまずくことになります。&lt;/p&gt;
&lt;p&gt;フォームコントロールは、SharePointリストやDataverseといったデータソースと連携して、データの表示・新規追加・編集を担うコントロールです。Patch関数を自分で書かなくてもデータを保存できるのが最大の魅力です。ただし、使い方の型を知らないと思ったとおりに動かないことも多いので、この記事で仕組みをまとめておきます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-form-basics04.BhqqprYy_19iy9Y.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;3種類のフォームモードと使い分け&quot;&gt;3種類のフォームモードと使い分け&lt;/h2&gt;
&lt;p&gt;フォームには3つのモードがあります。EditForm・NewForm・DisplayFormというのは厳密にはコントロール名というより、DefaultModeプロパティで設定するモードのことです。実際には1つのフォームコントロールを用途ごとにモード切替して使うか、画面ごとに別のフォームを置くかを選びます。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;モード&lt;/th&gt;
&lt;th&gt;用途&lt;/th&gt;
&lt;th&gt;SubmitForm後の動作&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Edit（編集）&lt;/td&gt;
&lt;td&gt;既存レコードの更新&lt;/td&gt;
&lt;td&gt;既存レコードを上書き保存&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;New（新規）&lt;/td&gt;
&lt;td&gt;新しいレコードの追加&lt;/td&gt;
&lt;td&gt;新規レコードとして追加&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;View（表示）&lt;/td&gt;
&lt;td&gt;読み取り専用で表示&lt;/td&gt;
&lt;td&gt;保存操作なし&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;私がよく使うのは、一覧画面（ギャラリー）+ 編集画面（フォーム）という構成です。一覧で選択したレコードを編集画面に渡してEditモードで開く、という流れが王道です。&lt;/p&gt;
&lt;h3 id=&quot;itemプロパティの設定が肝心&quot;&gt;Itemプロパティの設定が肝心&lt;/h3&gt;
&lt;p&gt;EditモードでフォームにレコードをバインドするにはItemプロパティの設定が必要です。ギャラリーで選択したレコードをフォームに渡すには、フォームのItemプロパティに次のように書きます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;Gallery1.Selected&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;これだけで、ギャラリーで選んだ行の内容がフォームに自動的に流れ込みます。Newモードのときは、Itemプロパティを空白（Blank()）にしておくか、何も設定しなければ空のフォームになります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-form-basics05.zYXPFB72_ZPyDn1.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;submitformとresetformの基本&quot;&gt;SubmitFormとResetFormの基本&lt;/h2&gt;
&lt;p&gt;フォームでデータを保存するにはSubmitForm関数を使います。Patch関数を自分で書く必要がなく、フォームに紐づいたデータソースに自動で書き込んでくれます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;SubmitForm&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(Form1)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;保存後にフォームをリセットしたい場合はResetFormを使います。これを忘れると、次に新規入力しようとしたときに前回の値が残ってしまいます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;ResetForm&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(Form1)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;よくある実装パターンは、保存ボタンのOnSelectに次のように書くことです。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;SubmitForm&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(Form1);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(Form1.Error &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot;&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Navigate&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(ListScreen, ScreenTransition.None),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Notify&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(Form1.Error, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;NotificationType.Error&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Form1.Errorが空文字なら保存成功なので一覧画面に戻り、エラーがある場合はNotifyで画面上にエラーメッセージを表示する、というパターンです。これだけで最低限のエラーハンドリングになります。&lt;/p&gt;
&lt;h3 id=&quot;onsuccessプロパティも活用できる&quot;&gt;OnSuccessプロパティも活用できる&lt;/h3&gt;
&lt;p&gt;フォームにはOnSuccessというプロパティもあります。SubmitFormが成功したときだけに実行される処理を書けるので、保存後の画面遷移やResetFormをここに書く方がすっきりする場面もあります。好みと設計方針で使い分けてください。&lt;/p&gt;
&lt;h2 id=&quot;フォームのカードコントロールを理解する&quot;&gt;フォームのカードコントロールを理解する&lt;/h2&gt;
&lt;p&gt;フォームコントロールを画面に追加すると、データソースの各列が自動的にカードコントロールとして並びます。カードはフォームの子コントロールであり、各フィールドの入力欄をカプセル化したものです。&lt;/p&gt;
&lt;p&gt;カードのUpdateプロパティを見ると、その入力値がどうデータソースに送られるかが確認できます。例えばテキストカードならTextInputのTextプロパティがUpdateに入っているはずです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-form-basics06.CvqG8XtM_Z13YHnb.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;カードのロック解除に注意&quot;&gt;カードのロック解除に注意&lt;/h3&gt;
&lt;p&gt;デフォルトでカードはロックされていて、直接プロパティを変更できません。カードを右クリックして「カードのロック解除」を選ぶとカスタマイズできるようになりますが、一度ロックを解除するとデータソースの列変更を自動で追従しなくなります。&lt;/p&gt;
&lt;p&gt;個人的には、シンプルな入力フォームであれば標準カードをそのまま使い、どうしてもカスタマイズが必要な列だけロック解除するのをおすすめします。全部ロック解除すると後のメンテナンスが大変になります。&lt;/p&gt;
&lt;h2 id=&quot;editformとpatch関数の使い分け&quot;&gt;EditFormとPatch関数の使い分け&lt;/h2&gt;
&lt;p&gt;フォームコントロールを使わず、Patch関数で直接データを書き込む方法もあります。どちらを使うべきか迷うことがあると思いますが、目安は以下のとおりです。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;用途&lt;/th&gt;
&lt;th&gt;おすすめの方法&lt;/th&gt;
&lt;th&gt;理由&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;標準的な入力フォーム&lt;/td&gt;
&lt;td&gt;EditForm&lt;/td&gt;
&lt;td&gt;カードが自動生成される。バリデーションも組み込み済み&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;複数レコードの一括更新&lt;/td&gt;
&lt;td&gt;Patch関数&lt;/td&gt;
&lt;td&gt;フォームは1レコードずつしか扱えない&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ボタン1つで部分更新&lt;/td&gt;
&lt;td&gt;Patch関数&lt;/td&gt;
&lt;td&gt;フォームを使わずピンポイントで列を更新できる&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;カスタムUIで入力欄を自作&lt;/td&gt;
&lt;td&gt;Patch関数&lt;/td&gt;
&lt;td&gt;フォームカードのUIに縛られない&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;フォームコントロールはUI込みで素早く実装できる反面、細かい制御が必要なときには窮屈に感じることもあります。Patch関数の書き方は別記事で詳しく解説しているので、合わせて読んでみてください。&lt;/p&gt;
&lt;p&gt;→ &lt;a href=&quot;/powerapps-patch-function/&quot;&gt;Power Appsで絶対覚えたいPatch関数の使い方&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;また、フォームと組み合わせることの多いSharePointリストの読み書きについては、こちらも参考になります。&lt;/p&gt;
&lt;p&gt;→ &lt;a href=&quot;/powerapps-sharepoint-crud/&quot;&gt;Power AppsでSharePointリストのデータを読み書きする——基本のCRUDパターン&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;Power AppsのEditForm・NewForm・DisplayFormは、それぞれ編集・新規・表示という3つのモードを持つフォームコントロールです。ItemプロパティでバインドするレコードをSubmitFormで保存する、という流れさえつかめれば、あとは実際に作りながら覚えていける内容です。&lt;/p&gt;
&lt;p&gt;最初はPatch関数と比べてフォームコントロールのほうが難しく感じるかもしれません。でも、一度形を作ってしまえばカード自動生成のおかげでスピードが格段に上がります。ぜひ一度シンプルなフォーム画面を作ってみてください。&lt;/p&gt;</content:encoded></item><item><title>Power Apps の長い数式を読みやすく整理する｜With関数・改行・コメントで保守できるコードを書く方法</title><link>https://shiminkaihatsu.com/powerapps-formula-readability/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-formula-readability/</guid><description>Power Apps の長い数式を読みやすく整理する｜With関数・改行・コメントで保守できるコードを書く方法</description><pubDate>Sat, 18 Apr 2026 08:45:32 GMT</pubDate><content:encoded>&lt;p&gt;動いているからといって、読みにくい式のままにしておくと、3ヶ月後に自分でもわからなくなります。Power Appsの数式を保守しやすい形で書く方法を説明します。&lt;/p&gt;
&lt;h2 id=&quot;動けばいいは危険な発想&quot;&gt;動けばいいは危険な発想&lt;/h2&gt;
&lt;p&gt;Power Appsを使い始めて少し慣れてくると、複雑な条件分岐や計算式を書けるようになります。でもその式が長くなればなるほど、後から読み返したときに、これ何をやっているんだろうと迷子になりがちです。&lt;/p&gt;
&lt;p&gt;私自身の経験でいえば、半年前に作ったアプリのIf関数の式を見返して、全く意図が読み取れなかったことがあります。動いているからそのままにしていたのですが、少し機能を変えようとしたとき、どこを直せばいいかを探すだけで1時間以上かかりました。&lt;/p&gt;
&lt;p&gt;市民開発のアプリは、最初に作った人が長期間メンテナンスすることも多いです。そうでなければ引き継いだ人が困ります。動けばいいという発想は短期的には正しいですが、中長期的にはアプリの保守コストを上げる原因になります。&lt;/p&gt;
&lt;h3 id=&quot;読みにくい式になりやすいパターン&quot;&gt;読みにくい式になりやすいパターン&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;If関数の入れ子が3段以上になっている&lt;/li&gt;
&lt;li&gt;1つのプロパティに10行以上の式が書かれている&lt;/li&gt;
&lt;li&gt;同じ計算を複数のコントロールのプロパティで繰り返している&lt;/li&gt;
&lt;li&gt;コメントが一切ない&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;こういった状態は、作った直後はまあいいかと思えても、時間が経つほど修正コストが増えていきます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-formula-readability01.CQJw73xK_Z1epich.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;改行インデントで式を整形する&quot;&gt;改行・インデントで式を整形する&lt;/h2&gt;
&lt;p&gt;Power Appsの数式エディタでは、Shift+Enterで改行を入力できます。これだけで式の読みやすさが大きく変わります。&lt;/p&gt;
&lt;p&gt;例えば、次のような式があります。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(varStatus &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot;承認済み&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Navigate&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(完了画面, ScreenTransition.Fade), &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(varStatus &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot;差し戻し&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Navigate&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(修正画面, ScreenTransition.None), &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Navigate&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(確認画面, ScreenTransition.None)))&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;これをShift+Enterで改行・インデントを入れると、次のようになります。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    varStatus &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot;承認済み&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Navigate&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(完了画面, ScreenTransition.Fade),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;    If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        varStatus &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot;差し戻し&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;        Navigate&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(修正画面, ScreenTransition.None),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;        Navigate&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(確認画面, ScreenTransition.None)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;同じ式ですが、構造が一目でわかるようになります。条件が何で、真の場合と偽の場合に何をするかが視覚的に区別できます。&lt;/p&gt;
&lt;h3 id=&quot;インデントのルール&quot;&gt;インデントのルール&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;関数の引数ごとに1段インデントを深くする&lt;/li&gt;
&lt;li&gt;入れ子の関数はさらに1段深くする&lt;/li&gt;
&lt;li&gt;閉じ括弧は開き括弧と同じ深さに揃える&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-formula-readability02.BrPxpN_Z_1i1j4Y.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;-コメントで意図を残す&quot;&gt;// コメントで意図を残す&lt;/h2&gt;
&lt;p&gt;Power Appsの数式エディタでは、// 以降をコメントとして記述できます（その行の末尾まで）。コメントは実行時に無視されるので、動作に影響はありません。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// ステータスに応じて遷移先を分岐する&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    varStatus &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot;承認済み&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Navigate&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(完了画面, ScreenTransition.Fade), &lt;/span&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 承認後は完了画面へ&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;    If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        varStatus &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot;差し戻し&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;        Navigate&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(修正画面, ScreenTransition.None), &lt;/span&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 差し戻しは修正画面へ&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;        Navigate&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(確認画面, ScreenTransition.None) &lt;/span&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// それ以外は確認待ち画面へ&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;コメントに書くべきは、何をしているかではなくなぜそうしているか、です。コードを読めば何をしているかはわかります。でもなぜこの条件なのか、なぜこの順番なのかは、書いた人でないとわかりません。&lt;/p&gt;
&lt;p&gt;例えば、差し戻し状態のチェックを承認の前に行うと誤判定が起きるため後から判定するといったコメントは、後から読む人にとって非常に価値があります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-formula-readability03.CYCrTxkM_2oG7nW.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;with関数で中間変数を作って式を分解する&quot;&gt;With関数で中間変数を作って式を分解する&lt;/h2&gt;
&lt;p&gt;長い式を短くする最も効果的な方法が、With関数を使って中間変数を作ることです。&lt;a href=&quot;/powerapps-with/&quot;&gt;With関数の基本的な使い方&lt;/a&gt;では構文を解説していますが、ここでは保守性を高める観点での使い方を紹介します。&lt;/p&gt;
&lt;p&gt;例えば、次のような式があるとします。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    CountRows&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(受注リスト, 担当者 &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; User&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;().Email &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;And&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; ステータス &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot;未処理&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Notify&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;未処理の案件が &quot;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; Text&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;CountRows&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(受注リスト, 担当者 &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; User&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;().Email &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;And&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; ステータス &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot;未処理&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;))) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot; 件あります&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;NotificationType.Warning&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;    false&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Filter関数の同じ式が2回登場しています。With関数を使うと次のように書き換えられます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;With&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;        // 自分担当の未処理件数を先に計算する&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        myPendingCount: &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;CountRows&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;            Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(受注リスト, 担当者 &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; User&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;().Email &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;And&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; ステータス &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot;未処理&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;    If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        myPendingCount &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;        Notify&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;未処理の案件が &quot;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; Text&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(myPendingCount) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot; 件あります&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;NotificationType.Warning&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;        false&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;変数名 myPendingCount が自分担当の未処理件数であることを明示しています。式が1回しか書かれていないため、条件を変えたいときも1箇所だけ直せばよいです。&lt;/p&gt;
&lt;h3 id=&quot;with関数で中間変数を定義する手順&quot;&gt;With関数で中間変数を定義する手順&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;複数回使っている式や、複雑すぎて読みにくい部分を特定する&lt;/li&gt;
&lt;li&gt;With関数のレコードリテラル（波括弧部分）に変数名と式を記述する&lt;/li&gt;
&lt;li&gt;本体の式では変数名を参照する&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-formula-readability04.MDy6l3C-_1NjVLM.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;長いif関数をswitch関数に書き換える&quot;&gt;長いIf関数をSwitch関数に書き換える&lt;/h2&gt;
&lt;p&gt;同じ変数の値に対して複数の条件分岐をする場合、Ifの入れ子よりSwitchのほうがシンプルに書けます。&lt;a href=&quot;/powerapps-if-switch/&quot;&gt;IfとSwitchの使い分け&lt;/a&gt;については別記事で詳しく説明していますが、保守性の観点からもSwitchに書き換えるメリットは大きいです。&lt;/p&gt;
&lt;p&gt;先ほどのIf入れ子の例をSwitchで書き直すと次のようになります。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;Switch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    varStatus,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;    &quot;承認済み&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Navigate&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(完了画面, ScreenTransition.Fade),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;    &quot;差し戻し&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Navigate&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(修正画面, ScreenTransition.None),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Navigate&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(確認画面, ScreenTransition.None) &lt;/span&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// デフォルト&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Switch関数は、この変数が○○のときは△△、□□のときは▲▲という構造を表現するのに最適です。条件の種類が増えても、縦に追加するだけで対応できます。&lt;/p&gt;
&lt;p&gt;一方、条件が変数の値の一致ではなく、複数の条件を組み合わせた判定（AかつB、またはC）の場合はIfのほうが適しています。どちらを選ぶかは同じ変数の値で分岐するか否かを基準に判断するとよいです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-formula-readability05.CKuFY5_S_Z29HdEB.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;名前付き計算式appformulasで繰り返し式を一元管理する&quot;&gt;名前付き計算式（App.Formulas）で繰り返し式を一元管理する&lt;/h2&gt;
&lt;p&gt;複数のコントロールや画面で同じ計算を繰り返している場合、&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-named-formulas/&quot;&gt;名前付き計算式（App.Formulas）&lt;/a&gt;を使うと式の管理が大幅に楽になります。&lt;/p&gt;
&lt;p&gt;名前付き計算式とは、アプリ全体で使える計算式の名前を定義する機能です。App.Formulasプロパティに次のように書きます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;myPendingCount &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; CountRows&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(受注リスト, 担当者 &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; User&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;().Email &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;And&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; ステータス &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot;未処理&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;));&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;こうすることで、アプリの任意のコントロールから &lt;code&gt;myPendingCount&lt;/code&gt; という名前で参照できます。受注リストのフィルター条件を変えたいときも、App.Formulasの1箇所を修正するだけで、全コントロールに反映されます。&lt;/p&gt;
&lt;p&gt;With関数が、ある式の中での局所的な中間変数を作るのに対し、名前付き計算式はアプリ全体で使えるグローバルな計算式を定義します。繰り返しの多い計算は名前付き計算式に切り出すことをおすすめします。&lt;/p&gt;
&lt;h3 id=&quot;名前付き計算式の設定手順&quot;&gt;名前付き計算式の設定手順&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Power Apps StudioのツリービューでAppを選択する&lt;/li&gt;
&lt;li&gt;プロパティドロップダウンからFormulasを選択する&lt;/li&gt;
&lt;li&gt;計算式を「名前 = 式;」の形式で記述する（複数定義する場合はセミコロンで区切る）&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-formula-readability06.DVBtu31Q_22m7R2.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;p&gt;名前付き計算式は変数とは異なり、参照されるたびに再計算されます。セットした値を保持するグローバル変数（Set関数）と使い分けることが大切です。詳しい違いは&lt;a href=&quot;/powerapps-variables/&quot;&gt;グローバル変数とコンテキスト変数の解説記事&lt;/a&gt;も参考にしてください。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;Power Appsの数式を保守しやすくするための方法として、改行・インデント・コメント・With関数・Switch関数・名前付き計算式の6つを紹介しました。すべてを一度に取り入れる必要はありません。まずは改行とコメントから始めて、式が複雑になってきたらWith関数を使う、という段階的な取り組みが現実的です。&lt;/p&gt;
&lt;p&gt;アプリは作って終わりではなく、使いながら改善していくものです。&lt;a href=&quot;/powerapps-error-guide/&quot;&gt;数式エラー解決の全体マップ&lt;/a&gt;と合わせて活用することで、問題を素早く見つけて直す力もついていきます。読みやすい式を書く習慣は、じわじわと開発の効率を上げてくれます。楽しみながら続けていきましょう。&lt;/p&gt;</content:encoded></item><item><title>Power Appsのギャラリーコントロール。リスト表示の基本と検索・選択との組み合わせ</title><link>https://shiminkaihatsu.com/powerapps-gallery/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-gallery/</guid><description>Power Appsのギャラリーコントロール。リスト表示の基本と検索・選択との組み合わせ</description><pubDate>Mon, 16 Mar 2026 15:46:50 GMT</pubDate><content:encoded>&lt;p&gt;ギャラリーコントロールはPower Appsで一覧表示を作るときに使う、最も基本的なコントロールです。SharePointリストのデータを並べて見せる、タップした行の詳細を表示するといった操作の起点になります。&lt;/p&gt;
&lt;h2 id=&quot;ギャラリーの基本設定&quot;&gt;ギャラリーの基本設定&lt;/h2&gt;
&lt;h3 id=&quot;itemsプロパティにデータソースを渡す&quot;&gt;Itemsプロパティにデータソースを渡す&lt;/h3&gt;
&lt;p&gt;ギャラリーコントロールを追加したら、まずItemsプロパティにデータソースを設定します。SharePointリストを直接指定するだけで、リストの全件が一覧表示されます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;Items &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; タスク管理リスト&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ギャラリーの左側にある鉛筆アイコン（テンプレートの編集）をクリックすると、1行分のテンプレートを編集できる状態になります。ここに配置したラベルやアイコンがすべての行に繰り返し表示されます。&lt;/p&gt;
&lt;h3 id=&quot;thisitemで各行のデータを表示する&quot;&gt;ThisItemで各行のデータを表示する&lt;/h3&gt;
&lt;p&gt;テンプレート内のラベルでSharePointリストの値を表示するにはThisItemを使います。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// タイトルを表示するラベルのTextプロパティ&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;ThisItem.タイトル&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 担当者を表示するラベルのTextプロパティ&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;ThisItem.担当者名&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 日付を表示するラベルのTextプロパティ&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Text&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(ThisItem.期日, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;yyyy/mm/dd&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ThisItemは「現在この行のデータ」を指すキーワードです。ギャラリーが1行ずつデータをループして表示するとき、その行のレコードがThisItemに入ります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-gallery01.9zN4J4bY_Z2teF1P.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;666&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;selectedで選択状態を扱う&quot;&gt;Selectedで選択状態を扱う&lt;/h2&gt;
&lt;h3 id=&quot;タップした行の情報を取り出す&quot;&gt;タップした行の情報を取り出す&lt;/h3&gt;
&lt;p&gt;ギャラリーで行をタップすると、その行がギャラリーのSelectedプロパティに格納されます。タップした行の値を別の場所に表示したいときはこれを使います。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 選択された行のタイトルを別のラベルに表示&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;ギャラリー1.Selected.タイトル&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;さらに一歩進めると、タップしたときに詳細画面に遷移してその行のデータを引き渡すことができます。Navigate関数の第3引数にSelectedを渡す方法です。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// ギャラリーのOnSelectプロパティ&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Navigate&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(詳細画面, ScreenTransition.Cover, {selectedRecord: ThisItem})&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;画面遷移とデータの受け渡しの詳しい解説は&lt;a href=&quot;/navigate-powerapps/&quot;&gt;Navigate関数の解説&lt;/a&gt;にまとめています。ギャラリーとNavigateはセットで覚えると実用的なアプリが作れます。&lt;/p&gt;
&lt;h3 id=&quot;選択行のハイライト表示&quot;&gt;選択行のハイライト表示&lt;/h3&gt;
&lt;p&gt;どの行を選んでいるかを視覚的に示したい場合は、ギャラリーのテンプレート背景色をSelectedの状態で切り替えます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// テンプレートのFillプロパティ&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(ThisItem.IsSelected, &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;RGBA&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;120&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;212&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;0.1&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;), &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;RGBA&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;))&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;IsSelectedはその行が現在選択されているかを示すプロパティです。選択時だけ薄い青背景にするだけで、ユーザーが今どの行を選んでいるか一目でわかります。&lt;/p&gt;
&lt;h2 id=&quot;検索機能との組み合わせ&quot;&gt;検索機能との組み合わせ&lt;/h2&gt;
&lt;h3 id=&quot;search関数でリアルタイム検索&quot;&gt;Search関数でリアルタイム検索&lt;/h3&gt;
&lt;p&gt;テキスト入力コントロールを検索ボックスとして使い、ギャラリーのItemsプロパティにSearch関数を組み合わせると、文字を入力するたびに一覧が絞り込まれます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;Items &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; Search&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(タスク管理リスト, 検索ボックス.Text, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;タイトル&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;担当者名&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Search関数の第2引数に検索ボックスの入力値を渡し、第3引数以降に検索対象のフィールド名を指定します。複数のフィールドを指定すると、そのうちいずれかに一致する行を返します。&lt;/p&gt;
&lt;h3 id=&quot;filter関数で条件絞り込み&quot;&gt;Filter関数で条件絞り込み&lt;/h3&gt;
&lt;p&gt;ドロップダウンで選んだステータスに一致する行だけを表示したい場合はFilter関数を使います。Search関数と組み合わせることもできます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;Items &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Search&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(タスク管理リスト, 検索ボックス.Text, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;タイトル&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    ステータス &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; ステータスドロップダウン.Selected.Value&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;検索と絞り込みを同時に使うときは、Filter関数の第1引数にSearch関数をネストします。Filter・Search・LookUpの使い分けや委任の注意点については&lt;a href=&quot;/powerapps-filter-search-lookup/&quot;&gt;Filter・Search・LookUp関数の解説&lt;/a&gt;を参照してください。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-gallery02.BEu-1ZwB_Z19kRLe.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;725&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;委任の警告に注意する&quot;&gt;委任の警告に注意する&lt;/h2&gt;
&lt;p&gt;SharePointリストのレコード数が500件を超えると、Filter関数やSearch関数を使ったときに委任の警告（黄色い三角マーク）が出ることがあります。&lt;/p&gt;
&lt;p&gt;委任の警告が出ると、実際には条件に合うデータが500件以上あってもアプリ側で最初の500件しか取得できず、検索結果が不完全になります。リストが大きくなりそうな場合は早めに対策が必要です。委任の警告の意味と対処法は&lt;a href=&quot;/powerapps-delegation-warning/&quot;&gt;委任の警告の解説&lt;/a&gt;で詳しく説明しています。&lt;/p&gt;
&lt;h2 id=&quot;レイアウトの調整とui&quot;&gt;レイアウトの調整とUI&lt;/h2&gt;
&lt;p&gt;ギャラリーはテンプレートに自由にコントロールを配置できます。ラベルだけでなくボタン・アイコン・画像なども置けます。ただし詰め込みすぎると視認性が下がります。&lt;/p&gt;
&lt;p&gt;私が現場で作ったアプリでは、ギャラリーの1行に表示するのはタイトル・ステータス・担当者の3つだけにしています。詳細はタップしてから詳細画面で見せる設計にすることで、一覧がスッキリしてユーザーが迷いません。Power Appsの見た目と使いやすさについては&lt;a href=&quot;/powerapps-uiux/&quot;&gt;UI/UX設計の考え方&lt;/a&gt;も参考にしてください。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;ギャラリーコントロールの要点はItemsプロパティ・ThisItem・Selectedの3つです。これを押さえると、一覧表示から検索・詳細遷移まで一通りのフローが作れます。&lt;/p&gt;
&lt;p&gt;最初はシンプルなリスト表示から始めて、慣れてきたら検索ボックスや絞り込みを追加していくのがおすすめです。アプリ開発の全体像は&lt;a href=&quot;/app-development-map/&quot;&gt;Power Apps開発の全体マップ&lt;/a&gt;で整理しています。&lt;/p&gt;</content:encoded></item><item><title>Power Apps ギャラリー完全ガイド｜表示・フィルター・選択・編集・応用の全パターン</title><link>https://shiminkaihatsu.com/powerapps-gallery-complete/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-gallery-complete/</guid><description>Power Apps ギャラリー完全ガイド｜表示・フィルター・選択・編集・応用の全パターン</description><pubDate>Sun, 29 Mar 2026 19:06:15 GMT</pubDate><content:encoded>&lt;p&gt;Power Apps のギャラリーコントロールは、データの表示・絞り込み・選択・編集・応用UI まで、アプリ開発のあらゆる場面で登場します。この記事では、ギャラリーを使いこなすために知っておくべき内容を5つのテーマに整理して解説します。各テーマの詳細記事へのリンクも掲載しているので、自分の課題に合った記事を選んで読み進めてください。&lt;/p&gt;
&lt;h2 id=&quot;ギャラリーコントロールとは&quot;&gt;ギャラリーコントロールとは&lt;/h2&gt;
&lt;p&gt;ギャラリーコントロールは、データソースのレコードを一覧表示するためのコントロールです。SharePoint リスト・Dataverse テーブル・コレクションなどを Items プロパティに設定するだけで、データを繰り返し表示できます。&lt;/p&gt;
&lt;p&gt;ギャラリーの特徴は、テンプレートと呼ばれる1行分のデザインを1つ作るだけで、全行に同じレイアウトが適用されるという点です。テンプレートを変更すれば全行に反映されるため、デザイン変更が簡単です。ギャラリーコントロールの基本的な使い方は&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-gallery/&quot;&gt;ギャラリーコントロールの基礎記事&lt;/a&gt;でも確認できます。&lt;/p&gt;
&lt;p&gt;この記事ではギャラリーを5つのテーマに分けて解説します。テーマ①表示・レイアウト、テーマ②フィルター・絞り込み、テーマ③選択と変数管理、テーマ④編集グリッド、テーマ⑤応用UIの順に進みます。&lt;/p&gt;
&lt;h2 id=&quot;テーマ表示レイアウト&quot;&gt;テーマ①：表示・レイアウト&lt;/h2&gt;
&lt;p&gt;ギャラリーの見た目はテンプレート内のコントロールで自由にカスタマイズできます。Power Apps が用意しているデフォルトのレイアウトには Image・Title・Subtitle・Body の4種類があり、どれを選ぶかによって初期配置が変わります。&lt;/p&gt;
&lt;p&gt;各フィールドのバインド変更（どのデータソース列を表示するか）はプロパティパネルから直感的に設定できます。ルックアップ列のドット記法や、複数列を連結して表示する方法など、実際の業務でよく使うカスタマイズを&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-gallery-layout/&quot;&gt;ギャラリーのレイアウト設定記事&lt;/a&gt;でまとめています。&lt;/p&gt;
&lt;p&gt;選択された行をハイライト表示する方法も押さえておきたいポイントです。TemplateFill プロパティに条件式を書くことで選択行の背景色を変えられますが、Gallery.Selected を使ったパターンと varRecord を使ったパターンでは挙動が異なります。TemplateFill の基本的な設定方法は&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-gallery-highlight/&quot;&gt;ギャラリーで選択行をハイライトする記事&lt;/a&gt;で解説しています。&lt;/p&gt;
&lt;h2 id=&quot;テーマフィルター絞り込み&quot;&gt;テーマ②：フィルター・絞り込み&lt;/h2&gt;
&lt;p&gt;ギャラリーに表示するデータを絞り込むには Filter 関数を使います。Filter 関数は条件が true になる行だけを返します。ドロップダウンやテキスト入力と連動させることで、ユーザーが操作しながらリアルタイムに絞り込めるUIが作れます。&lt;/p&gt;
&lt;p&gt;Filter 関数の基本構文とドロップダウン連動の書き方は&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-gallery-filter-basic/&quot;&gt;Filter 関数入門の記事&lt;/a&gt;で詳しく解説しています。&lt;/p&gt;
&lt;p&gt;ドロップダウンに全件表示のための選択肢（すべて）を追加したい場合は、IsBlank を使った条件分岐が定番パターンです。Table 関数で手動テーブルを作って Distinct と結合する方法も含めて、&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-gallery-filter-all/&quot;&gt;全件表示の追加方法の記事&lt;/a&gt;でまとめています。&lt;/p&gt;
&lt;p&gt;And・Or・範囲指定・StartsWith を組み合わせた複合フィルターの書き方は&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-gallery-filter-advanced/&quot;&gt;複合フィルターの記事&lt;/a&gt;に詳しいです。委任の制約も記事内で触れています。&lt;/p&gt;
&lt;p&gt;Dataverse のルックアップ列をフィルター条件にする場合は、文字列ではなく GUID による一致が必要です。これは SharePoint のルックアップ列とは仕組みが異なります。&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-gallery-filter-dataverse/&quot;&gt;Dataverse フィルターの書き方の記事&lt;/a&gt;でその仕組みを解説しています。&lt;/p&gt;
&lt;h2 id=&quot;テーマ選択と変数管理&quot;&gt;テーマ③：選択と変数管理&lt;/h2&gt;
&lt;p&gt;ギャラリーで選択したレコードをフォームに渡す方法として、Gallery.Selected を使うのはよくある間違いです。Gallery.Selected は便利に見えますが、新規入力モードとの組み合わせで選択ズレが発生し、保存後にフォームが前のレコードに戻るというバグが起きます。&lt;/p&gt;
&lt;p&gt;これを解決するのが varRecord 変数を使ったパターンです。OnSelect で UpdateContext({varRecord: ThisItem}) を実行して選択レコードを変数に格納し、フォームの Item は varRecord を参照させます。詳しい置き換え手順は&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-gallery-varrecord/&quot;&gt;Gallery.Selected を使ってはいけない理由と varRecord への置き換え方の記事&lt;/a&gt;で解説しています。&lt;/p&gt;
&lt;p&gt;varRecord を導入した後の新規追加・保存後のレコード選択・プレースホルダーUIの実装パターンまでをまとめた記事が&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-gallery-form/&quot;&gt;ギャラリーとフォームを変数でつなぐ記事&lt;/a&gt;です。OnSuccess での LastSubmit 活用など、実用的な実装パターンが一通り揃っています。&lt;/p&gt;
&lt;h2 id=&quot;テーマ編集グリッド&quot;&gt;テーマ④：編集グリッド&lt;/h2&gt;
&lt;p&gt;Excel のように行を直接編集できるUIが编集グリッドです。ギャラリーテンプレート内に TextInput や Dropdown を配置して、コレクションを中間バッファとして使うのが基本設計です。&lt;/p&gt;
&lt;p&gt;ClearCollect でコレクションを初期化する際の列型定義のコツや、DisplayMode プロパティで編集・閲覧モードを切り替える方法は&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-editable-grid-basics/&quot;&gt;編集グリッドの基本設計の記事&lt;/a&gt;でまとめています。&lt;/p&gt;
&lt;p&gt;行ごとの保存（Patch）・IsNew フラグを使った新規行と既存行の判別・削除確認ダイアログ・ForAll を使った一括保存の実装パターンは&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-editable-grid-save/&quot;&gt;編集グリッドのデータ保存の記事&lt;/a&gt;で解説しています。&lt;/p&gt;
&lt;h2 id=&quot;テーマ応用ui&quot;&gt;テーマ⑤：応用UI&lt;/h2&gt;
&lt;p&gt;ギャラリーの応用パターンとして、フレキシブル高さ・展開折りたたみ・複数選択・タブUIの4つを紹介します。&lt;/p&gt;
&lt;h3 id=&quot;フレキシブル高さギャラリー&quot;&gt;フレキシブル高さギャラリー&lt;/h3&gt;
&lt;p&gt;通常ギャラリーは行の高さが固定ですが、フレキシブル高さギャラリーは内容量に応じて行の高さが自動で変わります。コメント一覧や説明文など、テキスト量がばらつくデータに向いています。AutoHeight プロパティや TemplateSize の仕組みは&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-flexible-gallery-basics/&quot;&gt;フレキシブル高さギャラリー入門の記事&lt;/a&gt;で解説しています。&lt;/p&gt;
&lt;h3 id=&quot;展開折りたたみアコーディオン&quot;&gt;展開・折りたたみ（アコーディオン）&lt;/h3&gt;
&lt;p&gt;行をクリックすると詳細が展開されるアコーディオンUIは、Toggle・ネストギャラリー・コレクション Patch の3パターンで実装できます。行ごとに独立した状態を持てる理由と、Expand All / Collapse All の実装方法は&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-flexible-gallery-expand/&quot;&gt;展開・折りたたみの実装パターンの記事&lt;/a&gt;で詳しく解説しています。&lt;/p&gt;
&lt;h3 id=&quot;複数選択チェックボックス&quot;&gt;複数選択チェックボックス&lt;/h3&gt;
&lt;p&gt;ギャラリーの複数行にチェックを入れて一括操作するUIは、Gallery.AllItems プロパティを使って実現します。選択済みアイテムの取得・選択数の表示・Select All / Deselect All の実装は&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-gallery-multiselect/&quot;&gt;複数選択チェックボックスの実装記事&lt;/a&gt;でまとめています。選択中のときだけアクションエリアを表示するコンテナを使ったUIの作り方は&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-gallery-multiselect-ui/&quot;&gt;複数選択時のアクションエリアの記事&lt;/a&gt;で解説しています。&lt;/p&gt;
&lt;h3 id=&quot;タブui&quot;&gt;タブUI&lt;/h3&gt;
&lt;p&gt;モダンコントロールのタブが制限的な場面では、ギャラリーをタブバーとして使うパターンが有効です。コレクションでタブ一覧を管理して varSelectedTab で切り替える設計は、デザインの自由度が高くレスポンシブ対応も容易です。実装の流れ全体は&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-gallery-tabs/&quot;&gt;ギャラリーをタブUIとして使う記事&lt;/a&gt;で解説しています。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;📷 画像生成プロンプト&lt;/strong&gt;：白背景のクリーンな概念図。ギャラリーの5つの応用パターン（フレキシブル高さ・アコーディオン・複数選択・タブUI・編集グリッド）を5つのアイコンと短いキャプションで横並びに示すインフォグラフィック風の図解。各パターンは独立したブロックとして表現し、矢印やつながりは不要。白背景・シンプル・クリーン。&lt;/p&gt;
&lt;h2 id=&quot;まとめギャラリーの5テーマ早見表&quot;&gt;まとめ：ギャラリーの5テーマ早見表&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;テーマ&lt;/th&gt;
&lt;th&gt;内容&lt;/th&gt;
&lt;th&gt;主な記事&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;① 表示・レイアウト&lt;/td&gt;
&lt;td&gt;フィールドのバインド・ハイライト&lt;/td&gt;
&lt;td&gt;レイアウト設定・TemplateFill&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;② フィルター&lt;/td&gt;
&lt;td&gt;単一・複合・全件表示・Dataverse&lt;/td&gt;
&lt;td&gt;Filter基本〜Dataverseフィルター&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;③ 選択と変数管理&lt;/td&gt;
&lt;td&gt;varRecord・フォーム連携&lt;/td&gt;
&lt;td&gt;varRecord・ギャラリー×フォーム&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;④ 編集グリッド&lt;/td&gt;
&lt;td&gt;行内編集・保存・削除・一括保存&lt;/td&gt;
&lt;td&gt;編集グリッド基本・保存パターン&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;⑤ 応用UI&lt;/td&gt;
&lt;td&gt;フレキシブル・折りたたみ・複数選択・タブ&lt;/td&gt;
&lt;td&gt;グループE各記事&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;ギャラリーコントロールは Power Apps の中でも使う頻度が特に高い部品です。表示から始めて、フィルター・変数管理・編集グリッドと段階的に習得していくと、できることの幅が大きく広がります。一つひとつ手を動かしながら積み重ねていきましょう。&lt;/p&gt;</content:encoded></item><item><title>Power Apps ギャラリーの複合フィルター｜And・Or・範囲・StartsWith を組み合わせる</title><link>https://shiminkaihatsu.com/powerapps-gallery-filter-advanced/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-gallery-filter-advanced/</guid><description>Power Apps ギャラリーの複合フィルター｜And・Or・範囲・StartsWith を組み合わせる</description><pubDate>Sun, 29 Mar 2026 19:06:16 GMT</pubDate><content:encoded>&lt;p&gt;Filter 関数の基本と全件表示対応を覚えたら、次は And・Or・範囲・StartsWith を組み合わせた複合フィルターです。複数の Dropdown を使った絞り込みや、テキスト入力での範囲指定まで実装できるようになります。&lt;/p&gt;
&lt;h2 id=&quot;and複数条件がすべて-true-のときだけ返す&quot;&gt;And：複数条件がすべて true のときだけ返す&lt;/h2&gt;
&lt;p&gt;And は複数の条件をすべて満たす行だけを返します。ステータスと担当者の両方で絞り込む場合は次のように書きます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(Tasks, Status &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; Dropdown1.Selected.Value &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;And&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; AssignedTo &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; Dropdown2.Selected.Value)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And を使うと条件が増えるほど絞り込みが厳しくなります。3つ以上の条件を繋ぐことも可能で、同じように And を続けるだけです。&lt;/p&gt;
&lt;p&gt;複合条件を書くときは、各条件を単独でテストして動くことを確認してから And で繋ぐのがコツです。最初から全部書こうとするとどこが間違っているか特定しにくくなります。&lt;a href=&quot;/powerapps-gallery-filter-basic/&quot;&gt;Filter 関数の入門記事&lt;/a&gt;で解説したハードコードでの動作確認の手順と同じ考え方です。&lt;/p&gt;
&lt;h2 id=&quot;orどちらかが-true-なら返す&quot;&gt;Or：どちらかが true なら返す&lt;/h2&gt;
&lt;p&gt;Or は条件のどちらか一方が true なら行を返します。複数のステータスをまとめて表示したいときに使います。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(Tasks, Status &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot;未着手&quot;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; Or&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; Status &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot;進行中&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-gallery-filter-advanced01.CX-0Khec_2krBuH.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;p&gt;Dropdown に全件表示の All を追加するパターンでもすでに Or を使っています。&lt;a href=&quot;/powerapps-gallery-filter-all/&quot;&gt;Or と IsBlank を組み合わせた全件表示&lt;/a&gt;で詳しく解説しているので、そちらも合わせて確認しておくと Or の使い所が一気に広がります。&lt;/p&gt;
&lt;h2 id=&quot;括弧による条件のグループ化&quot;&gt;括弧による条件のグループ化&lt;/h2&gt;
&lt;p&gt;And と Or を混在させる場合、括弧を使って評価の優先順位を明確にする必要があります。括弧なしで書くと And の方が Or より優先されるため、意図しない絞り込みになることがあります。&lt;/p&gt;
&lt;p&gt;複数の Dropdown にそれぞれ全件表示（All）を持たせる実装例を示します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    Tasks,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    (Dropdown1.Selected.Value &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot;All&quot;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; Or&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; Status &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; Dropdown1.Selected.Value)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;    And&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    (Dropdown2.Selected.Value &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot;All&quot;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; Or&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; AssignedTo &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; Dropdown2.Selected.Value)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-gallery-filter-advanced02.Chip5XGq_Z1pUBGb.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;p&gt;各 Dropdown のブロックを括弧でくくり、And で繋いでいます。このパターンを覚えると、Dropdown を何個追加しても同じ構造で対応できます。1ブロックずつ追加・動作確認しながら組み立てていきましょう。&lt;/p&gt;
&lt;h2 id=&quot;範囲フィルター数値日付&quot;&gt;範囲フィルター（数値・日付）&lt;/h2&gt;
&lt;p&gt;数値や日付の範囲で絞り込むには &amp;gt; と &amp;lt; を組み合わせます。&lt;/p&gt;
&lt;h3 id=&quot;数値の範囲指定&quot;&gt;数値の範囲指定&lt;/h3&gt;
&lt;p&gt;予算が 10,000 以上 50,000 以下の行を返す例です。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(Tasks, Budget &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 10000&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; And&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; Budget &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&amp;#x3C;=&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 50000&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;上限・下限のどちらかだけを指定したい場合は片方だけ書けばよいです。たとえば Budget &amp;gt;= 10000 だけなら、10,000 以上の行をすべて返します。&lt;/p&gt;
&lt;h3 id=&quot;textinput-で最小値最大値を動的指定する&quot;&gt;TextInput で最小値・最大値を動的指定する&lt;/h3&gt;
&lt;p&gt;テキスト入力コントロール（TextInput）を使うと、ユーザーが最小値・最大値を入力して動的に絞り込めます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    Tasks,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    Budget &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; Value&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(MinInput.Text) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;And&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; Budget &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&amp;#x3C;=&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; Value&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(MaxInput.Text)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;TextInput の Text プロパティはテキスト型のため、数値列との比較には Value 関数で型変換が必要です。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-gallery-filter-advanced03.CK_8pTdt_GwoyT.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;p&gt;これを忘れると型エラーになります。私はこの変換を忘れて何度かエラーに悩みましたが、数値の入力欄は必ず Value() を使う、と覚えてからはスムーズに書けるようになりました。&lt;/p&gt;
&lt;p&gt;なお、TextInput が空のときに Value(MinInput.Text) は 0 または Blank() を返します。空欄のとき全件を返したい場合は IsBlank 判定を追加してください。&lt;/p&gt;
&lt;h3 id=&quot;日付の範囲指定&quot;&gt;日付の範囲指定&lt;/h3&gt;
&lt;p&gt;日付範囲の絞り込みには DatePicker コントロールを使うのが便利です。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    Tasks,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    DueDate &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; DatePicker1.SelectedDate &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;And&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; DueDate &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&amp;#x3C;=&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; DatePicker2.SelectedDate&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;DatePicker.SelectedDate は Date 型を直接返すため、型変換なしで日付列と比較できます。SharePoint の日付列は DateTime 型であることが多く、時刻の差異で一致しないケースがあります。そのときは DateValue 関数で日付部分だけを取り出して比較します。&lt;/p&gt;
&lt;h2 id=&quot;startswith前方一致フィルター&quot;&gt;StartsWith：前方一致フィルター&lt;/h2&gt;
&lt;p&gt;StartsWith は列の値が指定した文字列で始まる行を返します。テキスト検索ボックスと組み合わせて使うのが典型的なパターンです。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(Tasks, &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;StartsWith&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(Title, SearchInput.Text))&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;タイトルの前方一致で絞り込む例です。SearchInput にテキストを入力するたびに、ギャラリーがリアルタイムで絞り込まれます。&lt;/p&gt;
&lt;h3 id=&quot;startswith-か-search-か&quot;&gt;StartsWith か Search か&lt;/h3&gt;
&lt;p&gt;テキスト検索には StartsWith（前方一致）と Search（部分一致）の2つの選択肢があります。&lt;a href=&quot;/powerapps-filter-search-lookup/&quot;&gt;Filter・Search・LookUp の使い分け&lt;/a&gt;でも触れていますが、委任の観点では大きな違いがあります。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;関数&lt;/th&gt;
&lt;th&gt;マッチ方式&lt;/th&gt;
&lt;th&gt;委任&lt;/th&gt;
&lt;th&gt;向いている用途&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;StartsWith&lt;/td&gt;
&lt;td&gt;前方一致&lt;/td&gt;
&lt;td&gt;SharePoint・Dataverse で委任可&lt;/td&gt;
&lt;td&gt;コード番号・氏名の頭文字など&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Search&lt;/td&gt;
&lt;td&gt;部分一致&lt;/td&gt;
&lt;td&gt;委任不可&lt;/td&gt;
&lt;td&gt;件数が少ないリストのキーワード検索&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;大量データのテキスト検索には StartsWith を使うか、検索対象を件数の少ないリストに限定するか、どちらかを選択してください。Search を使いたい場合は委任の上限（既定 500〜2,000件）を超えないか事前に確認が必要です。委任の仕組みと対処法については&lt;a href=&quot;/powerapps-delegation-warning/&quot;&gt;委任の警告と対処法&lt;/a&gt;を参考にしてください。&lt;/p&gt;
&lt;h2 id=&quot;全部組み合わせた実装例&quot;&gt;全部組み合わせた実装例&lt;/h2&gt;
&lt;p&gt;Dropdown 2つ・テキスト検索・日付範囲をまとめて組み合わせた複合フィルターの例を示します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    Tasks,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    (Dropdown1.Selected.Value &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot;All&quot;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; Or&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; Status &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; Dropdown1.Selected.Value)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;    And&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    (Dropdown2.Selected.Value &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot;All&quot;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; Or&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; AssignedTo &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; Dropdown2.Selected.Value)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;    And&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    StartsWith&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(Title, SearchInput.Text)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;    And&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    DueDate &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; DatePicker1.SelectedDate&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;    And&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    DueDate &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&amp;#x3C;=&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; DatePicker2.SelectedDate&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-gallery-filter-advanced04.eOrhBkRu_Z1zUaUJ.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;670&quot;&gt;&lt;/p&gt;
&lt;p&gt;長い数式ですが、各ブロックは独立しているので1つずつ追加・確認しながら組み立てられます。私は常にこの方法で複合フィルターを組み立てます。Dropdown1 の条件だけで動作確認 → Dropdown2 を追加 → テキスト検索を追加 → 日付範囲を追加、という順番で進めると詰まりにくいです。&lt;/p&gt;
&lt;p&gt;なおこの数式ではすべての条件が常に評価されます。DatePicker が初期状態のとき、DueDate &amp;gt;= DatePicker1.SelectedDate が予期しない結果を返す場合があります。&lt;/p&gt;
&lt;p&gt;DatePicker を空にしたときは全件を返すよう IsBlank 判定を追加するなど、実装後の動作確認も丁寧に行いましょう。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;And・Or・範囲・StartsWith を組み合わせることで、業務アプリで必要なフィルターのほぼすべてを実装できます。複雑に見えますが、各ブロックはシンプルなルールの積み重ねです。1つずつ追加・確認しながら組み立てるのが、完成への最短ルートです。&lt;/p&gt;
&lt;p&gt;フィルターを使いこなせると、アプリの検索・絞り込み体験が大きく向上します。次はギャラリーの選択行ハイライトや、フォームとの変数連動にも挑戦してみましょう。&lt;a href=&quot;/powerapps-gallery-layout/&quot;&gt;レイアウトの設定&lt;/a&gt;と組み合わせることで、見た目も機能も整ったギャラリー画面が完成します。&lt;/p&gt;
&lt;p&gt;ギャラリーの使い方を&lt;a href=&quot;/powerapps-gallery-complete/&quot;&gt;一覧でまとめた記事はこちら&lt;/a&gt;からご覧ください。&lt;/p&gt;</content:encoded></item><item><title>Power Apps ギャラリーに「すべて表示」を追加する｜Or + IsBlankパターン完全解説</title><link>https://shiminkaihatsu.com/powerapps-gallery-filter-all/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-gallery-filter-all/</guid><description>Power Apps ギャラリーに「すべて表示」を追加する｜Or + IsBlankパターン完全解説</description><pubDate>Sun, 29 Mar 2026 19:06:16 GMT</pubDate><content:encoded>&lt;p&gt;Dropdown でデータを絞り込めるようにしたら、次に欲しくなるのが全件表示に戻すオプションです。Or 方式と IsBlank 方式の2パターンを整理しておきます。どちらも覚えておくと実務で必ず役に立ちます。&lt;/p&gt;
&lt;h2 id=&quot;all-を追加したいという典型的なニーズ&quot;&gt;All を追加したいという典型的なニーズ&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;/powerapps-gallery-filter-basic/&quot;&gt;Filter 関数と Dropdown を連動させる&lt;/a&gt;と、常に何かが選択された状態になります。最初は気にならなくても、アプリを使っていると全件を見直したい場面が必ず出てきます。社内アプリを展開したとき、ユーザーから「全部表示に戻すにはどうするの？」という質問が来ることは珍しくありません。&lt;/p&gt;
&lt;p&gt;対策は2つあります。Dropdown の選択肢に All を追加して Or 条件で全件を返す方法と、Dropdown の Allow empty selection をOnにして IsBlank で全件表示に切り替える方法です。それぞれ見ていきます。&lt;/p&gt;
&lt;h2 id=&quot;パターン1or-方式dropdown-に-all-を追加&quot;&gt;パターン1：Or 方式（Dropdown に All を追加）&lt;/h2&gt;
&lt;h3 id=&quot;distinct-に-all-の行を追加する&quot;&gt;Distinct に All の行を追加する&lt;/h3&gt;
&lt;p&gt;Dropdown の Items に Distinct 関数を使っている場合、そのままでは All という選択肢が含まれません。Table 関数と Ungroup を組み合わせることで、Distinct の結果に All を先頭に追加できます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Ungroup&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Table&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        {Value: &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;All&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        {Value: &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Distinct&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(Tasks, Status)}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    ),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;    &quot;Value&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;少し複雑に見えますが、やっていることはシンプルです。{Value: “All”} という1行のレコードと、Distinct が返したテーブルを Table 関数でまとめ、Ungroup でフラットなテーブルに展開しているだけです。このテーブルを Dropdown の Items に指定します。&lt;/p&gt;
&lt;p&gt;なお Distinct 関数は委任対象外のため、2,000件を超えるデータには注意が必要です。この点については&lt;a href=&quot;/powerapps-delegation-warning/&quot;&gt;委任警告の解説記事&lt;/a&gt;で詳しくまとめています。大量データを扱う場合は選択肢の管理方法も合わせて検討してください。&lt;/p&gt;
&lt;h3 id=&quot;or-でall-選択時のロジックを書く&quot;&gt;Or でAll 選択時のロジックを書く&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-gallery-filter-all01.Btex--b-_BDu89.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;p&gt;Dropdown.Selected.Value が All のとき、フィルターをスキップして全件返すには Or 条件を使います。ギャラリーの Items を次のように変更します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    Tasks,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    Dropdown1.Selected.Value &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot;All&quot;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; Or&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; Status &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; Dropdown1.Selected.Value&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Or の最初の条件（Dropdown1.Selected.Value = “All”）が true になると、Power Apps の短絡評価により2つ目の条件は評価されず、行全体が true になります。結果として全件が返ります。All 以外の値が選ばれているときは最初の条件が false になるため、Status の一致で通常の絞り込みが行われます。&lt;/p&gt;
&lt;h3 id=&quot;default-を設定して初期表示を-all-にする&quot;&gt;Default を設定して初期表示を All にする&lt;/h3&gt;
&lt;p&gt;アプリ起動時に All が選ばれた状態で全件表示したい場合は、Dropdown の Default プロパティに次を設定します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;{Value: &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;All&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;これだけで、アプリを開いたときに自動で All が選択された状態になります。&lt;/p&gt;
&lt;h2 id=&quot;パターン2isblank-方式allow-empty-selection&quot;&gt;パターン2：IsBlank 方式（Allow empty selection）&lt;/h2&gt;
&lt;h3 id=&quot;allow-empty-selection-の設定&quot;&gt;Allow empty selection の設定&lt;/h3&gt;
&lt;p&gt;Dropdown には Allow empty selection（空選択を許可）というプロパティがあります。これをOnにすると、選択肢の最上部に空の選択肢（未選択状態）が表示されます。Dropdown を選択した状態で右ペインのプロパティを開き、Allow empty selection をOnに変更するだけです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-gallery-filter-all02.C0iH478t_ZfuLjc.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;isblank-で空選択を全件表示に変換する&quot;&gt;IsBlank で空選択を全件表示に変換する&lt;/h3&gt;
&lt;p&gt;空選択状態のとき Dropdown1.Selected.Value は空白（Blank）になります。IsBlank と Or を組み合わせることで、未選択時を全件表示に変換できます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-gallery-filter-all03.CaFu5-Zs_Z2pzxjr.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    Tasks,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    IsBlank&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(Dropdown1.Selected.Value) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;Or&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; Status &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; Dropdown1.Selected.Value&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;IsBlank(Dropdown1.Selected.Value) が true のとき、つまり何も選ばれていないとき、Or 条件全体が true になり全件が返ります。IsBlank は Power Apps でよく使う判定関数で、&lt;a href=&quot;/powerapps-filter-search-lookup/&quot;&gt;Filter・Search・LookUp の使い分け記事&lt;/a&gt;でも関連する使い方を紹介しています。&lt;/p&gt;
&lt;h2 id=&quot;or-方式-vs-allow-empty-方式の比較&quot;&gt;Or 方式 vs Allow empty 方式の比較&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;比較項目&lt;/th&gt;
&lt;th&gt;Or 方式（All 追加）&lt;/th&gt;
&lt;th&gt;Allow empty 方式&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Dropdown の見た目&lt;/td&gt;
&lt;td&gt;All が選択肢に表示される&lt;/td&gt;
&lt;td&gt;空欄が表示される&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ユーザーへの直感性&lt;/td&gt;
&lt;td&gt;All があり分かりやすい&lt;/td&gt;
&lt;td&gt;空欄の意味が伝わりにくい&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;実装の複雑さ&lt;/td&gt;
&lt;td&gt;Table＋Ungroup が必要&lt;/td&gt;
&lt;td&gt;IsBlank だけで完結&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;初期全件表示&lt;/td&gt;
&lt;td&gt;Default に {Value:“All”} を設定&lt;/td&gt;
&lt;td&gt;自然に空選択で全件表示&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;個人的には Or 方式の方が好きです。ユーザーに All という選択肢が見えるので、操作が直感的に理解できます。Allow empty 方式は実装はシンプルですが、空欄が何を意味するのか説明なしには伝わりにくいケースがあります。社内アプリを展開するとき、説明なしで使ってもらえる設計を優先しています。&lt;/p&gt;
&lt;p&gt;一方で Allow empty 方式の方が合うケースもあります。たとえば検索フィルターとして使う場合、未入力＝全件という動作は直感的です。アプリの用途やユーザーの特性に合わせて選んでください。&lt;/p&gt;
&lt;h2 id=&quot;複数条件のフィルターに拡張する&quot;&gt;複数条件のフィルターに拡張する&lt;/h2&gt;
&lt;p&gt;全件表示を実装したら、次は複数の Dropdown を組み合わせた複合フィルターにも挑戦できます。And を使って複数条件をすべて満たす行を絞り込んだり、日付の範囲指定を組み合わせたりするパターンです。&lt;/p&gt;
&lt;p&gt;たとえばステータスと担当者の両方で絞り込む場合は次のように書きます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    Tasks,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    (Dropdown1.Selected.Value &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot;All&quot;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; Or&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; Status &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; Dropdown1.Selected.Value)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;    And&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    (Dropdown2.Selected.Value &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot;All&quot;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; Or&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; AssignedTo &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; Dropdown2.Selected.Value)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;条件のブロックを And で繋ぐだけです。各ブロックの中に Or 方式の全件表示ロジックをそのまま使い回せます。複合フィルターを作ると、アプリの検索・絞り込み機能が一気に実用的になります。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;全件表示への切り替えは、Or 方式と IsBlank 方式の2つで確実に実装できます。ユーザーの使いやすさを優先するなら Or 方式、コードをシンプルに保ちたいなら Allow empty 方式が向いています。&lt;/p&gt;
&lt;p&gt;Filter 関数の基礎から全件表示対応まで身に付けると、業務アプリで必要なリスト絞り込みのほとんどを自力で作れるようになります。&lt;a href=&quot;/powerapps-gallery-filter-basic/&quot;&gt;Filter 関数入門&lt;/a&gt;と合わせて読んでおくと、ギャラリーの絞り込み機能を一通り理解できます。楽しみながら開発を進めましょう。&lt;/p&gt;
&lt;p&gt;ギャラリーの使い方を&lt;a href=&quot;/powerapps-gallery-complete/&quot;&gt;一覧でまとめた記事はこちら&lt;/a&gt;からご覧ください。&lt;/p&gt;</content:encoded></item><item><title>Power Apps ギャラリーのFilter関数入門｜単一条件・Dropdown連動の基本パターン</title><link>https://shiminkaihatsu.com/powerapps-gallery-filter-basic/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-gallery-filter-basic/</guid><description>Power Apps ギャラリーのFilter関数入門｜単一条件・Dropdown連動の基本パターン</description><pubDate>Sun, 29 Mar 2026 19:06:17 GMT</pubDate><content:encoded>&lt;p&gt;Filter 関数の使い方を覚えると、ギャラリーで表示するデータを自由に絞り込めるようになります。構文はシンプルですが、Dropdown との連動・委任の落とし穴まで理解しておくと、実務で詰まることが大幅に減ります。&lt;/p&gt;
&lt;h2 id=&quot;filter-関数の基本構文&quot;&gt;Filter 関数の基本構文&lt;/h2&gt;
&lt;p&gt;Filter 関数は、テーブルと条件式の2つを引数に取ります。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(テーブル名, 条件式)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;テーブル名には SharePoint リストや Dataverse テーブルのデータソース名を指定します。条件式には true/false を返す式を書きます。Filter 関数はテーブルの各行に対して条件を評価し、true になった行だけを返します。簡単にいえば、条件を満たすレコードだけを通過させるフィルター、というイメージです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-gallery-filter-basic01.KtqRW8H2_l3vpL.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;条件がtrueであれば返すという考え方&quot;&gt;条件がtrueであれば返す、という考え方&lt;/h3&gt;
&lt;p&gt;Excel のフィルター機能は手動で操作しますが、Power Apps の Filter 関数は数式として書くため、変数やコントロールの値と連動できます。Dropdown で選んだ値をそのまま条件式に組み込めるのは、このおかげです。&lt;/p&gt;
&lt;p&gt;条件式が false になった行は返ってきません。全件表示に戻したい場合は、Dropdown に All を追加して Or 条件と組み合わせる方法が一般的です。全件表示対応のパターンは&lt;a href=&quot;/powerapps-gallery-filter-all/&quot;&gt;次の記事&lt;/a&gt;で詳しく解説しています。&lt;/p&gt;
&lt;h2 id=&quot;列は左辺値は右辺というルール&quot;&gt;列は左辺・値は右辺というルール&lt;/h2&gt;
&lt;p&gt;Filter 関数の条件式は、必ず列名を左辺に、比較する値を右辺に書きます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(Tasks, Status &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot;完了&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Tasks テーブルから Status 列が 完了 に一致する行だけを返す例です。左辺が列・右辺が値、というルールは必ず守ってください。逆に書いても一見動くことがありますが、委任（Delegation）の観点から問題が生じます。委任とは Power Apps がデータソース側にクエリを委譲する仕組みのことで、左辺に列を置くことで委任が正しく機能します。委任については&lt;a href=&quot;/powerapps-delegation-warning/&quot;&gt;Power Apps の委任警告の解説&lt;/a&gt;でまとめているので、フィルターを使い始めたタイミングで一読しておくことをおすすめします。&lt;/p&gt;
&lt;p&gt;比較演算子は = の他に &amp;lt;&amp;gt;（不一致）・&amp;gt;・&amp;lt;・&amp;gt;=・&amp;lt;= も使えます。テキストの前方一致には StartsWith 関数、部分一致には In 演算子を使います。&lt;/p&gt;
&lt;h2 id=&quot;まずはハードコードで動作確認する&quot;&gt;まずはハードコードで動作確認する&lt;/h2&gt;
&lt;p&gt;Filter 関数を初めて使うときは、値をいったんハードコードして動作を確認することをおすすめします。動くことを確認してから Dropdown と連動させると、問題の切り分けがしやすくなります。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(Tasks, AssignedTo &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot;守屋&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;私自身、最初からDropdownと組み合わせようとして、どこで詰まっているのかわからない状態になったことがあります。シンプルな条件で動作を確認してから段階的に複雑にしていくのが、Power Apps 開発の基本的な進め方です。&lt;/p&gt;
&lt;p&gt;ギャラリーの Items プロパティに Filter 関数を書く場合は次のようになります。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(TasksList, AssignedTo &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot;守屋&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-gallery-filter-basic02.xk9AbEGI_Z1PjkAM.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;p&gt;TasksList は接続したデータソースの名前です。ギャラリーにデータソースを接続する基本的な手順については&lt;a href=&quot;/powerapps-gallery/&quot;&gt;ギャラリーコントロールの基礎記事&lt;/a&gt;も参考にしてください。&lt;/p&gt;
&lt;h2 id=&quot;dropdown-と-filter-関数を連動させる&quot;&gt;Dropdown と Filter 関数を連動させる&lt;/h2&gt;
&lt;p&gt;ハードコードで動作確認できたら、次は Dropdown の選択値と連動させます。ここが Filter 関数の実用的な使い方の核心です。&lt;/p&gt;
&lt;h3 id=&quot;dropdown-を配置して-items-を設定する&quot;&gt;Dropdown を配置して Items を設定する&lt;/h3&gt;
&lt;p&gt;まずスクリーンに Dropdown コントロールを追加します。Items プロパティに選択肢を設定してください。ひとまず手動でテキストを入力するなら次のように書きます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;未着手&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;進行中&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;完了&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;この段階では選択肢がハードコードになっていますが、まず動作の確認を優先します。&lt;/p&gt;
&lt;h3 id=&quot;dropdownselectedvalue-を条件に使う&quot;&gt;Dropdown.Selected.Value を条件に使う&lt;/h3&gt;
&lt;p&gt;Dropdown を配置したら、ギャラリーの Items を次のように変更します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(Tasks, Status &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; Dropdown1.Selected.Value)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Dropdown1.Selected.Value は、Dropdown で現在選ばれている項目の Value プロパティです。ここを条件の右辺に置くだけで Dropdown と連動したフィルターが完成します。Dropdown の選択が変わるたびにギャラリーが自動で再描画されるため、OnSelect やボタンは不要です。Power Apps のリアクティブな動作のおかげで、このシンプルな数式一行だけで連動が実現します。&lt;/p&gt;
&lt;h3 id=&quot;distinct-でdropdown-の選択肢を自動生成する&quot;&gt;Distinct でDropdown の選択肢を自動生成する&lt;/h3&gt;
&lt;p&gt;Dropdown の選択肢を手動で管理するのは手間がかかります。データが増えるたびに選択肢を更新しなければならないからです。Distinct 関数を使えば、データソースの列から重複を除いた一覧を自動で生成できます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Distinct&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(Tasks, Status)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;このテーブルを Dropdown の Items に指定します。データが追加されると選択肢が自動更新されるので、メンテナンスコストを大幅に下げられます。&lt;/p&gt;
&lt;p&gt;ただし Distinct を使う場合、Dropdown の Value プロパティが Result になります。Filter 関数の条件式では Dropdown1.Selected.Value ではなく Dropdown1.Selected.Result を使う必要があります。ここで詰まる方が多いので注意してください。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-gallery-filter-basic03.o7RJlSL7_29ybcK.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;p&gt;なお、Filter・Search・LookUp の3つの関数はそれぞれ用途が異なります。絞り込み以外の使い方も含めて理解したい方は&lt;a href=&quot;/powerapps-filter-search-lookup/&quot;&gt;Filter・Search・LookUp関数の違いと使い分け&lt;/a&gt;を参照してください。&lt;/p&gt;
&lt;h2 id=&quot;distinct-は委任対象外なので注意&quot;&gt;Distinct は委任対象外なので注意&lt;/h2&gt;
&lt;p&gt;Filter 関数自体は SharePoint や Dataverse に対して委任が効きますが、Distinct 関数は委任対象外です。つまり、2,000件を超えるテーブルに対して Distinct を使っても、先頭 2,000件の中からしか選択肢が生成されません。&lt;/p&gt;
&lt;p&gt;たとえば20人が使う日報アプリで1日20件、月400件、5ヶ月で2,000件を超えます。件数が増えてくるタイミングで Distinct が正しく動かなくなるため、初期設計の段階で考慮しておく必要があります。委任の仕組みを理解しておくと、こういったトラブルを未然に防げます。&lt;a href=&quot;/powerapps-delegation-warning/&quot;&gt;委任の警告と対処法&lt;/a&gt;もあわせて確認しておきましょう。&lt;/p&gt;
&lt;p&gt;Distinct の委任制限を回避したい場合は、SharePoint の選択肢列や Dataverse の Choices 型で選択肢を管理して、Choices 関数または ColumnValues 関数で取得する方法を検討してください。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;Filter 関数の基本は、テーブルと条件式の2つを書くだけです。まずハードコードで動作確認し、次に Dropdown と連動させ、さらに Distinct で選択肢を自動生成する、という順番で進めると詰まりにくいです。&lt;/p&gt;
&lt;p&gt;絞り込みができるギャラリーが完成すると、アプリの使いやすさが格段に上がります。次のステップとして、絞り込み後に全件表示へ戻す仕組みも作っておきましょう。&lt;a href=&quot;/powerapps-gallery-filter-all/&quot;&gt;Or と IsBlank を使った全件表示パターン&lt;/a&gt;で詳しく解説しています。フィルターを使いこなせると、業務アプリらしいリスト画面が自力で作れるようになります。&lt;/p&gt;
&lt;p&gt;ギャラリーの使い方を&lt;a href=&quot;/powerapps-gallery-complete/&quot;&gt;一覧でまとめた記事はこちら&lt;/a&gt;からご覧ください。&lt;/p&gt;</content:encoded></item><item><title>Power Apps × DataverseのギャラリーをDropdownで絞り込む｜ルックアップ列フィルターの書き方</title><link>https://shiminkaihatsu.com/powerapps-gallery-filter-dataverse/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-gallery-filter-dataverse/</guid><description>Power Apps × DataverseのギャラリーをDropdownで絞り込む｜ルックアップ列フィルターの書き方</description><pubDate>Sun, 29 Mar 2026 19:06:13 GMT</pubDate><content:encoded>&lt;p&gt;Dataverse のルックアップ列を Filter 関数の条件にするとき、SharePoint のルックアップ列と同じ書き方をしても動きません。GUID による一致という仕組みを理解すると、詰まることなく実装できます。&lt;/p&gt;
&lt;h2 id=&quot;dataverse-のルックアップ列をフィルター条件にするときの特殊性&quot;&gt;Dataverse のルックアップ列をフィルター条件にするときの特殊性&lt;/h2&gt;
&lt;p&gt;SharePoint のルックアップ列であれば、Filter 関数の条件式に列名と表示名（文字列）の一致を書けば動きます。ところが Dataverse のルックアップ列（リレーション列）は、文字列ではなくレコード型を返します。表示名での比較を試みても一致しないため、絞り込みが機能しません。&lt;/p&gt;
&lt;p&gt;この問題でつまずく方は非常に多いです。私自身、SharePoint で慣れた書き方をそのまま使って動かず、しばらく原因がわからなかったことがあります。Dataverse のフィルターは GUID の一致で行う、と最初に知っておくだけで無駄な時間を省けます。&lt;/p&gt;
&lt;h2 id=&quot;テーブル名テーブル名-が-guid-を返す仕組み&quot;&gt;テーブル名.テーブル名 が GUID を返す仕組み&lt;/h2&gt;
&lt;p&gt;Dataverse のルックアップ列（たとえば 担当者 列がユーザーテーブルを参照している場合）を参照すると、Power Apps はそのリレーション先のレコードを返します。さらにそのレコードに対してリレーション先のテーブル名をドット記法で続けると、プライマリキー（GUID）が返ってきます。&lt;/p&gt;
&lt;p&gt;Tasks テーブルに 担当者 というルックアップ列があり、それが Users テーブルを参照している場合、次のように書くと担当者の GUID が取得できます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;ThisItem.担当者.Users&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;末尾の Users はリレーション先のテーブル名で、これが GUID（一意識別子）を返します。Dataverse の GUID については&lt;a href=&quot;/dataverse-guid/&quot;&gt;DataverseにIDがない理由｜GUIDとは何か&lt;/a&gt;で解説しているので、仕組みを先に理解しておくとスムーズです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-gallery-filter-dataverse01.BSNw2Uv-_1yFH6.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;dropdownselectedテーブル名-との一致でフィルターする&quot;&gt;Dropdown.Selected.テーブル名 との一致でフィルターする&lt;/h2&gt;
&lt;p&gt;仕組みを理解したら、実際の Filter 関数を書きます。Dropdown のデータソースを Users テーブルに設定している場合、Dropdown で選択されたレコードの GUID は次のように取得できます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;Dropdown1.Selected.Users&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;これをギャラリーの Items の Filter 関数に組み込みます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    Tasks,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    担当者.Users &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; Dropdown1.Selected.Users&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;左辺の 担当者.Users がレコード側の GUID、右辺の Dropdown1.Selected.Users が Dropdown で選択された行の GUID です。同じ型同士の比較になるため、正しく一致判定が行われます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-gallery-filter-dataverse02.C2e4wRHn_Z2itm6Q.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;dropdown-の-items-に-users-テーブルを設定する&quot;&gt;Dropdown の Items に Users テーブルを設定する&lt;/h3&gt;
&lt;p&gt;Dropdown の Items プロパティには Users テーブルをそのまま指定します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;Users&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;画面上は名前が表示されていても、内部では GUID で比較しているのがポイントです。Dropdown の DisplayFields プロパティで表示列を氏名列などに設定すると、ユーザーには名前が見えた状態で GUID フィルターを実現できます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-gallery-filter-dataverse03.BEqm0Qpe_Z1cbWnX.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;名前一致ではなく-guid-一致を使う理由&quot;&gt;名前一致ではなく GUID 一致を使う理由&lt;/h2&gt;
&lt;p&gt;名前（文字列）での一致が使えないのには設計上の理由があります。Dataverse のルックアップ列は、表示名ではなくリレーション先レコードの一意識別子（GUID）で関係を管理しているからです。&lt;/p&gt;
&lt;p&gt;たとえば同姓同名の担当者が2人いる場合、名前で比較すると両方がヒットしてしまいます。GUID はレコードごとに必ず異なるため、正確な絞り込みができます。Dataverse がリレーションを GUID で管理している設計上、フィルターも GUID で行うのが唯一の正しいアプローチです。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;/powerapps-gallery-filter-basic/&quot;&gt;Filter 関数の基本&lt;/a&gt;では SharePoint を前提にした条件式を解説しています。Dataverse を使う場合はこの違いを意識しながら書くようにしてください。&lt;/p&gt;
&lt;h2 id=&quot;isblank-と-or-で全件表示に対応する&quot;&gt;IsBlank と Or で全件表示に対応する&lt;/h2&gt;
&lt;p&gt;Dropdown で何も選ばれていないとき全件表示に戻す実装も追加しておきましょう。&lt;a href=&quot;/powerapps-gallery-filter-all/&quot;&gt;Or と IsBlank を使った全件表示パターン&lt;/a&gt;と同じ考え方で書けます。&lt;/p&gt;
&lt;h3 id=&quot;isblank-方式allow-empty-selection&quot;&gt;IsBlank 方式（Allow empty selection）&lt;/h3&gt;
&lt;p&gt;Dropdown の Allow empty selection をOnにしておくと、未選択時に Dropdown1.Selected.Users が Blank になります。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    Tasks,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    IsBlank&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(Dropdown1.Selected.Users) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;Or&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; 担当者.Users &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; Dropdown1.Selected.Users&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;IsBlank が true のとき Or 全体が true になり、全件が返ります。Dataverse を使う場合、All の選択肢を別途追加するより IsBlank 方式の方が型変換の問題が起きにくく、個人的にはこちらをよく使います。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-gallery-filter-dataverse04.Degk8QeO_IyamQ.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;670&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;sharepoint-のルックアップ列との比較&quot;&gt;SharePoint のルックアップ列との比較&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;比較項目&lt;/th&gt;
&lt;th&gt;SharePoint ルックアップ列&lt;/th&gt;
&lt;th&gt;Dataverse ルックアップ列&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;フィルターの比較対象&lt;/td&gt;
&lt;td&gt;表示名（文字列）でも可&lt;/td&gt;
&lt;td&gt;GUID（一意識別子）で行う&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;値の取得方法&lt;/td&gt;
&lt;td&gt;ThisItem.列名.Value&lt;/td&gt;
&lt;td&gt;ThisItem.列名.テーブル名&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dropdown の Items 設定&lt;/td&gt;
&lt;td&gt;Choices 関数・手動リスト&lt;/td&gt;
&lt;td&gt;Dataverse テーブルを直接指定&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;型の扱い&lt;/td&gt;
&lt;td&gt;テキスト型として扱える&lt;/td&gt;
&lt;td&gt;レコード型・GUID 型&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;SharePoint に慣れた状態で Dataverse を使い始めると、この違いで必ずつまずきます。反対にいえば、GUID での比較という概念さえ理解すれば、その後は迷わず書けます。Dataverse のテーブル設計全体については&lt;a href=&quot;/dataverse-table-vs-list/&quot;&gt;SharePointと違うDataverseのテーブル作成フロー&lt;/a&gt;でまとめているので、合わせて読んでおくと理解が深まります。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;Dataverse のルックアップ列フィルターのポイントは、名前ではなく GUID で比較する、という1点に尽きます。ThisItem.列名.テーブル名 と Dropdown1.Selected.テーブル名 を一致させる書き方を覚えれば、どのルックアップ列でも同じパターンで対応できます。&lt;/p&gt;
&lt;p&gt;SharePoint から Dataverse に移行するとき、最初のハードルのひとつがこのフィルターの書き方です。仕組みを理解した上で実装すれば、詰まることなく完成まで進めます。楽しみながら開発を進めましょう。&lt;/p&gt;
&lt;p&gt;ギャラリーの使い方を&lt;a href=&quot;/powerapps-gallery-complete/&quot;&gt;一覧でまとめた記事はこちら&lt;/a&gt;からご覧ください。&lt;/p&gt;</content:encoded></item><item><title>Power Apps ギャラリーとフォームを変数でつなぐ｜新規・保存・プレースホルダーの完全パターン</title><link>https://shiminkaihatsu.com/powerapps-gallery-form/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-gallery-form/</guid><description>Power Apps ギャラリーとフォームを変数でつなぐ｜新規・保存・プレースホルダーの完全パターン</description><pubDate>Sun, 29 Mar 2026 19:06:14 GMT</pubDate><content:encoded>&lt;p&gt;ギャラリーで選択したレコードをフォームに渡すとき、変数を使って連携すると新規作成・保存後の挙動が安定します。Gallery.Selected から varRecord に切り替えた前提で、新規ボタン・保存後の選択・プレースホルダーUIの実装パターンを一通り解説します。&lt;/p&gt;
&lt;p&gt;Gallery.Selected の問題点と varRecord への基本的な置き換え方は、&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-gallery-varrecord/&quot;&gt;Gallery.Selected を使ってはいけない理由の記事&lt;/a&gt;で解説しています。この記事はその続きとして、フォームとの連携に特化した内容です。&lt;/p&gt;
&lt;h2 id=&quot;変数でギャラリーとフォームをつなぐ設計の全体像&quot;&gt;変数でギャラリーとフォームをつなぐ設計の全体像&lt;/h2&gt;
&lt;p&gt;まず全体の設計を確認しておきます。ギャラリーとフォームを変数でつなぐ構成には、次の4つの状態を制御することが必要です。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;選択状態：ギャラリーのどのレコードを見ているか（varRecord）&lt;/li&gt;
&lt;li&gt;フォームモード：表示・編集・新規のどの状態か（EditForm の Mode）&lt;/li&gt;
&lt;li&gt;フォームの Item：varRecord を参照していること&lt;/li&gt;
&lt;li&gt;プレースホルダー：レコード未選択のときにフォームエリアに何を表示するか&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;この4つをそれぞれ正しく設計するだけで、ユーザーが操作しても迷わないアプリになります。一つずつ実装していきましょう。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-gallery-form01.BbfBgaoC_Z1iTkm3.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;新規ボタンの設計&quot;&gt;新規ボタンの設計&lt;/h2&gt;
&lt;p&gt;新規ボタンの OnSelect では3つのことをやります。フォームを新規モードにする、varRecord をリセットする、そしてハイライトを消すです。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;NewForm&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(EditForm1);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;UpdateContext&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;({varRecord: &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;Blank&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;()})&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;NewForm(EditForm1) でフォームを新規入力モードに切り替えます。UpdateContext({varRecord: Blank()}) で varRecord を空にすることで、ギャラリーのハイライトがすべて消えます。&lt;/p&gt;
&lt;p&gt;フォームの Item は varRecord を参照しているので、varRecord が Blank になるとフォームも空になります。ギャラリーで何かを選択していた状態でも、新規ボタンを押せばきれいにリセットされます。これが Gallery.Selected を使っていたときには実現できなかった動きです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-gallery-form02.BltvUAxw_Z15r5mD.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;保存後に新規レコードを選択状態にする&quot;&gt;保存後に新規レコードを選択状態にする&lt;/h2&gt;
&lt;p&gt;保存ボタンを押してフォームを送信した後、新しく作られたレコードを自動的に選択状態にしたい場面があります。Power Apps の EditForm には OnSuccess プロパティがあり、送信が成功したときに実行する処理を書けます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;UpdateContext&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;({varRecord: EditForm1.LastSubmit});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;ViewForm&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(EditForm1)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;EditForm1.LastSubmit は、直前に送信されたレコードそのものを返します。これを varRecord にセットすることで、保存が完了した直後に新しいレコードが varRecord に入り、ギャラリーのハイライトが新規レコードの行に移動します。ViewForm(EditForm1) でフォームを表示モードに戻すことも忘れないようにしましょう。&lt;/p&gt;
&lt;p&gt;ここが Gallery.Selected との一番大きな違いです。Gallery.Selected は保存後のギャラリー再取得タイミングによって結果がブレますが、LastSubmit を varRecord にセットする方法は保存成功時に確実に動きます。体感では、この実装に変えてから保存後のフォームズレが完全になくなりました。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-gallery-form03.BzKR7MBp_Zii2Fd.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;670&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;フォームの-item-と-mode-の設定&quot;&gt;フォームの Item と Mode の設定&lt;/h2&gt;
&lt;p&gt;EditForm の設定を確認しておきます。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;プロパティ&lt;/th&gt;
&lt;th&gt;設定値&lt;/th&gt;
&lt;th&gt;備考&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Item&lt;/td&gt;
&lt;td&gt;varRecord&lt;/td&gt;
&lt;td&gt;選択レコードを参照&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DefaultMode&lt;/td&gt;
&lt;td&gt;FormMode.View&lt;/td&gt;
&lt;td&gt;初期表示は読み取り専用&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;フォームコントロールの基本的な仕組みや EditForm・NewForm・DisplayForm の違いについては、&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-form-basics/&quot;&gt;フォームコントロールの仕組みと設定のポイント&lt;/a&gt;の記事も参考にしてください。&lt;/p&gt;
&lt;p&gt;Item に varRecord を渡すだけで、ギャラリーの選択に関係なくフォームが安定して動くようになります。DefaultMode を FormMode.View にしておくと、選択したレコードをまず表示モードで見せられるので UX としても自然です。編集する場合は別途 EditForm を呼び出すか、編集ボタンを設置します。&lt;/p&gt;
&lt;h2 id=&quot;プレースホルダーを表示する&quot;&gt;プレースホルダーを表示する&lt;/h2&gt;
&lt;p&gt;アプリを開いたばかりや、何も選択していないときにフォームエリアが空白だと、ユーザーはそこに何か表示されるのか、故障しているのか判断できません。プレースホルダーUIを用意しておくだけで、操作の手がかりが増えてユーザーの迷いが減ります。&lt;/p&gt;
&lt;h3 id=&quot;プレースホルダーの表示条件&quot;&gt;プレースホルダーの表示条件&lt;/h3&gt;
&lt;p&gt;フォームエリアの上にラベルやコンテナを置き、表示条件を次のように設定します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;IsBlank&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(varRecord) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;And&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; EditForm1.Mode &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&amp;#x3C;&gt;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; FormMode.New&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;varRecord が空（何も選択していない）かつフォームが新規モードでないときだけ表示する、という条件です。新規入力中はプレースホルダーを出さずにフォームを前面に出したいので、FormMode.New を除外しています。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-gallery-form04.D74KV6r6_14eQlK.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;670&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;プレースホルダーのテキスト例&quot;&gt;プレースホルダーのテキスト例&lt;/h3&gt;
&lt;p&gt;プレースホルダーに表示するメッセージは短くシンプルなものが効果的です。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;← 左のリストから項目を選択してください&lt;/li&gt;
&lt;li&gt;👆 上から確認したいタスクを選んでください&lt;/li&gt;
&lt;li&gt;左のギャラリーから選択すると詳細が表示されます&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;絵文字や矢印アイコンを入れると、どこを操作すればいいか視覚的に伝わりやすくなります。個人的には、プレースホルダーにひと手間かけるだけで社内ユーザーの問い合わせが明らかに減ったので、これは省かずに入れておくことをおすすめします。&lt;/p&gt;
&lt;h2 id=&quot;onstartonvisible-でデフォルトレコードを指定する&quot;&gt;OnStart・OnVisible でデフォルトレコードを指定する&lt;/h2&gt;
&lt;p&gt;アプリを開いたときやスクリーンに遷移したときに、ギャラリーの先頭レコードを自動的に選択状態にするパターンもよく使います。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;UpdateContext&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;({varRecord: &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;First&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(GalleryTasks.AllItems)})&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;OnVisible にこの式を入れておくと、スクリーンを開くたびにギャラリーの先頭レコードが varRecord にセットされます。ユーザーが何もしなくても先頭のレコードが表示されている状態になるので、空白のフォームエリアを見せずに済みます。&lt;/p&gt;
&lt;p&gt;OnStart と OnVisible の使い分けについては、&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-onstart-onvisible/&quot;&gt;OnStart と OnVisible どちらに書くべきか&lt;/a&gt;をあわせて読むと整理しやすいです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-gallery-form05.D2YdrCEQ_1i9fPD.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;ギャラリーとフォームを varRecord でつなぐパターンを整理すると、次のように設計が固まります。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;操作&lt;/th&gt;
&lt;th&gt;やること&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;行をタップ&lt;/td&gt;
&lt;td&gt;OnSelect で UpdateContext({varRecord: ThisItem})&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;新規ボタン&lt;/td&gt;
&lt;td&gt;NewForm + UpdateContext({varRecord: Blank()})&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;保存後&lt;/td&gt;
&lt;td&gt;OnSuccess で varRecord を LastSubmit に + ViewForm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;未選択時&lt;/td&gt;
&lt;td&gt;IsBlank(varRecord) のプレースホルダーを表示&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;初期表示&lt;/td&gt;
&lt;td&gt;OnVisible で First() を varRecord にセット&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;一度このパターンをマスターすると、どのアプリでも迷わず同じ設計で組めるようになります。個人的には、これを習得した後の開発速度が明らかに上がりました。積み重ねの力を実感できる部分ですので、ぜひ一度手を動かして試してみてください。&lt;/p&gt;
&lt;p&gt;ギャラリーの使い方を&lt;a href=&quot;/powerapps-gallery-complete/&quot;&gt;一覧でまとめた記事はこちら&lt;/a&gt;からご覧ください。&lt;/p&gt;</content:encoded></item><item><title>Power Apps ギャラリーで選択行をハイライトする｜TemplateFillの設定方法</title><link>https://shiminkaihatsu.com/powerapps-gallery-highlight/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-gallery-highlight/</guid><description>Power Apps ギャラリーで選択行をハイライトする｜TemplateFillの設定方法</description><pubDate>Sun, 29 Mar 2026 19:06:17 GMT</pubDate><content:encoded>&lt;p&gt;ギャラリーの選択行をハイライトするには TemplateFill プロパティを使います。まず IsSelected で動かしてみて、その問題点を理解した上で変数（varRecord）管理に切り替えるのが正しい順番です。&lt;/p&gt;
&lt;h2 id=&quot;templatefill-とは何かどこで設定するか&quot;&gt;TemplateFill とは何か・どこで設定するか&lt;/h2&gt;
&lt;p&gt;TemplateFill はギャラリーの各行（テンプレート）の背景色を設定するプロパティです。通常は Transparent（透明）が設定されていて、どの行も同じ背景のフラットな表示になっています。ここに条件付きの色を設定することで、選択行だけを目立たせられます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-gallery-highlight01.CChgRwQm_Z1Pao3c.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;テンプレート領域を選択する方法&quot;&gt;テンプレート領域を選択する方法&lt;/h3&gt;
&lt;p&gt;TemplateFill を設定するには、ギャラリーのテンプレート領域（行の背景部分）を選択する必要があります。ギャラリーをクリックするとギャラリー全体が選択されますが、そこからもう一度クリックするとテンプレート内に入ります。慣れないうちはツリービューからギャラリー配下の Template を直接選ぶのが確実です。&lt;/p&gt;
&lt;p&gt;テンプレートを選択できたら、数式バー左側のプロパティドロップダウンから TemplateFill を選んで数式を入力します。右ペインのプロパティタブから探すより、数式バーのドロップダウンを使う方がすぐ見つかります。ギャラリーコントロールの基本的な構造については&lt;a href=&quot;/powerapps-gallery/&quot;&gt;ギャラリーコントロールの基礎記事&lt;/a&gt;も参考にしてください。&lt;/p&gt;
&lt;h2 id=&quot;isselected-を使ったシンプルなハイライト&quot;&gt;IsSelected を使ったシンプルなハイライト&lt;/h2&gt;
&lt;p&gt;まずは IsSelected を使った最もシンプルな実装から試しましょう。完成形に向けていきなり変数を使うのではなく、まず動く状態を作って挙動を確認するのが Power Apps 開発の進め方です。&lt;/p&gt;
&lt;h3 id=&quot;templatefill-に-if-条件を書く&quot;&gt;TemplateFill に If 条件を書く&lt;/h3&gt;
&lt;p&gt;TemplateFill に次の数式を入力します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(ThisItem.IsSelected, &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;ColorFade&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;Color.Blue&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;0.7&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;), Transparent)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-gallery-highlight02.CY3G_rXB_1z8iAH.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;p&gt;これだけで、クリックした行が青色でハイライトされます。IsSelected は Power Apps がギャラリーの各行に自動で付与するプロパティで、その行が選択状態のとき true を返します。&lt;/p&gt;
&lt;h3 id=&quot;colorfade-で色を薄める&quot;&gt;ColorFade で色を薄める&lt;/h3&gt;
&lt;p&gt;ColorFade(Color.Blue, 0.7) は Blue を 70% 薄くした色を返す関数です。第2引数の値は 0〜1 の範囲で指定します。0 に近いほど元の色に近く、1 に近いほど白に近くなります。&lt;/p&gt;
&lt;p&gt;完全に元の色を使うと背景が濃すぎて、ギャラリー内のテキストが読みにくくなります。個人的には 0.6〜0.8 で調整することが多く、デザインのテーマカラーに合わせて選ぶときれいにまとまります。Power Apps のUI設計全般については&lt;a href=&quot;/powerapps-uiux/&quot;&gt;見た目と使いやすさへのこだわり&lt;/a&gt;も参照してみてください。&lt;/p&gt;
&lt;h2 id=&quot;isselected-の問題点&quot;&gt;IsSelected の問題点&lt;/h2&gt;
&lt;p&gt;IsSelected で動くことを確認したら、次にその限界を把握しておきます。フォームと連動させるアプリを作ると、IsSelected では対処できない問題が必ず出てきます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-gallery-highlight03.BWGT83qH_Z27k4M2.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;新規レコード保存後にハイライトがリセットされる&quot;&gt;新規レコード保存後にハイライトがリセットされる&lt;/h3&gt;
&lt;p&gt;新しいレコードをフォームで追加して保存した後、ギャラリーがデータを再取得するタイミングで IsSelected がリセットされます。具体的には次の流れで問題が起きます。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;ギャラリーから既存レコードを選択する&lt;/li&gt;
&lt;li&gt;新規追加ボタンでフォームを NewMode にする&lt;/li&gt;
&lt;li&gt;フォームを入力・保存する&lt;/li&gt;
&lt;li&gt;ギャラリーがデータを再取得する&lt;/li&gt;
&lt;li&gt;直前まで選択していたレコードのハイライトが消え、フォームが前の選択を表示したまま残る&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;IsSelected がギャラリーの表示状態に依存していて、データ再取得のタイミングでリセットされてしまうのが原因です。これはバグではなく Power Apps の仕様ですが、実用上は大きな問題になります。私が最初に作ったアプリでもこの問題にぶつかり、保存のたびにハイライトが飛ぶ挙動をユーザーに不思議がられました。&lt;/p&gt;
&lt;h3 id=&quot;フォームの-item-プロパティとの連動も不安定になる&quot;&gt;フォームの Item プロパティとの連動も不安定になる&lt;/h3&gt;
&lt;p&gt;フォームの Item プロパティに Gallery.Selected を指定している場合、IsSelected がリセットされると同時にフォームの参照先も失われます。保存直後にフォームが空になったり、前に選んでいたレコードを表示し続けたりする現象が起きます。この問題の根本的な解決策が、次の varRecord への切り替えです。&lt;/p&gt;
&lt;h2 id=&quot;varrecord-への切り替え&quot;&gt;varRecord への切り替え&lt;/h2&gt;
&lt;p&gt;IsSelected の問題を解消するには、選択レコードを変数（varRecord）に保存して、TemplateFill の判定もその変数を参照するよう変更します。コンテキスト変数の使い方については&lt;a href=&quot;/powerapps-variables/&quot;&gt;グローバル変数とコンテキスト変数の違いと使い分け&lt;/a&gt;を参考にしてください。&lt;/p&gt;
&lt;h3 id=&quot;onselect-で-varrecord-に保存する&quot;&gt;OnSelect で varRecord に保存する&lt;/h3&gt;
&lt;p&gt;ギャラリーの OnSelect プロパティに次の数式を書きます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;UpdateContext&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;({varRecord: ThisItem})&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;行をクリックするたびに varRecord にそのレコードが保存されます。UpdateContext はコンテキスト変数（画面スコープ）を更新する関数です。varRecord というのは変数名なので、任意の名前に変えて構いません。ただし、プロジェクト内で統一した命名規則を使うとコードの読みやすさが上がります。&lt;/p&gt;
&lt;h3 id=&quot;templatefill-を-varrecord-で判定する&quot;&gt;TemplateFill を varRecord で判定する&lt;/h3&gt;
&lt;p&gt;TemplateFill の数式を次のように変更します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(ThisItem.ID &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; varRecord.ID, &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;ColorFade&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;Color.Blue&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;0.7&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;), Transparent)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-gallery-highlight04.Cbsrdb7G_i73KC.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;670&quot;&gt;&lt;/p&gt;
&lt;p&gt;IsSelected の代わりに、現在の行の ID が varRecord に保存されたレコードの ID と一致するかで判定しています。varRecord の中身は、データが再取得されても変わりません。ゆえに保存後もハイライトが保持されます。SharePoint を使っている場合は ID（数値型）、Dataverse を使っている場合は GUID で比較します。&lt;/p&gt;
&lt;h3 id=&quot;新規ボタンでハイライトを解除する&quot;&gt;新規ボタンでハイライトを解除する&lt;/h3&gt;
&lt;p&gt;新規追加ボタンを押したとき、varRecord を空にしてハイライトをすべて解除するのが自然な挙動です。新規ボタンの OnSelect に次を追加します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;UpdateContext&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;({varRecord: &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;Blank&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;()})&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;varRecord を Blank() にすると、ThisItem.ID = varRecord.ID がどの行でも false になるため、全行のハイライトが消えます。この制御は IsSelected ではできません。新規モードに入ったことをユーザーが視覚的に理解できる、という点でも重要な実装です。&lt;/p&gt;
&lt;h3 id=&quot;フォームの-item-も-varrecord-に変更する&quot;&gt;フォームの Item も varRecord に変更する&lt;/h3&gt;
&lt;p&gt;フォームの Item プロパティを Gallery.Selected から varRecord に変更するのも忘れずに行います。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;varRecord&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;これでフォームの参照先も varRecord になるため、データ再取得後もフォームが正しいレコードを表示し続けます。ギャラリーとフォームを変数でつなぐ全体設計については、後続の記事で詳しく解説する予定です。&lt;/p&gt;
&lt;h2 id=&quot;isselected-vs-varrecord-の比較&quot;&gt;IsSelected vs varRecord の比較&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;比較項目&lt;/th&gt;
&lt;th&gt;IsSelected&lt;/th&gt;
&lt;th&gt;varRecord&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;実装の手軽さ&lt;/td&gt;
&lt;td&gt;数式1行のみ&lt;/td&gt;
&lt;td&gt;OnSelect の追加が必要&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;データ再取得後のハイライト&lt;/td&gt;
&lt;td&gt;リセットされる&lt;/td&gt;
&lt;td&gt;保持される&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;フォームとの連動&lt;/td&gt;
&lt;td&gt;不安定&lt;/td&gt;
&lt;td&gt;安定&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;新規モードの制御&lt;/td&gt;
&lt;td&gt;できない&lt;/td&gt;
&lt;td&gt;Blank() で解除できる&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;用途&lt;/td&gt;
&lt;td&gt;プロトタイプ・確認用&lt;/td&gt;
&lt;td&gt;実用アプリ&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;現場で作るアプリのほとんどはフォームと連動するため、最初から varRecord を使うのをおすすめします。IsSelected はプロトタイプや動作確認のような限定的な場面だけで使う、と割り切るのがよいです。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;TemplateFill による行ハイライトは、IsSelected で動作を確認してから varRecord に切り替えることで実用的なアプリになります。変数の管理が一つ増えますが、フォームとの連動が安定するメリットは大きいです。&lt;/p&gt;
&lt;p&gt;varRecord の仕組みを理解すると、ハイライト以外にもフォームの制御や新規モードの切り替えなど、さまざまな場面で応用できます。ギャラリー表示の基本については&lt;a href=&quot;/powerapps-gallery-layout/&quot;&gt;ギャラリーのレイアウト設定&lt;/a&gt;もあわせて参照してみてください。地道に積み重ねていきましょう。&lt;/p&gt;
&lt;p&gt;ギャラリーの使い方を&lt;a href=&quot;/powerapps-gallery-complete/&quot;&gt;一覧でまとめた記事はこちら&lt;/a&gt;からご覧ください。&lt;/p&gt;</content:encoded></item><item><title>Power Apps ギャラリーのレイアウト設定｜Image・Title・Subtitle・Bodyとフィールドのカスタマイズ</title><link>https://shiminkaihatsu.com/powerapps-gallery-layout/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-gallery-layout/</guid><description>Power Apps ギャラリーのレイアウト設定｜Image・Title・Subtitle・Bodyとフィールドのカスタマイズ</description><pubDate>Sun, 29 Mar 2026 19:06:16 GMT</pubDate><content:encoded>&lt;p&gt;ギャラリーのレイアウトは、最初に選んだだけでは使いこなせません。フィールドのバインドを自分でコントロールできるようになると、データソースのどの列でも自由に表示できるようになります。&lt;/p&gt;
&lt;h2 id=&quot;デフォルトレイアウトの種類と使いどころ&quot;&gt;デフォルトレイアウトの種類と使いどころ&lt;/h2&gt;
&lt;p&gt;Power Apps のギャラリーには、挿入時にいくつかのレイアウトテンプレートが用意されています。挿入直後のレイアウト選択画面で選ぶパターンが、ギャラリーの基本的な見た目を決める最初のステップです。代表的なのが次の4種類です。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;レイアウト&lt;/th&gt;
&lt;th&gt;含まれる要素&lt;/th&gt;
&lt;th&gt;向いている用途&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Image, title, and subtitle&lt;/td&gt;
&lt;td&gt;画像・タイトル・サブタイトル&lt;/td&gt;
&lt;td&gt;社員名簿・商品カタログなど&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Title, subtitle, and body&lt;/td&gt;
&lt;td&gt;タイトル・サブタイトル・本文&lt;/td&gt;
&lt;td&gt;タスク一覧・お知らせ表示など&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Title and subtitle&lt;/td&gt;
&lt;td&gt;タイトル・サブタイトル&lt;/td&gt;
&lt;td&gt;シンプルなリスト表示&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Blank&lt;/td&gt;
&lt;td&gt;なし&lt;/td&gt;
&lt;td&gt;完全カスタム&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;実際の業務アプリでは Image を必要としないケースがほとんどです。社員名簿や商品カタログのように画像が必要な場合を除けば、Title, subtitle, and body のパターンで十分です。私がよく使うのもこのパターンで、タスク名・担当者・期限という3つの情報をそれぞれの行に割り当てるだけで、必要な情報がコンパクトにまとまります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-gallery-layout01.CdXN_QBa_Z2i1Hbs.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;p&gt;Blank レイアウトは完全カスタムが必要なときに使いますが、一から全部のコントロールを配置するため作業量が増えます。ギャラリーのコントロール配置に慣れていない方は、まず既存テンプレートから始めて後から調整する方が効率的です。ギャラリーコントロール自体の基本から確認したい方は、&lt;a href=&quot;/powerapps-gallery/&quot;&gt;ギャラリーコントロールの基本と検索・選択との組み合わせ&lt;/a&gt;も参考にしてください。&lt;/p&gt;
&lt;h2 id=&quot;フィールドのバインドを変える方法&quot;&gt;フィールドのバインドを変える方法&lt;/h2&gt;
&lt;p&gt;ギャラリーを挿入すると、Power Apps がデータソースの列を自動でひも付けします。しかしこの自動アサインが意図通りになることは少ないです。よくあるのが、Title1 に ID（数値）が入ってきて、本来表示したかった商品名や氏名が表示されない、というケースです。同じ経験をしたことがある方も多いはずです。&lt;/p&gt;
&lt;h3 id=&quot;フィールドパネルから変更する&quot;&gt;フィールドパネルから変更する&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-gallery-layout02.jGDUhZrP_Z1dzhUg.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;p&gt;フィールドのバインドを変更する最も簡単な方法は、フィールドパネルを使うことです。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;ギャラリーを選択した状態で右ペインのレイアウトタブを開く&lt;/li&gt;
&lt;li&gt;Edit fields（フィールドの編集）ボタンをクリックする&lt;/li&gt;
&lt;li&gt;各スロット（Title1・Subtitle1・Body1など）のドロップダウンで表示したい列を選ぶ&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;操作するとギャラリー内のラベルの Text プロパティが自動で書き換わります。たとえば Title1 の Text が ThisItem.ProductName に更新されます。フィールドパネルを使う限り、数式を手書きする必要はありません。慣れないうちはこの方法を使っておくのがよいです。&lt;/p&gt;
&lt;h3 id=&quot;数式バーで直接変更する場合&quot;&gt;数式バーで直接変更する場合&lt;/h3&gt;
&lt;p&gt;フィールドパネル経由ではなく、数式バーに直接 ThisItem.列名 を書くこともできます。条件によって表示内容を切り替えたいときや、複数の列を結合して表示したいときは数式バーでの編集が必要になります。基本的な操作に慣れてきたら、数式バーも積極的に使うようにしましょう。&lt;/p&gt;
&lt;h2 id=&quot;ルックアップ列の表示&quot;&gt;ルックアップ列の表示&lt;/h2&gt;
&lt;p&gt;SharePoint のルックアップ列や Dataverse のリレーション列を表示するときは注意が必要です。単純に列名を指定しただけでは、テキストではなくオブジェクトそのものが返ってきます。ラベルに何も表示されなかったり、意味のない文字列が並んだりするのはこれが原因です。Power Apps がルックアップ列をレコード型として扱っているため、テキストとして表示するにはひと手間必要になります。&lt;/p&gt;
&lt;h3 id=&quot;sharepoint-のルックアップ列はドット記法で掘り下げる&quot;&gt;SharePoint のルックアップ列はドット記法で掘り下げる&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-gallery-layout03.CkiXlKP1_Z5Nrc9.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;670&quot;&gt;&lt;/p&gt;
&lt;p&gt;SharePoint のルックアップ列の場合、次のようにドット記法で値を取り出します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;ThisItem.Department.Value&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Department というルックアップ列から Value（表示名）を取り出す書き方です。.Value が表示名、.Id が数値IDに相当します。初めてルックアップ列を触ったとき、なぜラベルが空白になったり意味不明な文字列が出たりするのか理解できず、しばらく悩みました。.Value を付けるだけで解決するとわかってからは、すっきり使えるようになりました。&lt;/p&gt;
&lt;h3 id=&quot;dataverse-のリレーション列&quot;&gt;Dataverse のリレーション列&lt;/h3&gt;
&lt;p&gt;Dataverse のルックアップ列（リレーション）は SharePoint とは書き方が異なります。リレーション先のテーブル名を記述してから、表示したい列名を指定します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;ThisItem.担当者.氏名&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;SharePoint と Dataverse でドット記法の書き方が微妙に違うため、両方を扱う場合は混乱しやすいポイントです。Dataverse の列型の全体像を把握しておくと、こういった問題を事前に防げます。&lt;/p&gt;
&lt;h2 id=&quot;複数フィールドの結合表示&quot;&gt;複数フィールドの結合表示&lt;/h2&gt;
&lt;p&gt;1つのラベルに複数の列データを組み合わせて表示したいケースはよくあります。氏名と部署名を同じ行に並べたい、ステータスと更新日を1行にまとめたいという要望は、業務アプリでは頻繁に出てきます。&lt;/p&gt;
&lt;h3 id=&quot;アンパサンドで連結する&quot;&gt;アンパサンドで連結する&lt;/h3&gt;
&lt;p&gt;テキストの連結には &amp;amp; 演算子（アンパサンド）を使います。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;ThisItem.Name &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot; / &quot;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; ThisItem.Department.Value&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;氏名と部署名をスラッシュで区切って表示する例です。間に固定テキストを挟みたいときは、ダブルクォーテーションで囲んで &amp;amp; で繋ぎます。3つ以上の要素を繋ぐ場合も同じように &amp;amp; を続けるだけです。慣れてくると自然に書けるようになります。&lt;/p&gt;
&lt;h3 id=&quot;改行を入れる&quot;&gt;改行を入れる&lt;/h3&gt;
&lt;p&gt;1つのラベル内で改行して2行表示したい場合は、Char(10) を挟みます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;ThisItem.Name &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; Char&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; ThisItem.Department.Value&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ただし、ラベルの AutoHeight プロパティをOnにしておかないと改行が表示されません。AutoHeight が Off の場合はテキストが1行に切り詰められます。改行を使う場合は AutoHeight の設定もセットで確認してください。また、ギャラリーのテンプレートサイズも適切に調整しないと表示が崩れます。&lt;/p&gt;
&lt;h3 id=&quot;日付を文字列に変換して連結する&quot;&gt;日付を文字列に変換して連結する&lt;/h3&gt;
&lt;p&gt;日付型の列をそのまま &amp;amp; で繋ごうとすると型エラーになります。日付は Text 関数で文字列に変換してから結合します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;ThisItem.Name &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot;（期限：&quot;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; Text&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(ThisItem.DueDate, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;yyyy/mm/dd&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot;）&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Text 関数の第2引数に書式文字列を指定します。日時のフォーマット指定は次の節で詳しく解説します。&lt;/p&gt;
&lt;h2 id=&quot;数値通貨列のtext関数フォーマット&quot;&gt;数値・通貨列のText関数フォーマット&lt;/h2&gt;
&lt;p&gt;数値列や通貨列をそのまま Text プロパティに指定すると、フォーマットのない生の数字が表示されます。金額を扱うアプリなら、カンマ区切りと通貨記号を付けた方が格段に読みやすくなります。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Text&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(ThisItem.Price, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;¥#,##0&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;100000 という数値が ¥100,000 という形式で表示されます。社内の業務アプリで見積金額や在庫数を一覧表示するとき、この一手間が実際の使いやすさに大きく貢献します。数字の羅列では読み取りにくい情報が、フォーマット一つで一覧として機能し始めます。&lt;/p&gt;
&lt;p&gt;よく使うフォーマット指定をまとめておきます。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;用途&lt;/th&gt;
&lt;th&gt;書式文字列&lt;/th&gt;
&lt;th&gt;表示例&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;通貨（円）&lt;/td&gt;
&lt;td&gt;¥#,##0&lt;/td&gt;
&lt;td&gt;¥100,000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;カンマ区切り&lt;/td&gt;
&lt;td&gt;#,##0&lt;/td&gt;
&lt;td&gt;100,000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;小数2桁&lt;/td&gt;
&lt;td&gt;#,##0.00&lt;/td&gt;
&lt;td&gt;1,234.56&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;日付（スラッシュ）&lt;/td&gt;
&lt;td&gt;yyyy/mm/dd&lt;/td&gt;
&lt;td&gt;2026/03/25&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;日付（日本語）&lt;/td&gt;
&lt;td&gt;yyyy年mm月dd日&lt;/td&gt;
&lt;td&gt;2026年03月25日&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Text 関数の書式指定は Excel のセル書式設定と似た記法です。Excel に慣れている方なら直感的に書けるはずです。Power Apps でデータ操作の幅を広げたい方は、&lt;a href=&quot;/powerapps-filter-search-lookup/&quot;&gt;Filter・Search・LookUp関数の違いと使い分け&lt;/a&gt;も合わせて読んでおくと、ギャラリー表示のバリエーションがさらに増えます。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;ギャラリーのレイアウト設定の核心は、フィールドのバインドをコントロールすることです。ルックアップ列のドット記法、アンパサンドによる結合、Text 関数のフォーマット指定を押さえておくと、業務アプリらしいギャラリーを自在に作れるようになります。&lt;/p&gt;
&lt;p&gt;レイアウトが整ってきたら、次は Filter 関数を使った絞り込み表示にも挑戦してみましょう。&lt;a href=&quot;/powerapps-gallery-filter-basic/&quot;&gt;Filter 関数の入門記事&lt;/a&gt;では、Dropdown との連動まで基礎から解説しています。ギャラリーをひとつひとつ磨いていく地道な作業が、使い勝手のいいアプリに繋がっていきます。&lt;/p&gt;
&lt;p&gt;ギャラリーの使い方を&lt;a href=&quot;/powerapps-gallery-complete/&quot;&gt;一覧でまとめた記事はこちら&lt;/a&gt;からご覧ください。&lt;/p&gt;</content:encoded></item><item><title>Power Apps ギャラリーで複数選択チェックボックスを実装する｜AllItems・CountRows・SelectAll</title><link>https://shiminkaihatsu.com/powerapps-gallery-multiselect/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-gallery-multiselect/</guid><description>Power Apps ギャラリーで複数選択チェックボックスを実装する｜AllItems・CountRows・SelectAll</description><pubDate>Sun, 29 Mar 2026 19:06:13 GMT</pubDate><content:encoded>&lt;p&gt;ギャラリーの複数行にチェックを入れて一括操作するUIは、Power Apps でよく求められる機能のひとつです。Gallery.AllItems プロパティを使えば、選択中のアイテムをまとめて取得できます。チェックボックスの配置から全選択・全解除まで、実装の流れを一通り解説します。&lt;/p&gt;
&lt;h2 id=&quot;ギャラリー内にチェックボックスを配置する&quot;&gt;ギャラリー内にチェックボックスを配置する&lt;/h2&gt;
&lt;p&gt;まずギャラリーテンプレート内に Checkbox コントロールを追加します。配置自体はドラッグ＆ドロップで完了しますが、Default プロパティの設定が重要です。&lt;/p&gt;
&lt;p&gt;Checkbox の Default に固定値 false を入れると、ギャラリーが再読み込みされるたびにすべてのチェックがリセットされます。これはフィルターをかけてギャラリーの表示内容が変わったときも同様です。初期状態では全行チェックなし、という挙動でよければ Default は false のままで問題ありません。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;ギャラリーを選択してテンプレート編集モードに入る&lt;/li&gt;
&lt;li&gt;Insert → Input → Checkbox を追加する&lt;/li&gt;
&lt;li&gt;Checkbox の Default プロパティを false に設定する&lt;/li&gt;
&lt;li&gt;Checkbox をギャラリーテンプレートの左端に配置する&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-gallery-multiselect01.DLWI3w2d_1IUGIb.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;galleryallitems-で選択済みアイテムを取得する&quot;&gt;Gallery.AllItems で選択済みアイテムを取得する&lt;/h2&gt;
&lt;p&gt;Gallery.AllItems は、ギャラリーに現在表示されているすべてのアイテムをテーブルとして返すプロパティです。このテーブルにはギャラリーテンプレート内の各コントロールの値も含まれます。つまり Checkbox.Value も行ごとに取得できます。&lt;/p&gt;
&lt;p&gt;選択済みの行だけを取り出すには Filter を使います。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(GalleryTasks.AllItems, Checkbox1.Value)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Checkbox1.Value が true の行だけが返ってきます。これが選択済みアイテムのテーブルです。この式をボタンの OnSelect やラベルの Text など、好きな場所で使えます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-gallery-multiselect04.DQM0LwSh_2jCISG.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;670&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;countrows-で選択数を表示する&quot;&gt;CountRows で選択数を表示する&lt;/h3&gt;
&lt;p&gt;何件選択されているかをラベルに表示するには CountRows を組み合わせます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;CountRows&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(GalleryTasks.AllItems, Checkbox1.Value)) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot; 件選択中&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;選択数がリアルタイムで変わるので、ユーザーが今何件選んでいるかをその場で確認できます。0件のときは表示しない、という制御は後述のアクションエリアUI記事で解説します。&lt;/p&gt;
&lt;h3 id=&quot;選択済みテーブルを別ギャラリーの-items-に使う&quot;&gt;選択済みテーブルを別ギャラリーの Items に使う&lt;/h3&gt;
&lt;p&gt;選択済みアイテムを確認用に別のギャラリーに表示したい場合も、同じ Filter 式をそのまま Items に渡せます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(GalleryTasks.AllItems, Checkbox1.Value)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;選択するたびにリアルタイムで確認ギャラリーが更新されます。承認フローや一括削除の確認画面などで重宝します。&lt;/p&gt;
&lt;h2 id=&quot;select-all-ボタンの実装&quot;&gt;Select All ボタンの実装&lt;/h2&gt;
&lt;p&gt;全件選択ボタンは変数を使います。Checkbox の Default に変数を設定することで、変数を true にした瞬間すべての行がチェック状態になります。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Select All ボタンの OnSelect：UpdateContext({varSelectAll: true})&lt;/li&gt;
&lt;li&gt;Checkbox1 の Default プロパティ：varSelectAll&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;ただしこのままだと、ユーザーが個別のチェックボックスを操作しても varSelectAll が true のままなので、再クリックしても変化しなくなります。Select All ボタンを押した後は個別のチェック操作も有効にしたいため、Checkbox の OnCheck / OnUncheck で varSelectAll をリセットする処理を入れるか、全選択後は変数でなく Checkbox の自然な状態に委ねる設計にします。&lt;/p&gt;
&lt;p&gt;個人的には Select All の後は変数をすぐ false に戻す方法が扱いやすいです。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// Select All ボタンの OnSelect&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;UpdateContext&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;({varSelectAll: &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;UpdateContext&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;({varSelectAll: &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;})&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;true にして即 false に戻すことで、チェックボックスの Default が一瞬 true になり全選択状態になります。その後は各チェックボックスが独立して動くようになります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-gallery-multiselect03.dFVKiedk_DGFzF.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;deselect-all全解除の実装&quot;&gt;Deselect All（全解除）の実装&lt;/h2&gt;
&lt;p&gt;全チェック解除には Reset 関数を使いたくなりますが、ギャラリー内のチェックボックスに Reset 関数を直接使っても動作しません。これは Power Apps の制約です。&lt;/p&gt;
&lt;p&gt;代わりに使うのがリセット用変数のトグルパターンです。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Deselect All ボタンの OnSelect：UpdateContext({varReset: !varReset})&lt;/li&gt;
&lt;li&gt;Checkbox1 の Default プロパティ：If(varReset, false, false)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;varReset が変化するたびに Checkbox の Default が再評価されます。結果は常に false ですが、式が再評価されることでチェックボックスがリセットされます。一見無意味に見える仕組みですが、これが Power Apps でギャラリー内チェックボックスを一括リセットする定番パターンです。そういうものだと割り切ってしまいましょう。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;Gallery.AllItems を使った複数選択の基本パターンをまとめます。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;やりたいこと&lt;/th&gt;
&lt;th&gt;実装&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;選択済みアイテムを取得&lt;/td&gt;
&lt;td&gt;Filter(Gallery.AllItems, Checkbox.Value)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;選択件数を表示&lt;/td&gt;
&lt;td&gt;CountRows(Filter(…))&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;全選択&lt;/td&gt;
&lt;td&gt;varSelectAll を true→false にトグル&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;全解除&lt;/td&gt;
&lt;td&gt;varReset をトグルして Default を再評価&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;複数選択が動いたら、次は選択中のときだけアクションエリアを表示するUIを作りましょう。コンテナを使った表示切り替えの実装パターンは&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-gallery-multiselect-ui/&quot;&gt;複数選択時のアクションエリアをコンテナで作る記事&lt;/a&gt;で解説します。地道な積み重ねですが、使い勝手のいいUIができあがっていきます。&lt;/p&gt;
&lt;p&gt;ギャラリーの使い方を&lt;a href=&quot;/powerapps-gallery-complete/&quot;&gt;一覧でまとめた記事はこちら&lt;/a&gt;からご覧ください。&lt;/p&gt;</content:encoded></item><item><title>Power Apps 複数選択時だけ表示されるアクションエリアをコンテナで作る</title><link>https://shiminkaihatsu.com/powerapps-gallery-multiselect-ui/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-gallery-multiselect-ui/</guid><description>Power Apps 複数選択時だけ表示されるアクションエリアをコンテナで作る</description><pubDate>Sun, 29 Mar 2026 19:06:13 GMT</pubDate><content:encoded>&lt;p&gt;複数選択チェックボックスを実装したら、次は選択した件数が 0 のときはアクションエリアを隠し、1件以上になったら表示するUIを作りましょう。コンテナを使えば X・Y・Height の手動計算なしにレスポンシブな表示切り替えが実現できます。&lt;/p&gt;
&lt;p&gt;Gallery.AllItems を使った複数選択の基本については&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-gallery-multiselect/&quot;&gt;複数選択チェックボックスの実装記事&lt;/a&gt;で解説しています。この記事はその続きとして、選択数に応じたUIの表示切り替えに特化した内容です。&lt;/p&gt;
&lt;h2 id=&quot;verticalcontainer-にギャラリーを収める&quot;&gt;VerticalContainer にギャラリーを収める&lt;/h2&gt;
&lt;p&gt;まず画面レイアウトの土台として VerticalContainer（縦方向コンテナ）を使います。ギャラリーをコンテナに入れることで、アクションエリアが展開・折りたたまれても、ギャラリーの幅が自動的にコンテナに追従します。昔は X・Y・Width を手動で計算して配置していましたが、コンテナを使えばその手間が完全になくなります。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Insert → Layout → Vertical Container を追加する&lt;/li&gt;
&lt;li&gt;VerticalContainer の中にギャラリーを配置する&lt;/li&gt;
&lt;li&gt;アクションエリア用の HorizontalContainer をギャラリーの上か下に追加する&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-gallery-multiselect-ui01.F50ECylO_Z2vufqA.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;p&gt;VerticalContainer の Fill を設定して背景色を付けておくと、レイアウトの境界が見えて開発中の確認がしやすくなります。&lt;/p&gt;
&lt;h2 id=&quot;アクションエリアの表示条件を設定する&quot;&gt;アクションエリアの表示条件を設定する&lt;/h2&gt;
&lt;p&gt;アクションエリア（HorizontalContainer）の Visible プロパティに次の式を設定します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;Not&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;IsEmpty&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(GalleryTasks.AllItems, Checkbox1.Value)))&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Filter(GalleryTasks.AllItems, Checkbox1.Value) でチェックが入った行のテーブルを取り出します。IsEmpty はそのテーブルが空かどうかを判定します。Not でその逆にすることで、1件以上選択されているときだけ true になります。&lt;/p&gt;
&lt;p&gt;式を分解して読むと IsEmpty が空なら true を返すので、Not(IsEmpty(…)) は空でないとき（つまり1件以上選択中）に true になる、という意味です。慣れるまで少し読みにくいですが、パターンとして覚えてしまうと応用が利きます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-gallery-multiselect-ui02.DuZZuzz7_GAKeD.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;コンテナの-flexible-height-でアニメーションなしに消す&quot;&gt;コンテナの Flexible height でアニメーションなしに消す&lt;/h2&gt;
&lt;p&gt;Visible を false にすると要素が消えますが、コンテナの場合は Visible が false になってもスペースが残ることがあります。完全に消して下のコンテンツが詰まるようにするには、コンテナの Flexible height 設定を活用します。&lt;/p&gt;
&lt;p&gt;アクションエリアコンテナの Height プロパティに次の式を使うと、Visible が false のときに高さが 0 になります。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;Not&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;IsEmpty&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(GalleryTasks.AllItems, Checkbox1.Value))), &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;60&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;選択中は高さ 60（ボタンが収まるサイズ）、非選択中は高さ 0 にすることで、アクションエリアが完全に消えてギャラリーが上に詰まります。Visible と Height の両方を制御するのが確実です。&lt;/p&gt;
&lt;h2 id=&quot;アクションエリアの中身を設計する&quot;&gt;アクションエリアの中身を設計する&lt;/h2&gt;
&lt;p&gt;アクションエリアには選択件数の表示と操作ボタンを配置します。HorizontalContainer を使うと横並びレイアウトが簡単に作れます。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;HorizontalContainer 内にラベルを追加して選択件数を表示する&lt;/li&gt;
&lt;li&gt;削除ボタン・承認ボタンなど操作ボタンを右側に配置する&lt;/li&gt;
&lt;li&gt;コンテナの LayoutJustifyContent を SpaceBetween にしてラベルと右側ボタンを両端に揃える&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;ラベルの Text プロパティには次の式を使います。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;CountRows&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(GalleryTasks.AllItems, Checkbox1.Value)) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot; 件選択中&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-gallery-multiselect-ui03.ir0at79K_2bEThr.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;コンテナを使う以前との比較&quot;&gt;コンテナを使う以前との比較&lt;/h2&gt;
&lt;p&gt;コンテナが登場する前は、アクションエリアの Y 座標をギャラリーの Y + Height で計算していました。アクションエリアの高さが変わるたびにギャラリーの Y を手動で調整する必要があり、画面のレイアウト変更が非常に大変でした。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;方法&lt;/th&gt;
&lt;th&gt;Y・高さの管理&lt;/th&gt;
&lt;th&gt;レイアウト変更&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;コンテナなし（旧来）&lt;/td&gt;
&lt;td&gt;X・Y・Height を手動計算&lt;/td&gt;
&lt;td&gt;変更のたびに全座標を修正&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;VerticalContainer&lt;/td&gt;
&lt;td&gt;コンテナが自動追従&lt;/td&gt;
&lt;td&gt;コンテナの順序を変えるだけ&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;コンテナを使うと、アクションエリアを上に出すか下に出すかも、コンテナ内の順序を入れ替えるだけで変更できます。昔と比べて格段に楽になったと感じます。Power Apps のバージョンが上がるごとにこういう地味ながら実用的な改善が積み重なっているので、最新の使い方を追うのは損ではありません。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;複数選択UIのアクションエリアは、Not(IsEmpty(Filter(Gallery.AllItems, Checkbox.Value))) を Visible の条件にするだけで動きます。コンテナの Height も 0 に制御することで完全に消えて、ギャラリーが詰まるレイアウトが実現できます。&lt;/p&gt;
&lt;p&gt;VerticalContainer と HorizontalContainer を組み合わせたレイアウト設計に慣れると、あらゆる画面デザインがすっきりまとまるようになります。X・Y の手動計算から卒業して、コンテナベースの設計に移行していきましょう。&lt;/p&gt;
&lt;p&gt;ギャラリーの使い方を&lt;a href=&quot;/powerapps-gallery-complete/&quot;&gt;一覧でまとめた記事はこちら&lt;/a&gt;からご覧ください。&lt;/p&gt;</content:encoded></item><item><title>Power Apps でギャラリーをタブUIとして使う｜レスポンシブ対応タブインターフェースの作り方</title><link>https://shiminkaihatsu.com/powerapps-gallery-tabs/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-gallery-tabs/</guid><description>Power Apps でギャラリーをタブUIとして使う｜レスポンシブ対応タブインターフェースの作り方</description><pubDate>Sun, 29 Mar 2026 19:06:12 GMT</pubDate><content:encoded>&lt;p&gt;Power Apps でタブUIを作るとき、モダンコントロールのタブコンポーネントは制約が多く自由なカスタマイズが難しい場面があります。ギャラリーをタブとして使うパターンを覚えると、デザインを自由に制御しながらレスポンシブなタブインターフェースが作れます。&lt;/p&gt;
&lt;h2 id=&quot;ギャラリーをタブとして使う発想&quot;&gt;ギャラリーをタブとして使う発想&lt;/h2&gt;
&lt;p&gt;タブUIに必要な要素は2つです。タブバー（どのタブが選ばれているかを表示する部分）と、タブに対応したコンテンツエリアです。&lt;/p&gt;
&lt;p&gt;ギャラリーをタブバーとして使うアイデアはシンプルです。タブの名前一覧をコレクションか Table 関数で用意して、それをギャラリーの Items に設定します。各行がタブの1項目になります。選択されたタブ名を変数に保持して、コンテンツエリアの表示を切り替えるという構成です。&lt;/p&gt;
&lt;p&gt;モダンコントロールのタブと比べて、この方法では色・フォント・間隔・選択インジケーターのデザインをプロパティで完全にコントロールできます。社内アプリでブランドカラーに合わせたいときや、アイコン付きのタブを作りたいときに重宝します。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-gallery-tabs01.Ctx-K2o8_gJMl9.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;タブデータの準備&quot;&gt;タブデータの準備&lt;/h2&gt;
&lt;p&gt;タブの一覧はシンプルなテーブルで用意します。アプリが起動したときに OnStart か OnVisible でコレクションを作ります。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;ClearCollect&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(colTabs,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;  {TabName: &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;概要&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,    TabIcon: &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;📋&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, Order: &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;  {TabName: &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;詳細&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,    TabIcon: &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;📝&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, Order: &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;  {TabName: &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;設定&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,    TabIcon: &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;⚙️&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, Order: &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;TabName がタブのラベル、TabIcon が絵文字アイコン、Order が並び順です。必要に応じて列を追加できます。タブをあとから増やしたいときもコレクションに行を追加するだけで対応できます。&lt;/p&gt;
&lt;h2 id=&quot;ギャラリーをタブバーとして設定する&quot;&gt;ギャラリーをタブバーとして設定する&lt;/h2&gt;
&lt;p&gt;水平スクロールなしの Horizontal Gallery を使います。Items に colTabs を設定して、テンプレート内にタブ名のラベルを配置します。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Insert → Gallery → Horizontal を追加する&lt;/li&gt;
&lt;li&gt;Items プロパティに colTabs を設定する&lt;/li&gt;
&lt;li&gt;テンプレート内のラベルの Text に ThisItem.TabName を設定する&lt;/li&gt;
&lt;li&gt;アイコン用のラベルを追加して Text に ThisItem.TabIcon を設定する&lt;/li&gt;
&lt;li&gt;ギャラリーの OnSelect で選択タブを変数に保存する&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// ギャラリーの OnSelect&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;UpdateContext&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;({varSelectedTab: ThisItem.TabName})&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-gallery-tabs02.Dz0EuPvt_2n4NNt.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;選択中タブのハイライト&quot;&gt;選択中タブのハイライト&lt;/h3&gt;
&lt;p&gt;選択されているタブを見た目で示すには TemplateFill を使います。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(ThisItem.TabName &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; varSelectedTab,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;  ColorFade&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;Color.Blue&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;0.7&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;  RGBA&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;varSelectedTab と一致する行だけ背景色を変える方法です。TemplateFill の使い方については&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-gallery-highlight/&quot;&gt;ギャラリーで選択行をハイライトする記事&lt;/a&gt;でも詳しく解説しています。&lt;/p&gt;
&lt;h2 id=&quot;コンテンツエリアをタブに連動させる&quot;&gt;コンテンツエリアをタブに連動させる&lt;/h2&gt;
&lt;p&gt;タブごとに異なるコンテンツを表示するには、各コンテンツコンテナの Visible を varSelectedTab で切り替えます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 概要コンテナの Visible&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;varSelectedTab &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot;概要&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 詳細コンテナの Visible&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;varSelectedTab &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot;詳細&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 設定コンテナの Visible&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;varSelectedTab &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot;設定&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;各タブのコンテンツを VerticalContainer にまとめて、その Visible を上記の式で制御します。タブが切り替わると varSelectedTab が変わり、対応するコンテナだけが表示されます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-gallery-tabs03.CSTLaBpT_2jLILV.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;ギャラリーをコンテナに追従させてレスポンシブ化する&quot;&gt;ギャラリーをコンテナに追従させてレスポンシブ化する&lt;/h2&gt;
&lt;p&gt;タブバーのギャラリーをコンテナに追従させて、画面幅に応じて自動的にサイズが変わるレスポンシブ対応にするには、ギャラリーの Width プロパティをコンテナの幅に連動させます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// タブバーギャラリーの Width&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;Parent.Width&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Parent.Width は親コンテナの幅を返します。これを設定するとコンテナが広がればギャラリーも広がり、縮めばギャラリーも縮みます。各タブの幅は TemplateWidth で制御します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// TemplateWidth（タブ1項目の幅）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;Parent.Width &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; CountRows&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(colTabs)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;タブの数でコンテナ幅を割ることで、タブが何項目あっても均等に並びます。タブを1つ追加してもコレクションに行を追加するだけで、幅の計算は自動で更新されます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-gallery-tabs04.BmTk-lOu_1NM1mk.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;670&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;初期タブの設定&quot;&gt;初期タブの設定&lt;/h2&gt;
&lt;p&gt;アプリを開いたとき varSelectedTab が空だと何も表示されないため、OnVisible か OnStart で初期値を設定します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;UpdateContext&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;({varSelectedTab: &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;概要&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;})&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;画面遷移で戻ってきたときも初期タブに戻したい場合は OnVisible に書きます。画面遷移後も前のタブを保持したい場合はグローバル変数に変更します。OnStart と OnVisible の使い分けについては&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-onstart-onvisible/&quot;&gt;OnStart と OnVisible の使い分けの記事&lt;/a&gt;が参考になります。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;ギャラリーをタブバーとして使うパターンの全体設計をまとめます。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;要素&lt;/th&gt;
&lt;th&gt;実装&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;タブデータ&lt;/td&gt;
&lt;td&gt;ClearCollect で colTabs を作成&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;タブバー&lt;/td&gt;
&lt;td&gt;Horizontal Gallery、Items に colTabs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;タブ選択&lt;/td&gt;
&lt;td&gt;OnSelect で UpdateContext({varSelectedTab: ThisItem.TabName})&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ハイライト&lt;/td&gt;
&lt;td&gt;TemplateFill で varSelectedTab と一致する行を強調&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;コンテンツ&lt;/td&gt;
&lt;td&gt;各コンテナの Visible を varSelectedTab で切替&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;レスポンシブ&lt;/td&gt;
&lt;td&gt;Width = Parent.Width、TemplateWidth = Parent.Width / CountRows&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;ギャラリーを使ったタブUIは、モダンコントロールが成熟するまでの代替手段として十分実用的です。デザインの自由度が高く、コレクションでタブを管理するため追加・削除もコードで制御できます。ぜひ自分のアプリで試してみてください。&lt;/p&gt;
&lt;p&gt;ギャラリーの使い方を&lt;a href=&quot;/powerapps-gallery-complete/&quot;&gt;一覧でまとめた記事はこちら&lt;/a&gt;からご覧ください。&lt;/p&gt;</content:encoded></item><item><title>Power Apps でGallery.Selectedを使ってはいけない理由｜varRecordへの置き換え方</title><link>https://shiminkaihatsu.com/powerapps-gallery-varrecord/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-gallery-varrecord/</guid><description>Power Apps でGallery.Selectedを使ってはいけない理由｜varRecordへの置き換え方</description><pubDate>Sun, 29 Mar 2026 19:06:14 GMT</pubDate><content:encoded>&lt;p&gt;Gallery.Selected はギャラリーで選択したアイテムを取得できる便利なプロパティですが、実は使い続けると厄介なバグの温床になります。フォームとの連携に Gallery.Selected を使っている方は、ぜひ最後まで読んでください。&lt;/p&gt;
&lt;h2 id=&quot;galleryselected-の何が問題なのか&quot;&gt;Gallery.Selected の何が問題なのか&lt;/h2&gt;
&lt;p&gt;Gallery.Selected とは、ギャラリーコントロールで現在選択されている行のレコードを返すプロパティです。フォームの Item プロパティに Gallery.Selected を設定して詳細・編集フォームと連携するのは、Power Apps を始めて間もない頃に誰もが通る道です。&lt;/p&gt;
&lt;p&gt;ところがこの書き方には、新規追加の場面で確実にバグが出ます。新規ボタンを押してフォームを NewForm に切り替えたとき、ギャラリーの選択状態はそのまま残ります。つまり Gallery.Selected には前に選択していたレコードが入ったままです。&lt;/p&gt;
&lt;p&gt;このとき何が起きるかというと、新しいレコードを保存してギャラリーが更新された後、フォームが新規レコードではなく前のレコードに戻ってしまいます。保存したはずのデータが画面に反映されず、ユーザーが混乱するというバグです。私自身、これに気づかず何度もテスト環境で首をひねりました。フォームとギャラリーが連動しているように見えて、実は Gallery.Selected がズレたまま動いているというのは、原因が見つかりにくいので本当に厄介です。&lt;/p&gt;
&lt;h3 id=&quot;新規追加後に前のレコードに戻ってしまう現象&quot;&gt;新規追加後に前のレコードに戻ってしまう現象&lt;/h3&gt;
&lt;p&gt;もう少し具体的に追ってみます。タスク管理アプリで、ギャラリーにタスク一覧が表示されていて、右側に EditForm を置いているとします。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;一覧からタスクAを選択する → フォームにタスクAの内容が表示される&lt;/li&gt;
&lt;li&gt;新規ボタンを押す → フォームは NewForm になるが、ギャラリーの選択はタスクAのまま&lt;/li&gt;
&lt;li&gt;タスクBを入力して保存する → ギャラリーにタスクBが追加される&lt;/li&gt;
&lt;li&gt;フォームは Gallery.Selected を参照しているため、ギャラリーの選択行（タスクA）に戻る&lt;/li&gt;
&lt;li&gt;ユーザーには保存したタスクBがどこに消えたのかわからない状態になる&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-gallery-varrecord01.CIfVnX85_Z1r6Cey.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;p&gt;これが Gallery.Selected の根本的な問題です。簡単にいえば、ギャラリーの選択という不安定な状態に依存しているため、操作の順番によって結果が変わってしまうのです。&lt;/p&gt;
&lt;h2 id=&quot;varrecord-変数への置き換え&quot;&gt;varRecord 変数への置き換え&lt;/h2&gt;
&lt;p&gt;この問題を解決するのが、コンテキスト変数 varRecord を使ったパターンです。ギャラリーの各行を選択したとき、Gallery.Selected を参照する代わりに、選択したレコードを変数に格納するという考え方です。変数に格納した瞬間の値は不変なので、後でギャラリーの選択が変わっても影響を受けません。&lt;/p&gt;
&lt;p&gt;コンテキスト変数とグローバル変数の違いが気になる方は、&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-variables/&quot;&gt;Power Apps のグローバル変数とコンテキスト変数の使い分け&lt;/a&gt;をあわせて確認しておくとスムーズです。ここでは画面ローカルの状態管理なので UpdateContext を使います。&lt;/p&gt;
&lt;h3 id=&quot;onselect-に-updatecontext-を追加する&quot;&gt;OnSelect に UpdateContext を追加する&lt;/h3&gt;
&lt;p&gt;ギャラリーの OnSelect プロパティに次の式を追加します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;UpdateContext&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;({varRecord: ThisItem})&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ThisItem は OnSelect のタイミングでクリックした行のレコードです。これで varRecord に選択した行のデータが格納されます。その後のフォームやラベルは Gallery.Selected ではなく varRecord を参照するように変更します。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-gallery-varrecord02.BriRWkfW_Z1AHvUJ.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;p&gt;これだけで土台は完成です。後は参照先を Gallery.Selected から varRecord に差し替えていくだけです。&lt;/p&gt;
&lt;h3 id=&quot;フォームの-item-を-varrecord-に変更する&quot;&gt;フォームの Item を varRecord に変更する&lt;/h3&gt;
&lt;p&gt;EditForm の Item プロパティを Gallery.Selected から varRecord に変更します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;varRecord&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;これだけで、ギャラリーの選択状態に関係なく、varRecord に格納されたレコードがフォームに表示されるようになります。新規ボタンを押すときは varRecord を Blank() にリセットすれば、フォームが空になって新規入力モードとして機能します。新規ボタンの OnSelect はこのようにします。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;NewForm&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(EditForm1);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;UpdateContext&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;({varRecord: &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;Blank&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;()})&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-gallery-varrecord03.BJ70IcoR_Z1cjX6c.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;p&gt;Gallery.Selected を使っていたときと比べると、フォームの動作が安定します。新規追加後の保存でフォームが前のレコードに戻るという現象が起きなくなります。&lt;/p&gt;
&lt;h2 id=&quot;templatefill-も-varrecord-連動に切り替える&quot;&gt;TemplateFill も varRecord 連動に切り替える&lt;/h2&gt;
&lt;p&gt;選択行のハイライト表示を実装している場合、TemplateFill の式も変更が必要です。TemplateFill の基本的な仕組みについては、&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-gallery-highlight/&quot;&gt;Power Apps ギャラリーで選択行をハイライトする記事&lt;/a&gt;で詳しく解説しています。&lt;/p&gt;
&lt;p&gt;Gallery.Selected が参照されているときは、IsSelected という組み込みプロパティを使ってハイライトを切り替えているケースが多いです。しかし varRecord に切り替えた後は IsSelected への依存をゼロにするのが理想です。代わりに次の式を使います。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(ThisItem.ID &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; varRecord.ID, &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;ColorFade&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;Color.Blue&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;0.7&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;), &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;RGBA&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;))&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ThisItem.ID と varRecord.ID が一致する行だけ色を変える、という考え方です。これでギャラリーの選択状態（IsSelected）ではなく、変数に何が入っているかでハイライトが制御されます。新規ボタンを押して varRecord が Blank になれば、どの行もハイライトされない状態になります。これが意図どおりの挙動です。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-gallery-varrecord04.DfvSNYuk_Ziys71.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;670&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;fontweight-の参照を-title1-に集約する&quot;&gt;FontWeight の参照を Title1 に集約する&lt;/h2&gt;
&lt;p&gt;ギャラリー内のラベルで FontWeight を IsSelected に連動させていた場合、そこも書き換えが必要です。たとえばタイトルラベルの FontWeight を選択中なら Bold にするという式で組んでいると、IsSelected の参照が残ることになります。&lt;/p&gt;
&lt;p&gt;解決策は、FontWeight の判定ロジックを Title1（ギャラリー内の先頭ラベル）に集約して、他のラベルからは Title1.FontWeight を参照させるパターンです。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;コントロール&lt;/th&gt;
&lt;th&gt;プロパティ&lt;/th&gt;
&lt;th&gt;設定値&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Title1（先頭ラベル）&lt;/td&gt;
&lt;td&gt;FontWeight&lt;/td&gt;
&lt;td&gt;If(ThisItem.ID = varRecord.ID, FontWeight.Bold, FontWeight.Normal)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Subtitle1・Body1 など&lt;/td&gt;
&lt;td&gt;FontWeight&lt;/td&gt;
&lt;td&gt;Title1.FontWeight&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;このように参照先を一本化しておくと、ロジックを変更するときに Title1 の1箇所だけ直せばよくなります。ギャラリーが10列・20列と増えても修正は1箇所で済む。メンテナンス性が上がるので、複雑になる前に習慣づけておくことをおすすめします。体感では、後から直すよりも最初から設計しておいたほうが圧倒的に楽です。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-gallery-varrecord05.CaUKYheA_ZBnOkU.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;gallery-全体で-isselected-の参照をゼロにする&quot;&gt;Gallery 全体で IsSelected の参照をゼロにする&lt;/h2&gt;
&lt;p&gt;varRecord への切り替えが完了したら、ギャラリー内のすべてのコントロールで IsSelected が参照されていないことを確認します。これが最後の仕上げです。&lt;/p&gt;
&lt;p&gt;確認の手順はシンプルです。Power Apps Studio の検索機能（Ctrl + F）で IsSelected と入力して、ヒットする箇所を一つずつ確認します。残っている場合はすべて varRecord.ID との比較式か、Title1 への参照に置き換えます。&lt;/p&gt;
&lt;p&gt;IsSelected が残っていると、新規ボタンを押したときに前のレコードのハイライトが残ったり、フォームとギャラリーのハイライトが食い違ったりします。一見小さな問題に見えますが、ユーザーが操作するたびに違和感が積み重なります。アプリの品質に直結するので、リリース前に必ず確認しておきましょう。&lt;/p&gt;
&lt;p&gt;varRecord への切り替えが済んだら、次のステップとして新規作成後の保存フロー・プレースホルダーUI・OnSuccess の実装パターンについて、&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-gallery-form/&quot;&gt;ギャラリーとフォームを変数でつなぐ記事&lt;/a&gt;で詳しく解説しています。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;Gallery.Selected は手軽ですが、新規入力フォームとの組み合わせで必ずズレが発生します。varRecord を使ったパターンに置き換えることで、ギャラリー・フォーム・ハイライトを変数ベースで一貫して制御できるようになります。&lt;/p&gt;
&lt;p&gt;最初は手間に感じるかもしれません。でもこのパターンを覚えると、中〜大規模のアプリを作るときに迷わなくなります。Gallery.Selected のズレで何時間も悩むよりも、最初から varRecord で設計するほうが結果的に速いです。地道な一手間ですが、アプリの安定性を大きく高めてくれる変更です。楽しみながら取り組んでみてください。&lt;/p&gt;
&lt;p&gt;ギャラリーの使い方を&lt;a href=&quot;/powerapps-gallery-complete/&quot;&gt;一覧でまとめた記事はこちら&lt;/a&gt;からご覧ください。&lt;/p&gt;</content:encoded></item><item><title>Power AppsのIfとSwitch。条件分岐の書き方と場面別の使い分け</title><link>https://shiminkaihatsu.com/powerapps-if-switch/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-if-switch/</guid><description>Power AppsのIfとSwitch。条件分岐の書き方と場面別の使い分け</description><pubDate>Mon, 16 Mar 2026 15:46:48 GMT</pubDate><content:encoded>&lt;p&gt;Power AppsのIfとSwitch、どちらも条件分岐に使いますが、使い分けを理解しておくと数式がずっと読みやすくなります。一言で言えば、条件が1〜2つならIf、同じ値との比較が3つ以上続くならSwitchが向いています。&lt;/p&gt;
&lt;p&gt;とはいえ正解は1つではなく、どちらで書いても動くことが多いです。大事なのは後から見て何をしているか理解できる数式になっているかどうかです。この記事では判断基準と書き方を整理します。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-if-switch04.B2oH9_Mh_Z2dxd1j.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;if関数の基本と使い所&quot;&gt;If関数の基本と使い所&lt;/h2&gt;
&lt;p&gt;If関数は、条件がtrueかfalseかで処理を分岐します。構文はシンプルです。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(条件, trueのとき, falseのとき)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;複数の条件を連鎖させることもできます（else ifに相当）。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    点数 &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 90&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;優&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    点数 &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 70&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;良&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    点数 &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 50&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;可&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;    &quot;不可&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;最後の値はデフォルト（どの条件にも当てはまらなかった場合）です。&lt;/p&gt;
&lt;h3 id=&quot;ifが向いているケース&quot;&gt;Ifが向いているケース&lt;/h3&gt;
&lt;p&gt;Ifは条件の内容が多様なときに使いやすいです。数値の大小比較や、複数のフィールドを組み合わせた複合条件など、値の種類に関係なく柔軟に書けます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;数値の範囲での分岐（以上・以下・範囲内）&lt;/li&gt;
&lt;li&gt;複数フィールドの組み合わせ（AかつB、またはC）&lt;/li&gt;
&lt;li&gt;2択のシンプルな分岐&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;特にColorプロパティへの適用は実務でよく使います。ステータスによって文字色を変えたいとき、こんな書き方をします。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    ThisItem.ステータス &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot;完了&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;Color.Gray&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    ThisItem.ステータス &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot;エラー&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;Color.Red&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;    Color.Black&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;switch関数の基本と使い所&quot;&gt;Switch関数の基本と使い所&lt;/h2&gt;
&lt;p&gt;Switch関数は、ある1つの値が複数の候補のどれと一致するかで分岐します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;Switch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    対象の値,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    候補1, 結果1,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    候補2, 結果2,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    候補3, 結果3,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    デフォルト&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;先ほどのステータスによる文字色変更をSwitchで書き直すとこうなります。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;Switch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    ThisItem.ステータス,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;    &quot;完了&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;Color.Gray&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;    &quot;エラー&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;Color.Red&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;    Color.Black&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;比較する対象（ThisItem.ステータス）が1回しか出てこないので、Ifで書くより読みやすくなっています。候補が4つ5つと増えてきたときほどSwitchの恩恵が大きくなります。&lt;/p&gt;
&lt;h3 id=&quot;switchが向いているケース&quot;&gt;Switchが向いているケース&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;同じ1つの値と複数の候補を比較する&lt;/li&gt;
&lt;li&gt;選択肢が3つ以上ある&lt;/li&gt;
&lt;li&gt;ドロップダウンやコンボボックスの選択値による分岐&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;申請フローのステータス（下書き・申請中・承認済み・却下）のような、決まった値の集合に対して処理を振り分けるケースがSwitchの典型的な使い所です。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-if-switch05.DJmwGb5M_18nREa.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;ifとswitchの比較まとめ&quot;&gt;IfとSwitchの比較まとめ&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;観点&lt;/th&gt;
&lt;th&gt;If&lt;/th&gt;
&lt;th&gt;Switch&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;比較の種類&lt;/td&gt;
&lt;td&gt;任意の条件（大小・複合条件など）&lt;/td&gt;
&lt;td&gt;1つの値と複数候補の一致確認&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;読みやすさ&lt;/td&gt;
&lt;td&gt;条件が2〜3つまでなら読みやすい&lt;/td&gt;
&lt;td&gt;同じ値の比較が3つ以上のとき読みやすい&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;柔軟性&lt;/td&gt;
&lt;td&gt;どんな条件も書ける&lt;/td&gt;
&lt;td&gt;完全一致の比較のみ（範囲比較はできない）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;デフォルト値&lt;/td&gt;
&lt;td&gt;最後の引数&lt;/td&gt;
&lt;td&gt;最後の引数&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;個人的には、2択か簡単な複合条件はIf、同じ列の値で3パターン以上に分岐するときはSwitch、と使い分けています。どちらでも動くので、後から読む人が迷わない書き方を選ぶのがいちばんです。&lt;/p&gt;
&lt;h2 id=&quot;ifsとswitchの活用パターン&quot;&gt;IfsとSwitchの活用パターン&lt;/h2&gt;
&lt;h3 id=&quot;ネストしたifは読みにくい&quot;&gt;ネストしたIfは読みにくい&lt;/h3&gt;
&lt;p&gt;Ifをネストして書く（Ifの中にIfを書く）と途端に読みにくくなります。条件が増えてきたと感じたら、連鎖Ifかswitchへの切り替えを検討しましょう。&lt;/p&gt;
&lt;p&gt;例えばこれはわかりにくいです。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    条件A,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;    If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(条件B, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;パターン1&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;パターン2&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;    If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(条件C, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;パターン3&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;パターン4&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;こういう場合はAndやOrで条件を整理するか、変数に一旦結果を入れてロジックを分割するほうが管理しやすくなります。&lt;/p&gt;
&lt;h3 id=&quot;変数との組み合わせでロジックを整理する&quot;&gt;変数との組み合わせでロジックを整理する&lt;/h3&gt;
&lt;p&gt;複雑な分岐は変数に結果を入れておくとすっきりします。例えばボタンのOnSelectで条件判断をして変数にセットし、その変数をColorプロパティで参照する、というパターンです。数式の責任範囲が分かれて見通しがよくなります。&lt;/p&gt;
&lt;p&gt;変数の使い方についてはこちらも参考にしてください。&lt;/p&gt;
&lt;p&gt;→ &lt;a href=&quot;/powerapps-variables/&quot;&gt;Power Appsのグローバル変数とコンテキスト変数——違いと使い分けを図解&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;また、データの絞り込みに条件を使いたい場合はFilter関数との組み合わせも重要です。&lt;/p&gt;
&lt;p&gt;→ &lt;a href=&quot;/powerapps-filter-search-lookup/&quot;&gt;Power AppsのFilter・Search・LookUp関数——3つの違いと使い分けガイド&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-if-switch03.DRPn8lnL_Z1GUmuN.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;IfとSwitchはどちらも条件分岐ですが、使い分けのポイントは条件の種類と数です。範囲比較や複合条件はIf、同じ値の完全一致で3つ以上に分岐するときはSwitchを選ぶと数式が読みやすくなります。&lt;/p&gt;
&lt;p&gt;どちらの関数も使いこなせるようになると、アプリの色の出し分けや操作可否の制御など、UIの動きをきめ細かくコントロールできるようになります。最初は簡単なColorプロパティの変更から試してみるのがおすすめです。楽しみながら使い分けを覚えていきましょう。&lt;/p&gt;</content:encoded></item><item><title>Power AppsのIndex関数｜テーブルのn番目を取り出す方法</title><link>https://shiminkaihatsu.com/powerapps-index/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-index/</guid><description>Power AppsのIndex関数｜テーブルのn番目を取り出す方法</description><pubDate>Sun, 22 Mar 2026 11:17:40 GMT</pubDate><content:encoded>&lt;p&gt;FirstやLastでは取り出せない「3番目」「5番目」の要素を取り出したいとき、Index関数を使います。Splitと組み合わせると、区切り文字で分割した文字列の任意の部分を取り出せます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-index01.XS4GElkj_Z2n9cxb.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;index関数の基本&quot;&gt;Index関数の基本&lt;/h2&gt;
&lt;p&gt;Index関数は、テーブルから指定した行番号のレコードを返します。引数は2つです。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Index&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(テーブル, 行番号)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;行番号は1始まりです。テーブルの1行目を取り出すIndex(テーブル, 1)はFirst(テーブル)と同じ結果になります。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Index&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;([&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;A&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;B&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;C&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;D&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;], &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;).Value&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 結果：C&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Firstは先頭行、Lastは末尾行しか取れませんが、Indexは行番号を指定できるため、中間の任意の要素を取り出せます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-index02.Cq3VTZMp_ZPJzJB.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;splitと組み合わせる&quot;&gt;Splitと組み合わせる&lt;/h2&gt;
&lt;p&gt;Splitで文字列をテーブルに変換してからIndexで要素を取り出すパターンは、区切り文字で区切られたデータを扱うときに特に役立ちます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// &quot;東京/大阪/名古屋/福岡&quot; の3番目を取り出す&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Index&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Split&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;東京/大阪/名古屋/福岡&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;/&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;), &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;).Value&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 結果：名古屋&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;SplitはValueという1列のテーブルを返すため、Indexの後に .Value をつけて文字列として取り出します。Split・First・Lastの使い方については&lt;a href=&quot;/powerapps-split-name/&quot;&gt;こちらの記事&lt;/a&gt;をご覧ください。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-index03.CzkNiBZO_22lfqi.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;実例3パターン&quot;&gt;実例3パターン&lt;/h2&gt;
&lt;h3 id=&quot;コレクションのn番目を取り出す&quot;&gt;コレクションのn番目を取り出す&lt;/h3&gt;
&lt;p&gt;ボタンを押すたびに次の項目を表示するスライドショー的なUIで、現在のインデックスを変数で持ちながらIndexで表示内容を切り替えます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 変数 varIndex を 1 で初期化しておく&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 「次へ」ボタンのOnSelect&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Set&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(varIndex, varIndex &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// ラベルのText&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Index&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(colSlides, varIndex).Title&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;コレクションの使い方については&lt;a href=&quot;/powerapps-collection/&quot;&gt;こちらの記事&lt;/a&gt;で詳しく解説しています。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-index04.JK0gLdNY_5jM9p.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;sharepointリストの特定行を参照する&quot;&gt;SharePointリストの特定行を参照する&lt;/h3&gt;
&lt;p&gt;SharePointリストの先頭から数えてn行目のデータを取り出したい場面です。GalleryのSelectedを使わずにIndex指定でレコードを取り出せます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Index&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    SortByColumns&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(社員リスト, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;社員番号&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, Ascending),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    varTargetRow&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ただし、SharePointリストにIndexを直接かけると委任の警告が出る場合があります。データ量が多い場合はCollectでコレクションに取り込んでからIndexを使うほうが安全です。委任については&lt;a href=&quot;/powerapps-delegation-warning/&quot;&gt;こちらの記事&lt;/a&gt;を参照してください。&lt;/p&gt;
&lt;h3 id=&quot;ギャラリーで選択せずにn番目の行を操作する&quot;&gt;ギャラリーで選択せずにn番目の行を操作する&lt;/h3&gt;
&lt;p&gt;ギャラリーを使わず、プログラムで特定行のデータを取得・編集したいケースです。たとえば「最新の申請を自動で選択状態にする」処理でIndexが活用できます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 日付降順でソートした先頭行を変数に格納&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Set&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    varLatestRecord,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    First&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;SortByColumns&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(申請リスト, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;申請日&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, Descending))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;このケースではFirstで対応できますが、「最新から2番目」を取りたい場合はIndex(SortByColumns(…), 2)という書き方になります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-index06.BZJPxh_t_Z1oqMAJ.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;indexとfirstlastの使い分け&quot;&gt;IndexとFirst・Lastの使い分け&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;関数&lt;/th&gt;
&lt;th&gt;取り出す位置&lt;/th&gt;
&lt;th&gt;行番号の指定&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;First&lt;/td&gt;
&lt;td&gt;先頭行のみ&lt;/td&gt;
&lt;td&gt;不要&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Last&lt;/td&gt;
&lt;td&gt;末尾行のみ&lt;/td&gt;
&lt;td&gt;不要&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Index&lt;/td&gt;
&lt;td&gt;任意のn番目&lt;/td&gt;
&lt;td&gt;必要（数値または変数）&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;単純に先頭・末尾を取るならFirst・Last、動的に位置を変えたい場合はIndexを使います。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;Index関数は、FirstとLastだけでは対応できない「n番目」を取り出す関数です。Splitと組み合わせてn番目の文字列を取り出す、コレクションをスライドショー的に操作する、といった場面で便利に使えます。&lt;/p&gt;
&lt;p&gt;ギャラリーのSelected（選択行）を使う方法と比べて、Indexはプログラム側で行を制御できるのが強みです。ギャラリーの使い方は&lt;a href=&quot;/powerapps-gallery/&quot;&gt;こちらの記事&lt;/a&gt;で解説しています。&lt;/p&gt;
&lt;p&gt;Power Appsのその他のテキスト関数についての完全ガイドは&lt;a href=&quot;/powerapps-text-functions/&quot;&gt;こちらの記事をご覧ください&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;使い始めると、データ操作の幅が一気に広がります。ぜひ活用してみてください。&lt;/p&gt;</content:encoded></item><item><title>Power Appsで先頭・末尾から固定文字数を取り出す｜LeftとRightの使い方</title><link>https://shiminkaihatsu.com/powerapps-left-right/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-left-right/</guid><description>Power Appsで先頭・末尾から固定文字数を取り出す｜LeftとRightの使い方</description><pubDate>Sun, 22 Mar 2026 11:17:32 GMT</pubDate><content:encoded>&lt;p&gt;請求番号の末尾4桁、郵便番号の前3桁など、文字の位置が固定されているデータを切り出すときはLeftとRightが最もシンプルな選択肢です。引数が少なく、数式を短く書けるのが利点です。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-left-right01.DO-9HebR_Z121fgp.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;left先頭からn文字を取り出す&quot;&gt;Left：先頭からn文字を取り出す&lt;/h2&gt;
&lt;p&gt;Left関数は文字列の先頭から指定した文字数を返します。引数は2つです。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Left&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(テキスト, 文字数)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Left&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;ABCDE&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 結果：ABC&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;たとえばカテゴリコードが先頭2文字で固定されているコードから、カテゴリ部分だけを取り出すときに使います。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Left&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;TK2024001&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 結果：TK&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-left-right02.CNvitiZz_26reTa.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;right末尾からn文字を取り出す&quot;&gt;Right：末尾からn文字を取り出す&lt;/h2&gt;
&lt;p&gt;Right関数は文字列の末尾から指定した文字数を返します。構造はLeftと同じです。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Right&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(テキスト, 文字数)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Right&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;請求書-2024-0042&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 結果：0042&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;請求番号の末尾4桁を取り出して管理番号として使う、といった場面がよくあります。Left・Rightは固定長のデータに強く、ハードコードでも壊れにくいのが特長です。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-left-right03.DZrcVcs4_22rQL1.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;実例3パターン&quot;&gt;実例3パターン&lt;/h2&gt;
&lt;h3 id=&quot;カテゴリコードで絞り込む&quot;&gt;カテゴリコードで絞り込む&lt;/h3&gt;
&lt;p&gt;商品コードの先頭2文字がカテゴリを表す場合、Leftで取り出した値でFilterをかけられます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    商品リスト,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Left&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(商品コード, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot;TK&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;FilterやLookUpの詳しい使い方は&lt;a href=&quot;/powerapps-filter-search-lookup/&quot;&gt;こちらの記事&lt;/a&gt;をご覧ください。&lt;/p&gt;
&lt;h3 id=&quot;入力値のバリデーションに使う&quot;&gt;入力値のバリデーションに使う&lt;/h3&gt;
&lt;p&gt;郵便番号入力フォームで、先頭3文字が数字かどうかを確認するバリデーションです。LenとLeftを組み合わせて桁数チェックも同時に行えます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Len&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(TextInput_PostalCode.Text) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 3&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; &amp;#x26;&amp;#x26;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    IsNumeric&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Left&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(TextInput_PostalCode.Text, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;    &quot;OK&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;    &quot;先頭3桁は数字を入力してください&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ifの使い方は&lt;a href=&quot;/powerapps-if-switch/&quot;&gt;Power AppsのIfとSwitch&lt;/a&gt;でまとめています。&lt;/p&gt;
&lt;h3 id=&quot;patchで保存する前にコードを整形する&quot;&gt;Patchで保存する前にコードを整形する&lt;/h3&gt;
&lt;p&gt;入力されたコードの先頭2文字を部署コードとして別の列に保存する場面です。Patchと組み合わせてSharePointリストに書き込めます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Patch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    申請リスト,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Defaults&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(申請リスト),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        申請番号: TextInput_AppNo.Text,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        部署コード: &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Left&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(TextInput_AppNo.Text, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        連番: &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Right&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(TextInput_AppNo.Text, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Patchの使い方については&lt;a href=&quot;/powerapps-patch-function/&quot;&gt;Patch関数の使い方&lt;/a&gt;で解説しています。SharePointリストの操作については&lt;a href=&quot;/powerapps-sharepoint-crud/&quot;&gt;SharePointリストのCRUDパターン&lt;/a&gt;もあわせてご覧ください。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-left-right04.Nqw4VJb4_1UtQHi.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;midやfindとの使い分け&quot;&gt;MidやFindとの使い分け&lt;/h2&gt;
&lt;p&gt;Left・Rightは文字の位置が固定されているときに使います。位置が変わりうる場合や、区切り文字を基準に切り出す場合はMidとFindを使います。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;関数&lt;/th&gt;
&lt;th&gt;向いているケース&lt;/th&gt;
&lt;th&gt;位置の指定方法&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Left&lt;/td&gt;
&lt;td&gt;先頭からn文字が固定されているコード&lt;/td&gt;
&lt;td&gt;文字数をハードコード&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Right&lt;/td&gt;
&lt;td&gt;末尾からn文字が固定されているコード&lt;/td&gt;
&lt;td&gt;文字数をハードコード&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mid＋Find&lt;/td&gt;
&lt;td&gt;区切り文字の間にある可変長の文字列&lt;/td&gt;
&lt;td&gt;Findで位置を動的取得&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Mid・Findの組み合わせについては&lt;a href=&quot;/powerapps-mid-find/&quot;&gt;こちらの記事&lt;/a&gt;をごらんください。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;Left・Rightはシンプルさが最大の強みです。固定長のコードや番号を扱うときは迷わずLeft・Rightを選んでください。数式が短く、読みやすいアプリになります。&lt;/p&gt;
&lt;p&gt;文字数が変わる可能性があるデータや、文字列全体の長さに応じて切り出し範囲を変えたい場合は、Len関数と組み合わせることで対応できます。Lenの使い方は&lt;a href=&quot;/powerapps-len/&quot;&gt;こちらの記事&lt;/a&gt;をご覧ください。&lt;/p&gt;
&lt;p&gt;Power Appsのその他のテキスト関数についての完全ガイドは&lt;a href=&quot;/powerapps-text-functions/&quot;&gt;こちらの記事をご覧ください&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;地味な関数ですが、データ整形の現場では頻繁に使います。ぜひ手に馴染ませてみてください。&lt;/p&gt;</content:encoded></item><item><title>Power AppsのLen関数｜文字数カウントは単独では使わない、数式の部品としての使い方</title><link>https://shiminkaihatsu.com/powerapps-len/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-len/</guid><description>Power AppsのLen関数｜文字数カウントは単独では使わない、数式の部品としての使い方</description><pubDate>Sun, 22 Mar 2026 11:17:48 GMT</pubDate><content:encoded>&lt;p&gt;Len関数は文字数を返すだけのシンプルな関数ですが、単独で使うケースはほとんどありません。IfやMid・Rightと組み合わせて初めて役立つ、数式の部品として使う関数です。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-len01.CnCyLAa8_mOgs8.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;lenの基本&quot;&gt;Lenの基本&lt;/h2&gt;
&lt;p&gt;Len関数は1つの引数を受け取り、その文字列の文字数を数値で返します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Len&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;Power Apps&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 結果：10&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Len&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 結果：0&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;スペースも1文字としてカウントされます。全角文字も半角文字も同じく1文字です。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-len02.Cyouw-Ok_ZqAW8c.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;lenを使う3つのパターン&quot;&gt;Lenを使う3つのパターン&lt;/h2&gt;
&lt;h3 id=&quot;入力バリデーション文字数上限チェック&quot;&gt;入力バリデーション：文字数上限チェック&lt;/h3&gt;
&lt;p&gt;フォームの入力欄に文字数制限を設けて、超過したときにメッセージを出す定番パターンです。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Len&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(TextInput_Memo.Text) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 200&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;    &quot;200文字以内で入力してください&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;    &quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ラベルのTextにこの数式を入れておけば、200文字を超えた瞬間に警告を表示できます。送信ボタンの活性制御にも応用できます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 送信ボタンのDisplayMode&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Len&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(TextInput_Memo.Text) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&amp;#x3C;=&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 200&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;DisplayMode.Edit&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;DisplayMode.Disabled&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ifの使い方は&lt;a href=&quot;/powerapps-if-switch/&quot;&gt;こちらの記事&lt;/a&gt;で詳しく解説しています。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-len03.DGYQUoEL_ZhKHvO.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;残り文字数を表示する&quot;&gt;残り文字数を表示する&lt;/h3&gt;
&lt;p&gt;SNSの入力欄のように「残り○文字」をリアルタイムで表示するUIです。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;残り {200 - Len(TextInput_Memo.Text)} 文字&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;文字列補間と組み合わせるとシンプルに書けます。文字列補間の使い方は&lt;a href=&quot;/powerapps-string-interpolation/&quot;&gt;こちらの記事&lt;/a&gt;を参照してください。&lt;/p&gt;
&lt;h3 id=&quot;midやrightと組み合わせて末尾から動的に切り出す&quot;&gt;MidやRightと組み合わせて末尾から動的に切り出す&lt;/h3&gt;
&lt;p&gt;Rightは末尾からn文字を取り出しますが、文字列全体の長さに応じて切り出し範囲を変えたいときはLenと組み合わせます。たとえば最初のスラッシュより後ろをすべて取り出したい場合です。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;With&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    { slashPos: &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Find&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;/&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, TextInput_Path.Text) },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Right&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        TextInput_Path.Text,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;        Len&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(TextInput_Path.Text) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; slashPos&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Len(全体の文字数) から Find(区切り文字の位置) を引くことで、末尾から取り出すべき文字数を動的に算出します。Left・Rightの詳しい使い方は&lt;a href=&quot;/powerapps-left-right/&quot;&gt;こちらの記事&lt;/a&gt;で解説しています。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-len04.5uJqJF2y_20wKHT.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;sharepointの文字数制限との関係&quot;&gt;SharePointの文字数制限との関係&lt;/h2&gt;
&lt;p&gt;SharePointのテキスト列（1行テキスト）はデフォルトで255文字の上限があります。Power Appsのフォームからそのまま入力すると、255文字を超えた場合にPatchがエラーになることがあります。Lenを使ったバリデーションを入れておくことで、保存前に弾けます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Len&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(TextInput_Title.Text) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 255&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Notify&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;タイトルは255文字以内にしてください&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;NotificationType.Error&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Patch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(申請リスト, &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Defaults&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(申請リスト), { タイトル: TextInput_Title.Text })&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;委任の警告やSharePointのデータ制限については&lt;a href=&quot;/powerapps-delegation-warning/&quot;&gt;こちらの記事&lt;/a&gt;も合わせてご覧ください。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-len05.DDd75uky_8cOUC.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;lenは単独では使わない&quot;&gt;Lenは単独では使わない&lt;/h2&gt;
&lt;p&gt;あらためて整理すると、Lenを単体でラベルに表示する用途はほぼありません。常にIf・Mid・Right・Findなどと組み合わせて、文字数を条件や計算の材料として使います。逆に言えば、IfやMidの中に数値が必要な場面で「文字数から計算できないか」と考えたとき、Lenを思い出せばいいのです。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;Lenの使いどころは3つです。入力バリデーション（文字数制限チェック）、残り文字数の表示、そしてMidやRightと組み合わせた動的な切り出しです。いずれも他の関数と組み合わせて初めて機能します。&lt;/p&gt;
&lt;p&gt;Power Appsのその他のテキスト関数についての完全ガイドは&lt;a href=&quot;/powerapps-text-functions/&quot;&gt;こちらの記事をご覧ください&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;地味ですが確実に使う場面が来る関数です。引き出しのひとつとして覚えておきましょう。&lt;/p&gt;</content:encoded></item><item><title>Power Appsのライセンスをわかりやすく解説。無料でどこまで使える？有料プランとの違い</title><link>https://shiminkaihatsu.com/powerapps-license/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-license/</guid><description>Power Appsのライセンスをわかりやすく解説。無料でどこまで使える？有料プランとの違い</description><pubDate>Mon, 16 Mar 2026 15:46:47 GMT</pubDate><content:encoded>&lt;p&gt;Power Appsのライセンスは正直わかりにくいです。ただ、整理してみると実務上の選択肢は3パターンにまとまります。無料で使えるのかどうか、有料にするとどう変わるのか、この記事でまとめます。&lt;/p&gt;
&lt;p&gt;私も最初は社内にPower Appsを広めようとしたとき、ライセンス周りで何度も調べ直しました。上司に聞かれてもうまく説明できなかった経験があるので、できるだけ平易にまとめておきます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-license01.ByKnSg8T_Z1CYzto.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;670&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;power-appsには3種類の使い方がある&quot;&gt;Power Appsには3種類の使い方がある&lt;/h2&gt;
&lt;p&gt;まず大きく3パターンに分けて理解するとスッキリします。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;パターン&lt;/th&gt;
&lt;th&gt;ライセンス&lt;/th&gt;
&lt;th&gt;使える範囲&lt;/th&gt;
&lt;th&gt;費用&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;①&lt;/td&gt;
&lt;td&gt;Microsoft 365 込み&lt;/td&gt;
&lt;td&gt;StandardコネクタのみのSharePoint・Teamsアプリ&lt;/td&gt;
&lt;td&gt;Microsoft 365に含まれる&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;②&lt;/td&gt;
&lt;td&gt;Power Apps Premium（旧Per App）&lt;/td&gt;
&lt;td&gt;Premium含む。ただし1アプリ1ユーザー単位&lt;/td&gt;
&lt;td&gt;有料（アプリ×ユーザー数）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;③&lt;/td&gt;
&lt;td&gt;Power Apps Per User&lt;/td&gt;
&lt;td&gt;Premium含む。無制限でアプリ作成・利用可&lt;/td&gt;
&lt;td&gt;有料（ユーザー単位）&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;パターン①は多くの会社で既に持っているMicrosoft 365に含まれているので、追加費用なしで使えます。ただしPremiumコネクタ（Dataverseやサードパーティサービスとの連携）は使えません。&lt;/p&gt;
&lt;h3 id=&quot;microsoft-365込みで何ができるか&quot;&gt;Microsoft 365込みで何ができるか&lt;/h3&gt;
&lt;p&gt;Microsoft 365（旧Office 365）のE1・E3・E5などには、Power Appsが含まれています。SharePointリストやExcelをデータソースにしたアプリなら、追加ライセンスなしで作れます。&lt;/p&gt;
&lt;p&gt;社内申請アプリや日報アプリ、在庫管理など、SharePointリストと組み合わせる用途なら十分なことが多いです。私が社内で最初に作ったアプリはすべてこのライセンス範囲でした。&lt;/p&gt;
&lt;h3 id=&quot;premiumコネクタが必要になるのはどんなとき&quot;&gt;Premiumコネクタが必要になるのはどんなとき？&lt;/h3&gt;
&lt;p&gt;Dataverseをデータソースにしたい場合や、SAP・Salesforceといった外部システムと連携したい場合はPremiumコネクタが必要です。このとき、アプリを使うユーザー全員にPremiumライセンスが必要になります。&lt;/p&gt;
&lt;p&gt;開発者だけが有料ライセンスを持てばいいわけではありません。アプリを使う社員が20人いれば、20人分のライセンス費用がかかります。これを把握せずにアプリを設計すると、後から予算の問題が発生します。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-license02.KHkggFyv_HKU2Y.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;developer-planで無料開発検証できる&quot;&gt;Developer Planで無料開発・検証できる&lt;/h2&gt;
&lt;p&gt;個人で学習・開発するだけなら、Power Apps Developer Planが使えます。個人のMicrosoftアカウント（職場または学校アカウント）に無料で追加でき、Dataverseを含む本番同等の機能を試せます。&lt;/p&gt;
&lt;p&gt;ただしDeveloper Planで作ったアプリは他のユーザーに共有して使わせることができません。あくまで個人開発・検証用です。私は新しい機能を試すときに自分のDeveloper Plan環境を使って実験してから、社内の本番環境に展開するようにしています。&lt;/p&gt;
&lt;h2 id=&quot;ライセンス計画でよくある失敗パターン&quot;&gt;ライセンス計画でよくある失敗パターン&lt;/h2&gt;
&lt;h3 id=&quot;失敗開発者だけ有料ライセンスを持てば使えると思っていた&quot;&gt;失敗①：開発者だけ有料ライセンスを持てば使えると思っていた&lt;/h3&gt;
&lt;p&gt;前述のとおり、Premiumコネクタを使うアプリはユーザー全員にライセンスが必要です。20人が使う申請アプリをDataverseで作ると、20ユーザー分のPer Userライセンスが必要になります。これを計算に入れないと予算オーバーになります。&lt;/p&gt;
&lt;h3 id=&quot;失敗sharepointで代替できることをわかっていなかった&quot;&gt;失敗②：SharePointで代替できることをわかっていなかった&lt;/h3&gt;
&lt;p&gt;Dataverseを使いたくなる場面でも、SharePointリストで十分なケースは多いです。Dataverseが必要なのは、複数のリレーションを持つ複雑なデータモデルや、大量レコードを扱うケースが主です。SharePointで収まるならMicrosoft 365ライセンスだけで解決するので、まずSharePointで検討することをおすすめします。&lt;/p&gt;
&lt;h3 id=&quot;失敗per-appとper-userのどちらが安いか試算していなかった&quot;&gt;失敗③：Per AppとPer Userのどちらが安いか試算していなかった&lt;/h3&gt;
&lt;p&gt;1人が複数のアプリを使う場合はPer User（ユーザー単位）のほうが割安になります。逆に1つのアプリを少人数だけが使う場合はPer App（アプリ単位）が安いこともあります。ユーザー数とアプリ数で試算してから選びましょう。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-license03.QL06G_-9_xJ4Ug.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;2024年以降のライセンス変更点&quot;&gt;2024年以降のライセンス変更点&lt;/h2&gt;
&lt;p&gt;Microsoftはライセンス体系を定期的に改定します。2024年時点ではPer Appプランが廃止され、Pay-as-you-go（従量課金）やPremiumライセンスへの統合が進んでいます。Microsoft公式のライセンスガイドを必ず確認してから社内提案してください。&lt;/p&gt;
&lt;p&gt;ライセンスの最新情報はMicrosoftの公式ドキュメントが一次情報です。ブログ記事の情報は古くなっていることがあるので、金額や条件は必ず公式で確認することをおすすめします。&lt;/p&gt;
&lt;p&gt;Power Appsをどんな用途で使うかが固まったら、全体の開発マップを見ながらアプリ設計に進みましょう。&lt;/p&gt;
&lt;p&gt;→ &lt;a href=&quot;/app-development-map/&quot;&gt;Power Apps開発の全体マップ——基礎・データ操作・関数・UI設計の完全ガイド&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;Power Appsのライセンスは、Microsoft 365込み・Per App（Premium）・Per Userの3パターンで整理できます。SharePointリストベースのアプリなら追加費用なしで始められます。Premiumコネクタを使う場合はユーザー全員分のライセンスが必要になるため、アプリ設計前にライセンスコストを試算しておくことが大切です。&lt;/p&gt;
&lt;p&gt;ライセンスの話は地味ですが、社内でPower Appsを広げるときに必ず壁になります。最初に把握しておくと、後から慌てずに済みます。&lt;/p&gt;</content:encoded></item><item><title>Power Appsで区切り文字を基準に文字列を動的に切り出す｜MidとFindの使い方</title><link>https://shiminkaihatsu.com/powerapps-mid-find/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-mid-find/</guid><description>Power Appsで区切り文字を基準に文字列を動的に切り出す｜MidとFindの使い方</description><pubDate>Sun, 22 Mar 2026 11:17:34 GMT</pubDate><content:encoded>&lt;p&gt;「TK-2024-001」というコードから「2024」だけ取り出したい。そんなとき、FindとMidを組み合わせると動的に切り出せます。文字の位置がデータによって変わっても壊れないのが強みです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-mid-find01.CEQ89Zvu_1dTqmk.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;findで文字の位置を調べる&quot;&gt;Findで文字の位置を調べる&lt;/h2&gt;
&lt;p&gt;Find関数は、文字列の中から指定した文字列が最初に現れる位置を返します。位置は1始まりです。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Find&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;-&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;TK-2024-001&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 結果：3（3文字目に最初の&quot;-&quot;がある）&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;第3引数に開始位置を指定すると、その位置以降で検索できます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Find&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;-&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;TK-2024-001&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 結果：8（4文字目以降で検索し、8文字目に2つ目の&quot;-&quot;がある）&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Findは文字が見つからない場合にBlankを返します。条件分岐に使う場合はIsBlankで確認しておくと安全です。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-mid-find02.C8yKlWxY_1zLDCa.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;midで指定位置から文字列を切り出す&quot;&gt;Midで指定位置から文字列を切り出す&lt;/h2&gt;
&lt;p&gt;Mid関数は、文字列の特定の位置から指定した文字数を取り出します。引数は3つです。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Mid&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(テキスト, 開始位置, 文字数)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;たとえば「TK-2024-001」の4文字目から4文字取り出すには次のように書きます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Mid&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;TK-2024-001&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 結果：2024&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ただし位置をハードコードすると、コードの形式が変わった瞬間に壊れます。Findと組み合わせることで、データが変わっても動作する数式になります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-mid-find03.Btz8YGQQ_1DTq9C.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;findとmidを組み合わせる&quot;&gt;FindとMidを組み合わせる&lt;/h2&gt;
&lt;p&gt;FindとMidを組み合わせると、区切り文字の位置を動的に取得しながら切り出せます。「TK-2024-001」の最初のハイフンと2番目のハイフンの間にある「2024」を取り出す例です。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;With&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        pos1: &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Find&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;-&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;TK-2024-001&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        pos2: &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Find&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;-&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;TK-2024-001&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Find&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;-&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;TK-2024-001&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Mid&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;TK-2024-001&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, pos1 &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, pos2 &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; pos1 &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Withで位置を変数的に持つことで、同じFind計算を何度も書かずに済みます。Withの使い方は&lt;a href=&quot;/powerapps-with/&quot;&gt;こちらの記事&lt;/a&gt;で詳しく解説しています。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-mid-find04.DYmygKgX_2cXarJ.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;実例3パターン&quot;&gt;実例3パターン&lt;/h2&gt;
&lt;h3 id=&quot;管理番号から年度を抽出する&quot;&gt;管理番号から年度を抽出する&lt;/h3&gt;
&lt;p&gt;「部署コード-年度-連番」形式の管理番号から年度部分だけ取り出し、ギャラリーのフィルタに使う例です。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    申請リスト,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;    With&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        { pos1: &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Find&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;-&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, 管理番号) },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;        Mid&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(管理番号, pos1 &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    ) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot;2024&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;FilterやLookUpの使い方は&lt;a href=&quot;/powerapps-filter-search-lookup/&quot;&gt;こちらの記事&lt;/a&gt;でまとめています。&lt;/p&gt;
&lt;h3 id=&quot;メールアドレスのドメインを取り出す&quot;&gt;メールアドレスのドメインを取り出す&lt;/h3&gt;
&lt;p&gt;メールアドレスから@以降のドメイン部分を取得する場面です。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;With&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    { atPos: &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Find&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;@&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, TextInput_Email.Text) },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Mid&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(TextInput_Email.Text, atPos &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Len&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(TextInput_Email.Text) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; atPos)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Len関数を組み合わせることで、文字列の末尾まで取り出せます。&lt;/p&gt;
&lt;h3 id=&quot;sharepointリストのコードを照合する&quot;&gt;SharePointリストのコードを照合する&lt;/h3&gt;
&lt;p&gt;SharePointリストに登録されたコードの一部を切り出し、別のリストと照合するパターンです。たとえば品番コードの先頭3文字がカテゴリを表す場合、Midで取り出した値でFilterをかけられます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    カテゴリマスタ,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    カテゴリコード &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; Left&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(ThisItem.品番, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;SharePointのデータ操作については&lt;a href=&quot;/powerapps-sharepoint-crud/&quot;&gt;SharePointリストのCRUDパターン&lt;/a&gt;も参考にしてください。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-mid-find05.DMWQOMwL_Z2ri8mp.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;replaceとsubstituteとの使い分け&quot;&gt;ReplaceとSubstituteとの使い分け&lt;/h2&gt;
&lt;p&gt;MidとFindは切り出しに特化した関数です。文字列を別の文字に置き換えたい場合は、ReplaceやSubstituteを使います。Replaceは位置指定での置換、Substituteは文字列を検索して置換です。これらの使い分けについては&lt;a href=&quot;/powerapps-replace-substitute/&quot;&gt;こちらの記事&lt;/a&gt;をご覧ください。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;FindとMidは単体でも使えますが、組み合わせることで真価を発揮します。Findで位置を動的に取得してからMidで切り出すという流れを覚えておけば、どんな区切り文字にも対応できます。&lt;/p&gt;
&lt;p&gt;Left・Right関数は位置が先頭・末尾に固定されているケース向けの切り出し関数です。固定位置ならLeft・Right、動的な位置ならMid・Findと使い分けてください。Left・Rightの使い方は&lt;a href=&quot;/powerapps-left-right/&quot;&gt;こちらの記事&lt;/a&gt;をご覧ください。&lt;/p&gt;
&lt;p&gt;Power Appsのその他のテキスト関数についての完全ガイドは&lt;a href=&quot;/powerapps-text-functions/&quot;&gt;こちらの記事をご覧ください&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;少し複雑に見えますが、Withと組み合わせれば整理できます。ぜひ実際のデータで試してみてください。&lt;/p&gt;</content:encoded></item><item><title>Power Apps 監視（モニター）機能とは？データ取得や接続エラーをリアルタイムで特定する方法</title><link>https://shiminkaihatsu.com/powerapps-monitor/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-monitor/</guid><description>Power Apps 監視（モニター）機能とは？データ取得や接続エラーをリアルタイムで特定する方法</description><pubDate>Sat, 18 Apr 2026 08:45:33 GMT</pubDate><content:encoded>&lt;p&gt;ラベルデバッグで原因が掴めないとき、次に使うのが監視（モニター）機能です。データソースへのリクエストとレスポンスをリアルタイムで確認できるので、接続エラーやPatchの失敗原因を素早く特定できます。&lt;/p&gt;
&lt;p&gt;この記事はエラー・デバッグクラスターのサテライト記事です。ラベルを使った基本的なデバッグ手法は&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-debug-formula/&quot;&gt;Power Apps 式が動かないときの調べ方&lt;/a&gt;で解説しています。&lt;/p&gt;
&lt;h2 id=&quot;監視モニター機能とは何か&quot;&gt;監視（モニター）機能とは何か&lt;/h2&gt;
&lt;p&gt;監視（モニター）はPower Apps Studioに内蔵されたデバッグツールです。アプリが動いている間、データソースへのHTTPリクエストとレスポンスをリアルタイムでログに記録し続けます。どのコントロールがどのデータを取りに行ったか、Patchがどんなデータを送ったか、エラーが返ってきたときのステータスコードとメッセージ、これらすべてを一覧で確認できます。&lt;/p&gt;
&lt;p&gt;Webブラウザの開発者ツール（DevTools）のネットワークタブに近いものだと思ってもらうと分かりやすいです。ただし監視（モニター）はPower Apps専用なので、SharePointやDataverseへのリクエストが見やすい形で整理されて表示されます。&lt;/p&gt;
&lt;p&gt;私が監視（モニター）を使い始めたきっかけは、Patchが失敗しているのにエラーメッセージが画面に出ないケースでした。ラベルデバッグで変数の値を確認しても問題は見当たらず、でもデータが保存されない。監視（モニター）を開いてPatchのログを見たら、SharePointのある列の型が違うというメッセージがレスポンスに含まれていました。あの瞬間から、デバッグの考え方が変わりました。&lt;/p&gt;
&lt;h2 id=&quot;監視モニターの起動方法&quot;&gt;監視（モニター）の起動方法&lt;/h2&gt;
&lt;h3 id=&quot;power-apps-studioから起動する&quot;&gt;Power Apps Studioから起動する&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Power Apps Studioでアプリを開く&lt;/li&gt;
&lt;li&gt;上部メニューの詳細設定をクリック&lt;/li&gt;
&lt;li&gt;ドロップダウンからモニターを選択&lt;/li&gt;
&lt;li&gt;別タブで監視（モニター）画面が開く&lt;/li&gt;
&lt;li&gt;監視（モニター）画面でアプリのモニターボタンをクリック&lt;/li&gt;
&lt;li&gt;別ウィンドウでアプリのプレビューが起動する&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;アプリのプレビューウィンドウで操作すると、そのたびに監視（モニター）画面にログが積み上がります。エラーが起きる操作（ボタンを押す、データを保存するなど）を再現すると、その操作に関するログが赤くハイライトされます。&lt;/p&gt;
&lt;h2 id=&quot;監視モニター画面の見方&quot;&gt;監視（モニター）画面の見方&lt;/h2&gt;
&lt;h3 id=&quot;ログ一覧の列の意味&quot;&gt;ログ一覧の列の意味&lt;/h3&gt;
&lt;p&gt;監視（モニター）画面のログ一覧には複数の列があります。それぞれの意味を把握しておくと、問題のある行を素早く見つけられます。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;列名&lt;/th&gt;
&lt;th&gt;内容&lt;/th&gt;
&lt;th&gt;確認ポイント&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;時刻&lt;/td&gt;
&lt;td&gt;リクエストが発生した時刻&lt;/td&gt;
&lt;td&gt;操作のタイミングと照合する&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;操作&lt;/td&gt;
&lt;td&gt;発生したイベントの種類（GetItems、Patch等）&lt;/td&gt;
&lt;td&gt;どのデータ操作か確認する&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;コントロール&lt;/td&gt;
&lt;td&gt;操作を発生させたコントロール名&lt;/td&gt;
&lt;td&gt;どのコントロールが原因か特定する&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;プロパティ&lt;/td&gt;
&lt;td&gt;該当するプロパティ（Items、OnSelectなど）&lt;/td&gt;
&lt;td&gt;どのプロパティに書いた式か確認する&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;結果&lt;/td&gt;
&lt;td&gt;成功 / エラー&lt;/td&gt;
&lt;td&gt;赤字の行がエラー&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;状態コード&lt;/td&gt;
&lt;td&gt;HTTPステータスコード（200、403、404等）&lt;/td&gt;
&lt;td&gt;エラーの種類を大まかに判断する&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;エラー行をクリックすると右ペインに詳細が表示されます。リクエストに送ったデータと、サーバーから返ってきたレスポンスの両方が確認できます。&lt;/p&gt;
&lt;h3 id=&quot;httpステータスコードで原因の大枠を掴む&quot;&gt;HTTPステータスコードで原因の大枠を掴む&lt;/h3&gt;
&lt;p&gt;状態コード（HTTPステータスコード）の数字を見るだけで、エラーの種類を大まかに絞り込めます。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;ステータスコード&lt;/th&gt;
&lt;th&gt;意味&lt;/th&gt;
&lt;th&gt;よくある原因&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;200&lt;/td&gt;
&lt;td&gt;成功&lt;/td&gt;
&lt;td&gt;エラーではない&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;400&lt;/td&gt;
&lt;td&gt;リクエストが不正&lt;/td&gt;
&lt;td&gt;送ったデータの型・形式が間違っている&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;403&lt;/td&gt;
&lt;td&gt;アクセス権限なし&lt;/td&gt;
&lt;td&gt;そのSharePointサイト・リストへの権限がない&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;404&lt;/td&gt;
&lt;td&gt;リソースが見つからない&lt;/td&gt;
&lt;td&gt;リスト名・サイトURLが間違っている&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;429&lt;/td&gt;
&lt;td&gt;リクエスト過多&lt;/td&gt;
&lt;td&gt;短時間に大量のリクエストを送った（スロットリング）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;500&lt;/td&gt;
&lt;td&gt;サーバーエラー&lt;/td&gt;
&lt;td&gt;SharePoint側・Dataverse側の問題&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;監視モニターの使いどころ3パターン&quot;&gt;監視（モニター）の使いどころ3パターン&lt;/h2&gt;
&lt;h3 id=&quot;パターン1ギャラリーにデータが出ないとき&quot;&gt;パターン1：ギャラリーにデータが出ないとき&lt;/h3&gt;
&lt;p&gt;ギャラリーが空表示になっているとき、監視（モニター）を開いてアプリを起動すると、データ取得（GetItems）のログが表示されます。このログの結果列を見ることで、データソースへのアクセス自体が失敗しているのか、データが0件で返ってきているのかを区別できます。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;監視（モニター）を起動してアプリのプレビューを開く&lt;/li&gt;
&lt;li&gt;ギャラリーが表示されたタイミングでGetItemsのログを確認する&lt;/li&gt;
&lt;li&gt;結果がエラー→ステータスコードで原因を特定する&lt;/li&gt;
&lt;li&gt;結果が成功でも0件→Filter条件を見直す&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-monitor01.BNO1gPia_1bVvrC.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;p&gt;結果が成功でも件数が0の場合は、データソース自体は繋がっているのでFilter条件の問題です。&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-error-guide/&quot;&gt;数式エラー解決の全体マップ&lt;/a&gt;のデバッグ手順と組み合わせて、Filter式を段階的に確認していきます。&lt;/p&gt;
&lt;h3 id=&quot;パターン2patchが失敗しているとき&quot;&gt;パターン2：Patchが失敗しているとき&lt;/h3&gt;
&lt;p&gt;ボタンを押しても保存されない、エラーメッセージも出ない、そういうときは監視（モニター）でPatchのログを確認します。Patchが発生したタイミングのログを開くと、送信したデータの内容とサーバーの応答が両方確認できます。&lt;/p&gt;
&lt;p&gt;Patchログの右ペイン要求タブに送ったデータが表示されます。列名・値・型が意図通りになっているかを確認してください。応答タブにはSharePointやDataverseが返したエラーメッセージが含まれており、この列の型が不正です、この列は必須ですといった具体的な情報が得られます。&lt;/p&gt;
&lt;h3 id=&quot;パターン3パフォーマンスが遅いとき&quot;&gt;パターン3：パフォーマンスが遅いとき&lt;/h3&gt;
&lt;p&gt;アプリの動作が遅いとき、監視（モニター）で各リクエストの所要時間を確認できます。特定のGetItemsに時間がかかっている場合、委任が効いていない（アプリ側で全件取得してから絞り込んでいる）可能性があります。&lt;/p&gt;
&lt;p&gt;ログの期間列（ミリ秒）を見て、1秒を超えているリクエストがあれば改善の余地があります。&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-performance/&quot;&gt;Power Appsが重いときの改善方法&lt;/a&gt;の記事と組み合わせて対処してください。&lt;/p&gt;
&lt;h2 id=&quot;ラベルデバッグと監視モニターの使い分け&quot;&gt;ラベルデバッグと監視（モニター）の使い分け&lt;/h2&gt;
&lt;p&gt;2つのデバッグ手法をどう使い分けるかは、問題の場所によって決まります。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;問題の場所&lt;/th&gt;
&lt;th&gt;使うべきツール&lt;/th&gt;
&lt;th&gt;理由&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;変数の中身が正しいか&lt;/td&gt;
&lt;td&gt;ラベルデバッグ&lt;/td&gt;
&lt;td&gt;データソースに関係ない式の確認はラベルが速い&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Filter条件で件数が合っているか&lt;/td&gt;
&lt;td&gt;ラベルデバッグ（CountRows）&lt;/td&gt;
&lt;td&gt;式の結果をそのまま表示できる&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;データソースへの接続が成功しているか&lt;/td&gt;
&lt;td&gt;監視（モニター）&lt;/td&gt;
&lt;td&gt;HTTPレベルの結果が必要&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Patchの書き込みが失敗している&lt;/td&gt;
&lt;td&gt;監視（モニター）&lt;/td&gt;
&lt;td&gt;送信データとサーバー応答の両方が必要&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;アプリが遅い原因を調べる&lt;/td&gt;
&lt;td&gt;監視（モニター）&lt;/td&gt;
&lt;td&gt;リクエスト単位の所要時間が分かる&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;簡単にいうと、式の中の問題はラベル、データソースとの通信の問題は監視（モニター）です。ラベルデバッグで原因が見つからないときにMonitorを開く、という順番が実務的には効率的です。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;監視（モニター）は最初こそとっつきにくく感じますが、使い方を覚えると、データが来ない、保存されない系の問題が格段に速く解決できます。ステータスコードと右ペインのメッセージを読む習慣をつけるだけで、原因不明のまま延々と試行錯誤する時間がなくなります。&lt;/p&gt;
&lt;p&gt;デバッグツールを使いこなすことは、開発の腕前を上げることと同じくらい大切です。ラベルデバッグと監視（モニター）の2つを組み合わせて、問題を素早く特定できるようになりましょう。&lt;/p&gt;</content:encoded></item><item><title>Power Apps 名前付き計算式（App.Formulas）とは｜変数との違いと使いどころを解説</title><link>https://shiminkaihatsu.com/powerapps-named-formulas/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-named-formulas/</guid><description>Power Apps 名前付き計算式（App.Formulas）とは｜変数との違いと使いどころを解説</description><pubDate>Tue, 24 Mar 2026 22:49:25 GMT</pubDate><content:encoded>&lt;p&gt;OnStartに変数を並べているなら、名前付き計算式の導入で起動時間を短縮できます。変数と異なり、必要な瞬間にだけ計算されるため、アプリの応答性が向上します。&lt;/p&gt;
&lt;h2 id=&quot;設定場所アプリレベルでformulaプロパティを開く&quot;&gt;設定場所：アプリレベルでFormulaプロパティを開く&lt;/h2&gt;
&lt;p&gt;名前付き計算式を定義するには、ツリービューでアプリそのものを選択した状態で、右側のプロパティパネルの Formulas プロパティ（日本語UIでは「計算式」）を開きます。ここにコードを入力することで、アプリ全体で参照できる計算式が誕生するわけです。&lt;/p&gt;
&lt;p&gt;変数一覧パネルには表示されないので、名前でしっかり識別することが重要になります。nfプレフィックスを使うと、どの値が名前付き計算式なのか一目瞭然です。&lt;/p&gt;
&lt;h2 id=&quot;基本の書き方イコールセミコロン&quot;&gt;基本の書き方：イコール＆セミコロン&lt;/h2&gt;
&lt;p&gt;最もシンプルな書き方は次の通りです。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;nfUser &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; User&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;イコール記号の右辺に値を返す式を書き、末尾に必ずセミコロンを付けます。これが命名規則です。変数を定義する Set 関数との構文は大きく異なるので注意しましょう。&lt;/p&gt;
&lt;p&gt;Set 関数と比べると、Set は「Set(varName, value)」という順序ですが、名前付き計算式は「nfName = value;」という逆の向きになります。初めての人は戸惑いやすいポイントです。&lt;/p&gt;
&lt;h2 id=&quot;変数との違いimmutable変更不可&quot;&gt;変数との違い①：Immutable（変更不可）&lt;/h2&gt;
&lt;p&gt;名前付き計算式は、一度定義されたら後から書き換えることはできません。つまり、変更不可能な属性を持つということです。その代わり、コード内でうっかり上書きされるリスクがなくなります。&lt;/p&gt;
&lt;p&gt;変数（Set関数で定義）は、何度でも Update Select ボタンのOnSelectなど、イベントハンドラー内で書き換えられます。一方、名前付き計算式はアプリ起動時に一度だけ評価され、その値は保証されます。&lt;/p&gt;
&lt;p&gt;ボタンの OnSelect プロパティで nfUser を書き換えようとすると、エラーが返ります。この挙動を理解することが、設計を大きく変える第一歩になります。&lt;/p&gt;
&lt;h2 id=&quot;変数との違い遅延評価&quot;&gt;変数との違い②：遅延評価&lt;/h2&gt;
&lt;p&gt;OnStart では、アプリ起動時にすべての処理がブロッキング実行されます。つまり、OnStart 内の処理がすべて終わるまで、ユーザーは待つしかありません。読み込む件数が多ければ多いほど、起動画面は長く表示されたままになります。&lt;/p&gt;
&lt;p&gt;一方、名前付き計算式は必要な瞬間に計算されます。例えば、画面Aで nfUser が参照されるタイミングで初めて User() 関数が実行されるということです。すべての計算式を起動時に完了させる必要がないので、アプリ全体の応答性が改善されるわけです。&lt;/p&gt;
&lt;p&gt;ただし、計算式の定義自体は起動時に構文チェックされます。構文エラーがあれば、起動時に検出されます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-named-formulas12.DtJSE-v-_Z33RsM.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;命名規則nfプレフィックスで識別性を高める&quot;&gt;命名規則：nfプレフィックスで識別性を高める&lt;/h2&gt;
&lt;p&gt;変数一覧パネルには表示されない名前付き計算式だからこそ、命名規則が重要です。nf（named formula）というプレフィックスを付けることで、コード内でその値が計算式であることを即座に判断できます。&lt;/p&gt;
&lt;p&gt;例えば nfUser、nfDepartments、nfThemeColor といった具合です。ほかの開発者がコードを見たときも、プレフィックスを見るだけで「これは名前付き計算式だ」と理解できるため、チームでの開発時にも有効です。&lt;/p&gt;
&lt;h2 id=&quot;典型的な用途4つのパターン&quot;&gt;典型的な用途：4つのパターン&lt;/h2&gt;
&lt;p&gt;名前付き計算式が活躍する場面は、主に4つに絞られます。&lt;/p&gt;
&lt;p&gt;まず、ユーザー情報キャッシュです。User() 関数の結果を nfUser として定義しておけば、OnStart でブロッキングされることなく、必要なコントロールで User().FullName などとアクセスするより効率的になります。&lt;/p&gt;
&lt;p&gt;次に、テーマカラー定数です。ColorValue(“mediumaquamarine”) といった色指定を一箇所で管理し、アプリ全体で共通の nfPrimaryColor などを参照することで、デザイン変更時の修正箇所が1つで済みます。&lt;/p&gt;
&lt;p&gt;3番目は、変わらないリストです。例えば、都道府県リストやステータス選択肢を Table({Value:“北海道”},{Value:“青森県”},…) のように定義しておけば、複数の Combobox コントロールで共有できます。OnStart で ClearCollect を実行するより、起動速度が向上します。&lt;/p&gt;
&lt;p&gt;最後に、フィルター済みサブセットです。nfExecutives = Filter(Employees, Department = “Executives”) のように、特定条件でフィルタリングしたテーブルを先に計算しておくことで、ギャラリーやコンテナの Items プロパティを単純に保てます。&lt;/p&gt;
&lt;h2 id=&quot;onstartを完全に置き換えるものではない使い分けの実際&quot;&gt;OnStartを完全に置き換えるものではない：使い分けの実際&lt;/h2&gt;
&lt;p&gt;名前付き計算式は便利ですが、すべてのケースで OnStart を置き換えられるわけではありません。2つの例外があります。&lt;/p&gt;
&lt;p&gt;まず、深リンク処理です。アプリが特定の引数付きURLで起動された際、その引数を抽出して変数に設定する必要がある場合、OnStart のブロッキング実行が有効になります。遅延評価では、引数の確認が遅れるため、画面遷移ロジックが複雑になりがちです。&lt;/p&gt;
&lt;p&gt;次に、確定させる必要がある値です。例えば、現在のユーザーが持つ権限フラグを計算して、その結果に基づいて特定の画面を表示・非表示にする場合、起動時に確定していることが重要になります。遅延評価だと、計算結果が変わるタイミングで画面の表示状態が揺らぐリスクがあります。&lt;/p&gt;
&lt;p&gt;つまり、起動速度を優先したい値は名前付き計算式に、初期状態の確定が必要な値は OnStart に、という使い分けが理想的です。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;名前付き計算式は、immutable かつ遅延評価される計算式です。OnStart に並べた変数をそのまま移行することで、アプリの起動体感を大きく改善できます。ユーザー情報、テーマカラー、選択肢リスト、フィルター結果といった「一度取得したら変わらない値」の管理に最適です。&lt;/p&gt;
&lt;p&gt;OnStart をすべて置き換えることはできませんが、小さな改善の積み重ねが起動速度を左右します。次のステップとして、自分のアプリで OnStart に書かれている処理を見直し、どの値が名前付き計算式の候補になるかを検討してみてください。&lt;/p&gt;
&lt;p&gt;関連記事：Power Appsパフォーマンス改善まとめ → &lt;a href=&quot;/powerapps-performance/&quot;&gt;Power Appsパフォーマンス改善まとめ&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;関連記事：名前付き計算式の書き方チートシート → &lt;a href=&quot;/powerapps-named-formulas-syntax/&quot;&gt;名前付き計算式の書き方チートシート&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title>Power Apps 名前付き計算式の書き方チートシート｜型別・用途別の構文まとめ</title><link>https://shiminkaihatsu.com/powerapps-named-formulas-syntax/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-named-formulas-syntax/</guid><description>Power Apps 名前付き計算式の書き方チートシート｜型別・用途別の構文まとめ</description><pubDate>Tue, 24 Mar 2026 22:49:26 GMT</pubDate><content:encoded>&lt;p&gt;Formulasプロパティの書き方を型別にまとめました。基本ルールさえ押さえれば、変数（Set関数）から名前付き計算式への移行は簡単です。&lt;/p&gt;
&lt;h2 id=&quot;共通ルール覚えるべき4つのポイント&quot;&gt;共通ルール：覚えるべき4つのポイント&lt;/h2&gt;
&lt;p&gt;すべての名前付き計算式に共通するルールは4つです。まず、等号の右辺に値を返す式を書きます。左辺は計算式の名前、右辺はその値です。次に、末尾にセミコロンを必ず付けます。これを忘れるとエラーになります。&lt;/p&gt;
&lt;p&gt;3番目として、Set関数や Collect関数、ClearCollect関数は使いません。名前付き計算式内では、読み取り専用の計算をしか実行できないということです。4番目に、変数一覧パネルには表示されません。コード内でしか参照できないため、nfプレフィックスで識別することが重要です。&lt;/p&gt;
&lt;h2 id=&quot;レコード型ユーザー情報やapiレスポンス&quot;&gt;レコード型：ユーザー情報やAPIレスポンス&lt;/h2&gt;
&lt;p&gt;User関数の結果は1つのレコードです。そのレコードを名前付き計算式に格納する場合の書き方です。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;nfUser &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; User&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;こうすることで、アプリ全体で nfUser.FullName や nfUser.Email といったプロパティにアクセスできます。Set関数を使う場合は、Set(varUser, User()) と書きますが、イコール記号の向きが逆になることに注意してください。&lt;/p&gt;
&lt;p&gt;Setの場合は関数名が最初に来ますが、名前付き計算式は変数名が最初に来ます。アプリ開発で一番よく使う書き方なので、早めに慣れることをお勧めします。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-named-formulas-syntax01.tEQtJxQj_Z15zAw3.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;テーブル型データソースをキャッシュする&quot;&gt;テーブル型①：データソースをキャッシュする&lt;/h2&gt;
&lt;p&gt;SharePointリストやDataverseテーブルを、OnStartのClearCollectではなく名前付き計算式で管理する書き方です。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;nfDepartments &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; Departments;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Departments がデータソース名だとすると、この1行で nfDepartments にそのテーブル全体がキャッシュされます。ギャラリーの Items プロパティに、そのまま nfDepartments を指定できます。OnStartでClearCollectを実行するより、起動速度が向上します。&lt;/p&gt;
&lt;p&gt;ただし、データソース自体に対する検索やフィルタリングは、その都度Dataverseに問い合わせされます。データ更新の有無を確認したいなら、Refresh関数を別途呼び出す必要があります。&lt;/p&gt;
&lt;h2 id=&quot;テーブル型手動テーブルを定義する&quot;&gt;テーブル型②：手動テーブルを定義する&lt;/h2&gt;
&lt;p&gt;固定値のテーブルを定義する場合は、Table関数を使います。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;nfChoices &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; Table&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;({Value:&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;はい&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;},{Value:&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;いいえ&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;},{Value:&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;どちらでもない&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Set関数ではなく、Table関数を使うことが重要です。Collect関数や ClearCollect関数は、名前付き計算式の中では使えません。Comboboxやドロップダウンの Items プロパティに nfChoices をそのまま指定すると、選択肢リストが表示されます。&lt;/p&gt;
&lt;p&gt;複数の画面で同じ選択肢を使う場合、この手法でテーブルを一元管理することで、メンテナンスが楽になります。選択肢が増えた場合も、1箇所の修正で全画面に反映されます。&lt;/p&gt;
&lt;h2 id=&quot;色定数デザイン要素を統一管理&quot;&gt;色・定数：デザイン要素を統一管理&lt;/h2&gt;
&lt;p&gt;テーマカラーや数値定数を定義する書き方です。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;nfColor &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; ColorValue&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;mediumaquamarine&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;nfMaxRetries &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 3&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;nfCheckInterval &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 500&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ColorValue関数で色を定義して、複数のコントロールの Fill プロパティに nfColor を指定すれば、デザイン変更時は定義箇所を修正するだけで済みます。数値定数も同様に、計算式内で繰り返し使う値をあらかじめ定義しておくと、コードの可読性が高まります。&lt;/p&gt;
&lt;p&gt;この手法は、デザイン・システムの構築に有効です。ブランド色、フォントサイズ、マージン幅といったデザイン値を一箇所に集約することで、アプリ全体のビジュアル統一が実現します。&lt;/p&gt;
&lt;h2 id=&quot;フィルター結果のテーブル条件付きデータセット&quot;&gt;フィルター結果のテーブル：条件付きデータセット&lt;/h2&gt;
&lt;p&gt;特定条件でフィルタリングしたテーブルを名前付き計算式で定義する書き方です。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;nfExecutives &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(Employees, Department &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot;Executives&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Filter関数を使って、Employees テーブルから Department が「Executives」の行だけを抽出します。結果は nfExecutives に格納され、ギャラリーの Items プロパティに直接指定できます。OnStartで ClearCollect(varExecutives, …) を実行するより、遅延評価のメリットが活きてきます。&lt;/p&gt;
&lt;p&gt;複数の条件でフィルタリングしたいなら、Filter関数をネストさせることもできます。例えば、nfExecutives の結果をさらにフィルタリングしたい場合、別の計算式で nfExecutivesByHireDate = Filter(nfExecutives, HireDate &amp;gt; Today()) のように、名前付き計算式を参照する計算式を定義できます。&lt;/p&gt;
&lt;h2 id=&quot;名前付き計算式の連鎖参照計算式が計算式を参照する&quot;&gt;名前付き計算式の連鎖参照：計算式が計算式を参照する&lt;/h2&gt;
&lt;p&gt;名前付き計算式は、ほかの計算式を参照できます。Power Appsが依存関係を自動で解決するため、複雑な計算も論理的に整理できます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;nfExecutives &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(Employees, Department &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot;Executives&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;nfExecutiveCount &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; CountRows&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(nfExecutives);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;1番目の計算式 nfExecutives を2番目の計算式で参照しています。Power Appsは自動的に nfExecutives が先に計算されることを認識し、その結果を使って nfExecutiveCount を計算します。ただし、ループ参照（AがBを参照し、BがAを参照する状況）はエラーになります。&lt;/p&gt;
&lt;p&gt;計算式を設計する際は、参照の流れを図に書いてみることをお勧めします。複数の計算式が絡む場合、視覚化することで依存関係が明確になり、バグを防ぎやすくなります。&lt;/p&gt;
&lt;h2 id=&quot;日付sequenceを使った計算列&quot;&gt;日付・Sequenceを使った計算列&lt;/h2&gt;
&lt;p&gt;日付範囲や数列を使って、複数行のテーブルを生成する書き方です。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;nfNext10Days &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; AddColumns&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Sequence&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;), &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;MyDate&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;DateAdd&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Today&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(), Value, Days));&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Sequence(10) は1から10までの数値テーブルを生成します。AddColumns関数で「MyDate」という列を追加し、Today() に Value（1, 2, 3… 10）日を加えています。結果として、今日から10日間の日付テーブルが作成されます。&lt;/p&gt;
&lt;p&gt;このテーブルをギャラリーの Items に指定すると、自動的に10行のギャラリーが表示されます。固定的な日付範囲が必要な場合、この手法は非常に効率的です。動的に日付範囲を計算する場合も、Sequence の引数を変更するだけで対応できます。&lt;/p&gt;
&lt;h2 id=&quot;トラブルシューティングエラーが出たときの対処&quot;&gt;トラブルシューティング：エラーが出たときの対処&lt;/h2&gt;
&lt;p&gt;Formulasプロパティはエラーメッセージが見づらいことが多いです。構文エラーが出た場合、まず画面上のコントロール（例えば、テキスト入力）の OnStart プロパティなどで計算式を試してみることをお勧めします。&lt;/p&gt;
&lt;p&gt;コントロール上でエラーメッセージが明確に表示されれば、問題箇所を特定しやすくなります。その後、修正した計算式を Formulas プロパティに貼り付けると、スムーズに進みます。Formulasプロパティへの直接入力は、検証が終わった後が効率的です。&lt;/p&gt;
&lt;p&gt;また、Formulasプロパティ内の計算式が相互に参照される場合、定義順序は関係ありません。Power Appsが自動的に依存関係を解決するため、どの順序で書いてもかまいません。&lt;/p&gt;
&lt;h2 id=&quot;早見表setとclearcollectから名前付き計算式への置き換え&quot;&gt;早見表：SetとClearCollectから名前付き計算式への置き換え&lt;/h2&gt;
&lt;p&gt;よく使う変数定義の置き換え方を表にまとめました。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;用途&lt;/th&gt;
&lt;th&gt;Set（変数）の書き方&lt;/th&gt;
&lt;th&gt;名前付き計算式の書き方&lt;/th&gt;
&lt;th&gt;主な違い&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;ユーザー情報&lt;/td&gt;
&lt;td&gt;Set(varUser, User())&lt;/td&gt;
&lt;td&gt;nfUser = User();&lt;/td&gt;
&lt;td&gt;イコール向きが逆。セミコロン必須&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;固定選択肢リスト&lt;/td&gt;
&lt;td&gt;Set(varStatus, Table({Value:“新規”}…))&lt;/td&gt;
&lt;td&gt;nfStatus = Table({Value:“新規”}…);&lt;/td&gt;
&lt;td&gt;Collectは使わない。Table直接指定&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;データソースキャッシュ&lt;/td&gt;
&lt;td&gt;ClearCollect(varDepts, Departments)&lt;/td&gt;
&lt;td&gt;nfDepartments = Departments;&lt;/td&gt;
&lt;td&gt;ClearCollectは使わない。遅延評価&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;フィルター結果&lt;/td&gt;
&lt;td&gt;ClearCollect(varExec, Filter(…))&lt;/td&gt;
&lt;td&gt;nfExecutives = Filter(…);&lt;/td&gt;
&lt;td&gt;ClearCollectは使わない&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;テーマカラー&lt;/td&gt;
&lt;td&gt;Set(varColor, ColorValue(…))&lt;/td&gt;
&lt;td&gt;nfColor = ColorValue(…);&lt;/td&gt;
&lt;td&gt;イコール向きが逆&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;数値定数&lt;/td&gt;
&lt;td&gt;Set(varMax, 100)&lt;/td&gt;
&lt;td&gt;nfMaxValue = 100;&lt;/td&gt;
&lt;td&gt;セミコロン必須&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;名前付き計算式の書き方は、型によって異なりますが、基本ルール（右辺に式、末尾にセミコロン）は共通です。ユーザー情報、テーブル型、色定数、フィルター結果といった「変わらない値」の管理に最適です。&lt;/p&gt;
&lt;p&gt;Set や ClearCollect から移行する際は、上の早見表を参考にしてください。計算式を連鎖参照させたり、Sequence を使って動的にテーブルを生成したりと、応用の幅も広がります。&lt;/p&gt;
&lt;p&gt;関連記事：名前付き計算式とは → &lt;a href=&quot;/powerapps-named-formulas/&quot;&gt;名前付き計算式（App.Formulas）とは&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;関連記事：Power Appsパフォーマンス改善まとめ → &lt;a href=&quot;/powerapps-performance/&quot;&gt;Power Appsパフォーマンス改善まとめ&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title>Power AppsのOnStartとOnVisible。どちらに書くべき？使い分けの鉄則</title><link>https://shiminkaihatsu.com/powerapps-onstart-onvisible/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-onstart-onvisible/</guid><description>Power AppsのOnStartとOnVisible。どちらに書くべき？使い分けの鉄則</description><pubDate>Mon, 16 Mar 2026 15:46:48 GMT</pubDate><content:encoded>&lt;h2 id=&quot;onstartとonvisibleは何が違うのか&quot;&gt;OnStartとOnVisibleは何が違うのか&lt;/h2&gt;
&lt;p&gt;Power AppsのOnStartとOnVisibleは、どちらに初期化処理を書くべきか迷う人が多いプロパティです。結論から言うと、ほとんどのケースでOnVisibleに書くほうが正解です。&lt;/p&gt;
&lt;p&gt;OnStartはアプリ起動時に一度だけ実行されます。OnVisibleは画面が表示されるたびに実行されます。この違いを理解していないと、一覧を更新したはずなのに古いデータが表示され続けるという問題が起きます。実際に私も最初のころはOnStartに全部書いてしまい、画面遷移後にデータが更新されないというバグに何度もはまりました。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/apps-onstart-onvisible01.DkaxdMXl_Z2ugwTc.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;670&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;onstartの特徴と使い所&quot;&gt;OnStartの特徴と使い所&lt;/h2&gt;
&lt;p&gt;OnStartはAppオブジェクトのプロパティで、アプリが起動したとき（または開発中にCtrl+Rでアプリを再実行したとき）に一度だけ実行されます。&lt;/p&gt;
&lt;h3 id=&quot;onstartに書くべき処理&quot;&gt;OnStartに書くべき処理&lt;/h3&gt;
&lt;p&gt;OnStartに向いているのは、アプリ全体を通して一度だけ取得すればよい情報の初期化です。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ログインユーザー情報の取得（User()関数など）&lt;/li&gt;
&lt;li&gt;アプリ全体で使うグローバル変数の初期値設定&lt;/li&gt;
&lt;li&gt;環境によって変わる設定値の読み込み&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;例えば、ログインユーザーのメールアドレスをグローバル変数に格納しておくなら、OnStartに書くのが自然です。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Set&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(gblCurrentUser, &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;User&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;())&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;これをOnVisibleに書くと、画面を遷移するたびに毎回User()を呼び出すことになります。軽い処理なら問題ありませんが、SharePointリストからユーザー情報を引っ張るような処理は毎回実行したくないはずです。&lt;/p&gt;
&lt;h3 id=&quot;onstartの注意点パフォーマンスへの影響&quot;&gt;OnStartの注意点：パフォーマンスへの影響&lt;/h3&gt;
&lt;p&gt;OnStartに重い処理（大量データの取得や複数のコレクション初期化など）を詰め込むと、アプリの起動が遅くなります。体感として、OnStartが3秒以上かかるとユーザーから苦情が来ます。重い処理はOnVisibleで遅延ロードするか、Named Formulasへの移行を検討しましょう。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/apps-onstart-onvisible02.Bs8lmjjx_Z1xgfYW.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;onvisibleの特徴と使い所&quot;&gt;OnVisibleの特徴と使い所&lt;/h2&gt;
&lt;p&gt;OnVisibleは各画面（スクリーン）のプロパティです。その画面が表示されるたびに実行されます。Navigate関数で画面遷移してくるたびに動くと考えてください。&lt;/p&gt;
&lt;h3 id=&quot;onvisibleに書くべき処理&quot;&gt;OnVisibleに書くべき処理&lt;/h3&gt;
&lt;p&gt;OnVisibleに向いているのは、画面を開くたびに最新データを取得したい処理です。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ギャラリー用コレクションの更新&lt;/li&gt;
&lt;li&gt;画面に表示するデータのフィルタリング&lt;/li&gt;
&lt;li&gt;画面ローカルの変数の初期化&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;例えば、申請一覧画面を開くたびに最新の申請データを取得するなら、こうなります。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;ClearCollect&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(colRequests, &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(申請リスト, 担当者 &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; gblCurrentUser.Email))&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;OnVisibleにこれを書いておけば、他の画面から戻ってきたときも常に最新のデータが表示されます。OnStartに書いてしまうと、アプリ起動後に他の人が申請データを追加しても、自分の画面には反映されません。&lt;/p&gt;
&lt;h3 id=&quot;コンテキスト変数の初期化はonvisibleで&quot;&gt;コンテキスト変数の初期化はOnVisibleで&lt;/h3&gt;
&lt;p&gt;その画面だけで使うコンテキスト変数（UpdateContext）の初期化もOnVisibleに書きます。コンテキスト変数はその画面のスコープでしか使えないので、OnStartから操作することはできません。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;UpdateContext&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;({locIsLoading: &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, locSelectedId: &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;})&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;変数の使い分けについては別記事で詳しく解説しています。&lt;/p&gt;
&lt;p&gt;→ &lt;a href=&quot;/powerapps-variables/&quot;&gt;Power Appsのグローバル変数とコンテキスト変数——違いと使い分けを図解&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;判断基準をまとめると&quot;&gt;判断基準をまとめると&lt;/h2&gt;
&lt;p&gt;どちらに書くか迷ったときの判断基準はシンプルです。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;判断基準&lt;/th&gt;
&lt;th&gt;OnStart&lt;/th&gt;
&lt;th&gt;OnVisible&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;実行タイミング&lt;/td&gt;
&lt;td&gt;アプリ起動時に1回だけ&lt;/td&gt;
&lt;td&gt;画面表示のたびに毎回&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;スコープ&lt;/td&gt;
&lt;td&gt;アプリ全体&lt;/td&gt;
&lt;td&gt;その画面&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;変数種別&lt;/td&gt;
&lt;td&gt;グローバル変数（Set）&lt;/td&gt;
&lt;td&gt;コンテキスト変数（UpdateContext）・コレクション&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;データ取得&lt;/td&gt;
&lt;td&gt;一度だけ取れば十分なもの&lt;/td&gt;
&lt;td&gt;最新データが必要なもの&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;私がアプリを設計するとき、OnStartはできるだけ軽くしておくのを心がけています。グローバル変数の初期値設定程度にとどめて、データ取得はすべてOnVisibleに回す、という方針にしてからアプリの起動が体感で早くなりました。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/apps-onstart-onvisible03.Dv9z8xbr_Zt1uId.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;concurrent関数で並列実行する&quot;&gt;Concurrent関数で並列実行する&lt;/h2&gt;
&lt;p&gt;OnVisibleに複数のコレクション取得処理を書くと、上から順番に実行されるため時間がかかります。関係のない処理を並列で実行したいときはConcurrent関数が使えます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Concurrent&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    ClearCollect&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(colRequests, 申請リスト),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    ClearCollect&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(colMembers, 社員マスタ),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Set&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(locTitle, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;申請一覧&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;3つの処理が同時に走るので、順番に書くより速くなります。ただし処理が互いに依存している（AのコレクションをBで使うなど）場合は並列にできないので注意が必要です。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;OnStartはアプリ起動時に一度だけ、OnVisibleは画面表示のたびに実行されます。ほとんどの初期化処理はOnVisibleで対応できますし、そのほうがデータの鮮度も保てます。OnStartはグローバルな設定値の初期化など、本当に一度だけでいいものに絞るのが正解です。&lt;/p&gt;
&lt;p&gt;この使い分けを意識するだけで、データが更新されないバグはかなり減ります。アプリ開発の地道な基礎ですが、ここを押さえておくと後々の開発がずっと楽になります。&lt;/p&gt;</content:encoded></item><item><title>Power Apps Patch関数 応用ガイド｜複雑な列型・エラー処理・下書き保存の全パターン</title><link>https://shiminkaihatsu.com/powerapps-patch-advanced/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-patch-advanced/</guid><description>Power Apps Patch関数 応用ガイド｜複雑な列型・エラー処理・下書き保存の全パターン</description><pubDate>Sun, 29 Mar 2026 19:06:12 GMT</pubDate><content:encoded>&lt;p&gt;Power Apps のPatch関数を使いこなすと、フォームコントロールに頼らない柔軟なデータ操作ができるようになります。新規レコードの作成から複雑な列型の更新、下書き保存のUX設計まで、Patch関数はアプリ開発の核心です。この記事では、Patch関数の応用パターンを体系的に整理し、各テーマの詳細解説へ案内します。&lt;/p&gt;
&lt;p&gt;私自身、最初にPatch関数を触ったときは「引数の意味がよくわからない」「列の型によって渡し方が違うのが面倒」と感じました。でも使い込んでいくうちに、Patchさえ覚えれば編集フォームなしであらゆるデータ操作ができることに気づきます。一度コツをつかめば、アプリ設計の選択肢が格段に広がります。&lt;/p&gt;
&lt;h2 id=&quot;patch関数の基本をおさらいする&quot;&gt;Patch関数の基本をおさらいする&lt;/h2&gt;
&lt;p&gt;Patch関数の構文はシンプルです。第1引数がデータソース（SharePointリストやDataverseテーブル）、第2引数が対象レコード（新規ならDefaults・更新なら既存レコード）、第3引数が変更したい列と値のセットです。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 基本構文&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Patch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    データソース,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    対象レコード,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    { 列名: 値, 列名: 値 }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;この3引数の役割を理解するだけで、新規作成も更新も同じ関数で処理できることが見えてきます。&lt;a href=&quot;/powerapps-patch-function/&quot;&gt;Patch関数の基礎と使い方&lt;/a&gt;ではフォームなしでデータを保存する方法を丁寧に解説しています。Patchが初めての方はまずそちらを読んでから戻ってきてください。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-patch-advanced01.BuUoOU8D_2feI6J.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;新規レコードの作成defaultsを使う&quot;&gt;新規レコードの作成：Defaults()を使う&lt;/h2&gt;
&lt;p&gt;第2引数にDefaults(テーブル名)を渡すと、新規レコード作成モードになります。Defaultsは「そのテーブルに新しいレコードを追加するための雛形」を返す関数で、IDや作成日時など自動設定される列の型情報を内包しています。&lt;/p&gt;
&lt;p&gt;列型ごとに渡すべき値の形式が決まっている点がPatch初心者の最初の壁です。テキスト列はダブルクォートで囲んだ文字列、数値列はValue()でラップした数値、日付列はDatePickerコントロールのSelectedDateプロパティ、Yes/No列はBoolean値（true/false）を渡します。TextInputの出力は常に文字列型なので、数値列に直接渡すと「Expected Number, found type Text」エラーが出ます。&lt;/p&gt;
&lt;p&gt;列型別の値渡しパターンを体系的にまとめた&lt;a href=&quot;/powerapps-patch-new-record/&quot;&gt;Patch関数で新規レコードを作成する方法&lt;/a&gt;では、Defaults関数の仕組みと各列型のサンプルコードを詳しく解説しています。&lt;/p&gt;
&lt;h2 id=&quot;既存レコードの更新galleryselectedとvarrecord&quot;&gt;既存レコードの更新：Gallery.SelectedとvarRecord&lt;/h2&gt;
&lt;p&gt;既存レコードを更新するには、第2引数をDefaults()から更新対象のレコードに切り替えるだけです。ギャラリーで行を選択している場合は Gallery1.Selectedを渡せばそのレコードが更新対象になります。入力フォームの各コントロールのDefaultプロパティに Gallery1.Selected.列名を設定すると、選択したレコードの現在値が事前に入力欄へ反映されるので、編集フォームらしいUXが作れます。&lt;/p&gt;
&lt;p&gt;ただし、Gallery.Selectedには落とし穴があります。新規レコードを追加した直後、ギャラリーはその新しいアイテムをSelectedとして選び直しません。前の選択状態が残ったまま次の操作に進むため、意図しないレコードを上書きするバグが起きます。これを解決するのがvarRecordパターンです。ギャラリーのOnSelectでUpdateContext({varRecord: ThisItem})を実行し、Patchの第2引数をvarRecordに変えることで、ギャラリーの選択状態への依存をゼロにできます。&lt;/p&gt;
&lt;p&gt;Gallery.SelectedとvarRecordの使い分け・移行手順は&lt;a href=&quot;/powerapps-patch-update-record/&quot;&gt;Patch関数で既存レコードを更新する方法&lt;/a&gt;で段階的に解説しています。まずGallery.Selectedで動かし、慣れたらvarRecordに移行する順番がおすすめです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-patch-advanced02.DBJ6so73_1aH851.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;複数画面の下書き保存status列パターン&quot;&gt;複数画面の下書き保存：status列パターン&lt;/h2&gt;
&lt;p&gt;入力フォームが複数画面にまたがるアプリでは、「途中で保存できる」仕組みが必要です。承認フローの前段や、現場で入力を途中まで進めて後日続きを入力するケースが典型例です。このパターンの核心は、テーブルにstatus列（draft / open / in progress など）を追加し、Patchで状態を制御することです。&lt;/p&gt;
&lt;p&gt;新規ボタンを押した瞬間にstatus=draftのブランクレコードをPatchで作成し、そのレコードをvarRecordに格納します。以降の画面遷移ボタンでは「varRecordをPatch→Navigate」の順で実行するため、どの画面でアプリを閉じてもdraftレコードとして残ります。最終画面の送信ボタンだけstatusをopenに変え、実質的な「提出」を実現します。&lt;/p&gt;
&lt;p&gt;50フィールドある入力画面でもDisplayModeの制御を1箇所に集約できるテクニックや、空白ドラフトのクリーンアップ方法など、実装上の細かい工夫は&lt;a href=&quot;/powerapps-save-draft/&quot;&gt;Power Appsで下書き保存を実装する方法&lt;/a&gt;にまとめています。&lt;/p&gt;
&lt;h2 id=&quot;sharepointの複雑な列型をpatchする&quot;&gt;SharePointの複雑な列型をPatchする&lt;/h2&gt;
&lt;p&gt;テキスト・数値・日付以外のSharePoint列をPatchするとき、渡すべき値の形式がテキストや数値と大きく異なります。最初に覚えるべき大原則は「単一選択はレコード形式、複数選択はテーブル形式」です。この1行を押さえれば、Choice列・Lookup列・Person列のパターンが一気に読みやすくなります。&lt;/p&gt;
&lt;p&gt;Choice列（単一）はDropdownのSelectedをそのまま渡せます。Choices(リスト名.列名) をDropdownのItemsに設定しておくと、DropdownのSelectedが自動的に {Value:“Red”} のようなレコード形式になるので、それをPatchに渡すだけです。Person列はComboBoxを使い、Choices関数がClaimsやDisplayNameを含む全フィールドを整形してくれます。ハードコードする場合はClaims列だけ渡せばSharePointが残りを自動補完します。&lt;/p&gt;
&lt;p&gt;マネージドメタデータや複数選択Lookup列も含めた全列型の解説は&lt;a href=&quot;/powerapps-patch-sharepoint-complex/&quot;&gt;SharePoint複雑な列をPatchする方法&lt;/a&gt;で網羅しています。よくあるエラーの逆引き方法も紹介しているので、詰まったときに参照してください。&lt;/p&gt;
&lt;h2 id=&quot;dataverseをpatchするsharepointとの違い&quot;&gt;DataverseをPatchする：SharePointとの違い&lt;/h2&gt;
&lt;p&gt;Dataverseの列型パターンはSharePointと似ているようで、いくつか重要な違いがあります。まずChoice列の形式です。SharePointのChoice列はレコード形式（{Value:“選択肢”}）で渡しますが、DataverseはEnum形式で列名.オプション名（例：Status.Draft）と書きます。SharePointに慣れた状態でDataverseに移ると、ここで必ずはまります。&lt;/p&gt;
&lt;p&gt;もう一つの落とし穴がYes/No列です。SharePointのYes/Noは true/false のBoolean値を直接渡せますが、DataverseのYes/Noは内部的にChoice型として実装されているため、If(Toggle.Value, 列名.Yes, 列名.No)の形式が必要です。Toggleの値をそのまま渡すとエラーになります。SharePoint経験者が最もつまずくポイントです。&lt;/p&gt;
&lt;p&gt;Dataverse固有の機能として、ファイル列と画像列を直接Patchできます。SharePointではアプリ内でファイルを直接保存することはできませんが、Dataverseではこの制約がありません。画像列の.valueと.fullの使い分けなど、Dataverse特有のパターンは&lt;a href=&quot;/powerapps-patch-dataverse/&quot;&gt;DataverseをPatchする全列型ガイド&lt;/a&gt;にまとめています。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-patch-advanced03.DCj1ShvJ_ZrcSBe.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;patch関数と組み合わせる関連パターン&quot;&gt;Patch関数と組み合わせる関連パターン&lt;/h2&gt;
&lt;p&gt;Patch関数は単独で使うことも多いですが、他の機能と組み合わせることで真価を発揮します。よく一緒に登場する3つのパターンを整理しておきます。&lt;/p&gt;
&lt;p&gt;1つ目はSharePointのCRUD基本パターンとの組み合わせです。ギャラリーでデータを表示し、フォームなしでPatchで書き込む流れは&lt;a href=&quot;/powerapps-sharepoint-crud/&quot;&gt;SharePointリストのCRUD操作&lt;/a&gt;でも触れています。PatchはRemove（削除）と並んで、フォームを使わないデータ操作の中心です。&lt;/p&gt;
&lt;p&gt;2つ目はエラー処理との組み合わせです。Patchが失敗したときにユーザーへ通知する仕組みや、Errors関数でエラーの詳細を取得する方法はエラー処理クラスターで解説予定です。業務アプリでは「保存に失敗したことを使用者に伝える」ことが必須なので、Patchを本番アプリに使うなら合わせて実装してください。&lt;/p&gt;
&lt;p&gt;3つ目はコレクションとの連携です。Patchをコレクションに対して使うと、ローカルで複数行を一時編集してまとめてSharePointへ書き込むパターンが作れます。編集グリッドを実装するときに登場するアプローチです。&lt;/p&gt;
&lt;h2 id=&quot;まとめpatch関数の学習ロードマップ&quot;&gt;まとめ：Patch関数の学習ロードマップ&lt;/h2&gt;
&lt;p&gt;Patch関数の習得には段階があります。まず基礎記事でDefaults・列型・Format Textを覚える。次に更新パターンでGallery.SelectedとvarRecordの使い分けを身につける。慣れてきたら下書き保存やstatus列パターンでアプリのUXを設計する。複雑な列型（Choice・Person・Lookup）はその後に取り組むと、引数の意味が腹落ちした状態で読めるので理解が早いです。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;ステップ&lt;/th&gt;
&lt;th&gt;テーマ&lt;/th&gt;
&lt;th&gt;キーワード&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;基礎&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/powerapps-patch-function/&quot;&gt;Patch関数の使い方&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;基本構文・3引数&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;新規作成&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/powerapps-patch-new-record/&quot;&gt;新規レコードの作成&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Defaults・列型別の値渡し&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;更新&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/powerapps-patch-update-record/&quot;&gt;既存レコードの更新&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Gallery.Selected・varRecord&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;UX設計&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/powerapps-save-draft/&quot;&gt;下書き保存の実装&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;status列・条件付きPatch&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;応用①&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/powerapps-patch-sharepoint-complex/&quot;&gt;SharePoint複雑な列型&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Choice・Person・Lookup&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;応用②&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/powerapps-patch-dataverse/&quot;&gt;Dataverse列型ガイド&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Enum形式・ファイル列&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Patch関数は覚えるべきことが多いように見えますが、基本パターンを一度体で覚えれば、列型が変わっても「形式が違うだけ」と冷静に対処できます。社内の業務改善アプリを自分の手で作るという目標に向かって、一歩ずつ積み上げていきましょう。&lt;/p&gt;</content:encoded></item><item><title>Power Apps でDataverse列をPatchする｜テキスト・数値・選択肢・ファイル・画像の全列型ガイド</title><link>https://shiminkaihatsu.com/powerapps-patch-dataverse/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-patch-dataverse/</guid><description>Power Apps でDataverse列をPatchする｜テキスト・数値・選択肢・ファイル・画像の全列型ガイド</description><pubDate>Sun, 29 Mar 2026 19:06:12 GMT</pubDate><content:encoded>&lt;p&gt;DataverseはSharePointと比べてPatchの書き方が異なる列型がいくつかあります。特にYes/No列と選択肢列はSharePoint経験者が最もつまずくポイントです。本記事では列型別にPatchの書き方を整理します。最後にSharePointとの違いを一覧で比較するので、切り替えの際の参考にしてください。&lt;/p&gt;
&lt;h2 id=&quot;sharepointと違うdataverseのpatch先に知っておくべき3点&quot;&gt;SharePointと違うDataverseのPatch：先に知っておくべき3点&lt;/h2&gt;
&lt;p&gt;SharePointからDataverseに切り替えたときに戸惑いやすい点が3つあります。選択肢列がEnum形式（Status.Draft のような書き方）になること、Yes/No列がBoolean（true/false）ではなくEnum扱いになること、そしてファイル・画像列が直接Patchできることです。最初の2点は「SharePointのやり方が通用しない」という意味でエラーが出やすいので、先に覚えておくと後半が読みやすくなります。&lt;/p&gt;
&lt;h2 id=&quot;テキスト列&quot;&gt;テキスト列&lt;/h2&gt;
&lt;p&gt;テキスト列には文字列をそのまま渡します。SharePointと同じ要領です。1行テキスト・メール・電話番号・URLはいずれも同じ書き方でPatchできます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;TextColumn: &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;こんにちは&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;TextColumn: inpTitle.Text&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;1行テキストの最大文字数は4,000字です。それを超える場合は複数行テキスト列（プレーンまたはリッチテキスト）に変更してください。どちらも渡し方は同じです。リッチテキスト列にはHTMLタグを含む文字列を渡せます。表示側はHTMLテキストコントロールで受け取ると書式が保持されます。&lt;/p&gt;
&lt;h2 id=&quot;数値列&quot;&gt;数値列&lt;/h2&gt;
&lt;p&gt;数値列にはダブルクォートなしの数値を渡します。これもSharePointと同じです。TextInputから渡す場合は Value() でラップが必要です。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;NumberColumn: &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;28&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;NumberColumn: &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Value&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(inpAge.Text)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Dataverseには整数・小数・浮動小数点・期間・言語コードなど複数の数値型がありますが、Power Apps側からはいずれも数値を渡すだけで変わりません。通貨列も実体は数値です。金額を数値で渡すだけで、通貨記号や換算レートはDataverse側が管理します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;CurrencyColumn: &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;9.99&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;日付時刻列&quot;&gt;日付・時刻列&lt;/h2&gt;
&lt;p&gt;日付列にはDatePickerの .SelectedDate か Today() / Now() 関数を渡します。SharePointと同じ要領です。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;DateColumn: dpHireDate.SelectedDate&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;DateColumn: &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Today&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;選択肢choice列dataverseはenum形式&quot;&gt;選択肢（Choice）列：DataverseはEnum形式&lt;/h2&gt;
&lt;p&gt;DataverseのChoice列はSharePointのChoiceとは異なります。SharePointは { Value: “Red” } のようなレコード形式でしたが、DataverseはEnum形式で渡します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 列名.オプション名 の形式&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;StatusColumn: Status.Draft&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;StatusColumn: Status.Open&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Power Apps数式バーで列名を打ってドットを押すと、登録されている選択肢が補完候補に出てきます。そこから選ぶと確実です。コントロールから渡す場合はDropdownのSelectedを使います。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-patch-dataverse01.pqDtdpx0_ZBe1ub.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;yesno列sharepoint経験者が最もつまずくポイント&quot;&gt;Yes/No列：SharePoint経験者が最もつまずくポイント&lt;/h2&gt;
&lt;p&gt;DataverseのYes/No列はSharePointと最も動作が違う列です。SharePointのYes/No列はBoolean（true/false）をそのまま渡せますが、DataverseのYes/No列は実態がChoice型です。そのため true/false を直接渡すとエラーになります。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// NG（SharePoint式の書き方。Dataverseでは動かない）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;PropertyDamage: tglDamage.Value&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// OK（If文でEnum形式に変換して渡す）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;PropertyDamage: &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    tglDamage.Value,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    PropertyDamage.Yes,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    PropertyDamage.No&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;SharePointで動いていたコードをDataverseに移行するとここで必ずつまずきます。Toggleから渡す場合はIf文でYes/Noに変換する必要があることを覚えておいてください。このEnumの列名はDataverseのテーブル設計時に設定した列名です。数式バーで補完が効くので確認しながら入力してください。&lt;/p&gt;
&lt;h2 id=&quot;ルックアップ列&quot;&gt;ルックアップ列&lt;/h2&gt;
&lt;p&gt;DataverseのルックアップはSharePointのChoices関数は使いません。DropdownのItemsに参照先テーブルを直接設定してDropdown.Selectedを渡す形が基本です。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// DropdownのItemsプロパティ&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;Employees&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// Patchに渡す&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;ParentRecord: ddEmployee.Selected&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;画像列valueとfullの使い分け&quot;&gt;画像列：.valueと.fullの使い分け&lt;/h2&gt;
&lt;p&gt;DataverseはSharePointと異なり、ファイルや画像をPatch関数で直接書き込めます。SharePointの画像列はPower Appsからの直接Patchができないのとは大きな違いです。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 画像を保存する（AddPictureコントロール）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;ImageColumn: UploadedImage1.image&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// ギャラリーで表示する（サムネイル推奨）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;Image1.Image &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; ThisItem.ImageColumn.value&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 詳細画面で高解像度を表示する&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;Image1.Image &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; ThisItem.ImageColumn.full&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Dataverseの画像列には .value と .full の2つのプロパティがあります。.value はDataverseが自動生成したサムネイル（低解像度・角丸）、.full は元ファイルです。ギャラリーでは .value を使うのがパフォーマンス上おすすめです。リスト表示時に全行分の高解像度画像を読み込まずに済むため表示が速くなります。詳細画面で大きく見せたいときだけ .full を使う設計が定石です。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-patch-dataverse02.BMUD3Y-E_yQfpb.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;autonumber列はpatch不可&quot;&gt;AutoNumber列はPatch不可&lt;/h2&gt;
&lt;p&gt;AutoNumber列（自動採番）はPatchできません。Dataverseが自動的に連番を割り当てるため、アプリ側から値をセットしようとするとエラーになります。Patch文に含めなければエラーにはなりません。自動採番列はPatch時には無視してください。&lt;/p&gt;
&lt;h2 id=&quot;sharepointとdataverseの主な違い&quot;&gt;SharePointとDataverseの主な違い&lt;/h2&gt;
&lt;p&gt;SharePointとDataverseのPatchで押さえるべき違いを整理します。テキスト・数値・日付はどちらも同じ書き方で渡せます。Choice列はSharePointがレコード形式（{ Value: “Red” }）なのに対し、DataverseはEnum形式（Status.Draft）です。Yes/No列はSharePointがBoolean直渡しOKなのに対し、DataverseはIf文でYes/Noに変換が必要です。画像列はSharePointがPower Appsから直接Patch不可なのに対し、DataverseはPatch可能です。&lt;a href=&quot;/powerapps-patch-sharepoint-complex/&quot;&gt;SharePointの複雑な列型のPatch解説&lt;/a&gt;と合わせて読むと理解が深まります。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;DataverseやSharePointのPatchパターンを含む応用ガイド全体は&lt;a href=&quot;/powerapps-patch-advanced/&quot;&gt;Patch関数 応用ガイド&lt;/a&gt;でまとめています。列型ごとの比較表や学習ロードマップも掲載しています。&lt;/p&gt;
&lt;p&gt;Dataverse列のPatchでSharePoint経験者が引っかかりやすいのは、選択肢列のEnum形式とYes/No列のIf変換の2点です。この2点さえ覚えれば、それ以外はSharePointとほぼ同じ感覚で書けます。Patch関数の基本については&lt;a href=&quot;/powerapps-patch-new-record/&quot;&gt;新規レコード作成編&lt;/a&gt;を、既存レコード更新のパターンは&lt;a href=&quot;/powerapps-patch-update-record/&quot;&gt;既存レコード更新編&lt;/a&gt;を参照してください。&lt;/p&gt;</content:encoded></item><item><title>Power Appsで絶対覚えたいPatch関数の使い方。フォームなしでデータを保存する方法</title><link>https://shiminkaihatsu.com/powerapps-patch-function/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-patch-function/</guid><description>Power Appsで絶対覚えたいPatch関数の使い方。フォームなしでデータを保存する方法</description><pubDate>Thu, 12 Mar 2026 11:48:00 GMT</pubDate><content:encoded>&lt;p&gt;Power Appsでデータを保存するには、フォームを使う方法とPatch関数を使う方法の2つがあります。Patch関数を覚えると、フォームに縛られない柔軟なアプリ設計ができるようになります。&lt;/p&gt;
&lt;h2 id=&quot;patch関数とは何か&quot;&gt;Patch関数とは何か&lt;/h2&gt;
&lt;h3 id=&quot;submitformとの違い&quot;&gt;SubmitFormとの違い&lt;/h3&gt;
&lt;p&gt;Power Apps でデータを保存する方法は大きく2つあります。フォームコントロール（EditForm）を配置して SubmitForm で送信する方法と、Patch関数を直接呼び出す方法です。&lt;/p&gt;
&lt;p&gt;SubmitForm はフォームコントロールと画面のレイアウトがセットになっており、標準的な入力画面を素早く作るには便利です。ただし、複数のデータソースに同時に書き込みたいとき、ボタン1つで複数のレコードをまとめて更新したいとき、ポップアップ内や確認ダイアログからのみデータを保存したいとき、といった場面ではフォームコントロールが邪魔になることがあります。そういうときの答えが Patch 関数です。&lt;/p&gt;
&lt;p&gt;私が最初に Patch関数の必要性を感じたのは、承認ボタンを押したときにステータスと承認者と承認日時の3列を一気に更新したかったときでした。フォームを使うと余計なフィールドが全部並んでしまう。Patch なら必要な列だけを書き込めるので、UI の自由度が大きく上がります。&lt;/p&gt;
&lt;p&gt;それ以降も、基本的にアプリ作成時はSubmitFormよりもPatchを使うことが自然になりました。&lt;/p&gt;
&lt;h3 id=&quot;patch関数の基本構文&quot;&gt;Patch関数の基本構文&lt;/h3&gt;
&lt;p&gt;Patch の基本的な書き方はシンプルです。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Patch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(データソース, 対象レコードまたはDefaults(データソース), {列名1: 値1, 列名2: 値2, ...})&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;引数は3つです。最初がどのデータソース（SharePointリストなど）に書き込むか。次が新規作成か更新かを決めるレコードの指定。最後が実際に書き込む列と値のセットです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-patch-function01.7CmR2GnG_ZT2JdN.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;671&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;新規レコードを作成する&quot;&gt;新規レコードを作成する&lt;/h2&gt;
&lt;h3 id=&quot;defaultsを使った新規作成&quot;&gt;Defaultsを使った新規作成&lt;/h3&gt;
&lt;p&gt;新しいレコードを作るときは、2番目の引数に Defaults 関数を使います。Defaults はデータソースの初期状態（空白レコード）を返す関数です。簡単にいえば、新しい行を追加するときのひな型を用意してくれると思えばいいです。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Patch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    申請リスト,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Defaults&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(申請リスト),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        タイトル: テキスト入力_タイトル.Text,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        申請者: &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;User&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;().DisplayName,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        申請日: &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Today&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        ステータス: &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;申請中&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;このコードをボタンの OnSelect に書くだけで、SharePointリストに新しいレコードが追加されます。フォームコントロールは一切不要です。User() 関数でログインユーザーの名前を自動入力したり、Today() で今日の日付を入れたりと、入力を省力化する書き方も自由に組み合わせられます。&lt;/p&gt;
&lt;h3 id=&quot;保存後の処理を組み合わせる&quot;&gt;保存後の処理を組み合わせる&lt;/h3&gt;
&lt;p&gt;Patch の後に続けて処理を書く場合は、セミコロンで区切ります。保存した後でフォームをリセットしたり、別の画面に遷移したりする場合は以下のように書きます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Patch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    申請リスト,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Defaults&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(申請リスト),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        タイトル: テキスト入力_タイトル.Text,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        申請者: &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;User&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;().DisplayName,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        申請日: &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Today&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        ステータス: &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;申請中&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Reset&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(テキスト入力_タイトル);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Navigate&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(ホーム画面, ScreenTransition.None)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Patch で保存、Reset でテキスト入力欄を空に戻し、Navigate で画面遷移という3ステップをボタン1つに集約できます。この書き方ができるようになると、アプリ設計の幅がぐっと広がります。&lt;/p&gt;
&lt;h2 id=&quot;既存レコードを更新する&quot;&gt;既存レコードを更新する&lt;/h2&gt;
&lt;h3 id=&quot;thisitemとの組み合わせ&quot;&gt;ThisItemとの組み合わせ&lt;/h3&gt;
&lt;p&gt;ギャラリーやフォームの中で既存レコードを更新するときは、2番目の引数に ThisItem を使います。ThisItem はギャラリーの現在の行を指します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// ギャラリー内のボタンの OnSelect に書く例&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Patch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    申請リスト,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    ThisItem,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        ステータス: &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;承認済み&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        承認者: &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;User&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;().DisplayName,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        承認日: &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Today&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;この書き方をすると、ギャラリーで選択している行のステータス・承認者・承認日の3列だけを書き換えます。他の列（タイトルや申請者など）はそのまま維持されます。これが Patch の便利なところで、指定した列だけを選択的に更新できる点が大きな強みです。&lt;/p&gt;
&lt;h3 id=&quot;lookupで対象レコードを特定する&quot;&gt;LookUpで対象レコードを特定する&lt;/h3&gt;
&lt;p&gt;ギャラリーの外から特定のレコードを更新したい場合は、LookUp関数で対象を特定します。LookUp は条件に一致する単一のレコードを返す関数です。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Patch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    申請リスト,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    LookUp&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(申請リスト, ID &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; SelectedID),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    {ステータス: &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;却下&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;SelectedID に更新したいレコードの ID が入っている前提です。LookUp が該当レコードを見つけて Patch に渡し、そのレコードのステータスだけを更新します。画面をまたいだ処理や、グローバル変数に保持している選択レコードを後から更新する場面でよく使います。&lt;/p&gt;
&lt;h2 id=&quot;複数レコードをまとめて更新する&quot;&gt;複数レコードをまとめて更新する&lt;/h2&gt;
&lt;h3 id=&quot;forallとpatchの組み合わせ&quot;&gt;ForAllとPatchの組み合わせ&lt;/h3&gt;
&lt;p&gt;複数のレコードを一括更新したい場合は、ForAll 関数と組み合わせます。ForAll はテーブルの各行に対して処理を繰り返す関数です。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// コレクション内の全件をSharePointに一括保存&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;ForAll&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    colDraft,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Patch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        申請リスト,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;        Defaults&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(申請リスト),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;            タイトル: タイトル,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;            申請者: 申請者,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;            ステータス: &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;申請中&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;colDraft というコレクションに溜めておいたデータを、ボタン1つで一括保存するパターンです。入力画面でどんどんコレクションに追加していき、最後に一括でSharePointに書き込む設計が、スキャン系・日報系アプリではよく使われます。&lt;/p&gt;
&lt;p&gt;ただし、ForAll の中で Patch を呼ぶと件数が多いときに時間がかかります。体感でも10件を超えると待ち時間が気になります。大量件数の一括保存が必要な場合は、Power Automate のフローに処理を渡す設計を検討しましょう。&lt;/p&gt;
&lt;h2 id=&quot;patch関数を使うときの注意点&quot;&gt;Patch関数を使うときの注意点&lt;/h2&gt;
&lt;h3 id=&quot;列名はsharepointの内部名に注意&quot;&gt;列名はSharePointの内部名に注意&lt;/h3&gt;
&lt;p&gt;SharePointリストを使う場合、Patch に渡す列名は SharePoint の表示名と内部名が一致していることが多いですが、日本語の列名で作ったリストの内部名が英数字になっているケースがあります。特にリスト作成後に列名を変更した場合、内部名は変わらないので注意が必要です。&lt;/p&gt;
&lt;p&gt;Power Appsのデータソースペインで列をクリックすると内部名が確認できます。Patch でエラーが出るときは、まず列名のズレを疑ってみてください。&lt;/p&gt;
&lt;h3 id=&quot;必須列が欠けているとエラーになる&quot;&gt;必須列が欠けているとエラーになる&lt;/h3&gt;
&lt;p&gt;SharePointリストで必須列（Required）の設定がある場合、Patch でそれらの列を省略するとエラーになります。新規作成のときは必須列をすべて含めるよう注意しましょう。Defaults を使っていても必須列の値が入っていなければ保存できません。&lt;/p&gt;
&lt;p&gt;エラーが発生したかどうかは Errors 関数で確認できます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    IsEmpty&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Errors&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(申請リスト)),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Notify&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;保存しました&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;NotificationType.Success&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Notify&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;エラーが発生しました: &quot;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; First&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Errors&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(申請リスト)).Message, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;NotificationType.Error&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Patch の直後にこの分岐を書いておくと、保存成功と失敗をユーザーに通知できます。現場アプリでは必ず入れておきたい処理です。&lt;/p&gt;
&lt;h3 id=&quot;submitformを使うべきシーンも残っている&quot;&gt;SubmitFormを使うべきシーンも残っている&lt;/h3&gt;
&lt;p&gt;Patch関数を覚えると何でも Patch で書きたくなりますが、標準的な入力フォームを素早く作りたいときは SubmitForm のほうがシンプルに済みます。入力・編集・表示の3モードを自動で切り替えてくれる EditForm コントロールはよくできていて、バリデーション（入力チェック）もある程度自動でやってくれます。&lt;/p&gt;
&lt;p&gt;Patch と SubmitForm の使い分けをまとめると以下のようになります。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;シーン&lt;/th&gt;
&lt;th&gt;おすすめ&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;標準的な入力フォームを素早く作る&lt;/td&gt;
&lt;td&gt;SubmitForm（EditForm）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;特定の列だけを更新する&lt;/td&gt;
&lt;td&gt;Patch&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;複数データソースに同時に書き込む&lt;/td&gt;
&lt;td&gt;Patch&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ボタン1つでまとめて保存する&lt;/td&gt;
&lt;td&gt;Patch&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;コレクション経由で一括登録する&lt;/td&gt;
&lt;td&gt;Patch（ForAll と組み合わせ）&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Power Appsの変数の使い方については&lt;a href=&quot;/powerapps-variables/&quot;&gt;グローバル変数とコンテキスト変数の記事&lt;/a&gt;も合わせて読んでみてください。Patch で保存する前後の状態管理に変数はよく使います。また、データの取得には Filter や LookUp 関数が必要になるので、&lt;a href=&quot;/powerapps-basic/&quot;&gt;Power Appsとは？完全ガイド&lt;/a&gt;も参考にどうぞ。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;Patch関数の基本は「どこに（データソース）」「何を（Defaults か既存レコード）」「どんな値で（列と値のセット）」の3点セットです。これを押さえれば、フォームに縛られない自由な設計ができるようになります。&lt;/p&gt;
&lt;p&gt;最初は Defaults との組み合わせで新規作成から始めて、慣れてきたら ThisItem や LookUp を使った更新に挑戦してみてください。Patch が使えるようになると、Power Apps でできることの幅が体感でわかります。楽しみながら試してみましょう。&lt;/p&gt;</content:encoded></item><item><title>Power Apps Patch関数で新規レコードを作成する｜Defaults・列型別の値指定パターン完全解説</title><link>https://shiminkaihatsu.com/powerapps-patch-new-record/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-patch-new-record/</guid><description>Power Apps Patch関数で新規レコードを作成する｜Defaults・列型別の値指定パターン完全解説</description><pubDate>Sun, 29 Mar 2026 19:06:11 GMT</pubDate><content:encoded>&lt;p&gt;フォームを使わずにSharePointにデータを保存したいなら、Patch関数が答えです。Patch関数は列の型さえ意識すれば難しくありません。ただ最初のうちは型エラーで詰まる人が多いので、基本の構造から丁寧に解説します。&lt;/p&gt;
&lt;h2 id=&quot;patch関数の3つの引数&quot;&gt;Patch関数の3つの引数&lt;/h2&gt;
&lt;p&gt;Patch関数は次の3つの引数で構成されています。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Patch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;( データソース, 対象レコード, 更新する列と値 )&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;「どのテーブルに」「新規か更新か」「何を書くか」という3点セットです。この構造さえ頭に入れておけば、あとは列の型に合わせた値を渡すだけです。&lt;/p&gt;
&lt;h3 id=&quot;第1引数データソース&quot;&gt;第1引数：データソース&lt;/h3&gt;
&lt;p&gt;保存先のテーブルを指定します。SharePointリストなら接続時の名前（例：Employees）をそのまま書きます。アプリにデータソースを追加してあれば自動補完が効くので、名前を丸暗記する必要はありません。データソースの追加方法がわからない場合は、&lt;a href=&quot;/powerapps-sharepoint-crud/&quot;&gt;SharePoint CRUDの基本パターン&lt;/a&gt;を先に読んでみてください。&lt;/p&gt;
&lt;h3 id=&quot;第2引数対象レコード&quot;&gt;第2引数：対象レコード&lt;/h3&gt;
&lt;p&gt;新規レコードを作るか、既存レコードを更新するかはここで決まります。新規作成には Defaults(テーブル名) を使います。Defaultsとは「まだ何も書いていない新規レコードの雛形」を意味します。料理にたとえるなら、まだ何も書いていない注文票を1枚取り出す操作です。既存レコードを更新したい場合はGallery.SelectedやvarRecordを使いますが、それは&lt;a href=&quot;/powerapps-patch-update-record/&quot;&gt;既存レコード更新編&lt;/a&gt;で解説します。&lt;/p&gt;
&lt;h3 id=&quot;第3引数更新する列と値&quot;&gt;第3引数：更新する列と値&lt;/h3&gt;
&lt;p&gt;{ 列名: 値, 列名: 値 } の形で書きます。波括弧で囲むことを忘れないでください。Power Appsのレコードは常にこの波括弧形式で表現されます。列名は自動補完が効くので、最初の数文字を打てば候補が出てきます。補完候補を活用するとスペルミスも防げて一石二鳥です。&lt;/p&gt;
&lt;h2 id=&quot;まずハードコードで動かしてみる&quot;&gt;まずハードコードで動かしてみる&lt;/h2&gt;
&lt;p&gt;Patch関数を初めて使うとき、やるべきことはまずハードコードで動かすことです。入力コントロールを一切使わずに固定値を書いて、それだけで動作するか確かめます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Patch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    Employees,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Defaults&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(Employees),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        Title: &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;テスト太郎&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ボタンのOnSelectにこれを貼り付け、Altキーを押しながらクリックすると1秒以内にSharePointへレコードが作成されます。うまく動いたら、次の列を1本ずつ追加していくやり方が、エラー発生時に原因を特定しやすくておすすめです。&lt;/p&gt;
&lt;p&gt;私が社内で教えるときも、まずこのハードコードバージョンを試してもらいます。最初から入力フォームを組み込もうとして型エラーで詰まる人が多いので、まず動かすことを最優先にする順番が大切です。Power Appsは動いている状態から拡張していくほうが圧倒的に学びやすいです。列を1本追加して動かす、また1本追加して動かすという地道な繰り返しが、結果的に最短ルートになります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-patch-new-record01.a-qjh8mn_Z271Uer.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;列型別値の渡し方&quot;&gt;列型別：値の渡し方&lt;/h2&gt;
&lt;p&gt;Patch関数で詰まる原因のほぼすべては、列の型に合わない値を渡していることです。Power Appsは型に対してとても厳格で、テキストを欲しがっているのに数値を渡すとすぐにエラーになります。「Power Appsはとにかく欲しいものだけを渡せ」という原則を念頭に置いて読み進めてください。&lt;/p&gt;
&lt;h3 id=&quot;テキスト列&quot;&gt;テキスト列&lt;/h3&gt;
&lt;p&gt;テキスト列には文字列を渡します。ハードコードならダブルクォートで囲み、入力コントロールを使うなら .Text プロパティを指定します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// ハードコード&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;Title: &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;テスト太郎&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// TextInputから渡す場合&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;FirstName: inpFN.Text&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;TextInputコントロールのデフォルト出力は常に文字列です。テキスト列に渡すぶんには .Text をつけるだけでOKです。このあたりが数値列との大きな違いになりますので、次を読み進めてください。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-patch-new-record02.BP4THG0G_Z1lnila.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;数値列&quot;&gt;数値列&lt;/h3&gt;
&lt;p&gt;数値列にはダブルクォートを外して数値をそのまま渡します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;Age: &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;28&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;TextInputから値を渡したいときは Value() 関数でラップしてください。これが最初の壁になる人がとても多いです。TextInputの .Text はどんな数字を打っても文字列として返します。28 と入力しても Power Apps からみれば「28という文字列」です。数値列は数値が欲しいので Value() で変換する必要があります。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;Age: &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Value&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(inpAge.Text)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Value() を忘れると「Expected Number, found type Text」というエラーが出ます。次のセクションで詳しく取り上げますが、このエラーを見たらまず Value() が抜けていないか確認してください。&lt;/p&gt;
&lt;h3 id=&quot;日付列&quot;&gt;日付列&lt;/h3&gt;
&lt;p&gt;日付列にはDatePickerコントロールの .SelectedDate プロパティを使うのが定番です。.SelectedDate は日付型を返すので、そのまま渡せます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// DatePickerから渡す場合&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;HireDate: dpHire.SelectedDate&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 今日の日付をハードコードする場合&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;HireDate: &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Today&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;テスト段階では Today() を使ってハードコードしておくと、DatePickerの設定まで手が回らないうちでも動作確認ができて便利です。まずハードコードで動かして、後からコントロールに切り替える流れがおすすめです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-patch-new-record03.ub1kde_i_Z2qMnuc.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;yesno列sharepoint&quot;&gt;Yes/No列（SharePoint）&lt;/h3&gt;
&lt;p&gt;Yes/No列（SharePoint）には true または false をそのまま渡します。ダブルクォートは不要なBoolean値です。Toggleコントロールなら .Value プロパティがBoolean型を返すので、そのまま使えます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// Toggleコントロールから渡す場合&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;GoodAtJob: tglGood.Value&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// ハードコードの場合&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;GoodAtJob: &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;false&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;なおDataverseのYes/No列はSharePointとは動作が異なります。DataverseのYes/No列はChoice型と同じ扱いになるため、true/falseをそのまま渡してもエラーになります。DataverseとのPatchについては別記事で解説しています。&lt;/p&gt;
&lt;h2 id=&quot;よくあるエラーと対処法&quot;&gt;よくあるエラーと対処法&lt;/h2&gt;
&lt;h3 id=&quot;expected-number-found-type-text&quot;&gt;Expected Number, found type Text&lt;/h3&gt;
&lt;p&gt;数値列にテキストを渡しているときに出るエラーです。原因はほぼ例外なく Value() の付け忘れです。数式バーでエラーが出ている箇所をホバーすると「The type of argument does not match the expected type: Number. Found type: Text.」という説明が表示されます。Numberが欲しいのにTextを渡したという意味なので、Value(inpAge.Text) のように Value() でラップして解決します。&lt;/p&gt;
&lt;p&gt;体感的にいって、Value()の付け忘れはPatch関数デビュー時の詰まりポイント1位です。エラーメッセージをホバーして読む癖をつけると、原因が一発でわかるようになります。Power Appsが型を丁寧に教えてくれているので、それを読む習慣が身につくと一気に上達します。&lt;/p&gt;
&lt;h3 id=&quot;textinput全体を渡したときのエラー&quot;&gt;TextInput全体を渡したときのエラー&lt;/h3&gt;
&lt;p&gt;.Text や .Value まで指定せず、コントロール名だけを渡すとエラーになります。Power Appsはコントロールオブジェクト全体を送ろうとするため、SharePointが受け取れないデータになってしまいます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// NG（.Textが抜けている）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;FirstName: inpFN&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// OK&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;FirstName: inpFN.Text&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ホバーして「Data type: Control」と表示されたら、プロパティまで掘り下げられていないサインです。ドットを追加して .Text や .SelectedDate などに辿り着くまで確認してください。コントロールのどのプロパティを使えばいいかわからないときも、ドットを打って補完候補を眺めると目的のプロパティが見つかります。&lt;/p&gt;
&lt;h2 id=&quot;format-textで整形する習慣&quot;&gt;Format Textで整形する習慣&lt;/h2&gt;
&lt;p&gt;列が増えると、Patch関数を1行に書き連ねてしまいがちです。数式バー右下のFormat Textボタンで整形すると、列ごとに自動で改行されます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Patch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    Employees,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Defaults&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(Employees),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        Title: &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;テスト太郎&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        FirstName: inpFN.Text,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        Age: &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Value&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(inpAge.Text),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        HireDate: dpHire.SelectedDate,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        GoodAtJob: tglGood.Value&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;列が5本・10本と増えても修正しやすく、どの列に何を渡しているか一目でわかります。Patch関数を書いたら必ずFormat Textをかけることをおすすめします。これは地味な習慣ですが、後から別の人が読むときにも助かりますし、自分が数週間後に見直すときにも理解しやすくなります。&lt;/p&gt;
&lt;p&gt;変数と組み合わせた複雑なパターンが増えてきたときは、&lt;a href=&quot;/powerapps-variables/&quot;&gt;グローバル変数とコンテキスト変数の使い分け&lt;/a&gt;も参考にしてみてください。Patch関数と変数の組み合わせはアプリ設計の基本パターンになります。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;Patch関数の新規レコード作成は、Defaults・型に合わせた値渡し・Format Textの3点を押さえれば動かせます。&lt;a href=&quot;/powerapps-patch-function/&quot;&gt;Patch関数の基礎記事&lt;/a&gt;で全体像を把握した上で、この記事で列型別の渡し方を練習するのが自然な順番です。&lt;/p&gt;
&lt;p&gt;次のステップは既存レコードの更新です。Defaultsを選択中のレコードに変えるだけで更新モードに切り替わります。Gallery.SelectedやvarRecordを使った更新パターンは&lt;a href=&quot;/powerapps-patch-update-record/&quot;&gt;既存レコード更新編&lt;/a&gt;で詳しく解説しています。&lt;/p&gt;
&lt;p&gt;新規作成をはじめ、更新・下書き保存・複雑な列型など、Patch関数の応用パターンを体系的にまとめた&lt;a href=&quot;/powerapps-patch-advanced/&quot;&gt;Patch関数 応用ガイド&lt;/a&gt;も合わせて参照してください。&lt;/p&gt;
&lt;p&gt;Patch関数は最初は難しく感じますが、使い込むほど手に馴染みます。市民開発は地道な積み重ねですが、Patchを使いこなせるようになると作れるアプリの幅が一気に広がります。楽しみながら進めていきましょう。&lt;/p&gt;</content:encoded></item><item><title>Power Apps でSharePoint複雑な列をPatchする｜選択肢・ユーザー・ルックアップ・マネージドメタデータ完全解説</title><link>https://shiminkaihatsu.com/powerapps-patch-sharepoint-complex/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-patch-sharepoint-complex/</guid><description>Power Apps でSharePoint複雑な列をPatchする｜選択肢・ユーザー・ルックアップ・マネージドメタデータ完全解説</description><pubDate>Sun, 29 Mar 2026 19:06:12 GMT</pubDate><content:encoded>&lt;p&gt;SharePointのChoice列・Person列・Lookup列・マネージドメタデータ列は、テキストや数値と同じ感覚でPatchしようとすると必ずエラーになります。これらの列には「レコード形式」や「テーブル形式」で値を渡す必要があるからです。本記事では列型ごとにコントロールを使う方法とハードコードする方法の2パターンを整理します。&lt;/p&gt;
&lt;h2 id=&quot;まず押さえる大原則単一選択はレコード複数選択はテーブル&quot;&gt;まず押さえる大原則：単一選択はレコード、複数選択はテーブル&lt;/h2&gt;
&lt;p&gt;複雑な列型のPatchを理解するうえで最初に覚えるべき原則が1つあります。&lt;/p&gt;
&lt;p&gt;単一選択の列にはレコード（波括弧 { } ）を渡します。複数選択の列にはテーブル（Table関数で包んだレコードの集合）を渡します。Choice列・Lookup列・Person列すべてにこの原則が適用されます。これを先に腹落ちさせておくと、後半の各列型の説明が一気に読みやすくなります。&lt;/p&gt;
&lt;p&gt;また、コントロールから渡す場合はChoices関数がデータを自動的に正しい形に整えてくれます。一方ハードコードする場合は自分でレコードやテーブルを組む必要があります。コントロール経由のほうが圧倒的に楽なので、まずはコントロールから試して動作確認をしてからハードコードに挑戦する順番がおすすめです。&lt;/p&gt;
&lt;h2 id=&quot;choice列単一選択&quot;&gt;Choice列（単一選択）&lt;/h2&gt;
&lt;h3 id=&quot;コントロールから渡す&quot;&gt;コントロールから渡す&lt;/h3&gt;
&lt;p&gt;DropdownコントロールのItemsプロパティにChoices関数を設定します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// DropdownのItemsプロパティ&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Choices&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(ComplexColumns.MyChoiceColumn)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;これでSharePointのリストから選択肢（例：Red / Green / Blue）が自動的に取得されます。Patch時はDropdown.Selectedをそのまま渡すだけです。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;MyChoiceColumn: ddChoice.Selected&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Dropdown.Selectedは { Value: “Red” } のようなレコード形式を返します。SharePointが求めているのもこのレコード形式なので、そのまま渡せばOKです。&lt;/p&gt;
&lt;h3 id=&quot;最頻出ミスselectedvalueを渡してしまう&quot;&gt;最頻出ミス：.Selected.Valueを渡してしまう&lt;/h3&gt;
&lt;p&gt;選択した値のテキストが欲しくて ddChoice.Selected.Value と書きたくなりますが、これをPatchに渡すとエラーになります。.Selected.Value は文字列 “Red” を返しますが、Choice列はレコードを求めているからです。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// NG（文字列を渡している）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;MyChoiceColumn: ddChoice.Selected.Value&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// OK（レコードをそのまま渡す）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;MyChoiceColumn: ddChoice.Selected&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;ハードコードする&quot;&gt;ハードコードする&lt;/h3&gt;
&lt;p&gt;値がわかっている場合は { Value: “Blue” } の形で直接書けます。SharePointは値が一致すれば受け付けてくれます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;MyChoiceColumn: { Value: &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;Blue&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; }&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-patch-sharepoint-complex01.Ga53MWEU_Z1rpRlC.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;choice列複数選択&quot;&gt;Choice列（複数選択）&lt;/h2&gt;
&lt;p&gt;複数選択にはComboBoxコントロールを使います。ItemsはDropdownと同じくChoices関数を設定します。Patch時は .Selected ではなく .SelectedItems を使います。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;MyMultiChoiceColumn: cbChoices.SelectedItems&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;.SelectedItemsはテーブル形式を返します。1つだけ選んでいてもテーブル形式で返ってくるのがポイントです。複数選択列はテーブルが必要なので、これはそのまま渡せます。ハードコードする場合はTable関数で複数のValueレコードを包みます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;MyMultiChoiceColumn: &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Table&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    { Value: &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;London&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    { Value: &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;Paris&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;lookup列&quot;&gt;Lookup列&lt;/h2&gt;
&lt;p&gt;Lookup列もChoice列と同じパターンです。DropdownのItemsにChoices関数を設定し、Dropdown.Selectedをそのまま渡します。Choices関数が { ID: 4, Value: “Chewy” } のようなレコードを自動生成してくれます。IDはルックアップ先リストのIDで、Valueは表示フィールドの値です。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// DropdownのItemsプロパティ&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Choices&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(ComplexColumns.MyLookupColumn)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// Patchに渡す&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;MyLookupColumn: ddLookup.Selected&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ハードコードする場合はIDとValueの両方が必要です。IDはルックアップ先リストをブラウザで開いて確認します。わからない場合はDropdown.Selectedをホバーするとレコードの形が見えるので、そこからIDを読み取るのが確実です。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;MyLookupColumn: { ID: &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, Value: &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;Shane&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; }&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;person列&quot;&gt;Person列&lt;/h2&gt;
&lt;p&gt;Person列は必ずComboBoxを使います。DropdownではSharePointのユーザー候補が表示されません。さらにComboBoxのSearchableプロパティをtrueに設定しないと検索入力欄が現れません。これが見落としやすいポイントです。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 単一ユーザー（SelectMultiple: false）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;MyPersonColumn: cbPerson.Selected&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 複数ユーザー（SelectMultiple: true）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;MyPersonColumn: cbPerson.SelectedItems&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Choices関数がClaims・DisplayName・Email・Departmentなど多数のフィールドを含むレコードを自動で整形してくれます。ハードコードではClaimsフィールド1つだけで済みます。SharePointが残りのフィールドを自動補完してくれるからです。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 特定ユーザーをハードコード&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;MyPersonColumn: { Claims: &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;user@contoso.com&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// ログイン中のユーザーを動的に指定&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;MyPersonColumn: { Claims: &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;User&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;().Email }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 複数ユーザーをTable関数で&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;MyPersonColumn: &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Table&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    { Claims: &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;user1@contoso.com&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    { Claims: &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;User&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;().Email }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-patch-sharepoint-complex02.C1gJxLIZ_Rg2ly.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;エラーから列名を逆引きするテクニック&quot;&gt;エラーから列名を逆引きするテクニック&lt;/h2&gt;
&lt;p&gt;ハードコードで必要な列名がわからないときは、わざと存在しない列名で書いてエラーを出す方法が使えます。ホバーすると「Missing column: Claims」のように必要な列名を教えてくれます。記憶に頼らず確認できる実用的なテクニックです。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 意図的に存在しない列名で書く→エラーが必要な列名を教えてくれる&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;MyPersonColumn: { WrongName: &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;test&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; }&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;マネージドメタデータ列yesno列ハイパーリンク列画像列&quot;&gt;マネージドメタデータ列・Yes/No列・ハイパーリンク列・画像列&lt;/h2&gt;
&lt;p&gt;マネージドメタデータ列もChoices関数が使えます。Dropdown.Selectedをそのまま渡します。ハードコードする場合はLabelとTermGuidの2フィールドが必須です。TermGuidはSharePoint管理センターのタームストアで事前に調べておく必要があります。&lt;/p&gt;
&lt;p&gt;Yes/No列（SharePoint）はBoolean（true/false）をそのまま渡せます。Toggleコントロールなら .Value がBoolean型を返すのでそのまま使えます。なおDataverseのYes/No列は動作が異なり、true/falseの直渡しはできません。詳しくは&lt;a href=&quot;/powerapps-patch-dataverse/&quot;&gt;DataverseのPatch完全解説&lt;/a&gt;で解説しています。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// Yes/No列（SharePoint）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;MyYesNoColumn: tglApproved.Value&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;MyYesNoColumn: &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;true&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ハイパーリンク列はURL文字列をそのまま渡します。列の設定が「画像」になっている場合はPatch自体ができません。代替テキストの設定はPower Appsからは不可です。画像列にはAddPictureコントロールの UploadedImage1.image を渡します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;MyHyperlinkColumn: inpUrl.Text&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;MyImageColumn: UploadedImage1.image&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;SharePointの列型を含むPatch関数の応用パターン全体は&lt;a href=&quot;/powerapps-patch-advanced/&quot;&gt;Patch関数 応用ガイド&lt;/a&gt;で整理しています。Dataverseとの違いや下書き保存パターンも同じページから確認できます。&lt;/p&gt;
&lt;p&gt;SharePointの複雑な列型のPatchは「単一選択=レコード、複数選択=テーブル」の原則と、コントロール経由ならChoices関数が形を整えてくれるという2点を押さえれば整理できます。基本的なPatchの書き方は&lt;a href=&quot;/powerapps-patch-new-record/&quot;&gt;新規レコード作成編&lt;/a&gt;を参照してください。&lt;/p&gt;</content:encoded></item><item><title>Power Apps Patch関数で既存レコードを更新する｜Gallery.Selected・varRecord・入力欄の初期値設定</title><link>https://shiminkaihatsu.com/powerapps-patch-update-record/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-patch-update-record/</guid><description>Power Apps Patch関数で既存レコードを更新する｜Gallery.Selected・varRecord・入力欄の初期値設定</description><pubDate>Sun, 29 Mar 2026 19:06:11 GMT</pubDate><content:encoded>&lt;p&gt;Patch関数の第2引数を1か所変えるだけで、新規作成から既存レコードの更新に切り替えられます。この仕組みを理解すると、「編集ボタンを押した行だけ更新する」というパターンが自然に作れるようになります。&lt;/p&gt;
&lt;h2 id=&quot;galleryselectedで更新モードに切り替える&quot;&gt;Gallery.Selectedで更新モードに切り替える&lt;/h2&gt;
&lt;p&gt;Patch関数の第2引数をDefaultsからGallery.Selectedに変えるだけで、新規作成から既存レコードの更新に切り替わります。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 新規作成（Defaults = 空の新規レコードの雛形）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Patch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(Employees, &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Defaults&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(Employees), { Title: &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;テスト太郎&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; })&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 既存レコードの更新（Gallery.Selected = 現在選択中のレコード）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Patch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(Employees, Gallery1.Selected, { Title: &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;テスト太郎&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; })&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Gallery1.Selectedはギャラリーで現在選択されているレコードを指します。第2引数をそこに変えるだけで、「今選んでいる行を上書き更新する」ボタンが完成します。&lt;a href=&quot;/powerapps-patch-new-record/&quot;&gt;新規レコード作成編&lt;/a&gt;でDefaultsを使った保存を試した後に、この変化を見るとPatch関数の構造が一気に腹落ちします。&lt;/p&gt;
&lt;h3 id=&quot;選択状態を視覚化してデバッグしやすくする&quot;&gt;選択状態を視覚化してデバッグしやすくする&lt;/h3&gt;
&lt;p&gt;Gallery.Selectedが正しく動いているか確かめるには、ギャラリーのTemplateFillプロパティにIsSelectedを使う方法が便利です。選択中のアイテムを色でハイライトします。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// TemplateFill プロパティ&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    ThisItem.IsSelected,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    ColorFade&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;RGBA&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;74&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;144&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;226&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;), &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;80&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;%&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    Transparent&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ThisItem.IsSelectedは選択中のアイテムがtrueを返します。見た目が変わるだけで「どの行を選んでいるか」が確認できるので、Patchが意図したレコードに当たっているか把握しやすくなります。ギャラリー系の記事で詳しく紹介していますが、更新系アプリを作るときにも必ず役立つテクニックです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-patch-update-record01.DmzgKFtj_Z2fNFYy.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;入力欄に現在値を事前表示する&quot;&gt;入力欄に現在値を事前表示する&lt;/h2&gt;
&lt;p&gt;更新フォームでは「現在の値を入力欄に最初から表示してから編集する」UXが基本です。TextInputのDefaultプロパティにGallery.Selected.列名を設定すると、選択中のレコードの値が入力欄に事前表示されます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// TextInputのDefaultプロパティ&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;Gallery1.Selected.Title&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;これを設定しておくと、ユーザーが「今何が入っているか」を見た上で編集できます。全部消してから打ち直す手間がなく、一部だけ変更したいときに特に便利です。&lt;/p&gt;
&lt;p&gt;ギャラリーでアイテムをクリックするたびに入力欄の表示が切り替わるため、「どのレコードを編集しているか」がユーザーにも自然に伝わります。ただし、この方法はGallery.Selectedへの依存が強くなるため、複数画面アプリでは次のvarRecord方式に移行することをおすすめします。&lt;/p&gt;
&lt;h2 id=&quot;galleryselectedの限界&quot;&gt;Gallery.Selectedの限界&lt;/h2&gt;
&lt;p&gt;Gallery.Selectedは手軽ですが、使い続けると限界にぶつかります。最も多いのが「新規作成直後の残存問題」です。&lt;/p&gt;
&lt;p&gt;Patchで新規レコードを作成した後、ギャラリーの先頭に新しいレコードが表示されます。しかしGallery.Selectedは自動的に新しいレコードを選択してくれません。前に選んでいたレコードのままになるため、この状態でPatchボタンを押すと意図していない別のレコードが上書きされます。&lt;/p&gt;
&lt;p&gt;私が最初にアプリを作ったとき、まさにこれで詰まりました。データを更新したはずなのに別の行が変わっていて、しばらく原因がわからなかったです。複数画面にまたがるアプリでは、ギャラリーから離れた瞬間にSelectedが解除されるケースもあります。Gallery.Selectedへの依存はシンプルなアプリには十分ですが、規模が大きくなると不安定さが増します。&lt;/p&gt;
&lt;h2 id=&quot;varrecordへの移行&quot;&gt;varRecordへの移行&lt;/h2&gt;
&lt;p&gt;Gallery.Selectedの限界を超えるには、varRecordという変数を使う設計に切り替えます。変数の種類（グローバル変数・コンテキスト変数）については&lt;a href=&quot;/powerapps-variables/&quot;&gt;変数の使い分け&lt;/a&gt;も参考にしてください。&lt;/p&gt;
&lt;h3 id=&quot;onselectでvarrecordに格納する&quot;&gt;OnSelectでvarRecordに格納する&lt;/h3&gt;
&lt;p&gt;ギャラリーのOnSelectプロパティに次の1行を追加します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;UpdateContext&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;({varRecord: ThisItem})&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ThisItemはクリックされたアイテムのレコードです。これをコンテキスト変数varRecordに格納することで、「どのレコードを選んだか」を画面内で記憶できます。別の画面に遷移する場合はSetを使いグローバル変数にします。&lt;/p&gt;
&lt;h3 id=&quot;patchをvarrecordに切り替える&quot;&gt;PatchをvarRecordに切り替える&lt;/h3&gt;
&lt;p&gt;Patch関数の第2引数をGallery1.SelectedからvarRecordに変更します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Patch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    Employees,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    varRecord,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        Title: inpTitle.Text,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        Age: &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Value&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(inpAge.Text)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;これでギャラリーの選択状態に依存しなくなります。別の画面に遷移しても、varRecordが「選んだレコード」を記憶しているので正しいレコードを更新できます。入力欄のDefaultも Gallery1.Selected.Title から varRecord.Title に変えると一貫性が保てます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-patch-update-record02.B_Gmmg7G_ZjKpEm.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;段階的な習得ロードマップ&quot;&gt;段階的な習得ロードマップ&lt;/h2&gt;
&lt;p&gt;Patch関数の習得は次の3段階で進めるのがおすすめです。&lt;/p&gt;
&lt;p&gt;最初はDefaultsで新規作成を動かします。ハードコードで固定値を書いてPatchが動くことを確かめます。次にGallery.Selectedで更新を試します。第2引数を1か所変えるだけで更新ができる体験をすると、Patch関数の構造が一気に腹落ちします。最後にvarRecordに切り替えてギャラリーへの依存をゼロにします。複数画面のアプリや安定した動作が求められる場面で本領を発揮します。&lt;/p&gt;
&lt;p&gt;最初からvarRecordを使おうとすると、変数の概念とPatch関数の両方を同時に理解する必要があり混乱しやすいです。Gallery.Selectedを経由して段階を踏むことで、何がどう変わったのかが理解しやすくなります。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;Patch関数の第2引数を切り替えるだけで新規作成・Gallery.Selectedによる更新・varRecordを使った安定した更新へと段階的に移行できます。&lt;a href=&quot;/powerapps-patch-new-record/&quot;&gt;新規レコード作成編&lt;/a&gt;と合わせて読むと、Patchの全体像が整理できます。&lt;/p&gt;
&lt;p&gt;次のステップは複数画面にまたがる下書き保存です。varRecordをベースに、statusで提出状態を管理するパターンが必要になります。詳しくは&lt;a href=&quot;/powerapps-save-draft/&quot;&gt;下書き保存の実装パターン&lt;/a&gt;で解説しています。&lt;/p&gt;
&lt;p&gt;更新パターンを含むPatch関数の全応用パターン——新規作成・下書き保存・SharePoint/Dataverse対応——は&lt;a href=&quot;/powerapps-patch-advanced/&quot;&gt;Patch関数 応用ガイド&lt;/a&gt;に体系化しています。&lt;/p&gt;
&lt;p&gt;Patchは使えば使うほど手に馴染む関数です。まずGallery.Selectedで更新を動かして、慣れたらvarRecordへ。焦らず1段階ずつ積み重ねていきましょう。&lt;/p&gt;</content:encoded></item><item><title>Power Appsが重い・遅いときの改善方法まとめ｜OnStart最適化・名前付き計算式・委任の3ステップ</title><link>https://shiminkaihatsu.com/powerapps-performance/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-performance/</guid><description>Power Appsが重い・遅いときの改善方法まとめ｜OnStart最適化・名前付き計算式・委任の3ステップ</description><pubDate>Tue, 24 Mar 2026 22:49:25 GMT</pubDate><content:encoded>&lt;p&gt;Power Appsが重い・起動が遅いと言われたとき、原因はほぼ3つに絞られます。OnStartへの処理詰め込み、変わらないデータの毎回取得、委任の警告放置。この3つを順番に改善するだけで、アプリの起動体感は大きく変わります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-performance11.BScwqazV_Z1TL06R.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;原因1onstartへの処理詰め込みすぎ&quot;&gt;原因1：OnStartへの処理詰め込みすぎ&lt;/h2&gt;
&lt;p&gt;OnStartプロパティは、アプリが起動する前にすべての処理をブロッキング実行します。つまり、OnStartに100個の処理があれば、ホーム画面が表示されるまでその100個が全部終わるのを待つことになります。ClearCollect や Set で10個、20個の変数を定義していれば、その分だけ起動が遅くなります。&lt;/p&gt;
&lt;p&gt;SharePointリストのキャッシュやユーザー情報の取得など、「とりあえずOnStartに書いておこう」という習慣がある方は多いと思います。私もそうでした。ただ、そのアプリが重いと言われたとき、真っ先に疑うべき場所がまさにそのOnStartです。&lt;/p&gt;
&lt;h3 id=&quot;典型的なng例&quot;&gt;典型的なNG例&lt;/h3&gt;
&lt;p&gt;よくあるパターンを一つ挙げます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;ClearCollect&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(colDepartments, Departments)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;こうしてSharePointリストをコレクションにキャッシュしているケースです。部署リストは起動中に変わらないので、OnStartでキャッシュするのは一見合理的に見えます。ところが、このコレクションをホーム画面で使わない場合でも、アプリが起動するたびにこの処理が走ります。ホーム画面に関係ないデータを取りに行くせいで、表示が遅くなっているわけです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-performance12.D4smEwin_1dkQPA.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;668&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;onstartを残すか名前付き計算式に移すかの判断基準&quot;&gt;OnStartを残すか、名前付き計算式に移すかの判断基準&lt;/h3&gt;
&lt;p&gt;名前付き計算式（App.Formulas）は、OnStartの代替として使えるケースがあります。最大の違いは実行タイミングです。OnStartがアプリ起動時に全処理をまとめて実行するのに対して、名前付き計算式はその値が実際に必要になった瞬間に初めて計算されます。&lt;/p&gt;
&lt;p&gt;OnStartに残すべきか、名前付き計算式に移すべきかは、次の1つの問いで判断できます。&lt;/p&gt;
&lt;p&gt;その値は、アプリが起動した時点で確定している必要があるか？&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;値の種類&lt;/th&gt;
&lt;th&gt;判断&lt;/th&gt;
&lt;th&gt;理由&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;変わらないリストのキャッシュ&lt;/td&gt;
&lt;td&gt;名前付き計算式へ移行&lt;/td&gt;
&lt;td&gt;起動時に計算する必要がない&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ユーザー情報（User関数）&lt;/td&gt;
&lt;td&gt;名前付き計算式へ移行&lt;/td&gt;
&lt;td&gt;変更不要・必要な画面で計算すればよい&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;テーマカラーの定数&lt;/td&gt;
&lt;td&gt;名前付き計算式へ移行&lt;/td&gt;
&lt;td&gt;変更不要・一元管理できる&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;深リンク処理（URLパラメーターで遷移先を決める）&lt;/td&gt;
&lt;td&gt;OnStartのまま&lt;/td&gt;
&lt;td&gt;起動時点で確定している必要がある&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;後から変更する可能性がある変数&lt;/td&gt;
&lt;td&gt;OnStartのまま&lt;/td&gt;
&lt;td&gt;名前付き計算式は変更不可（immutable）&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&quot;移行手順clearcollect--名前付き計算式&quot;&gt;移行手順：ClearCollect → 名前付き計算式&lt;/h3&gt;
&lt;p&gt;先ほどのClearCollectの例を名前付き計算式に移す手順を示します。&lt;/p&gt;
&lt;p&gt;まずOnStartから次のコードを切り取ります。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;ClearCollect&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(colDepartments, Departments)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;次にアプリを選択した状態（App）で、上部メニューからFormulaプロパティ（日本語UIでは「計算式」）を開き、次のように書きます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;nfDepartments &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; Departments;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;末尾のセミコロンが必須なので忘れずに。ClearCollectとは構文が違い、データソース名をそのまま右辺に書きます。あとはアプリ内でcolDepartmentsを使っていた場所をnfDepartmentsに書き換えるだけです。ギャラリーのItemsプロパティに nfDepartments と指定すれば、その画面が表示されたタイミングで初めてデータを取りに行きます。ホーム画面では計算が走らないため、起動が速くなります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-performance13.BGl0NFzB_Z15Y7il.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;668&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;移行後に気をつけること&quot;&gt;移行後に気をつけること&lt;/h3&gt;
&lt;p&gt;名前付き計算式はimmutable（変更不可）です。OnStartで Set(varUser, User()) と書いていた場合、後からボタンで Set(varUser, Blank()) と上書きできましたが、名前付き計算式では後から変更できません。書き換えが必要な値には引き続き変数を使います。&lt;/p&gt;
&lt;p&gt;また、名前付き計算式はPower Appsの変数一覧パネルに表示されません。変数（Set/ClearCollect）と区別するために、nf というプレフィックスをつける命名ルールを採用することをおすすめします。nfUser、nfDepartments のようにしておくと、数式バーで見たときに名前付き計算式だとすぐわかります。&lt;/p&gt;
&lt;h3 id=&quot;concurrent関数との違い&quot;&gt;Concurrent関数との違い&lt;/h3&gt;
&lt;p&gt;OnStartを速くする方法として、Concurrent関数で複数の処理を並列実行するテクニックがあります。ただし、Concurrent内では処理同士がお互いを参照できないという制限があります。同じConcurrent内でnfExecutivesを先に計算してからnfExecutiveCountを計算するといった依存関係は書けません。&lt;/p&gt;
&lt;p&gt;名前付き計算式にはその制限がありません。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;nfExecutives &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(Employees, Department &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot;Executives&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;nfExecutiveCount &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; CountRows&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(nfExecutives);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;このようにnfExecutivesを参照するnfExecutiveCountが書けます。Power Appsが依存関係を自動で解決してくれるからです。ただし相互参照（AがBを参照し、BがAを参照する）はループになるため不可です。&lt;/p&gt;
&lt;p&gt;名前付き計算式の構文や型別の書き方については &lt;a href=&quot;/powerapps-named-formulas/&quot;&gt;名前付き計算式（App.Formulas）とは&lt;/a&gt; と &lt;a href=&quot;/powerapps-named-formulas-syntax/&quot;&gt;名前付き計算式の書き方チートシート&lt;/a&gt; で詳しく解説しています。&lt;/p&gt;
&lt;h2 id=&quot;原因2変わらないデータを毎回取得している&quot;&gt;原因2：変わらないデータを毎回取得している&lt;/h2&gt;
&lt;p&gt;都道府県リストや業種分類といった、アプリ起動後に変わらないデータを、毎回 Filter や Lookup で取得していないでしょうか。その都度データソースに問い合わせされるため、ネットワーク遅延やサーバー負荷に左右されます。&lt;/p&gt;
&lt;p&gt;名前付き計算式でキャッシュする考え方が有効です。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;nfDepartments &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; Departments;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;nfStatusChoices &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; Table&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;({Value:&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;申請中&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;},{Value:&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;承認済み&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;},{Value:&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;却下&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;遅延評価のため、参照されない計算式は計算されず、無駄な処理が削減されます。複数の画面で同じリストを使う場合は特に効果的で、1箇所の定義で全画面に反映されます。&lt;/p&gt;
&lt;h2 id=&quot;原因3委任の警告を無視している&quot;&gt;原因3：委任の警告を無視している&lt;/h2&gt;
&lt;p&gt;Power Appsで赤い波線とともに表示される委任の警告を見かけたことがあります。これは、データ件数が上限（通常500件）に達するとフィルタリング結果が不完全になるという警告です。&lt;/p&gt;
&lt;p&gt;Filter 関数を Dataverse や SharePoint に委任できる書き方に変更することで、警告を解消できます。例えば、Filter(Employees, Department = “Sales”) と書く場合、Department列がインデックス化されていれば、委任が可能になります。委任可能な関数や演算子は限定されているため、詳細は &lt;a href=&quot;/powerapps-delegation-warning/&quot;&gt;委任の警告の意味と対処法&lt;/a&gt; を参照してください。&lt;/p&gt;
&lt;h2 id=&quot;まとめ3ステップで起動を速くする&quot;&gt;まとめ：3ステップで起動を速くする&lt;/h2&gt;
&lt;p&gt;起動速度の改善は、小さな最適化の積み重ねです。OnStart の処理を名前付き計算式に移す、変わらないデータをキャッシュする、委任の警告に対応する。この順番で見直すと、アプリの応答性は大きく向上します。&lt;/p&gt;
&lt;p&gt;まず自分のアプリの OnStart を開き、ClearCollect や Set の数を確認するところから始めてみてください。移行候補が見つかれば、体感速度の改善はすぐそこです。&lt;/p&gt;
&lt;p&gt;関連記事：&lt;a href=&quot;/powerapps-named-formulas/&quot;&gt;名前付き計算式（App.Formulas）とは&lt;/a&gt; / &lt;a href=&quot;/powerapps-named-formulas-syntax/&quot;&gt;名前付き計算式の書き方チートシート&lt;/a&gt; / &lt;a href=&quot;/powerappstips/&quot;&gt;Power Apps Tips&lt;/a&gt; / &lt;a href=&quot;/app-development-map/&quot;&gt;Power Apps開発全体マップ&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title>Power AppsからPower Automateのフローを呼び出す。ボタン実行・値の受け渡しの基本</title><link>https://shiminkaihatsu.com/powerapps-powerautomate/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-powerautomate/</guid><description>Power AppsからPower Automateのフローを呼び出す。ボタン実行・値の受け渡しの基本</description><pubDate>Mon, 16 Mar 2026 15:46:47 GMT</pubDate><content:encoded>&lt;p&gt;Power AppsからPower Automateのフローを実行する仕組みは、思っているより単純です。アプリのボタンに1行書けばフローが動き、フローの結果をアプリ側で受け取ることもできます。&lt;/p&gt;
&lt;p&gt;最初は「AppsとAutomateを連携させる」という言葉に身構えてしまいがちですが、実際に手を動かしてみると数分で動くものができます。この記事では基本の呼び出し方と、値の受け渡し方法をまとめます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-powerautomate01.CiYLsJSg_Z1ADjSs.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;フローをappsから呼べる形にする&quot;&gt;フローをAppsから呼べる形にする&lt;/h2&gt;
&lt;p&gt;まずPower Automateで、Power Appsから呼び出せるフローを用意します。トリガーの種類は「Power Appsからのインスタント」を選びます。これを選ぶと、Apps側からフローを起動できるようになります。&lt;/p&gt;
&lt;h3 id=&quot;トリガー選択のポイント&quot;&gt;トリガー選択のポイント&lt;/h3&gt;
&lt;p&gt;Power Automateのトリガーには自動型・インスタント型・スケジュール型があります。Appsから手動で呼ぶときは「インスタント」を選び、さらにその中から「Power Apps（V2）」を選択します。V2を選ぶと引数の型を明示的に定義でき、Appsから値を渡すときに扱いやすくなります。&lt;/p&gt;
&lt;p&gt;Power Automateのトリガー種類の詳細はこちらも参考になります。&lt;/p&gt;
&lt;p&gt;→ &lt;a href=&quot;/powerautomate-trigger-types/&quot;&gt;Power Automateのトリガーはどれを選ぶ？自動化・インスタント・スケジュールの違いを徹底解説&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;power-appsから値を渡す方法&quot;&gt;Power Appsから値を渡す方法&lt;/h2&gt;
&lt;p&gt;フローにAppsから値（テキストや数値）を渡すには、フローのトリガー設定でインプット引数を定義します。V2では引数の名前と型（テキスト・数値・日付など）を設定でき、Apps側の数式でその引数に値をセットします。&lt;/p&gt;
&lt;p&gt;例えばテキスト引数を1つ渡す場合、Appsのボタン数式はこうなります。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;FlowName.&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Run&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(TextInput1.Text)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;引数が複数ある場合はカンマ区切りで渡します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;FlowName.&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Run&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(TextInput1.Text, Dropdown1.Selected.Value, &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Today&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;())&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;引数の順番はフロー側で定義した順と一致させる必要があります。数式を書いた瞬間にIntelliSenseが引数の型を教えてくれるので、型不一致のエラーはわりとすぐ気づけます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-powerautomate05.APIfwcCu_19Hewe.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;フローの結果をappsで受け取る&quot;&gt;フローの結果をAppsで受け取る&lt;/h2&gt;
&lt;p&gt;フローからApps側に値を返したい場合は、フローの最後に「Power Appsに応答する」アクション（Respond to a Power App）を追加します。返す値の名前と中身を定義すると、Apps側でフローの戻り値を取り出せます。&lt;/p&gt;
&lt;p&gt;Apps側での受け取り方はこうなります。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Set&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(gblResult, FlowName.&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Run&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(TextInput1.Text).resultvalue)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;フロー側で返す値に result という名前をつけた場合、Apps側では .result でアクセスできます。この値を変数に格納しておけば、ラベルの表示やギャラリーの絞り込みに使えます。&lt;/p&gt;
&lt;h3 id=&quot;非同期実行には注意&quot;&gt;非同期実行には注意&lt;/h3&gt;
&lt;p&gt;フローの実行には時間がかかることがあります。Run()は同期的に動作するため、フローが完了するまでAppsの処理は待ちます。フローが5秒・10秒かかる場合、ボタンを押してから結果が返ってくるまでアプリが止まって見えます。&lt;/p&gt;
&lt;p&gt;長時間かかるフローにはNotify関数で「処理中」表示を出すか、アイコンのVisible切り替えでローディング状態を見せると親切です。&lt;/p&gt;
&lt;h2 id=&quot;どんなケースで使うか&quot;&gt;どんなケースで使うか&lt;/h2&gt;
&lt;p&gt;私が実務でApps→Automate連携を使うのは、主に以下のケースです。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;ケース&lt;/th&gt;
&lt;th&gt;内容&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;メール・Teams通知&lt;/td&gt;
&lt;td&gt;ボタン押下で承認者にメール通知を送る&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SharePointへの書き込み&lt;/td&gt;
&lt;td&gt;複数リストへ同時に書き込む（Patchが複雑になる場合）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PDFの生成・保存&lt;/td&gt;
&lt;td&gt;定型フォームをPDFに変換してSharePointに保存する&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;外部API連携&lt;/td&gt;
&lt;td&gt;Apps単体では直接叩けないAPIをAutomateを経由して呼ぶ&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;特にメール・Teams通知は定番の使い方です。Appsだけではメール送信ができないので、この組み合わせが必須になります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-powerautomate06.Byq956mG_1k5zOp.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;フローをappsに追加する手順&quot;&gt;フローをAppsに追加する手順&lt;/h2&gt;
&lt;p&gt;Power Apps Studio（アプリの編集画面）から直接フローを紐づけられます。手順は次のとおりです。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Power Apps Studioで編集中のアプリを開く&lt;/li&gt;
&lt;li&gt;左メニューの「Power Automate」アイコンをクリック&lt;/li&gt;
&lt;li&gt;「フローを追加」から使いたいフローを選択する&lt;/li&gt;
&lt;li&gt;フローが追加されると数式バーで .Run() が使えるようになる&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;フローが表示されない場合は、フロー側のトリガーが「Power Apps（V2）」になっているか確認してください。他のトリガーのフローはこのリストに出てきません。&lt;/p&gt;
&lt;p&gt;Power Automateの全体像は入門記事でまとめています。連携の前に基礎を確認したい方はこちらをどうぞ。&lt;/p&gt;
&lt;p&gt;→ &lt;a href=&quot;/powerautomate-intro/&quot;&gt;Power Automate入門——変数・データ処理・通知・デバッグの全体マップ&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;Power AppsからPower Automateを呼び出すのは、FlowName.Run() の1行で完結します。引数で値を渡し、Respond to a Power Appで結果を受け取る、という流れが基本パターンです。&lt;/p&gt;
&lt;p&gt;AppsとAutomateを組み合わせると、アプリ単体では難しいメール通知・PDF生成・外部連携ができるようになります。どちらか一方に閉じて考えずに、得意なことを分担させる設計ができると業務改善の幅がぐっと広がります。&lt;/p&gt;</content:encoded></item><item><title>Power Apps でスマートフォン・タブレットにプッシュ通知を送る｜NotificationsV2 + Deep Link 完全解説</title><link>https://shiminkaihatsu.com/powerapps-push-notification/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-push-notification/</guid><description>Power Apps でスマートフォン・タブレットにプッシュ通知を送る｜NotificationsV2 + Deep Link 完全解説</description><pubDate>Sun, 05 Apr 2026 10:18:35 GMT</pubDate><content:encoded>&lt;p&gt;Power Apps からスマートフォンにプッシュ通知を送ることができます。メールや Teams とは異なる即時性とアプリへの直接誘導が最大の特徴で、タイムシートの催促・承認依頼など、相手にすぐ行動を促したい場面で力を発揮します。&lt;/p&gt;
&lt;h2 id=&quot;power-apps-のプッシュ通知でできること&quot;&gt;Power Apps のプッシュ通知でできること&lt;/h2&gt;
&lt;p&gt;Power Apps のプッシュ通知は、スマートフォン・タブレット・スマートウォッチの OS ネイティブ通知として表示されます。iPhone であれば画面上部にバナーとして出てきて、タップするとそのまま Power Apps アプリが起動する仕組みです。&lt;/p&gt;
&lt;p&gt;私が一番重宝しているのがDeep Link（ディープリンク）という機能です。通知にパラメーターを埋め込んでおくことで、特定のレコードを開いた状態でアプリを起動する動作が実現できます。承認フローで申請書番号を通知に乗せれば、受け取った担当者がタップするだけで該当レコードを即確認できる。これだけで業務のスピードがかなり変わります。&lt;/p&gt;
&lt;p&gt;メール・Teams 通知との違いをまとめると次の表の通りです。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;通知手段&lt;/th&gt;
&lt;th&gt;即時性&lt;/th&gt;
&lt;th&gt;アプリ起動&lt;/th&gt;
&lt;th&gt;リッチな文面&lt;/th&gt;
&lt;th&gt;向いているシーン&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;プッシュ通知&lt;/td&gt;
&lt;td&gt;◎&lt;/td&gt;
&lt;td&gt;直接起動&lt;/td&gt;
&lt;td&gt;△&lt;/td&gt;
&lt;td&gt;承認催促・タスク割り当て・緊急連絡&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Teams 通知&lt;/td&gt;
&lt;td&gt;◯&lt;/td&gt;
&lt;td&gt;△&lt;/td&gt;
&lt;td&gt;◯&lt;/td&gt;
&lt;td&gt;チーム全体への周知・定期レポート&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Outlook メール&lt;/td&gt;
&lt;td&gt;△&lt;/td&gt;
&lt;td&gt;×&lt;/td&gt;
&lt;td&gt;◎&lt;/td&gt;
&lt;td&gt;詳細説明が必要・外部関係者への連絡&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-push-notification01.BKi3YyK4_Zovnuu.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;大前提端末への-power-apps-アプリインストール&quot;&gt;大前提：端末への Power Apps アプリインストール&lt;/h2&gt;
&lt;p&gt;プッシュ通知を受け取るためには、受信者の端末にPower Apps モバイルアプリがインストールされており、一度でもログインしていることが必要です。アプリを日常的に使っていなくても通知は受け取れますが、インストール自体は省略できません。&lt;/p&gt;
&lt;p&gt;社内展開時に地味にはまるのがここです。アプリを使っていない人には届かないのではなく、モバイルアプリが入っていない人には届かないという違いを、展開前に全員に説明しておく必要があります。私の職場でも、プッシュ通知を本番運用する前にモバイルアプリの初期セットアップを全員に案内するステップを踏みました。&lt;/p&gt;
&lt;h2 id=&quot;フロー作成は旧デザイナーで行う&quot;&gt;フロー作成は旧デザイナーで行う&lt;/h2&gt;
&lt;p&gt;Power Automate でプッシュ通知の送信 V2（Send push notification V2）アクションを使う際は、&lt;strong&gt;必ず旧デザイナーを使って作成してください&lt;/strong&gt;。新デザイナーでは「object, object」というエラーが発生する既知バグがあり、現時点では正常に動作しません。&lt;/p&gt;
&lt;p&gt;旧デザイナーへの切り替えは、フロー編集画面右上の新しいデザイナートグルをオフにするだけです。フロー作成後は新デザイナーで表示できる場合もありますが、最初の作成時は必ず旧デザイナーを使うのが安全です。このあたりの仕様は Microsoft が随時改善中なので、将来的には制約がなくなる可能性もありますが、現時点では旧デザイナー一択です。&lt;/p&gt;
&lt;h2 id=&quot;フローの基本構成power-apps-v2-トリガー3つの入力&quot;&gt;フローの基本構成：Power Apps V2 トリガー＋3つの入力&lt;/h2&gt;
&lt;p&gt;フローのトリガーにPower Apps V2を使い、3つのテキスト入力を追加します。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;MyMessage&lt;/strong&gt;：通知のメッセージ本文&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;MyNotify&lt;/strong&gt;：通知を送る相手のメールアドレス&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;MyParam&lt;/strong&gt;：Deep Link 用のパラメーター値&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;名前は任意ですが、用途が伝わるネーミングにしておくと後から見直したときも迷いません。Power Automate の変数・入力値の命名は、チームで運用するならルールを統一しておくと管理が格段に楽になります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-push-notification02.CGyMivvL_rgYgh.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;プッシュ通知の送信-v2アクションの設定&quot;&gt;プッシュ通知の送信 V2アクションの設定&lt;/h2&gt;
&lt;p&gt;フローにプッシュ通知の送信 V2アクションを追加します。最初に Field Service / Power Apps / Sales の3択が表示されますが、&lt;strong&gt;Power Appsを選択&lt;/strong&gt;してください。&lt;/p&gt;
&lt;p&gt;設定する主な項目は次の通りです。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Mobile app&lt;/strong&gt;：対象の Canvas App をドロップダウンから選択&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Recipients&lt;/strong&gt;：&lt;code&gt;[&amp;quot;通知先メールアドレス&amp;quot;]&lt;/code&gt; の形式で指定。動的コンテンツから MyNotify を選んだ後、角括弧で囲む&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Message&lt;/strong&gt;：動的コンテンツの MyMessage を選択&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Open app&lt;/strong&gt;：Yes（通知タップ時にアプリを起動する）&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Recipients の JSON 配列がやや特殊なポイントです。セミコロン区切りではなく、配列の要素として複数のメールアドレスを入れることで一斉送信できます。承認者が3名いる場合は &lt;code&gt;[&amp;quot;aaa@company.com&amp;quot;,&amp;quot;bbb@company.com&amp;quot;,&amp;quot;ccc@company.com&amp;quot;]&lt;/code&gt; のように書きます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-push-notification03.yuIsP3eF_1s0FWW.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;deep-link-の仕組みと-varrecord-必須の前提&quot;&gt;Deep Link の仕組みと varRecord 必須の前提&lt;/h2&gt;
&lt;p&gt;Deep Link とは、プッシュ通知にパラメーターを埋め込み、通知タップ時に特定のレコードを開いた状態でアプリを起動する仕組みです。アクションの Parameters フィールドに次の形式で JSON を渡します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#8BE9FE&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#8BE9FD&quot;&gt;cal&lt;/span&gt;&lt;span style=&quot;color:#8BE9FE&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#E9F284&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;@{triggerBody()?[&apos;text_3&apos;]}&lt;/span&gt;&lt;span style=&quot;color:#E9F284&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Power Apps 側の &lt;code&gt;App.OnStart&lt;/code&gt; でパラメーターを受け取ります。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Set&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(varParam, &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Param&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;cal&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;))&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ここで重要な前提があります。&lt;strong&gt;フォームコントロールの Item プロパティを &lt;code&gt;Gallery.Selected&lt;/code&gt; ではなく &lt;code&gt;varRecord&lt;/code&gt; に設定しておくことが必須&lt;/strong&gt;です。&lt;/p&gt;
&lt;p&gt;理由は &lt;code&gt;Gallery.Selected&lt;/code&gt; が画面遷移後にリセットされるからです。通知をタップしてアプリを起動した場合、ギャラリー画面を経由せずに直接フォーム画面が開くため、&lt;code&gt;Gallery.Selected&lt;/code&gt; には何も入っていない状態になります。&lt;code&gt;varRecord&lt;/code&gt; 変数にレコードを格納しておく設計にすることで、Deep Link 経由でもフォームが正しく機能します。変数を活用したギャラリーとフォームの連携については&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-gallery-varrecord/&quot;&gt;ギャラリーと varRecord を組み合わせたフォーム連携の記事&lt;/a&gt;も参考にしてください。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-push-notification04.Dcgo5GQS_ZoCTVg.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;power-apps-側の実装フロー呼び出しと-publish&quot;&gt;Power Apps 側の実装：フロー呼び出しと Publish&lt;/h2&gt;
&lt;p&gt;Power Apps のボタンから先ほどのフローを呼び出します。ボタンの OnSelect に次のように記述します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;MyNotifyFlow.&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Run&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;    &quot;タイムシートが未提出です。本日中に提出してください。&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    InputEmail.Text,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Text&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(ThisItem.ID)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;3つの引数はそれぞれ MyMessage・MyNotify・MyParam に対応しています。メッセージ本文をハードコードしてもよいですし、TextInput コントロールの入力値を渡すこともできます。&lt;/p&gt;
&lt;p&gt;ひとつ見落としやすい注意点があります。&lt;strong&gt;フローを呼び出す前にアプリを Publish（公開）しておかないと最新版のフロー連携が動きません&lt;/strong&gt;。アプリを保存しただけでは不十分で、公開ボタンを押して公開済みバージョンを更新しておく必要があります。変更を加えるたびに公開し直す習慣をつけておくと、なぜか古い動作をするという混乱を防げます。&lt;/p&gt;
&lt;p&gt;Power Automate フローを Power Apps から呼び出す基本的な流れは、&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-powerautomate/&quot;&gt;Power Apps から Power Automate を呼び出す基礎の記事&lt;/a&gt;で詳しく解説しています。フロー連携が初めての方は先にこちらを確認しておくとスムーズです。&lt;/p&gt;
&lt;h2 id=&quot;コネクタ直接通知の現状&quot;&gt;コネクタ直接通知の現状&lt;/h2&gt;
&lt;p&gt;Power Apps のデータからPower Apps 通知コネクタを追加することで、フロー不要で直接通知を送る方法もあります。ただし、V2 コネクタの正確な構文は現時点では公式ドキュメントにも正確に記載されておらず、生成 AI に聞いても古い V1 の情報が返ってくることが多い状態です。&lt;/p&gt;
&lt;p&gt;V1 は動作しますが非推奨になっています。安定して使えるのはフロー経由の V2だけなので、新規実装は本記事で解説したフロー経由の方法を選んでください。V1 のコネクタは既存フローで動いていても、将来的に廃止される可能性があります。&lt;/p&gt;
&lt;h2 id=&quot;power-apps-からだけじゃないスケジュール実行でも使える&quot;&gt;Power Apps からだけじゃない：スケジュール実行でも使える&lt;/h2&gt;
&lt;p&gt;プッシュ通知は Power Apps のボタンを押したときだけ送れると思っている方も多いのですが、そんなことはありません。スケジュールトリガーや他の自動フローからでもプッシュ通知の送信 V2アクションは呼び出せます。&lt;/p&gt;
&lt;p&gt;毎朝8時に SharePoint リストをチェックして、タイムシートが未提出の担当者にだけ通知を送る、というフローは実用性が高く、私の職場でも実際に動いています。Power Apps を起動していない人に対しても確実に届く通知として重宝しています。5名のチームで運用したところ、タイムシートの回収が大幅に楽になりました。&lt;/p&gt;
&lt;p&gt;個人への直接的なアクション誘導にはプッシュ通知、チームへの一斉周知には Teams がそれぞれ向いています。&lt;a href=&quot;https://shiminkaihatsu.com/powerautomate-teams-notify/&quot;&gt;Power Automate での Teams 自動通知の設定方法&lt;/a&gt;と合わせて、用途に応じて使い分けてください。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;Power Apps のプッシュ通知は、設定の手間はやや大きいですが、それだけの価値がある機能です。特に Deep Link と組み合わせることで、通知を受け取ってタップするだけで該当レコードを確認・承認できる体験は、業務効率を確実に変えます。&lt;/p&gt;
&lt;p&gt;まずはシンプルなボタンを押したら1人に通知から始めて、動作確認ができたら Deep Link やスケジュール実行に発展させていくのがスムーズな進め方です。モバイルアプリのインストールを社内で先に展開しておくことを忘れずに。&lt;/p&gt;
&lt;p&gt;メール・Teams・プッシュ通知それぞれの使い方を組み合わせれば、Power Apps / Power Automate からのアウトプット手段は一通り揃います。&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-automate-output/&quot;&gt;Power Apps / Power Automate のアウトプット完全ガイド&lt;/a&gt;で全パターンを俯瞰しておくと、次に何を使うかの判断がしやすくなります。&lt;/p&gt;</content:encoded></item><item><title>Power AppsのReplaceとSubstituteはどう違う？使い分けを解説</title><link>https://shiminkaihatsu.com/powerapps-replace-substitute/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-replace-substitute/</guid><description>Power AppsのReplaceとSubstituteはどう違う？使い分けを解説</description><pubDate>Sun, 22 Mar 2026 11:17:27 GMT</pubDate><content:encoded>&lt;p&gt;Power Appsには文字列を置換する関数が2つあります。ReplaceとSubstituteです。結論から言うと、ほぼSubstituteを使えば問題ありません。Replaceが必要になるケースは限定的です。この記事ではその違いと使い分けを整理します。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-replace-substitute01.COU_8B-z_78dcU.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;replaceの仕組みと使いどころ&quot;&gt;Replaceの仕組みと使いどころ&lt;/h2&gt;
&lt;p&gt;Replaceは、文字列の特定の位置から指定した文字数を別の文字列に置き換える関数です。引数は4つあります。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Replace&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(テキスト, 開始位置, 文字数, 置換後の文字列)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;たとえば「ABCDE」の2文字目から3文字分を「XYZ」に置き換える場合、次のように書きます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Replace&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;ABCDE&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;XYZ&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 結果：AXYZЕ&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;位置番号で指定するため、対象の文字列が変わると意図しない箇所を置き換えてしまうリスクがあります。データが固定長のコードや番号でなければ、Replaceは扱いにくい関数です。私の現場では、郵便番号のハイフンをなくす処理など、文字の位置が必ず決まっているときにしか使いません。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-replace-substitute05.P2D80zSG_Z1he8Pi.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;substituteの仕組みと使いどころ&quot;&gt;Substituteの仕組みと使いどころ&lt;/h2&gt;
&lt;p&gt;Substituteは、文字列の中から特定の文字列を検索して別の文字列に置き換える関数です。位置指定ではなく、文字列を直接指定します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Substitute&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(テキスト, 検索する文字列, 置換後の文字列 [, インスタンス番号])&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;たとえば「Power Apps Tips」の「Tips」を「ガイド」に置き換えるには次のように書きます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Substitute&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;Power Apps Tips&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;Tips&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;ガイド&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 結果：Power Apps ガイド&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;対象の文字列が何文字目にあるかを気にしなくていいため、動的なデータへの適用に強いです。SharePointリストのデータでも、テキスト入力の値でも、同じ書き方で対応できます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-replace-substitute03.D_X3I_dI_Zkmwai.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;replaceとsubstituteの比較&quot;&gt;ReplaceとSubstituteの比較&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Replace&lt;/th&gt;
&lt;th&gt;Substitute&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;指定方法&lt;/td&gt;
&lt;td&gt;開始位置と文字数&lt;/td&gt;
&lt;td&gt;置き換えたい文字列&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;動的データへの対応&lt;/td&gt;
&lt;td&gt;弱い（位置が変わると壊れる）&lt;/td&gt;
&lt;td&gt;強い（文字列を検索して置換）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;複数箇所の置換&lt;/td&gt;
&lt;td&gt;1箇所のみ&lt;/td&gt;
&lt;td&gt;全箇所またはn番目を指定可能&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;向いているケース&lt;/td&gt;
&lt;td&gt;固定長コード・番号の特定位置&lt;/td&gt;
&lt;td&gt;ほぼすべての置換ケース&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Substituteの第4引数にインスタンス番号を指定すると、同じ文字列が複数ある場合でもn番目だけを置換できます。たとえば「AAA」の2番目の「A」だけを「B」にするといった使い方です。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Substitute&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;AAA&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;A&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;B&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 結果：ABA&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;実例3パターン&quot;&gt;実例3パターン&lt;/h2&gt;
&lt;h3 id=&quot;文字列の単語置換substitute&quot;&gt;文字列の単語置換（Substitute）&lt;/h3&gt;
&lt;p&gt;テキスト入力で入力された文章の中から、特定の単語を別の表現に統一する場面です。たとえば入力フォームに「お客様」と「顧客」が混在している場合、Substituteで一方に統一できます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Substitute&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(TextInput1.Text, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;顧客&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;お客様&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Patchで保存する直前にこの処理を噛ませておくと、SharePointリストのデータを統一した表記で管理できます。Patchの使い方は&lt;a href=&quot;/powerapps-patch-function/&quot;&gt;こちらの記事&lt;/a&gt;で解説しています。&lt;/p&gt;
&lt;h3 id=&quot;位置指定置換の動作確認replace&quot;&gt;位置指定置換の動作確認（Replace）&lt;/h3&gt;
&lt;p&gt;たとえば社員コードが必ず8文字固定で、3文字目と4文字目が部署コードになっている場合、その部分だけをReplaceで書き換えることができます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Replace&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(TextInput_EmpCode.Text, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;01&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;このようにデータの構造が完全に固定されていない限り、Replaceは使わないほうが安全です。&lt;/p&gt;
&lt;h3 id=&quot;特殊文字の標準化substitute&quot;&gt;特殊文字の標準化（Substitute）&lt;/h3&gt;
&lt;p&gt;SharePointリストの全角スペースと半角スペースが混在しているデータを、半角スペースに統一する処理もSubstituteで対応できます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Substitute&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(ThisItem.氏名, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;　&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot; &quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;SharePointのデータ操作については&lt;a href=&quot;/powerapps-sharepoint-crud/&quot;&gt;SharePointリストのCRUDパターン&lt;/a&gt;も参考にしてください。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-replace-substitute04.DtKAsmca_ZxYvIq.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;670&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;まとめ迷ったらsubstitute&quot;&gt;まとめ：迷ったらSubstitute&lt;/h2&gt;
&lt;p&gt;ReplaceとSubstituteの使い分けは、一言で言えば迷ったらSubstituteです。Replaceが活きるのは、データの文字位置が完全に固定されていると保証できるケースに限ります。それ以外はSubstituteを選んでおくほうが、データが変化しても壊れにくいアプリになります。&lt;/p&gt;
&lt;p&gt;スペースの除去にはTrimやTrimEndsが適しています。TrimとSubstituteを組み合わせて使う場面も多いので、あわせて覚えておくと便利です。TrimとTrimEndsの使い方は&lt;a href=&quot;/powerapps-trim/&quot;&gt;こちらの記事&lt;/a&gt;で紹介しています。&lt;/p&gt;
&lt;p&gt;Power Appsのその他のテキスト関数についての完全ガイドは&lt;a href=&quot;/powerapps-text-functions/&quot;&gt;こちらの記事をご覧ください&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;少し地味な関数ですが、データ整形の場面で頼りになります。積極的に使っていきましょう。&lt;/p&gt;</content:encoded></item><item><title>Power Apps で下書き保存を実装する｜複数画面・status列・条件付きPatchの設計パターン</title><link>https://shiminkaihatsu.com/powerapps-save-draft/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-save-draft/</guid><description>Power Apps で下書き保存を実装する｜複数画面・status列・条件付きPatchの設計パターン</description><pubDate>Sun, 29 Mar 2026 19:06:11 GMT</pubDate><content:encoded>&lt;p&gt;複数画面にまたがる入力フォームで「途中まで入力して後で続ける」を実現したいなら、下書き保存の仕組みが必要です。難しそうに見えますが、status列・varRecord・条件付きPatchの3つを押さえれば実装できます。&lt;/p&gt;
&lt;h2 id=&quot;下書き保存が必要なシーン&quot;&gt;下書き保存が必要なシーン&lt;/h2&gt;
&lt;p&gt;下書き保存が必要になるのは、現場での点検入力で途中に呼び出しが入るケース、複数画面にまたがる申請フォームで一度に全部入力できないケース、承認フローに回す前に内容を確認しながら段階的に埋めたいケースなどです。&lt;/p&gt;
&lt;p&gt;いずれも共通しているのは「入力途中の状態を安全に保持したい」という要件です。フォームを閉じてもデータが消えず、次回開いたときに続きから始められることが求められます。アプリの変数だけで管理しようとすると、アプリを閉じた瞬間に状態が消えてしまいます。これを防ぐためにデータソース側にstatus列を持たせます。&lt;/p&gt;
&lt;h2 id=&quot;status列をテーブルに追加する&quot;&gt;status列をテーブルに追加する&lt;/h2&gt;
&lt;p&gt;下書き保存の核心はstatus列です。SharePointリストやDataverseテーブルに「draft / open / in progress / closed」のような選択肢を持つ列を追加します。アプリのユーザーはこの列を直接触る必要はありません。あくまでアプリ側が制御するための内部管理列です。&lt;/p&gt;
&lt;p&gt;なぜこの列が必要かというと、「このレコードがまだ提出されていない」という状態をデータ側で識別するためです。列があることで「draft状態のレコードだけギャラリーに編集アイコンを出す」「draftでないレコードはすべて入力不可にする」といった分岐ができます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-save-draft01.CYCiYIY9_Z1K35uW.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;新規ボタンでdraftレコードを即座に作成する&quot;&gt;新規ボタンでdraftレコードを即座に作成する&lt;/h2&gt;
&lt;p&gt;新規ボタンが押されたタイミングで、空のdraftレコードをその場で作成します。そのレコードをvarRecordに格納することが大切です。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Set&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    varRecord,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Patch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        IncidentManagement,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;        Defaults&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(IncidentManagement),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        { Status: Status.Draft }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Navigate&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(InfoAndCategoryScreen)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Patch関数は成功すると作成されたレコードを返します。それをSetでvarRecordに格納するのがポイントです。これにより「今どのレコードを編集しているか」が全画面で共有されます。&lt;/p&gt;
&lt;p&gt;Navigateはセミコロンで繋いでPatchの後に書きます。先にNavigateを書くとPatchが完了する前に画面が切り替わるため、必ずPatch→Navigateの順番を守ってください。Patch関数の返り値をSetで受け取るパターンは&lt;a href=&quot;/powerapps-patch-update-record/&quot;&gt;既存レコード更新編&lt;/a&gt;のvarRecordとも共通する設計です。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-save-draft02.BG6J-brc_Z1QStC3.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;画面遷移ボタンでpatchnavigateの順に実行する&quot;&gt;画面遷移ボタンでPatch→Navigateの順に実行する&lt;/h2&gt;
&lt;p&gt;各画面の「次へ」ボタンにはPatchとNavigateをセットで書きます。statusはまだdraftのままです。変えるのはそのページで入力した列だけです。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Set&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    varRecord,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Patch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        IncidentManagement,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        varRecord,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;            Title: inpTitle.Text,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;            Description: inpDescription.Text,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;            Category: ddCategory.Selected.Value&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Navigate&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(LocationAndPriorityScreen)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;「Patchして変数を更新してからNavigate」という構造が全ページ共通です。PatchはvarRecordを返すので、Setで再びvarRecordに格納することで変数が常に最新状態に保たれます。&lt;/p&gt;
&lt;p&gt;戻るボタンも基本的に同じ構造です。ただし「draftのときだけPatchする」という条件分岐を追加する必要があります。これは次のセクションで解説します。&lt;/p&gt;
&lt;h2 id=&quot;draftのときだけpatchする条件分岐&quot;&gt;draftのときだけPatchする条件分岐&lt;/h2&gt;
&lt;p&gt;提出済みのレコードを閲覧モードで開いているとき、「次へ」ボタンを押してもPatchが走ると不要なデータ変更が発生します。これを防ぐには、PatchをIf文で囲んでdraftのときだけ実行します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    varRecord.Status &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; Status.Draft,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Set&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        varRecord,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;        Patch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;            IncidentManagement,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;            varRecord,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;            { Title: inpTitle.Text }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Navigate&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(LocationAndPriorityScreen)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;NavigateはIf文の外に置きます。これにより、draft以外のレコードを閲覧しているときもボタンで画面遷移はできます。Patchだけがdraftのときに限定されます。全ての「次へ」ボタンと「戻る」ボタンにこのパターンを適用します。&lt;/p&gt;
&lt;h2 id=&quot;送信ボタンはstatusをopenに変えるだけ&quot;&gt;送信ボタンはstatusをopenに変えるだけ&lt;/h2&gt;
&lt;p&gt;最終画面の送信ボタンはシンプルです。途中画面でデータは全部保存済みなので、最終画面ではstatusをopenに変更するだけで済みます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Patch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    IncidentManagement,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    varRecord,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    { Status: Status.Open }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Navigate&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(WelcomeScreen)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;全列を再度Patchする必要はありません。statusを1列だけ更新してホーム画面に戻ります。これでそのレコードはdraftではなくなるので、次回ギャラリーで開いても閲覧モードになります。&lt;/p&gt;
&lt;h2 id=&quot;ギャラリーでdraftと非draftを見た目で区別する&quot;&gt;ギャラリーでdraftと非draftを見た目で区別する&lt;/h2&gt;
&lt;p&gt;一覧ギャラリーのアイコンをstatus別に切り替えると、どのレコードが編集可能かが一目でわかります。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// ギャラリー内のIconプロパティ&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    ThisItem.Status &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; Status.Draft,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;    Icon.Edit&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;    Icon.View&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;draftには鉛筆アイコン、提出済みには目のアイコン。これだけで「編集できるかどうか」が視覚的に伝わります。色分けを加えるとさらに直感的になります。OnSelectは両方とも共通で「varRecordにThisItemを格納してNavigate」でよいです。&lt;/p&gt;
&lt;h2 id=&quot;表示専用モードを1か所でコントロールする&quot;&gt;表示専用モードを1か所でコントロールする&lt;/h2&gt;
&lt;p&gt;提出済みのレコードを開いたとき、全フィールドを入力不可（閲覧のみ）にする必要があります。全コントロールのDisplayModeに同じ式を書くのは非効率なので、1つのコントロールだけに式を書いて、他はそれを参照させます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// inpTitle のDisplayModeプロパティ（ここだけ式を書く）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    varRecord.Status &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; Status.Draft,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;    DisplayMode.Edit&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;    DisplayMode.Disabled&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 他のすべてのコントロールのDisplayModeプロパティ&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;inpTitle.DisplayMode&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;このやり方だと50個のフィールドがある画面でも変更箇所は1か所だけです。status判定ロジックを後から変えたくなったときも修正が1か所で済みます。これは地味ですが保守性を大きく上げるテクニックです。1コントロールにロジックを集約してほかはそれを参照するという考え方は、&lt;a href=&quot;/powerapps-variables/&quot;&gt;変数の一元管理&lt;/a&gt;と同じ発想です。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-save-draft03.B8vKqg2a_1k9Eot.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;応用空白ドラフトのクリーンアップ&quot;&gt;応用：空白ドラフトのクリーンアップ&lt;/h2&gt;
&lt;p&gt;新規ボタンを押してそのまま何も入力せずホームに戻ると、タイトルすら入力されていない空白のdraftレコードがテーブルに残ります。これを放置するとデータが汚れるので対処が必要です。&lt;/p&gt;
&lt;p&gt;1つ目はギャラリーのItemsでFilter関数を使い、タイトルが空のdraftを非表示にする方法です。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    IncidentManagement,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    Title &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&amp;#x3C;&gt;&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; ||&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; Status &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&amp;#x3C;&gt;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; Status.Draft&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;2つ目はホームへの戻るボタンでRemoveIfを使い、空白draftを物理削除する方法です。確実にデータをきれいに保てますが、誤操作で入力途中のレコードが消えるリスクも考慮が必要です。どちらを選ぶかはアプリの要件次第ですが、まずはFilter方式から試すのが安全です。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;下書き保存の実装はstatus列・varRecord・条件付きPatchの3点が核心です。複雑に見えますが、「新規作成でdraftレコードを作る→途中画面でdraftのままPatch→送信時にopenに変える」という流れに沿ってコードを書けば整理できます。&lt;/p&gt;
&lt;p&gt;下書き保存を含むPatch関数の応用パターン全体は&lt;a href=&quot;/powerapps-patch-advanced/&quot;&gt;Patch関数 応用ガイド&lt;/a&gt;でまとめています。各テーマの詳細解説へのリンクもそちらから辿れます。&lt;/p&gt;
&lt;p&gt;Patch関数の基本がまだ不安な方は&lt;a href=&quot;/powerapps-patch-new-record/&quot;&gt;新規レコード作成編&lt;/a&gt;や&lt;a href=&quot;/powerapps-patch-update-record/&quot;&gt;既存レコード更新編&lt;/a&gt;を先に読んでおくとスムーズです。下書き保存はPatchと変数の組み合わせの最も実践的な応用例です。一度作れてしまえば、どんな複雑な入力フォームでも同じパターンで対応できます。&lt;/p&gt;</content:encoded></item><item><title>Power Apps でスケジュールを色別にわかりやすく表示する</title><link>https://shiminkaihatsu.com/powerapps-schedule-textcolor/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-schedule-textcolor/</guid><description>Power Apps でスケジュールを色別にわかりやすく表示する</description><pubDate>Fri, 01 Nov 2024 21:21:34 GMT</pubDate><content:encoded>&lt;p&gt;リストにある予定に合わせて Power Apps上で色をつけて視覚的にわかりやすく表示する方法を紹介します。&lt;/p&gt;
&lt;h2 id=&quot;全体の概要&quot;&gt;全体の概要&lt;/h2&gt;
&lt;p&gt;準備するものはこちら。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Power Appsキャンバスアプリ&lt;/li&gt;
&lt;li&gt;祝日を入力したリスト&lt;/li&gt;
&lt;li&gt;Outlookの予定を記載したリスト&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Power Appsには残念ながら日本の祝日を判断させる機能がありません。&lt;/p&gt;
&lt;p&gt;2の祝日リストは、あらかじめ祝日だけをまとめたリストを作成しておきます。&lt;/p&gt;
&lt;p&gt;会社指定の休暇日がある場合、まとめて入れておきます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerappsschedulecolor3.DgWriTMj_Z1EBryw.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1162&quot; height=&quot;1200&quot;&gt;&lt;/p&gt;
&lt;p&gt;独自の休暇がある場合も入れておく（2月22日）&lt;/p&gt;
&lt;p&gt;3のリストについては、こちらで紹介したOutlookの予定を自動的にリストにコピーするものを使用します。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://shiminkaihatsu.com/pa_outlookschedule_listcopy/&quot;&gt;https://shiminkaihatsu.com/pa_outlookschedule_listcopy/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;このアプリの見た目は次のように仕上がります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/scheduleapps3.C-uRQYju_Z2iQGVa.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;780&quot;&gt;&lt;/p&gt;
&lt;p&gt;名前は仮名&lt;/p&gt;
&lt;p&gt;一番左に氏名、予定は本日を含めて6日間分を表示します。&lt;/p&gt;
&lt;p&gt;表示する予定の項目は1種類のみです。&lt;/p&gt;
&lt;p&gt;色で見た目を区別しますので、視覚的に情報が入りやすくなっています。&lt;/p&gt;
&lt;p&gt;ちなみにこのアプリは、会社で出社人数を一目で把握するために私が作成したものの一部です。&lt;/p&gt;
&lt;p&gt;アプリの概要はこちらから御覧ください。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://shiminkaihatsu.com/scheduleapps/&quot;&gt;https://shiminkaihatsu.com/scheduleapps/&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;グローバル変数&quot;&gt;グローバル変数&lt;/h2&gt;
&lt;p&gt;最初に色や用語を定義しておくため、OnStartプロパティに次の式を入れておきます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Set&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    globalVars,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;        //表示させる名称&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        dayoff: &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;休&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;//休&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        holiday: &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;祝日&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;//祝日&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        goingToOffice: &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;出社&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;//出社&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        telework: &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;TW&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;//テレワーク&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        businesstrip: &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;出張&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;//出張&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;        //表示させる色&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        bgcolor_weekends: &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;Color.LightGray&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;//土日をライトグレー&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        bgcolor_dayoff: &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;Color.LightGray&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;//休暇をライトグレー&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        bgcolor_holiday: &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;Color.LightGray&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;//祝日をライトグレー&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        bgcolor_telework: &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;Color.Blue&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;//テレワークを青&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        bgcolor_businesstrip: &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;Color.Green&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;//出張をライト緑&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        bgcolor_others: &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;Color.Red&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;//それ以外（出社）を赤&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;        //各種条件&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        teleworkList: [&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;テレ&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;TW&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;ＴＷ&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;リモート&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;WFH&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;ｔｗ&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;ﾃﾚ&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;tele&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        vacationList: [&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;休暇&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;有給&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;公休&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;欠勤&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;年休&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;代休&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        holidayList: [&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;祝日&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        businessTripList: [&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;出張&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;ClearCollect&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(colHoliday, &apos;祝日年休リスト&apos;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;ClearCollect&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(colMoriya, &apos;守屋スケジュール&apos;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Set&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(StartDate0, &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Now&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;()); &lt;/span&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;//今日&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Set&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(StartDate1, &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;DateAdd&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Now&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(), &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;TimeUnit.Days&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)); &lt;/span&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;//明日&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Set&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(StartDate2, &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;DateAdd&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Now&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(), &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;TimeUnit.Days&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)); &lt;/span&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;//明後日&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Set&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(StartDate3, &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;DateAdd&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Now&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(), &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;TimeUnit.Days&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)); &lt;/span&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;//明後日+1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Set&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(StartDate4, &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;DateAdd&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Now&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(), &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;TimeUnit.Days&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)); &lt;/span&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;//明後日+2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Set&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(StartDate5, &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;DateAdd&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Now&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(), &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;TimeUnit.Days&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)); &lt;/span&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;//明後日+3&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ここではOnStartを使っていますが、本来はFormulaで定義するほうが動作が軽くなるのでおすすめです。&lt;/p&gt;
&lt;p&gt;グローバル変数にオブジェクトを格納することで、こういう書き方ができます。&lt;/p&gt;
&lt;p&gt;使い方は、例えばLabelのTextプロパティに globalVars.dayoff といれると「休」と表示されます。&lt;/p&gt;
&lt;p&gt;中身を簡単に説明します。&lt;/p&gt;
&lt;h3 id=&quot;表示させる名称表示させる色&quot;&gt;表示させる名称・表示させる色&lt;/h3&gt;
&lt;p&gt;予定に表示したい名称と色を自由に設定します。&lt;/p&gt;
&lt;h3 id=&quot;各種条件&quot;&gt;各種条件&lt;/h3&gt;
&lt;p&gt;配列で条件を設定します。&lt;/p&gt;
&lt;p&gt;もし予定件名の中に配列のキーワードを含む場合、条件に合う名称と色を表示する、という流れです。&lt;/p&gt;
&lt;p&gt;Label1.Text in globalVars.teleworkList のように in と一緒に使います。&lt;/p&gt;
&lt;h3 id=&quot;clearcollect&quot;&gt;ClearCollect&lt;/h3&gt;
&lt;p&gt;祝日リストと予定リストをコレクションに格納します。&lt;/p&gt;
&lt;h3 id=&quot;startdate&quot;&gt;StartDate&lt;/h3&gt;
&lt;p&gt;6日分の日付をそれぞれ変数に入れます。&lt;/p&gt;
&lt;p&gt;これは後述する条件式の中で使います。&lt;/p&gt;
&lt;h2 id=&quot;スケジュールのパーツ&quot;&gt;スケジュールのパーツ&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerappsschedulecolor1.CnagnvT7_xzGlI.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;190&quot;&gt;&lt;/p&gt;
&lt;p&gt;予定を表示するパーツは全てLabelを使いますので、1人7つLabelがあります。&lt;/p&gt;
&lt;p&gt;それをグループ化してまとめています。&lt;/p&gt;
&lt;p&gt;※ Galleryを使うともっと少ないパーツで表現できると思われます。&lt;/p&gt;
&lt;p&gt;※ グループよりコンテナのほうが使い勝手が良いです。&lt;/p&gt;
&lt;p&gt;名前Labelはベタ打ちで人の名前を入れます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerappsschedulecolor2.BNuZ2KDe_Z1L856Y.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1192&quot; height=&quot;940&quot;&gt;&lt;/p&gt;
&lt;p&gt;1つ目の予定LabelのTextプロパティには次の式を入れます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;    // 土曜日または日曜日の条件&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Weekday&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(StartDate0) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 7&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; ||&lt;/span&gt;&lt;span style=&quot;color:#6272A4&quot;&gt; //土&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Weekday&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(StartDate0) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;//日&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;    &quot;休&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;    // 祝日年休リストのDateとの一致条件&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    !&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;IsBlank&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;LookUp&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(colHoliday,  &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Text&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;DateTimeValue&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(Date), &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;yyyy/m/d&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; Text&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(StartDate0, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;yyyy/m/d&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;))),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;    &quot;休&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    !&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;IsEmpty&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;        Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;            colMoriya,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;            Text&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(DateTime, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;yyyy/m/d&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; Text&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(StartDate0, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;yyyy/m/d&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&amp;#x26;&amp;#x26;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;            !&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;IsBlank&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;LookUp&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(globalVars.vacationList, Value &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; Title))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    ),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    globalVars.dayoff,  &lt;/span&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 休暇なら休&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    !&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;IsEmpty&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;        Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;            colMoriya,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;            Text&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(DateTime, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;yyyy/m/d&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; Text&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(StartDate0, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;yyyy/m/d&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&amp;#x26;&amp;#x26;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;            !&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;IsBlank&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;LookUp&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(globalVars.teleworkList, Value &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; Title))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    ),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    globalVars.telework,  &lt;/span&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// テレワークならTW&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    !&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;IsEmpty&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;        Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;            colMoriya,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;            Text&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(DateTime, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;yyyy/m/d&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; Text&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(StartDate0, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;yyyy/m/d&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&amp;#x26;&amp;#x26;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;            !&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;IsBlank&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;LookUp&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(globalVars.businessTripList, Value &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; Title))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    ),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    globalVars.businesstrip,  &lt;/span&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 出張なら出張&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    globalVars.goingToOffice  &lt;/span&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 上記のいずれにも該当しない場合は出社&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Fillプロパティは次の式です。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;    // 土曜日または日曜日&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Weekday&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(StartDate0) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 7&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; ||&lt;/span&gt;&lt;span style=&quot;color:#6272A4&quot;&gt; //土&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Weekday&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(StartDate0) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;//日&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    globalVars.bgcolor_weekends,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;    // 祝日年休リストのDateとの一致条件&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    !&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;IsBlank&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;LookUp&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(colHoliday, &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Text&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;DateTimeValue&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(Date), &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;yyyy/m/d&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; Text&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(StartDate0, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;yyyy/m/d&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;))),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    globalVars.bgcolor_holiday,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    !&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;IsEmpty&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;        Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;            colMoriya,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;            Text&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(DateTime, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;yyyy/m/d&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; Text&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(StartDate0, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;yyyy/m/d&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&amp;#x26;&amp;#x26;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;            !&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;IsBlank&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;LookUp&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(globalVars.vacationList, Value &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; Title))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    ),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    globalVars.bgcolor_dayoff,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    !&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;IsEmpty&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;        Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;            colMoriya,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;            Text&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(DateTime, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;yyyy/m/d&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; Text&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(StartDate0, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;yyyy/m/d&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&amp;#x26;&amp;#x26;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;            !&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;IsBlank&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;LookUp&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(globalVars.teleworkList, Value &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; Title))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    ),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    globalVars.bgcolor_telework,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    !&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;IsEmpty&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;        Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;            colMoriya,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;            Text&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(DateTime, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;yyyy/m/d&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; Text&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(StartDate0, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;yyyy/m/d&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&amp;#x26;&amp;#x26;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;            !&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;IsBlank&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;LookUp&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(globalVars.businessTripList, Value &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; Title))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    ),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    globalVars.bgcolor_businesstrip,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    globalVars.bgcolor_others &lt;/span&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 上記の条件に一致しない場合&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If関数を使って式を上から順に判断し、条件に合致するときにTextとFillをグローバル変数で決めた値に動的に変化させます。&lt;/p&gt;
&lt;p&gt;わかりやすくまとめると、次の流れです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerappsschedulecolor5.BlVU4d6J_ZbVfVE.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;472&quot; height=&quot;1200&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;関数の解説&quot;&gt;関数の解説&lt;/h3&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;    // 土曜日または日曜日の条件&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Weekday&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(StartDate0) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 7&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; ||&lt;/span&gt;&lt;span style=&quot;color:#6272A4&quot;&gt; //土&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Weekday&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(StartDate0) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;//日&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;    &quot;休&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;最初の条件は土・日の判断です。&lt;/p&gt;
&lt;p&gt;Weekday関数は曜日を取得します。&lt;/p&gt;
&lt;p&gt;OnStartでグローバル変数StartDateを次のように設定しました。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Set&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(StartDate0, &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Now&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;()); &lt;/span&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;//今日&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Set&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(StartDate1, &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;DateAdd&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Now&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(), &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;TimeUnit.Days&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)); &lt;/span&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;//明日&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Set&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(StartDate2, &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;DateAdd&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Now&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(), &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;TimeUnit.Days&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)); &lt;/span&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;//明後日&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Set&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(StartDate3, &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;DateAdd&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Now&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(), &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;TimeUnit.Days&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)); &lt;/span&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;//明後日+1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Set&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(StartDate4, &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;DateAdd&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Now&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(), &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;TimeUnit.Days&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)); &lt;/span&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;//明後日+2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Set&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(StartDate5, &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;DateAdd&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Now&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(), &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;TimeUnit.Days&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)); &lt;/span&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;//明後日+3&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Weekday(StartDate0)、つまり当日の曜日が7（土曜日）、1（日曜日）なら強制的に休が表示され、If関数はそこで処理を終えます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;    // 祝日年休リストのDateとの一致条件&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    !&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;IsBlank&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;LookUp&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(colHoliday,  &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Text&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;DateTimeValue&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(Date), &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;yyyy/m/d&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; Text&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(StartDate0, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;yyyy/m/d&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;))),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;    &quot;休&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;続いて祝日（社の特別休暇含む）の判断は、祝日年休リスト（colHoliday）を使います。&lt;/p&gt;
&lt;p&gt;colHolidayのDate列の日付とStartDate0をText値として比較し、一致するものがある場合、つまり当日が祝日なら休表示になります。&lt;/p&gt;
&lt;p&gt;日付をText値で比較するのは、もし片方の日付が時刻を含む型の場合、不一致でエラーが出るのを防止するためです。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    !&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;IsEmpty&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;        Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;            colMoriya,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;            Text&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(DateTime, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;yyyy/m/d&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; Text&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(StartDate0, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;yyyy/m/d&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&amp;#x26;&amp;#x26;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;            !&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;IsBlank&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;LookUp&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(globalVars.vacationList, Value &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; Title))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    ),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    globalVars.dayoff,  &lt;/span&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 休暇なら休&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;次は有給や病欠による休暇を判断します。&lt;/p&gt;
&lt;p&gt;&amp;amp;&amp;amp; で繋いでいますので、同時に2つの条件を満たす場合に globalVars.dayoff、つまり休が表示されます。&lt;/p&gt;
&lt;p&gt;1つ目の条件は、予定リスト（colMoriya）のDateTime列とStartDate0をText値で比較して一致すること。&lt;/p&gt;
&lt;p&gt;2つ目の条件は、予定リスト（colMoriya）のTitleの中に、配列vacationListで定めたキーワードを含むこと。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    !&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;IsEmpty&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;        Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;            colMoriya,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;            Text&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(DateTime, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;yyyy/m/d&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; Text&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(StartDate0, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;yyyy/m/d&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&amp;#x26;&amp;#x26;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;            !&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;IsBlank&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;LookUp&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(globalVars.teleworkList, Value &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; Title))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    ),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    globalVars.telework,  &lt;/span&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// テレワークならTW&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    !&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;IsEmpty&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;        Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;            colMoriya,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;            Text&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(DateTime, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;yyyy/m/d&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; Text&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(StartDate0, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;yyyy/m/d&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&amp;#x26;&amp;#x26;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;            !&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;IsBlank&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;LookUp&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(globalVars.businessTripList, Value &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; Title))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    ),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    globalVars.businesstrip,  &lt;/span&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 出張なら出張&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    globalVars.goingToOffice  &lt;/span&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 上記のいずれにも該当しない場合は出社&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;TWと出張の表示も、考え方は同じです。 そしていずれのケースにも該当しない場合、出社表示が適用されます。&lt;/p&gt;
&lt;p&gt;ご自身の環境に合わせて判断の順番や表示値を変更してください。&lt;/p&gt;
&lt;p&gt;TextとFillの関数は、基本的構造は同じです。&lt;/p&gt;
&lt;p&gt;これで1日目（当日）の予定表示ができるようになったので、2日目以降も同様に設定します。&lt;/p&gt;
&lt;p&gt;明日はStartDate1ですので、全てのStartDate0をStartDate1に書き換えます。&lt;/p&gt;
&lt;p&gt;明後日も同様にStartDate2に書き換え、これを6日目まで繰り返し、ようやく1人分の予定が完成です。&lt;/p&gt;
&lt;p&gt;人数を増やす場合は全体をコピーし、好みの位置に配置します。&lt;/p&gt;
&lt;p&gt;増えた分だけスケジュールリストやコレクションを追加することを忘れないようにしましょう。&lt;/p&gt;</content:encoded></item><item><title>Power Apps から Outlook でメールを送信する｜SendEmailV2・添付・HTML・宛先複数選択の全パターン</title><link>https://shiminkaihatsu.com/powerapps-send-outlook-email/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-send-outlook-email/</guid><description>Power Apps から Outlook でメールを送信する｜SendEmailV2・添付・HTML・宛先複数選択の全パターン</description><pubDate>Sun, 05 Apr 2026 10:18:37 GMT</pubDate><content:encoded>&lt;p&gt;Power Apps から Outlook でメールを送信したいとき、Power Automate のフローは不要です。Office 365 Outlook コネクタをデータソースに追加するだけで、宛先の複数選択・HTML 装飾・添付ファイル付きの本格的なメール送信がアプリ単体で実現します。&lt;/p&gt;
&lt;h2 id=&quot;office-365-outlook-コネクタの追加&quot;&gt;Office 365 Outlook コネクタの追加&lt;/h2&gt;
&lt;p&gt;Power Apps Studio のデータメニューから「コネクタ」→「Office 365 Outlook」を追加します。ここで注意したいのは、個人用の Outlook.com コネクタと間違えないことです。職場・学校アカウントで使える Exchange Online に接続するコネクタを選んでください。追加が完了すれば、フローなしにアプリ内から直接メールを送れるようになります。&lt;/p&gt;
&lt;p&gt;このコネクタは Power Apps の Premium コネクタではなく、Microsoft 365 のライセンスがあれば追加費用なしで利用できます。Power Automate を使わなくてよい分、アプリの設計がシンプルになり、送信ロジックをアプリ内に完結させられます。メール送信以外の通知手段については&lt;a href=&quot;https://shiminkaihatsu.com/powerautomate-teams-notify/&quot;&gt;Power Automate Teams 通知の設定方法&lt;/a&gt;も参考にしてください。&lt;/p&gt;
&lt;h2 id=&quot;sendemailv2-関数の基本構文&quot;&gt;SendEmailV2 関数の基本構文&lt;/h2&gt;
&lt;p&gt;ボタンの OnSelect プロパティに次のように書きます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;Office365Outlook.&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;SendEmailV2&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;    &quot;recipient@example.com&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;    &quot;件名テキスト&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;    &quot;本文テキスト&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;必須引数は To・Subject・Body の 3 つだけです。V2 を使う理由は、V1 が廃止予定のためです。数式の候補に V1 と V2 の両方が出てくるため、必ず V2 を選ぶようにしてください。V1 で作ったアプリは将来動かなくなる可能性があります。&lt;/p&gt;
&lt;h2 id=&quot;to宛先の書き方パターン&quot;&gt;To（宛先）の書き方パターン&lt;/h2&gt;
&lt;p&gt;宛先の指定方法は用途によって使い分けます。主なパターンは次のとおりです。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;パターン&lt;/th&gt;
&lt;th&gt;記述例&lt;/th&gt;
&lt;th&gt;用途&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;ハードコード&lt;/td&gt;
&lt;td&gt;“&lt;a href=&quot;mailto:user@example.com&quot;&gt;user@example.com&lt;/a&gt;”&lt;/td&gt;
&lt;td&gt;固定の宛先（通知先など）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;セミコロン区切り&lt;/td&gt;
&lt;td&gt;“&lt;a href=&quot;mailto:a@example.com&quot;&gt;a@example.com&lt;/a&gt;;&lt;a href=&quot;mailto:b@example.com&quot;&gt;b@example.com&lt;/a&gt;”&lt;/td&gt;
&lt;td&gt;複数宛先を固定で指定&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ログインユーザー&lt;/td&gt;
&lt;td&gt;User().Email&lt;/td&gt;
&lt;td&gt;自分自身への送信・確認メール&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;入力値&lt;/td&gt;
&lt;td&gt;TextInput1.Text&lt;/td&gt;
&lt;td&gt;画面で宛先を入力させる場合&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;複数宛先を動的に選択させたい場合はコンボボックスを使います。詳細は後述します。&lt;/p&gt;
&lt;h2 id=&quot;body-の-html-対応&quot;&gt;Body の HTML 対応&lt;/h2&gt;
&lt;h3 id=&quot;html-タグを-body-に直接書く&quot;&gt;HTML タグを Body に直接書く&lt;/h3&gt;
&lt;p&gt;Body 引数に HTML タグをそのまま書くと、装飾されたメールが届きます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;html&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;Office365Outlook.SendEmailV2(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    TextInput_To.Text,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    TextInput_Subject.Text,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    &quot;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;h2&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;&gt;申請が届きました&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;h2&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;&gt;申請者：&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;strong&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;&gt;&quot; &amp;#x26; User().FullName &amp;#x26; &quot;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;strong&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt;・&lt;code&gt;&amp;lt;strong&amp;gt;&lt;/code&gt;・&lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt;・&lt;code&gt;&amp;lt;ul&amp;gt;&lt;/code&gt; など標準的な HTML タグが使えます。テキストと HTML のどちらも渡せるので、シンプルな通知メールにも装飾が必要なレポートメールにも対応できます。&lt;/p&gt;
&lt;h3 id=&quot;リッチテキストエディタを使う&quot;&gt;リッチテキストエディタを使う&lt;/h3&gt;
&lt;p&gt;画面上でユーザーが太字・色付け・見出しを入力できるようにしたい場合は、リッチテキストエディターコントロールを使います。Body に &lt;code&gt;RichTextEditor1.HtmlText&lt;/code&gt; を渡すだけで、ユーザーが書式設定した内容をそのまま HTML メールとして送れます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-send-outlook-email01.D6N4n6Im_Z1t4ONE.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;ccbcc重要度などのオプション引数&quot;&gt;CC・BCC・重要度などのオプション引数&lt;/h2&gt;
&lt;p&gt;必須 3 引数の後にコンマを打ち、波括弧 &lt;code&gt;{}&lt;/code&gt; でオプションを追加します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;Office365Outlook.&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;SendEmailV2&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;    &quot;to@example.com&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;    &quot;件名&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;    &quot;本文&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        Cc: &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;cc@example.com&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        Bcc: &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;bcc@example.com&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        Importance: &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;High&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Importance は “High” / “Normal” / “Low” の文字列で指定します。Sensitivity（秘密度）は GUID が必要で複雑なため、通常は使いません。オプション引数は必要なものだけを波括弧の中に入れる書き方で、不要なものは省略できます。&lt;/p&gt;
&lt;h2 id=&quot;添付ファイルを送信する&quot;&gt;添付ファイルを送信する&lt;/h2&gt;
&lt;h3 id=&quot;フォームの添付コントロールを流用する&quot;&gt;フォームの添付コントロールを流用する&lt;/h3&gt;
&lt;p&gt;Power Apps の Insert メニューには Attachment コントロール単体が存在しません。フォームコントロールを画面に追加すると内部に Attachment コントロールが含まれており、これを流用するのが最も簡単な方法です。&lt;/p&gt;
&lt;h3 id=&quot;renamecolumns-での列変換が必須&quot;&gt;RenameColumns での列変換が必須&lt;/h3&gt;
&lt;p&gt;Attachment コントロールのデータは &lt;code&gt;AddMediaButton1.Attachments&lt;/code&gt; などで取得できますが、列名が &lt;code&gt;Value&lt;/code&gt; になっています。SendEmailV2 の Attachments 引数が期待する列名は &lt;code&gt;ContentBytes&lt;/code&gt; です。そのため &lt;code&gt;RenameColumns()&lt;/code&gt; で変換する必要があります。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;Office365Outlook.&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;SendEmailV2&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;    &quot;to@example.com&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;    &quot;添付あり&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;    &quot;本文&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        Attachments: &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;RenameColumns&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;            AttachmentControl1.Attachments,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;            &quot;Value&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;ContentBytes&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;この &lt;code&gt;RenameColumns&lt;/code&gt; を忘れると、添付ファイルが送信されないか、エラーになります。添付を実装するときに最も見落としやすいポイントです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-send-outlook-email02.DZ8RdFNb_Z2hjuCK.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;from差出人変更と-replyto-の設定&quot;&gt;From（差出人変更）と ReplyTo の設定&lt;/h2&gt;
&lt;p&gt;From（差出人変更）を使うには、Exchange 側で対象アカウントへの「代理送信」権限が IT 管理者によって設定されている必要があります。権限がない状態で From を指定してもエラーになります。&lt;/p&gt;
&lt;p&gt;ReplyTo はサポートデスクのメーリングリストなど、返信先を別のアドレスにしたい場面で便利です。From 権限は不要なので、一般ユーザーでも気軽に使えます。&lt;/p&gt;
&lt;h2 id=&quot;コンボボックスで宛先を複数選択する&quot;&gt;コンボボックスで宛先を複数選択する&lt;/h2&gt;
&lt;p&gt;社内ユーザーを検索して複数の宛先を選べる UI を作るには、Office 365 Users コネクタとコンボボックスを組み合わせます。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;データソースに「Office 365 Users」コネクタを追加する&lt;/li&gt;
&lt;li&gt;ComboBox の Items に &lt;code&gt;Office365Users.SearchUserV2({searchTerm: Self.SearchText, top: 10}).value&lt;/code&gt; を設定する&lt;/li&gt;
&lt;li&gt;ComboBox の DisplayFields に &lt;code&gt;[&amp;quot;DisplayName&amp;quot;]&lt;/code&gt;、SearchFields に &lt;code&gt;[&amp;quot;DisplayName&amp;quot;, &amp;quot;Mail&amp;quot;]&lt;/code&gt; を設定する&lt;/li&gt;
&lt;li&gt;SendEmailV2 の To に &lt;code&gt;Concat(ComboBox1.SelectedItems, Mail, &amp;quot;;&amp;quot;)&lt;/code&gt; を渡す&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Concat 関数の第3引数にセミコロンを指定することで、複数選択されたメールアドレスをセミコロン区切りの文字列に変換できます。これが SendEmailV2 の複数宛先形式と一致します。&lt;/p&gt;
&lt;h2 id=&quot;power-automate-を使わない意義&quot;&gt;Power Automate を使わない意義&lt;/h2&gt;
&lt;p&gt;Power Automate 経由でメールを送る方法は多くの記事で紹介されていますが、Office 365 Outlook コネクタを使えばフローが不要です。コネクタ追加だけで「宛先検索・CC/BCC・複数添付・HTML 装飾」のフル機能を実現できます。フローを作らない分、設計がシンプルになり、トラブルシューティングも容易になります。&lt;/p&gt;
&lt;p&gt;Power Apps から Power Automate を呼び出す連携パターンについては&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-powerautomate/&quot;&gt;Power Apps からフローを呼び出す基礎記事&lt;/a&gt;で解説しています。メール送信に限らず、より複雑な処理が必要な場面ではフロー連携を使い分けるとよいでしょう。アウトプット系アクションの全体像については&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-automate-output/&quot;&gt;Power Apps / Power Automate アウトプット完全ガイド&lt;/a&gt;で整理しています。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;Office 365 Outlook コネクタと SendEmailV2 関数を組み合わせれば、Power Apps 単体で本格的なメール送信が実現します。To・Subject・Body の 3 引数を押さえたら、HTML 装飾・添付ファイル・コンボボックスでの複数宛先選択へと順番に機能を拡張していきましょう。RenameColumns の変換を忘れずに、という点だけ頭に入れておけば、実装で詰まることはほとんどなくなります。&lt;/p&gt;</content:encoded></item><item><title>Power AppsでSharePointリストのデータを読み書きする。基本のCRUDパターン</title><link>https://shiminkaihatsu.com/powerapps-sharepoint-crud/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-sharepoint-crud/</guid><description>Power AppsでSharePointリストのデータを読み書きする。基本のCRUDパターン</description><pubDate>Mon, 16 Mar 2026 15:46:50 GMT</pubDate><content:encoded>&lt;p&gt;Power AppsでSharePointリストのデータを読み書きするには、Filter関数・Patch関数・Remove関数の3つを使いこなすことが基本です。この記事では、一覧表示・追加・更新・削除という4つの操作（CRUD）を整理します。&lt;/p&gt;
&lt;h2 id=&quot;crudとは&quot;&gt;CRUDとは&lt;/h2&gt;
&lt;p&gt;CRUDとは Create（追加）・Read（読み込み）・Update（更新）・Delete（削除）の頭文字です。データを扱うアプリで必ず必要になる4つの操作をまとめた言葉です。Power Appsでは、この4つをほぼすべてギャラリーとPatch関数・Remove関数で実装します。&lt;/p&gt;
&lt;p&gt;SharePointリストとPower Appsの組み合わせは相性がいいです。追加や更新の処理がPatch関数1行で書けるため、コードが複雑になりません。Excelをデータソースにするよりも委任の制約が少なく、複数人の同時編集にも対応しています。SharePointリストの基本的な使い方は&lt;a href=&quot;/splist_mslist/&quot;&gt;SharePointリストとMicrosoft Listsの解説&lt;/a&gt;で整理しているので参照してください。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-crud01.DM3Jcfpn_Z2jT6yf.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;666&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;readデータの読み込みと一覧表示&quot;&gt;Read——データの読み込みと一覧表示&lt;/h2&gt;
&lt;h3 id=&quot;ギャラリーで一覧表示する&quot;&gt;ギャラリーで一覧表示する&lt;/h3&gt;
&lt;p&gt;SharePointリストのデータを画面に一覧表示するにはギャラリーコントロールを使います。ギャラリーのItemsプロパティにデータソース名を指定するだけで、リストの全件が表示されます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;Items &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; SharePointリスト名&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;絞り込みを行いたい場合はFilter関数を使います。例えばステータスが「未完了」のものだけを表示するには次のように書きます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(タスク管理リスト, ステータス &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot;未完了&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;検索ボックスと組み合わせてキーワード検索にしたい場合はSearch関数が使えます。Filter・Search・LookUpの使い分けは&lt;a href=&quot;/powerapps-filter-search-lookup/&quot;&gt;Filter・Search・LookUp関数の解説&lt;/a&gt;にまとめています。&lt;/p&gt;
&lt;h2 id=&quot;createデータの追加&quot;&gt;Create——データの追加&lt;/h2&gt;
&lt;h3 id=&quot;patch関数でレコードを新規作成する&quot;&gt;Patch関数でレコードを新規作成する&lt;/h3&gt;
&lt;p&gt;新しいレコードをSharePointリストに追加するにはPatch関数を使います。第1引数にデータソース、第2引数にDefaults関数を指定することで新規レコードとして扱われます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Patch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    タスク管理リスト,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Defaults&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(タスク管理リスト),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        タイトル: タイトル入力.Text,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        担当者: 担当者入力.Text,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        期日: 期日入力.SelectedDate&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Defaults関数は「このリストの空の新規レコード」を意味します。第2引数にDefaultsを渡すことで、既存レコードの更新ではなく新規追加になります。&lt;/p&gt;
&lt;h2 id=&quot;updateデータの更新&quot;&gt;Update——データの更新&lt;/h2&gt;
&lt;h3 id=&quot;選択したレコードを上書きする&quot;&gt;選択したレコードを上書きする&lt;/h3&gt;
&lt;p&gt;ギャラリーで選択した行を更新する場合は、Patch関数の第2引数にギャラリーの選択状態（Selected）を渡します。これがCreateとの大きな違いです。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Patch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    タスク管理リスト,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    ギャラリー1.Selected,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        タイトル: タイトル入力.Text,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        ステータス: ステータスドロップダウン.Selected.Value&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;第2引数に更新したいレコードを指定することで、そのレコードだけが上書きされます。指定しなかったフィールドは元の値が保持されます。Patch関数の詳しい使い方は&lt;a href=&quot;/powerapps-patch-function/&quot;&gt;Patch関数の解説&lt;/a&gt;にまとめています。&lt;/p&gt;
&lt;h2 id=&quot;deleteデータの削除&quot;&gt;Delete——データの削除&lt;/h2&gt;
&lt;h3 id=&quot;remove関数でレコードを削除する&quot;&gt;Remove関数でレコードを削除する&lt;/h3&gt;
&lt;p&gt;レコードを削除するにはRemove関数を使います。削除ボタンのOnSelectプロパティに次のように書きます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Remove&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(タスク管理リスト, ギャラリー1.Selected)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;削除は取り消せないので、実際のアプリではConfirm関数と組み合わせて確認ダイアログを出してから実行するのが安全です。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Confirm&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;このレコードを削除しますか？&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Remove&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(タスク管理リスト, ギャラリー1.Selected)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;私が現場で作った申請管理アプリでも削除機能は最初は入れていませんでした。誤操作が怖かったのです。結局、管理者権限を持つ担当者だけが使えるボタンとして後から追加しました。最初からすべての機能を実装しようとせず、必要になってから追加するくらいで十分です。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-sharepoint-crud03.Bqm2gufD_P2O6z.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;フォームコントロールを使う方法との違い&quot;&gt;フォームコントロールを使う方法との違い&lt;/h2&gt;
&lt;p&gt;Power AppsにはEditFormというフォームコントロールがあり、これを使うとデータの追加・更新をほぼ自動で処理してくれます。Patch関数を自分で書かなくていい分、実装が速いです。ただしフォームのレイアウト自由度が低く、細かいUI設計をしたいときは制約になります。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Patch関数で書く&lt;/th&gt;
&lt;th&gt;フォームコントロール&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;実装のしやすさ&lt;/td&gt;
&lt;td&gt;コードを書く必要がある&lt;/td&gt;
&lt;td&gt;設定だけでほぼ完結&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;レイアウト自由度&lt;/td&gt;
&lt;td&gt;高い（完全に自由）&lt;/td&gt;
&lt;td&gt;低い（フォームの制約あり）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;複雑な条件処理&lt;/td&gt;
&lt;td&gt;やりやすい&lt;/td&gt;
&lt;td&gt;やりにくい&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;業務アプリを素早く作りたいときはフォームコントロールを使い、細かいUIや複雑な条件が必要なときはPatch関数で書く——この使い分けが現実的です。フォームコントロールの使い方については別記事で詳しく解説する予定です。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;SharePointリストのCRUDは、Filter（一覧）・Patch + Defaults（追加）・Patch + Selected（更新）・Remove（削除）の組み合わせで実装できます。最初はこの4つのパターンをそのままコピーして動かしてみてください。&lt;/p&gt;
&lt;p&gt;1本のCRUDアプリが完成すると、Power Appsでできることの感覚が一気につかめます。まず動くものを作ることが大切です。Power Apps開発の全体像は&lt;a href=&quot;/app-development-map/&quot;&gt;Power Apps開発の全体マップ&lt;/a&gt;で整理しているので合わせて確認してみてください。&lt;/p&gt;</content:encoded></item><item><title>Power Appsで姓と名を分けて取り出す｜Split・First・Lastの使い方</title><link>https://shiminkaihatsu.com/powerapps-split-name/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-split-name/</guid><description>Power Appsで姓と名を分けて取り出す｜Split・First・Lastの使い方</description><pubDate>Sun, 22 Mar 2026 11:17:37 GMT</pubDate><content:encoded>&lt;p&gt;SharePointやActive Directoryから取得できる名前のデータは、「田中, 太郎」のようにカンマ区切りで姓と名が逆順に並んでいることがあります。Splitを使えば、この形式をアプリ上で自由に組み替えられます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-split-name01.6XI3ERxf_22Y4pS.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;splitの仕組み文字列をテーブルに変換する&quot;&gt;Splitの仕組み：文字列をテーブルに変換する&lt;/h2&gt;
&lt;p&gt;Split関数は、文字列を区切り文字で分割し、テーブルとして返す関数です。引数は2つで、対象の文字列と区切り文字を指定します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Split&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;田中, 太郎&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;, &quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;この結果は1列（Value列）のテーブルになり、最初の行に「田中」、2行目に「太郎」が入ります。文字列を返すわけではないため、Splitの結果を直接ラベルのTextプロパティに渡してもうまく表示されません。ここが最初に戸惑うポイントです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-split-name02.p7knQdFx_Z13B79B.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;firstとlastで要素を取り出す&quot;&gt;FirstとLastで要素を取り出す&lt;/h2&gt;
&lt;p&gt;Splitが返すテーブルから特定の行を取り出すには、FirstやLastを使います。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 最初の行（姓）を取り出す&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;First&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Split&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;田中, 太郎&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;, &quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)).Value&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 最後の行（名）を取り出す&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Last&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Split&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;田中, 太郎&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;, &quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)).Value&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;FirstとLastはそれぞれテーブルの先頭行・末尾行をレコードとして返します。その後ろに .Value をつけることで、Value列の値（文字列）として取り出せます。Splitで2つに分割した場合、FirstとLastの組み合わせで十分対応できます。&lt;/p&gt;
&lt;p&gt;3つ以上に分割する場合はIndex関数が必要になりますので、詳細は&lt;a href=&quot;/powerapps-index/&quot;&gt;こちらの記事&lt;/a&gt;をご覧ください。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-split-name03.DDZeMpIA_Z9KyAD.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;実例3パターン&quot;&gt;実例3パターン&lt;/h2&gt;
&lt;h3 id=&quot;カンマ区切りの姓名を反転する&quot;&gt;カンマ区切りの姓名を反転する&lt;/h3&gt;
&lt;p&gt;Active DirectoryからUser().FullNameで取得できる名前が「田中, 太郎」形式の場合、次の数式で「太郎 田中」に組み替えられます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Last&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Split&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;User&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;().FullName, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;, &quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)).Value &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot; &quot;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; First&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Split&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;User&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;().FullName, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;, &quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)).Value&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ただし、Split関数を2回書くと数式が長くなります。Withを使うとすっきり書けます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;With&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    { parts: &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Split&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;User&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;().FullName, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;, &quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;) },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Last&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(parts).Value &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot; &quot;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; First&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(parts).Value&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Withを使った数式の整理については&lt;a href=&quot;/powerapps-with/&quot;&gt;Power AppsのWith関数の記事&lt;/a&gt;も参考にしてください。&lt;/p&gt;
&lt;h3 id=&quot;コレクションに格納して加工する&quot;&gt;コレクションに格納して加工する&lt;/h3&gt;
&lt;p&gt;Splitの結果をコレクションに入れておくと、複数の場所で使い回せます。たとえばボタンのOnSelectでコレクションを作り、ギャラリーに表示する構成です。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;ClearCollect&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    colNameParts,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Split&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(TextInput_Name.Text, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot; &quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;コレクションの使い方については&lt;a href=&quot;/powerapps-collection/&quot;&gt;Power Appsのコレクション活用入門&lt;/a&gt;で詳しく解説しています。&lt;/p&gt;
&lt;h3 id=&quot;sharepointリストへの整形保存&quot;&gt;SharePointリストへの整形保存&lt;/h3&gt;
&lt;p&gt;SharePointリストに氏名を格納する際、姓と名を別の列に分けて保存したいケースがあります。Splitで分割した値をPatchでそれぞれの列に書き込めます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;With&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    { parts: &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Split&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;TrimEnds&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(TextInput_FullName.Text), &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot; &quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;) },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Patch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        社員マスタ,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;        Defaults&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(社員マスタ),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;            姓: &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;First&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(parts).Value,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;            名: &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Last&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(parts).Value&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;SharePointリストの読み書きパターンについては&lt;a href=&quot;/powerapps-sharepoint-crud/&quot;&gt;SharePointリストのCRUDパターン&lt;/a&gt;をあわせて参考にしてください。スペース混入が心配な場合は、Splitの前にTrimEndsをかけておくと安心です。TrimとTrimEndsの使い方は&lt;a href=&quot;/powerapps-trim/&quot;&gt;こちらの記事&lt;/a&gt;をご覧ください。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-split-name04.lNnUrWkr_ZxVr7i.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;Splitは文字列をテーブルに変換する関数で、そのままでは文字列として扱えません。First・Lastと組み合わせることで目的の要素を取り出せます。Withと組み合わせれば、Split関数を何度も書く必要がなくなり、数式がすっきりします。&lt;/p&gt;
&lt;p&gt;3つ以上の区切りがある場合や、n番目の要素を取り出したい場合は&lt;a href=&quot;/powerapps-index/&quot;&gt;Index関数&lt;/a&gt;が役立ちます。&lt;/p&gt;
&lt;p&gt;Power Appsのその他のテキスト関数についての完全ガイドは&lt;a href=&quot;/powerapps-text-functions/&quot;&gt;こちらの記事をご覧ください&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;地道な処理ですが、データ整形ができるようになるとアプリの完成度がぐっと上がります。ぜひ試してみてください。&lt;/p&gt;</content:encoded></item><item><title>Power Appsの文字列補間 $&quot;...&quot; とアンパサンド記法の違いを比較</title><link>https://shiminkaihatsu.com/powerapps-string-interpolation/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-string-interpolation/</guid><description>Power Appsの文字列補間 $&quot;...&quot; とアンパサンド記法の違いを比較</description><pubDate>Sun, 22 Mar 2026 11:17:45 GMT</pubDate><content:encoded>&lt;p&gt;Power Appsには文字列を組み立てる方法が2つあります。従来からある &amp;amp; 演算子と、比較的新しい文字列補間（$“…”）です。どちらを使うかで数式の読みやすさが大きく変わります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-string-interpolation01.DE3nzAYA_ZsTeAe.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;アンパサンド記法の基本&quot;&gt;アンパサンド（&amp;amp;）記法の基本&lt;/h2&gt;
&lt;p&gt;&amp;amp; 演算子は以前から使える文字列連結の方法です。文字列と変数や関数の結果を &amp;amp; でつなぎます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;こんにちは、&quot;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; User&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;().FullName &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot;さん。今日は &quot;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; Text&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Today&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(), &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;yyyy/mm/dd&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot; です。&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;シンプルな結合なら問題ありませんが、変数や関数を多く挟むほど &amp;amp; が増えて読みにくくなります。特に条件や変換処理が混ざると、どこが文字列でどこが変数なのか一目で判断しにくくなります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-string-interpolation02.BE9N_qhj_ZjPKsz.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;文字列補間の基本&quot;&gt;文字列補間（$“…”）の基本&lt;/h2&gt;
&lt;p&gt;文字列補間は、文字列の中に波括弧 {} で変数や式を埋め込む書き方です。C#やJavaScriptのテンプレートリテラルに近い構文です。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;こんにちは、{User().FullName}さん。今日は {Text(Today(), &quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;yyyy&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;mm&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;dd&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;)} です。&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;先ほどの &amp;amp; 記法と全く同じ結果になりますが、全体が1本の文字列として見え、変数や式の挿入箇所が {} で明確に示されます。私は社内の勉強会でPower Appsを教える立場ですが、文字列補間は初心者にも直感的に伝わりやすいと感じています。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-string-interpolation03.Cu_zuWks_1BNKUe.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;どちらを使うべきか比較&quot;&gt;どちらを使うべきか比較&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&amp;amp; 演算子&lt;/th&gt;
&lt;th&gt;文字列補間 $“…”&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;可読性&lt;/td&gt;
&lt;td&gt;変数が増えると読みにくい&lt;/td&gt;
&lt;td&gt;全体が1文字列として読める&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;対応バージョン&lt;/td&gt;
&lt;td&gt;全バージョン&lt;/td&gt;
&lt;td&gt;Power Apps 2022年11月以降&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;波括弧 {} の扱い&lt;/td&gt;
&lt;td&gt;不要&lt;/td&gt;
&lt;td&gt;{ } 自体を出力したいときは {{ }} と書く&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ネスト&lt;/td&gt;
&lt;td&gt;関数が増えると煩雑&lt;/td&gt;
&lt;td&gt;{ } の中に関数・条件式を書ける&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;現在の環境が文字列補間をサポートしている場合は、積極的に使うことをおすすめします。特に動的なメッセージを組み立てる場面では、読みやすさが保守性に直結します。&lt;/p&gt;
&lt;h2 id=&quot;実例3パターン&quot;&gt;実例3パターン&lt;/h2&gt;
&lt;h3 id=&quot;通知メッセージの組み立て&quot;&gt;通知メッセージの組み立て&lt;/h3&gt;
&lt;p&gt;ボタンを押したときに承認依頼のメッセージをNotify関数で表示する場面です。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// &amp;#x26; 演算子&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Notify&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;申請番号 &quot;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; TextInput_AppNo.Text &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot; を提出しました。担当者: &quot;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; varAssigneeName, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;NotificationType.Success&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 文字列補間&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Notify&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;($&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;申請番号 {TextInput_AppNo.Text} を提出しました。担当者: {varAssigneeName}&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;NotificationType.Success&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;文字列補間のほうが「どこが変数か」が一目でわかります。IfやSwitchの中で使う場合も同様で、数式全体がすっきりします。Ifの使い方は&lt;a href=&quot;/powerapps-if-switch/&quot;&gt;こちらの記事&lt;/a&gt;を参照してください。&lt;/p&gt;
&lt;h3 id=&quot;with関数と組み合わせて複雑な式を整理する&quot;&gt;With関数と組み合わせて複雑な式を整理する&lt;/h3&gt;
&lt;p&gt;計算結果を文字列に埋め込む場合、Withで中間値を変数として持つと式が整理されます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;With&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        taxRate: &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;0.1&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        subtotal: varItemPrice &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; varQuantity&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    $&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;小計: {subtotal}円、消費税: {subtotal * taxRate}円、合計: {subtotal * (1 + taxRate)}円&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Withを使った数式整理については&lt;a href=&quot;/powerapps-with/&quot;&gt;こちらの記事&lt;/a&gt;で詳しく説明しています。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-string-interpolation04.D1IO30BX_NyCma.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;named-formulasと組み合わせて再利用する&quot;&gt;Named Formulasと組み合わせて再利用する&lt;/h3&gt;
&lt;p&gt;よく使うメッセージテンプレートをNamed Formulas（名前付き数式）に定義しておくと、アプリ内の複数の画面から同じ文字列補間式を呼び出せます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// App.Formulasに定義&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;WelcomeMsg &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; $&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;ようこそ、{User().FullName}さん&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;名前付き数式についての詳細は別記事で解説予定です。&lt;/p&gt;
&lt;h2 id=&quot;波括弧そのものを出力したいとき&quot;&gt;波括弧そのものを出力したいとき&lt;/h2&gt;
&lt;p&gt;$“…” の中で { や } という文字そのものを表示したい場合は、{{ または }} と2つ重ねて書きます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;JSONの例: {{key: value}}&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 結果：JSONの例: {key: value}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-string-interpolation05.DdQgAc4H_Z58jzP.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;文字列補間は一度使い始めると、&amp;amp; 演算子には戻りにくくなります。数式が短くなるわけではありませんが、読みやすさが上がることで見直しやメンテナンスが楽になります。&lt;/p&gt;
&lt;p&gt;テーブルをまとめて1本の文字列にしたい場合はConcat関数が必要です。Concatと文字列補間の使い分けは、個々の変数を埋め込むか、テーブルの行をつなぎ合わせるかで判断してください。Concatの使い方は&lt;a href=&quot;/powerapps-concat/&quot;&gt;こちらの記事をご覧ください&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;Power Appsのその他のテキスト関数についての完全ガイドは&lt;a href=&quot;/powerapps-text-functions/&quot;&gt;こちらの記事をご覧ください&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;書き方を変えるだけで数式の見通しがぐっと良くなります。ぜひ取り入れてみてください。&lt;/p&gt;</content:encoded></item><item><title>Power Appsテキスト関数 完全ガイド｜Split・Mid・Trimなど10関数を解説</title><link>https://shiminkaihatsu.com/powerapps-text-functions/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-text-functions/</guid><description>Power Appsテキスト関数 完全ガイド｜Split・Mid・Trimなど10関数を解説</description><pubDate>Sun, 22 Mar 2026 11:17:22 GMT</pubDate><content:encoded>&lt;p&gt;Power Appsでデータを整形・加工するために欠かせないテキスト関数を1記事にまとめました。スペース除去・文字列置換・切り出し・変換・結合まで、実務でよく使う10関数を用途別に解説します。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-text-functions01.Btfga3rt_Z1lHEY9.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;なぜテキスト関数が必要なのか&quot;&gt;なぜテキスト関数が必要なのか&lt;/h2&gt;
&lt;p&gt;SharePointリストや入力フォームから取得したデータは、そのまま使えない形式であることが多いです。末尾にスペースが混入している、大文字小文字が統一されていない、コードの一部だけ取り出したい、複数の値を1本の文字列にまとめたい。こうした整形・加工の場面でテキスト関数が必要になります。&lt;/p&gt;
&lt;p&gt;社内でPower Appsを教えていると、数式の書き方よりも「どの関数を使えばいいかわからない」という声のほうが多いです。この記事では用途別に整理したので、目的に合った関数を探す際の参考にしてください。&lt;/p&gt;
&lt;p&gt;Power Apps開発の全体像については&lt;a href=&quot;/app-development-map/&quot;&gt;こちらの記事&lt;/a&gt;もご覧ください。&lt;/p&gt;
&lt;h2 id=&quot;スペース除去trimとtrimends&quot;&gt;スペース除去：TrimとTrimEnds&lt;/h2&gt;
&lt;p&gt;文字列の両端や文字間の余分なスペースを取り除く関数です。入力フォームからデータを受け取るときに最初にかませる習慣をつけると、比較ミスや保存データの不整合を防げます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Trim：先頭・末尾のスペースを除去し、文字間の連続スペースも1つに圧縮&lt;/li&gt;
&lt;li&gt;TrimEnds：先頭と末尾のスペースのみ除去（文字間のスペースはそのまま）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;IfやFilterの条件が通らない原因の多くはスペース混入です。詳しい使い方と実例は&lt;a href=&quot;/powerapps-trim/&quot;&gt;こちらの記事&lt;/a&gt;で解説しています。&lt;/p&gt;
&lt;h2 id=&quot;文字列置換replaceとsubstitute&quot;&gt;文字列置換：ReplaceとSubstitute&lt;/h2&gt;
&lt;p&gt;文字列の一部を別の文字列に置き換える関数です。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Replace：開始位置と文字数を指定して置換（固定長コード向け）&lt;/li&gt;
&lt;li&gt;Substitute：置き換えたい文字列を指定して置換（動的データ向け）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;迷ったらSubstituteを選ぶのが基本です。Replaceが必要になるのは、データの文字位置が完全に固定されている場合に限ります。詳しくは&lt;a href=&quot;/powerapps-replace-substitute/&quot;&gt;こちらの記事&lt;/a&gt;をご覧ください。&lt;/p&gt;
&lt;h2 id=&quot;大文字小文字の変換upperlowerproper&quot;&gt;大文字小文字の変換：Upper・Lower・Proper&lt;/h2&gt;
&lt;p&gt;Power Appsの文字列比較は大文字小文字を区別します。比較前にLowerで統一しておくと、ケース違いによるミスマッチを防げます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Upper：すべて大文字に変換&lt;/li&gt;
&lt;li&gt;Lower：すべて小文字に変換（比較・検索前の前処理に使う）&lt;/li&gt;
&lt;li&gt;Proper：先頭だけ大文字、残りを小文字に変換（人名・地名の表示整形向け）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;User().Emailとリストのメールアドレスを比較する場面で特に役立ちます。詳しくは&lt;a href=&quot;/powerapps-upper-lower/&quot;&gt;こちらの記事&lt;/a&gt;で解説しています。&lt;/p&gt;
&lt;h2 id=&quot;文字列の切り出しleftrightmidfind&quot;&gt;文字列の切り出し：Left・Right・Mid・Find&lt;/h2&gt;
&lt;p&gt;文字列の特定の部分を取り出す関数です。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Left：先頭からn文字を取り出す（固定長コードの先頭部分向け）&lt;/li&gt;
&lt;li&gt;Right：末尾からn文字を取り出す（請求番号の末尾桁向け）&lt;/li&gt;
&lt;li&gt;Mid：指定した位置からn文字を取り出す（区切り文字の間の値向け）&lt;/li&gt;
&lt;li&gt;Find：指定した文字列が何文字目にあるかを返す（Midと組み合わせて使う）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;文字の位置が固定されているならLeft・Right、位置が変わりうるならMidとFindを組み合わせます。Left・Rightは&lt;a href=&quot;/powerapps-left-right/&quot;&gt;こちら&lt;/a&gt;、MidとFindの組み合わせは&lt;a href=&quot;/powerapps-mid-find/&quot;&gt;こちらの記事&lt;/a&gt;で詳しく解説しています。&lt;/p&gt;
&lt;h2 id=&quot;文字列の分割と要素取り出しsplitfirstlastindex&quot;&gt;文字列の分割と要素取り出し：Split・First・Last・Index&lt;/h2&gt;
&lt;p&gt;カンマやスラッシュで区切られた文字列をテーブルに分割し、特定の要素を取り出す組み合わせです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Split：区切り文字で文字列を分割し、テーブルとして返す&lt;/li&gt;
&lt;li&gt;First：テーブルの先頭行を返す&lt;/li&gt;
&lt;li&gt;Last：テーブルの末尾行を返す&lt;/li&gt;
&lt;li&gt;Index：テーブルのn番目の行を返す&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;「田中, 太郎」という形式の氏名を「太郎 田中」に組み替える、スラッシュ区切りのパスから任意の要素を取り出す、といった場面で使います。Split・First・Lastの使い方は&lt;a href=&quot;/powerapps-split-name/&quot;&gt;こちら&lt;/a&gt;、Indexの使い方は&lt;a href=&quot;/powerapps-index/&quot;&gt;こちらの記事&lt;/a&gt;をご覧ください。&lt;/p&gt;
&lt;h2 id=&quot;文字列の結合concat文字列補間-&quot;&gt;文字列の結合：Concat・文字列補間 $“…”&lt;/h2&gt;
&lt;p&gt;複数の値をまとめて1本の文字列にする方法です。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Concat：テーブルの各行を結合して1本の文字列にする（コンボボックスの複数選択をメール宛先にするなど）&lt;/li&gt;
&lt;li&gt;文字列補間 $“…”：文字列の中に変数や式を直接埋め込む（可読性が高く、動的なメッセージ組み立てに向く）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;単純な2〜3個の固定値の連結には &amp;amp; 演算子で十分ですが、テーブルの内容を結合するときはConcat、変数を埋め込む場面では文字列補間が使いやすいです。Concatは&lt;a href=&quot;/powerapps-concat/&quot;&gt;こちら&lt;/a&gt;、文字列補間は&lt;a href=&quot;/powerapps-string-interpolation/&quot;&gt;こちらの記事&lt;/a&gt;で解説しています。&lt;/p&gt;
&lt;h2 id=&quot;文字数カウントlen&quot;&gt;文字数カウント：Len&lt;/h2&gt;
&lt;p&gt;文字列の文字数を返す関数です。単独ではほとんど使わず、Ifによるバリデーション・残り文字数の表示・MidやRightの引数計算などと組み合わせて使います。詳しくは&lt;a href=&quot;/powerapps-len/&quot;&gt;こちらの記事&lt;/a&gt;をご覧ください。&lt;/p&gt;
&lt;h2 id=&quot;テキスト関数を組み合わせる実例&quot;&gt;テキスト関数を組み合わせる実例&lt;/h2&gt;
&lt;p&gt;実務では複数のテキスト関数を組み合わせて使います。たとえばSharePointリストに保存されたメールアドレスと、フォームで入力されたメールアドレスを比較する場合、次のように処理します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    社員リスト,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Lower&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;TrimEnds&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(メール)) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; Lower&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;TrimEnds&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(TextInput_Email.Text))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;TrimEndsでスペースを除去してから、Lowerで大文字小文字を統一して比較します。この2ステップを習慣にするだけで、データ不一致の原因のほとんどは解消できます。&lt;/p&gt;
&lt;p&gt;FilterやSearchとの組み合わせについては&lt;a href=&quot;/powerapps-filter-search-lookup/&quot;&gt;こちらの記事&lt;/a&gt;、Ifとの組み合わせは&lt;a href=&quot;/powerapps-if-switch/&quot;&gt;こちらの記事&lt;/a&gt;を参考にしてください。Withを使った数式の整理については&lt;a href=&quot;/powerapps-with/&quot;&gt;こちら&lt;/a&gt;、変数への格納については&lt;a href=&quot;/powerapps-variables/&quot;&gt;こちら&lt;/a&gt;もあわせてご覧ください。&lt;/p&gt;
&lt;h2 id=&quot;まとめ用途別の関数選択ガイド&quot;&gt;まとめ：用途別の関数選択ガイド&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;やりたいこと&lt;/th&gt;
&lt;th&gt;使う関数&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/powerapps-trim/&quot;&gt;スペースを取り除く&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;TrimEnds（端のみ）/ Trim（全体）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/powerapps-replace-substitute/&quot;&gt;文字列を置き換える&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Substitute（通常）/ Replace（固定位置）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/powerapps-upper-lower/&quot;&gt;大文字小文字を統一する&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Lower（比較前）/ Proper（表示整形）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/powerapps-left-right/&quot;&gt;先頭・末尾を切り出す&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Left / Right&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/powerapps-mid-find/&quot;&gt;中間を動的に切り出す&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Mid + Find&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;区切り文字で分割する&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/powerapps-split-name/&quot;&gt;Split + First / Last&lt;/a&gt; / &lt;a href=&quot;/powerapps-index/&quot;&gt;Index&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/powerapps-concat/&quot;&gt;テーブルを文字列に結合する&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Concat&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/powerapps-string-interpolation/&quot;&gt;変数を文字列に埋め込む&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;文字列補間 $“…”&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/powerapps-len/&quot;&gt;文字数を調べる&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Len（Ifや他の関数と組み合わせて）&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;テキスト関数は地味に見えますが、データ整形の精度がアプリの信頼性に直結します。1つずつ手に馴染ませていきましょう。&lt;/p&gt;</content:encoded></item><item><title>Power Appsでスペース混入バグを防ぐ｜TrimとTrimEndsの使い方</title><link>https://shiminkaihatsu.com/powerapps-trim/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-trim/</guid><description>Power Appsでスペース混入バグを防ぐ｜TrimとTrimEndsの使い方</description><pubDate>Sun, 22 Mar 2026 11:17:25 GMT</pubDate><content:encoded>&lt;p&gt;数式は正しいのに、Ifが通らない。FilterでSharePointのデータがヒットしない。こういった謎のバグの犯人は、ほとんどの場合スペースです。TrimとTrimEndsを覚えておくだけで、この種のトラブルを大幅に減らせます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-trim01.D1YGTLIs_xzEFY.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;スペース1文字が引き起こすバグの仕組み&quot;&gt;スペース1文字が引き起こすバグの仕組み&lt;/h2&gt;
&lt;p&gt;Power Appsの文字列比較は、スペース1文字の差でも別の値として扱います。たとえば「田中」と「田中　」（末尾にスペース）は、見た目がほぼ同じでも完全に別の文字列です。IfやSwitchの条件式でFalseが返るとき、数式の書き方ではなくデータ側のスペースを疑ってみてください。&lt;/p&gt;
&lt;p&gt;私が最初にこれで詰まったのは、SharePointリストのデータをLookUpで検索していたときのことです。画面上は同じ値なのに一致しない。数式を何度見直しても問題がない。ようやく判明した原因は、SharePointに登録されたデータの末尾に半角スペースが混入していたことでした。入力フォームのテキスト入力コントロールはスペースをそのまま渡すため、入力者が気づかずスペースを含めてしまうことが多いのです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-trim02.Cy2UYsDb_1CL9Q9.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;trimとtrimendsの違い&quot;&gt;TrimとTrimEndsの違い&lt;/h2&gt;
&lt;p&gt;Power Appsにはスペースを除去する関数が2種類あります。まず両者の違いを整理しておきましょう。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;関数&lt;/th&gt;
&lt;th&gt;除去する対象&lt;/th&gt;
&lt;th&gt;主な用途&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Trim&lt;/td&gt;
&lt;td&gt;先頭・末尾のスペース＋文字間の連続スペースを1つに圧縮&lt;/td&gt;
&lt;td&gt;氏名・住所など文字間も整えたいとき&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TrimEnds&lt;/td&gt;
&lt;td&gt;先頭と末尾のスペースのみ&lt;/td&gt;
&lt;td&gt;テキスト入力の値を受け取るとき&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Trimは文字列の両端に加えて、文中の連続スペースも1つに詰めます。たとえば「山　　田」（スペース2つ）は「山 田」（スペース1つ）に変換されます。一方、TrimEndsは両端だけを除去し、文中のスペースはそのまま保持します。氏名や住所のように文中のスペースに意味がある場合は、TrimEndsのほうが安全です。&lt;/p&gt;
&lt;h2 id=&quot;実例3パターン&quot;&gt;実例3パターン&lt;/h2&gt;
&lt;h3 id=&quot;テキスト入力の末尾スペースでifが通らない&quot;&gt;テキスト入力の末尾スペースでIfが通らない&lt;/h3&gt;
&lt;p&gt;入力フォームで名前を入力し、特定の値と一致したときにメッセージを表示する場面です。テキスト入力コントロールからそのまま値を取得すると、ユーザーが気づかず末尾にスペースを入れた場合にIfが通らなくなります。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    TrimEnds&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(TextInput1.Text) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot;田中太郎&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;    &quot;一致しました&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;    &quot;一致しません&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;TextInput1.Textをそのまま比較するのではなく、TrimEndsで両端を整えてから比較します。Ifの使い方については&lt;a href=&quot;/powerapps-if-switch/&quot;&gt;Power AppsのIfとSwitch&lt;/a&gt;で詳しく解説しています。&lt;/p&gt;
&lt;h3 id=&quot;sharepointデータとの比較失敗&quot;&gt;SharePointデータとの比較失敗&lt;/h3&gt;
&lt;p&gt;SharePointリストのデータを検索フィールドの入力値で絞り込む場面です。Filterでヒットしない原因の多くは、片方のデータにスペースが混入しています。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    社員リスト,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    TrimEnds&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(氏名) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; TrimEnds&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(TextInput_Search.Text)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;検索フィールドの値だけでなく、SharePointリスト側の列にもTrimEndsをかけておくと確実です。特に人の手で登録されたデータはスペース混入が起きやすい傾向があります。FilterやSearchの使い方は&lt;a href=&quot;/powerapps-filter-search-lookup/&quot;&gt;Power AppsのFilter・Search・LookUp関数&lt;/a&gt;にまとめています。&lt;/p&gt;
&lt;h3 id=&quot;sharepoint保存時にtrimをかけておく&quot;&gt;SharePoint保存時にTrimをかけておく&lt;/h3&gt;
&lt;p&gt;Patch関数でSharePointリストにデータを書き込む際、入力値をそのまま渡すとスペース混入がリストに蓄積されていきます。Patchの時点でTrimEndsを一枚かませておくと、後工程での問題を防げます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Patch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    社員リスト,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Defaults&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(社員リスト),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        氏名: &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;TrimEnds&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(TextInput_Name.Text),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        部署: &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;TrimEnds&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(TextInput_Dept.Text)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;SharePointリストへの読み書きの基本は&lt;a href=&quot;/powerapps-sharepoint-crud/&quot;&gt;Power AppsでSharePointリストのデータを読み書きする&lt;/a&gt;で解説しています。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-trim03.D90Biifl_Z2eSijG.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;よくある間違いtrimしたつもりが変数に入れ忘れ&quot;&gt;よくある間違い：Trimしたつもりが変数に入れ忘れ&lt;/h2&gt;
&lt;p&gt;Trimをかけたのに効いていない、というときに多いのが、Trimした結果をどこにも使えていないパターンです。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 間違い例：Trimの結果が捨てられている&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Trim&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(TextInput1.Text);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Set&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(varName, TextInput1.Text);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 正しい例：Trimした値を変数に入れる&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Set&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(varName, &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Trim&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(TextInput1.Text));&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Trimは新しいテキスト値を返す関数であり、元のコントロールの値を書き換えるわけではありません。戻り値を変数に格納するか、比較式の中で直接使いましょう。OnButtonPressなど複数の処理をまとめて書くとき、この間違いが発生しやすいので注意が必要です。&lt;/p&gt;
&lt;h2 id=&quot;まとめ入力を受け取るときは常にtrimends&quot;&gt;まとめ：入力を受け取るときは常にTrimEnds&lt;/h2&gt;
&lt;p&gt;テキスト入力コントロールからユーザーの入力を受け取るときは、常にTrimEndsを1枚かませる。これを習慣にしておくだけで、スペース起因のバグに悩む機会を大幅に減らせます。&lt;/p&gt;
&lt;p&gt;Trimは文字間まで整えたいとき、TrimEndsは末尾スペースだけ取り除きたいときと使い分けてください。ほとんどのケースではTrimEndsで十分対応できます。&lt;/p&gt;
&lt;p&gt;大文字小文字の違いも同様に比較結果を狂わせます。その対策については、Upper・Lower・Properの使い方として別記事で解説する予定です。&lt;/p&gt;
&lt;p&gt;Power Appsのその他のテキスト関数についての完全ガイドは&lt;a href=&quot;/powerapps-text-functions/&quot;&gt;こちらの記事をご覧ください&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;地道な一手間ですが、こういった処理を積み重ねることが、信頼できるアプリにつながります。ぜひ習慣にしてみてください。&lt;/p&gt;</content:encoded></item><item><title>Power Apps の型変換エラーを解消する｜Text・Value・DateValue・Boolean関数の使い方</title><link>https://shiminkaihatsu.com/powerapps-type-conversion/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-type-conversion/</guid><description>Power Appsでよく出る型エラーを、Value・Text・DateValue・Boolean関数で解消する方法を解説します。SharePointリストとのデータ連携やPatchでの書き込み時の型ミスマッチ対策も整理します。</description><pubDate>Sat, 18 Apr 2026 08:45:34 GMT</pubDate><content:encoded>&lt;p&gt;Power Appsでは、数値・テキスト・日付・Boolean（true/false）はそれぞれ別の型として厳格に管理されています。型が合わない値を渡すと式がエラーになります。&lt;/p&gt;
&lt;h2 id=&quot;power-appsが型に厳しい理由&quot;&gt;Power Appsが型に厳しい理由&lt;/h2&gt;
&lt;p&gt;Power Appsの数式エンジンは、値の種類（型）を常に意識して動いています。Excelなら数値に見えればそのまま計算してくれることが多いですが、Power Appsでは各データの型を厳密に区別します。&lt;/p&gt;
&lt;p&gt;テキスト入力コントロールに入力した値は、数字に見えても型はテキスト（Text）です。そのまま計算式に使おうとすると、型の不一致を検知してエラーが出ます。数式バーに赤いアンダーラインが引かれ、マウスを乗せると Expected Number value のようなエラーメッセージが表示されます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-type-conversion01.DTevI99S_Z2d7YVn.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;p&gt;なぜこういう設計になっているかというと、Power Appsはデータベースと接続して動くツールだからです。SharePointの列はそれぞれ一行テキスト・数値・日付と時刻などの型が定義されていますし、その型に合わない値を保存しようとするとPatchが失敗します。型を意識する習慣は、アプリを安定させる上で欠かせません。&lt;/p&gt;
&lt;h2 id=&quot;型の種類6種類を把握する&quot;&gt;型の種類：6種類を把握する&lt;/h2&gt;
&lt;p&gt;Power Appsで扱う型は主に以下の6種類です。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;型&lt;/th&gt;
&lt;th&gt;説明&lt;/th&gt;
&lt;th&gt;代表的な場所&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Text（テキスト）&lt;/td&gt;
&lt;td&gt;文字列&lt;/td&gt;
&lt;td&gt;テキスト入力・一行テキスト列・ラベル&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Number（数値）&lt;/td&gt;
&lt;td&gt;整数・小数&lt;/td&gt;
&lt;td&gt;数値入力・数値列・計算結果&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Date/Time（日付）&lt;/td&gt;
&lt;td&gt;日付・時刻&lt;/td&gt;
&lt;td&gt;日付入力・日付列・Today()&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Boolean（真偽値）&lt;/td&gt;
&lt;td&gt;true/false&lt;/td&gt;
&lt;td&gt;チェックボックス・はい/いいえ列&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Record（レコード）&lt;/td&gt;
&lt;td&gt;1行分のデータ&lt;/td&gt;
&lt;td&gt;Gallery.Selected・Patch の引数&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Table（テーブル）&lt;/td&gt;
&lt;td&gt;複数行のデータ&lt;/td&gt;
&lt;td&gt;コレクション・Filter の結果&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;初心者がよくハマるのは、Text・Number・Dateの3種類の間での変換です。特にSharePointのテキスト列に数値っぽい値が入っているケースが多く、私自身も最初の頃は変換が必要だとわかっておらずよく詰まっていました。Record型とTable型は、PatchやFilter関数を使うときに意識することになります。&lt;/p&gt;
&lt;h2 id=&quot;よくある型ミスマッチのパターン&quot;&gt;よくある型ミスマッチのパターン&lt;/h2&gt;
&lt;h3 id=&quot;テキスト列に入った数値を計算したい&quot;&gt;テキスト列に入った数値を計算したい&lt;/h3&gt;
&lt;p&gt;SharePointのテキスト列には、設定次第で数字が入ることがあります。それを計算しようとすると型エラーになります。解決策は Value() 関数でテキストを数値に変換することです。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Value&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(TextInput1.Text) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 100&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Value&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(項目.テキスト列名) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 0.8&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-type-conversion02.B0l-rok__hXEtp.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;p&gt;Value() はテキストを数値に変換します。変換できない文字列が入っていた場合は実行時エラーになります。不正な入力への対策は IfError(Value(入力値), 0) のように書くと安全です。&lt;/p&gt;
&lt;h3 id=&quot;数値をラベルやテキストに表示したい&quot;&gt;数値をラベルやテキストに表示したい&lt;/h3&gt;
&lt;p&gt;数値をそのままラベルのTextプロパティに渡すと、型の不一致でエラーになります。Text() 関数で文字列に変換します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Text&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;100&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)                    &lt;/span&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// &quot;100&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Text&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(SumResult, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;0.00&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)      &lt;/span&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 小数点2桁で表示&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Text&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;99.5&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; /&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 100&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;0%&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)      &lt;/span&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// パーセント表示&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;書式文字列を指定することで、表示形式も同時に制御できます。数値列を合計してラベルに表示する場面では Text(Sum(コレクション, 数値列), “#,##0”) のように書くと、カンマ区切りで表示されます。書式文字列はExcelと同じ形式が使えるので、Excel経験者はスムーズに理解できます。&lt;/p&gt;
&lt;h3 id=&quot;日付をテキストとして扱いたい&quot;&gt;日付をテキストとして扱いたい&lt;/h3&gt;
&lt;p&gt;日付型の値をテキスト連結（&amp;amp;）に使おうとするとエラーになります。Text() 関数で書式文字列を指定して変換します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;申請日：&quot;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; Text&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Today&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(), &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;yyyy/mm/dd&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;〆切：&quot;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; Text&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;DateValue&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;2026-05-31&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;), &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;yyyy年mm月dd日&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-type-conversion03.p4as7LF7_1caxaT.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;670&quot;&gt;&lt;/p&gt;
&lt;p&gt;逆に、テキスト形式の日付文字列をDate型として扱いたいときは DateValue() を使います。SharePointの日付列はすでにDate型なので変換不要ですが、テキスト入力から日付を受け取るケースでは必要になります。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;DateValue&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(TextInput1.Text)                             &lt;/span&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// &quot;2026/04/13&quot; → Date型&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;DateAdd&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;DateValue&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(TextInput1.Text), &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;30&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;TimeUnit.Days&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 30日後を計算&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;日付の入力はDatePickerコントロールを使うと最初からDate型で受け取れるため、型変換が不要になります。テキスト入力で日付を受け取るよりも、DatePickerを使う設計のほうが式がシンプルになります。&lt;/p&gt;
&lt;h3 id=&quot;boolean型の変換&quot;&gt;Boolean型の変換&lt;/h3&gt;
&lt;p&gt;チェックボックスの値はBoolean（true/false）です。これをテキストとして表示したい場合や、文字列のtrueやfalseをBoolean型に変換したい場面があります。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// Boolean → テキスト（条件分岐で対応）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(Checkbox1.Value, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;対象&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;対象外&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// テキスト → Boolean&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Boolean&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;true&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)      &lt;/span&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Boolean&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;false&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)     &lt;/span&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// false&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Boolean&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;yes&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)       &lt;/span&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// true&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;SharePointのはい/いいえ列はすでにBoolean型なので、条件式では If(項目.はい列, …) のように直接使えます。変換が必要になるのは、テキスト列に文字列としてtrueが入っているケースや、外部APIから文字列で受け取るケースです。体感的にBoolean変換が必要になる頻度はText・Number・Dateと比べて少ないですが、知っておくと詰まったときに素早く対処できます。&lt;/p&gt;
&lt;h2 id=&quot;変換関数チートシート&quot;&gt;変換関数チートシート&lt;/h2&gt;
&lt;p&gt;よく使う変換関数をまとめます。この表を手元に置いておくと、エラーが出たときにどの関数を使うか迷わなくなります。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;変換したい方向&lt;/th&gt;
&lt;th&gt;関数&lt;/th&gt;
&lt;th&gt;例&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Text → Number&lt;/td&gt;
&lt;td&gt;Value()&lt;/td&gt;
&lt;td&gt;Value(“42”) → 42&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Number → Text&lt;/td&gt;
&lt;td&gt;Text()&lt;/td&gt;
&lt;td&gt;Text(42) → “42”&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Number → Text（書式あり）&lt;/td&gt;
&lt;td&gt;Text(値, 書式)&lt;/td&gt;
&lt;td&gt;Text(3.14, “0.00”) → “3.14”&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Text → Date&lt;/td&gt;
&lt;td&gt;DateValue()&lt;/td&gt;
&lt;td&gt;DateValue(“2026/04/13”) → Date&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Date → Text&lt;/td&gt;
&lt;td&gt;Text(日付, “書式”)&lt;/td&gt;
&lt;td&gt;Text(Today(), “yyyy/mm/dd”) → “2026/04/13”&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Text → Boolean&lt;/td&gt;
&lt;td&gt;Boolean()&lt;/td&gt;
&lt;td&gt;Boolean(“true”) → true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Boolean → Text&lt;/td&gt;
&lt;td&gt;If(値, “はい”, “いいえ”)&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Number → Text（パーセント）&lt;/td&gt;
&lt;td&gt;Text(値, “0%”)&lt;/td&gt;
&lt;td&gt;Text(0.8, “0%”) → “80%”&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;patch関数で型を意識する場面&quot;&gt;Patch関数で型を意識する場面&lt;/h2&gt;
&lt;p&gt;型変換の知識が最も役立つのは、&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-patch-function/&quot;&gt;Patch関数でSharePointリストにデータを書き込む&lt;/a&gt;場面です。列の型と渡す値の型が一致していないと、Patchは実行時エラーになります。&lt;/p&gt;
&lt;p&gt;特に注意が必要なのは次の2点です。テキスト入力の値を数値列に書き込む場合は Value(TextInput.Text) で変換してから渡します。日付の場合、DatePickerコントロールならDate型なのでそのまま使えますが、テキスト入力で受け取った場合は DateValue() で変換が必要です。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-patch-new-record/&quot;&gt;Patch関数で新規レコードを作成するときの列ごとの書き方&lt;/a&gt;では、各列型に合わせた値の指定パターンを整理しています。型変換を組み合わせると式が複雑になりますが、それぞれの関数の役割を理解しておくと対処できます。&lt;/p&gt;
&lt;h3 id=&quot;型が合わないときの確認手順&quot;&gt;型が合わないときの確認手順&lt;/h3&gt;
&lt;p&gt;型エラーが発生したときは、次の手順で確認します。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;エラーメッセージを読む（Expected Text / Expected Number / Incompatible types のいずれか）&lt;/li&gt;
&lt;li&gt;エラーが出ている式で使っている値の型を確認する（コントロールの種類・SharePointの列型）&lt;/li&gt;
&lt;li&gt;型が合っていない部分に Text / Value / DateValue を挿入して変換する&lt;/li&gt;
&lt;li&gt;保存して動作確認する&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-type-conversion04.CufUDaW9_1vBK7O.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;670&quot;&gt;&lt;/p&gt;
&lt;p&gt;型エラーのメッセージの意味を知っておくと、エラーが出てもどこを直せばいいかがすぐわかります。&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-error-guide/&quot;&gt;Power Appsのエラー解決マップ&lt;/a&gt;では、型エラーを含むよくあるエラーパターンの全体像を整理しています。型変換だけでなく、エラー対処の引き出しをまとめて増やしておくと開発が格段にスムーズになります。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;Power Appsの型変換は、最初は面倒に感じるかもしれません。ですが、Value・Text・DateValueの3つを押さえるだけで、日常的な型エラーの大半はカバーできます。&lt;/p&gt;
&lt;p&gt;SharePointリストを使って業務アプリを作ると、テキスト列・数値列・日付列を混在して扱う場面が必ず出てきます。そのたびに型変換を意識する癖をつけておくと、Patchエラーや表示のズレに悩まされることが減ります。地道に積み上げていきましょう。&lt;/p&gt;</content:encoded></item><item><title>Power Appsは見た目と使いやすさにこだわって開発すべし</title><link>https://shiminkaihatsu.com/powerapps-uiux/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-uiux/</guid><description>Power Appsは見た目と使いやすさにこだわって開発すべし</description><pubDate>Sun, 20 Oct 2024 15:44:29 GMT</pubDate><content:encoded>&lt;p&gt;Power Apps でのアプリ作成は見た目と使いやすさが極めて重要です。&lt;/p&gt;
&lt;h2 id=&quot;その理由&quot;&gt;その理由&lt;/h2&gt;
&lt;p&gt;見た目が悪いとユーザーの気分が萎えます。&lt;/p&gt;
&lt;p&gt;同じ色、同じレイアウトだと飽きられます。&lt;/p&gt;
&lt;p&gt;使い勝手が悪いとアプリは使われなくなります。&lt;/p&gt;
&lt;p&gt;つまり、&lt;em&gt;ユーザー目線に立った開発が何よりも大切&lt;/em&gt;ということです。&lt;/p&gt;
&lt;h2 id=&quot;業務用なので機能重視なのでは&quot;&gt;業務用なので機能重視なのでは？&lt;/h2&gt;
&lt;p&gt;こういう声が聞こえてきそうですが、半分正解、半分間違いです。&lt;/p&gt;
&lt;p&gt;例えばVBAマクロやPythonは機能が全てで、意図した操作が正しく完了することを求められます。&lt;/p&gt;
&lt;p&gt;一方 Power Apps は、機能面はもちろんですが、ユーザーが実際にアプリに触れて操作・入力することを忘れてはいけません。&lt;/p&gt;
&lt;p&gt;ギャラリーコントロールとボタンを並べました、はい皆さん使ってくださいねでは不十分で、ユーザー目線で使いやすさとわかりやすさを考える必要があります。&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-gallery/&quot;&gt;ギャラリーコントロールの使い方&lt;/a&gt;もあわせて参考にしてください。&lt;/p&gt;
&lt;p&gt;アプリ開発はそれ自体が目的ではなく、ユーザーが触れて使うことを忘れてはいけません。&lt;/p&gt;
&lt;p&gt;プロトタイプ（試作品）は機能重視でもいいのですが、本番運用までには見た目と使いやすさにこだわったアプリ、つまりユーザーフレンドリーなアプリに仕上げておくべきです。&lt;/p&gt;
&lt;h2 id=&quot;power-appsの見た目にこだわる&quot;&gt;Power Appsの見た目にこだわる&lt;/h2&gt;
&lt;p&gt;見た目にどうこだわるか紹介します。&lt;/p&gt;
&lt;h3 id=&quot;トンマナを意識する&quot;&gt;トンマナを意識する&lt;/h3&gt;
&lt;p&gt;トーン＆マナー、略してトンマナと呼びます。&lt;/p&gt;
&lt;p&gt;デザインやスタイルに一貫性を持たせることをいい、アプリに統一感を生み出します。&lt;/p&gt;
&lt;p&gt;トンマナを突き詰めるとフォントやサイズ、表現の内容などどこまでも細かくなりますが、市民開発ではまず色味を意識します。&lt;/p&gt;
&lt;p&gt;例えば、コカ・コーラは赤と白、ペプシは赤と青、ポカリスエットは青と白、という具合に、サービスを連想付ける色があり、HPやCMではその色を意識した見せ方をします。&lt;/p&gt;
&lt;p&gt;社内アプリですのでブランディングは不要ですが、せめてコンセプトを決め、テーマカラーを決め、それに合った色で統一しましょう。&lt;/p&gt;
&lt;p&gt;色を決める時は &lt;a href=&quot;https://colorhunt.co/&quot;&gt;&lt;strong&gt;Color Hunt&lt;/strong&gt;&lt;/a&gt; のような配色サイトがおすすめ。&lt;/p&gt;
&lt;p&gt;他にも、あなたの会社のロゴマークの色と揃えるとか、Excelに関するアプリなら緑系統でまとめるとか、テーマに沿って色を決めるといいですね。&lt;/p&gt;
&lt;h3 id=&quot;テーマで色を変える&quot;&gt;テーマで色を変える&lt;/h3&gt;
&lt;p&gt;開発画面上部にある[テーマ]からアプリ全体の色味を変更できます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/appsui1.C-3sEZbE_Z1lDhvh.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;371&quot;&gt;&lt;/p&gt;
&lt;p&gt;標準では[青]になっているので、お好みの色に変更してみましょう。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;左上から時計回りに、青、赤、ローズ、紫&lt;/p&gt;
&lt;p&gt;これだけでも随分垢抜けた印象になります。&lt;/p&gt;
&lt;p&gt;パーツごとに自由に色変更が可能ですが、その場合はFormulaで色を定義することでメンテナンス性の高い仕様になります。&lt;/p&gt;
&lt;h3 id=&quot;コントロールを結ぶ線をなるべく減らす&quot;&gt;コントロールを結ぶ線をなるべく減らす&lt;/h3&gt;
&lt;p&gt;画面内にコントロールを配置する際は端を揃えます。&lt;/p&gt;
&lt;p&gt;ボタンやギャラリーの端がきちんと揃って並んでいるか、画像のように線を結んで確認します。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;左の例は端がバラバラで、線が11本。&lt;/p&gt;
&lt;p&gt;対して右の例は端を揃えて線が6本。&lt;/p&gt;
&lt;p&gt;右のほうがレイアウトがすっきりしています。&lt;/p&gt;
&lt;p&gt;一応私は社内で教える立場なので人のアプリをよく目にしますが、実際コントロールがガタガタになっている例をよく見ます。&lt;/p&gt;
&lt;p&gt;線を減らすことを意識してアプリを見直しましょう。&lt;/p&gt;
&lt;h3 id=&quot;丸みを取り入れる&quot;&gt;丸みを取り入れる&lt;/h3&gt;
&lt;p&gt;挿入したコントロールは基本的にどれもカクカクしています。&lt;/p&gt;
&lt;p&gt;これにちょっと丸みを入れるだけで雰囲気が柔らかくなります。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;ボタンの形あれこれ&lt;/p&gt;
&lt;p&gt;丸みは[境界半径]のプロパティで設定します。&lt;/p&gt;
&lt;p&gt;角ごとに細かく設定するなら Radius の項目です。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;ここで真円（まんまる）ボタンの作り方を紹介します。&lt;/p&gt;
&lt;p&gt;ボタンの幅と高さを同じ数値にし、Radius の4つの値を Self.Width/2（または Self.Height/2）としましょう。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;h3 id=&quot;余白をつくる&quot;&gt;余白をつくる&lt;/h3&gt;
&lt;p&gt;レイアウトには余白を入れましょう。&lt;/p&gt;
&lt;p&gt;ボタンや項目がギチギチに詰まったアプリは見づらいです。&lt;/p&gt;
&lt;p&gt;ユーザーの直感的な操作を妨げ、直感的に使いづらさを覚えます。&lt;/p&gt;
&lt;p&gt;余白は洗練されたイメージを作り、余裕を与えます。&lt;/p&gt;
&lt;p&gt;ゆったりしたスペースを確保しましょう。&lt;/p&gt;
&lt;h3 id=&quot;無駄を削ぎ落とす&quot;&gt;無駄を削ぎ落とす&lt;/h3&gt;
&lt;p&gt;社員番号、管理番号、登録日など、その情報、本当にアプリに表示させる必要はありますか？&lt;/p&gt;
&lt;p&gt;特にFormコントロールを多用する人にありがちで、ユーザーに不必要な情報が見えてしまっていることがあります。&lt;/p&gt;
&lt;p&gt;ユーザーの判断を迷わせるだけでなく、余白を埋めてしまいかねません。&lt;/p&gt;
&lt;p&gt;設計はあくまでユーザー目線であるべきです。&lt;/p&gt;
&lt;p&gt;不要な情報は載せるべきではありません。&lt;/p&gt;
&lt;h3 id=&quot;画像やアイコンを効果的に使う&quot;&gt;画像やアイコンを効果的に使う&lt;/h3&gt;
&lt;p&gt;画像やアイコンを載せるとアプリが華やかになります。&lt;/p&gt;
&lt;p&gt;画像の多用はアプリが重たくなるので使いすぎには注意。&lt;/p&gt;
&lt;p&gt;SVGは画像が崩れず軽量なので、使える場面は積極的に使いたいですね。&lt;/p&gt;
&lt;p&gt;アイコンはすっきりしたレイアウトを作りますが、直感的に意味が伝わるアイコンを使いましょう。&lt;/p&gt;
&lt;h3 id=&quot;コンテナを使いこなす&quot;&gt;コンテナを使いこなす&lt;/h3&gt;
&lt;p&gt;コンテナは複数のコントロールを1つにまとめる機能です。&lt;/p&gt;
&lt;p&gt;縦並び、横並びをきれいに揃えたり、両端揃えにしたり、割合で大きさを指定します。&lt;/p&gt;
&lt;p&gt;すっきり整列できることはもちろん、動的に配置が変わるため、レスポンシブデザインにコンテナは欠かせません。&lt;/p&gt;
&lt;p&gt;コンテナはクセがある機能ですが、使えるようになるとグッとデザインが洗練されますので、トライしてみましょう。&lt;/p&gt;
&lt;h2 id=&quot;power-appsの使いやすさにこだわる&quot;&gt;Power Appsの使いやすさにこだわる&lt;/h2&gt;
&lt;p&gt;続いて使いやすさにつながる機能面の紹介です。&lt;/p&gt;
&lt;h3 id=&quot;デバイスを意識する&quot;&gt;デバイスを意識する&lt;/h3&gt;
&lt;p&gt;パソコン、タブレット、スマホ。&lt;/p&gt;
&lt;p&gt;アプリはどのデバイスから使われるか意識し、それに合う設計をしましょう。&lt;/p&gt;
&lt;p&gt;パソコン向け・タブレット向けは横画面です。&lt;/p&gt;
&lt;p&gt;スマホ向けは縦画面です。&lt;/p&gt;
&lt;p&gt;縦アプリをパソコンで使っても、違和感はあるものの使えます。&lt;/p&gt;
&lt;p&gt;逆に、横アプリをスマホで見るとスマホ自体を横操作することになり、表示も小さくなるので無理があります。&lt;/p&gt;
&lt;p&gt;つまりスマホ向け縦画面で作っておけば最悪事足りるのですが、使用デバイスを考えることは非常に重要です。&lt;/p&gt;
&lt;h3 id=&quot;使用する場所を意識する&quot;&gt;使用する場所を意識する&lt;/h3&gt;
&lt;p&gt;このアプリはどんな場所で使いますか？&lt;/p&gt;
&lt;p&gt;事務所、作業現場、イベント会場、倉庫、いろいろシーンがあります。&lt;/p&gt;
&lt;p&gt;使用する場所の特徴をよく考慮し、それに合うアプリにしましょう。&lt;/p&gt;
&lt;p&gt;事務作業が多い事務所で使うなら、じっくり腰を据えて使うでしょうから入力項目が多くても大丈夫でしょう（少ないに越したことはありませんが）。&lt;/p&gt;
&lt;p&gt;作業現場で使うなら、わかりやすくシンプルに、ボタンは大きく、挙動は軽く、を意識するでしょう。&lt;/p&gt;
&lt;p&gt;イベント会場なら、人が多くて回線が不安定になりがちなので、画像は使わず挙動の軽さを優先するでしょうか。&lt;/p&gt;
&lt;p&gt;倉庫で検品作業に使うなら、画像を大きく見えやすくするかもしれません。&lt;/p&gt;
&lt;h3 id=&quot;ユーザー属性を意識する&quot;&gt;ユーザー属性を意識する&lt;/h3&gt;
&lt;p&gt;ユーザーの年齢層やデジタル知識のレベル、役割に合わせた設計をしましょう。&lt;/p&gt;
&lt;p&gt;高齢者がユーザーなら、はっきりした色使いでフォントは大きく、難しい言葉遣いを避けます。&lt;/p&gt;
&lt;p&gt;デジタルに抵抗のない人向けのアプリなら、多少説明を省略したりモダンな設計が好まれるでしょう。&lt;/p&gt;
&lt;p&gt;逆にデジタル知識が乏しい人が多ければ、細かな説明を表示し、機能をシンプルにするなど必要です。&lt;/p&gt;
&lt;p&gt;ユーザーの役割に合わせ、入力者と管理者の画面をわける必要があるかもしれません。&lt;/p&gt;
&lt;h3 id=&quot;アクションの前に確認を入れる&quot;&gt;アクションの前に確認を入れる&lt;/h3&gt;
&lt;p&gt;Patch, SubmitForm, Remove などのデータ操作の前には、確認画面を入れましょう。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;これらの確認画面は、一般的に UpdateContext関数で True/Falseを切り替えて使います。&lt;/p&gt;
&lt;p&gt;ボタンの誤操作を防止する役目もありますので、ぜひ導入しましょう。&lt;/p&gt;
&lt;h3 id=&quot;スピナーを使う&quot;&gt;スピナーを使う&lt;/h3&gt;
&lt;p&gt;いわゆるNow Loading…やデータ更新中などを入れましょう。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;こういうやつです&lt;/p&gt;
&lt;p&gt;PatchやSubmitFormを使うと、約1〜2秒かけて更新されます。&lt;/p&gt;
&lt;p&gt;デフォルトでは、アプリの画面上部に申し訳程度のローディングのアイコン（これをスピナーといいます）が出ますが、視認性が悪いです。&lt;/p&gt;
&lt;p&gt;わかりやすいスピナーがあるといいですね。&lt;/p&gt;
&lt;h3 id=&quot;メニューを使う&quot;&gt;メニューを使う&lt;/h3&gt;
&lt;p&gt;メニューバーがあると、ユーザーは直感的に操作しやすくなります。&lt;/p&gt;
&lt;p&gt;スクリーンが複数ある場合、メニューを使うとページ移動しやすくなりますね。複数画面の遷移設計については、&lt;a href=&quot;https://shiminkaihatsu.com/navigate-powerapps/&quot;&gt;Navigate関数を使った画面遷移の記事&lt;/a&gt;も参考にしてください。&lt;/p&gt;
&lt;p&gt;スマホの場合は画面下に常にメニューを表示したり、メニューボタンを押したら一覧が表示されるなど工夫すると使いやすいです。&lt;/p&gt;
&lt;h3 id=&quot;できるだけユーザーに入力させない&quot;&gt;できるだけユーザーに入力させない&lt;/h3&gt;
&lt;p&gt;ユーザーがTextInputやFormに情報入力する時、自分の名前や所属部署、役職など、Office365ユーザーコネクタで取得できる情報はDefaultで表示させましょう。&lt;/p&gt;
&lt;p&gt;入力の手間を極力減らし、ユーザーに無駄な操作をさせないよう意識することが大切です。&lt;/p&gt;
&lt;h3 id=&quot;ヒントテキストはときに不親切&quot;&gt;ヒントテキストはときに不親切&lt;/h3&gt;
&lt;p&gt;TextInputには[ヒントテキスト]を設定できますが、実はこれが不便に機能するシーンがあります。&lt;/p&gt;
&lt;p&gt;ヒントテキストは画像のように、入力欄に何を入力するべきかうっすら表示される説明文のこと。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;薄い文字で説明文がある&lt;/p&gt;
&lt;p&gt;ここをクリックすると、説明文が消えてユーザーが入力できるようになります。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;入力欄をクリックすると説明文が消え、入力可能になる&lt;/p&gt;
&lt;p&gt;これ、一見すると親切設計ですが、入力時に説明文が消えるのであれ、ハイフン必要だったっけ？と一瞬迷うことがあるんですね。&lt;/p&gt;
&lt;p&gt;ですので私なりの最適解は、下のようにヒントテキストに加えて別に説明文を設ける、です。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;ヒントテキストが消えてもわかりやすい&lt;/p&gt;
&lt;p&gt;こうしておけば入力に迷うことがありません。&lt;/p&gt;
&lt;p&gt;このあたりはアプリのレイアウトによっては野暮ったくなるので、うまく使い分けましょう。&lt;/p&gt;
&lt;h3 id=&quot;マニュアルを掲載する&quot;&gt;マニュアルを掲載する&lt;/h3&gt;
&lt;p&gt;使い方を記した資料をアプリ内のどこかに置いておきましょう。&lt;/p&gt;
&lt;p&gt;問い合わせを減らすことができます。&lt;/p&gt;
&lt;p&gt;Power Pointなどの共有リンクを載せておくといいですね。&lt;/p&gt;
&lt;h3 id=&quot;お問い合わせ機能をつける&quot;&gt;お問い合わせ機能をつける&lt;/h3&gt;
&lt;p&gt;万が一のためにお問い合わせ機能を設置しておきましょう。&lt;/p&gt;
&lt;p&gt;わからないことがあれば、ユーザーはここからコンタクトを取ります。&lt;/p&gt;
&lt;h3 id=&quot;終了ボタンは不要&quot;&gt;終了ボタンは不要&lt;/h3&gt;
&lt;p&gt;Exit関数でアプリを終了させる機能は基本的に不要です。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;親切心からか、わざわざ画面右上にバツボタンでExit()を設定する人をたまに見かけますが、ユーザーの誤操作に繋がります。&lt;/p&gt;
&lt;p&gt;どうしてもExit()を残したいのであれば、せめて終了確認画面を表示させるなどワンクッションはかならず入れましょう。&lt;/p&gt;
&lt;h3 id=&quot;power-automateで便利機能をつくる&quot;&gt;Power Automateで便利機能をつくる&lt;/h3&gt;
&lt;p&gt;アプリに連動して Power Automate が動く設計にするとさらに利便性が向上します。&lt;/p&gt;
&lt;p&gt;例えば登録確認がメールで届くとか、アプリのデータがCSVになり、PCにダウンロードするかWeb上で開くか選択できるとか、かゆいところに手が届くんですね。&lt;/p&gt;
&lt;p&gt;自動化の恩恵を最大限に享受できるようにするといいでしょう。&lt;/p&gt;
&lt;h2 id=&quot;万人受けするものは存在しない&quot;&gt;万人受けするものは存在しない&lt;/h2&gt;
&lt;p&gt;これまで色々紹介してきましたが、これをやったからといって必ずしも見やすく使いやすいアプリになるわけじゃありません。&lt;/p&gt;
&lt;p&gt;そもそも誰が見やすさと使いやすさを判断するのか？&lt;/p&gt;
&lt;p&gt;言うまでもなく、それはアプリのユーザーです。&lt;/p&gt;
&lt;p&gt;もっといえば、あなたの同僚や社員がそれを判断します。&lt;/p&gt;
&lt;p&gt;私の会社では受け入れられる見た目も、業種も職種も異なるあなたの会社で当てはまるかどうかはわかりません。&lt;/p&gt;
&lt;p&gt;だからこそ、ユーザー（あなたの同僚や社員）目線に立ってあなたが試行錯誤しなければいけません。&lt;/p&gt;
&lt;p&gt;今回のテクニックはきっかけにすぎませんが、共通していえるのはユーザーファーストの設計、これに尽きます。&lt;/p&gt;</content:encoded></item><item><title>Power Appsで大文字小文字を統一する｜Upper・Lower・Properの使い方</title><link>https://shiminkaihatsu.com/powerapps-upper-lower/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-upper-lower/</guid><description>Power Appsで大文字小文字を統一する｜Upper・Lower・Properの使い方</description><pubDate>Sun, 22 Mar 2026 11:17:30 GMT</pubDate><content:encoded>&lt;p&gt;確かに同じ文字なのにTrueにならない。Power Appsでこうなる場合、大文字小文字の違いが原因であることがよくあります。Upper・Lower・Properを使えば、この問題はすっきり解決できます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-upper-lower01.0MEPzM5R_3s8OJ.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;power-appsの文字列比較は大文字小文字を区別する&quot;&gt;Power Appsの文字列比較は大文字小文字を区別する&lt;/h2&gt;
&lt;p&gt;Power Appsの文字列比較は、大文字と小文字を別の文字として扱います。たとえば「&lt;a href=&quot;mailto:yamada@example.com&quot;&gt;yamada@example.com&lt;/a&gt;」と「&lt;a href=&quot;mailto:Yamada@example.com&quot;&gt;Yamada@example.com&lt;/a&gt;」は別の文字列です。Ifの条件式が通らない、FilterやLookUpでヒットしない、という症状がある場合は、大文字小文字の違いを疑ってみてください。&lt;/p&gt;
&lt;p&gt;特によく起きるのが、User().Emailとリストに登録されたメールアドレスを比較するケースです。Active Directoryから取得されるメールアドレスは環境によって大文字小文字の扱いが異なることがあり、SharePointのリストに手で入力されたデータと一致しないことがあります。私の社内でも、勤務表アプリで自分のデータだけが表示されないという相談が来たとき、この原因が多かったです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-upper-lower02.C6ZANSqA_1C5oEE.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;3つの関数の使い分け&quot;&gt;3つの関数の使い分け&lt;/h2&gt;
&lt;p&gt;Power Appsには大文字小文字を変換する関数が3つあります。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;関数&lt;/th&gt;
&lt;th&gt;動作&lt;/th&gt;
&lt;th&gt;主な用途&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Upper&lt;/td&gt;
&lt;td&gt;すべて大文字に変換&lt;/td&gt;
&lt;td&gt;コード・略称の統一&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lower&lt;/td&gt;
&lt;td&gt;すべて小文字に変換&lt;/td&gt;
&lt;td&gt;メールアドレスの比較&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Proper&lt;/td&gt;
&lt;td&gt;先頭だけ大文字、残りを小文字に変換&lt;/td&gt;
&lt;td&gt;人名・地名の表示整形&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;用途が明確に分かれているため、使い分け自体はそれほど難しくありません。比較をするときはLower、表示を整えるときはProperと覚えておけば、ほとんどのケースで対応できます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-upper-lower03.C4BApvCP_Z1tl09h.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;実例3パターン&quot;&gt;実例3パターン&lt;/h2&gt;
&lt;h3 id=&quot;useremailとの比較でlowerを使う&quot;&gt;User().Emailとの比較でLowerを使う&lt;/h3&gt;
&lt;p&gt;ログインユーザーのメールアドレスと、SharePointリストに登録されたメールアドレスを比較してデータを絞り込む場面です。どちらもLowerで小文字に統一してから比較することで、大文字小文字の違いによるミスマッチを防げます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    申請リスト,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Lower&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(申請者メール) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; Lower&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;User&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;().Email)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;FilterやLookUpの詳しい使い方は&lt;a href=&quot;/powerapps-filter-search-lookup/&quot;&gt;Power AppsのFilter・Search・LookUp関数&lt;/a&gt;でまとめています。&lt;/p&gt;
&lt;h3 id=&quot;フォーム入力の氏名整形にproperを使う&quot;&gt;フォーム入力の氏名整形にProperを使う&lt;/h3&gt;
&lt;p&gt;テキスト入力コントロールでユーザーが入力した名前を、先頭大文字に統一して表示・保存する場面です。たとえば「SUZUKI TARO」や「suzuki taro」といった入力をPatch前にProperで整形すると、リストのデータが統一されます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Patch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    社員リスト,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Defaults&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(社員リスト),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        氏名_英語: &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Proper&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(TextInput_Name.Text)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ただし、Properはすべての単語の先頭を大文字にするため、メールアドレスや略称には使えません。「&lt;a href=&quot;mailto:yamada@example.com&quot;&gt;yamada@example.com&lt;/a&gt;」にProperをかけると「&lt;a href=&quot;mailto:Yamada@Example.Com&quot;&gt;Yamada@Example.Com&lt;/a&gt;」になってしまいます。表示整形に使う場面を人名・地名などに限定してください。&lt;/p&gt;
&lt;h3 id=&quot;ギャラリーの検索でlowerを組み合わせる&quot;&gt;ギャラリーの検索でLowerを組み合わせる&lt;/h3&gt;
&lt;p&gt;検索ボックスの入力値でギャラリーを絞り込む場面では、入力値とデータ両方をLowerで統一することで、大文字小文字を気にしない検索が実現できます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    商品リスト,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Lower&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(商品名) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; Lower&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(TextInput_Search.Text)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;SearchではなくFilterで完全一致検索をする場合、この前処理が特に効果的です。ギャラリーコントロールの使い方は&lt;a href=&quot;/powerapps-gallery/&quot;&gt;Power Appsのギャラリーコントロール&lt;/a&gt;で解説しています。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-upper-lower04.i008i3S6_Jj7bB.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;よくある間違いproperをメールアドレスに使う&quot;&gt;よくある間違い：Properをメールアドレスに使う&lt;/h2&gt;
&lt;p&gt;Properは人名の整形には便利ですが、メールアドレスや複合語には使えません。代表的なNGパターンを挙げておきます。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;入力値&lt;/th&gt;
&lt;th&gt;Proper適用後&lt;/th&gt;
&lt;th&gt;問題&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;mailto:yamada@example.com&quot;&gt;yamada@example.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;mailto:Yamada@Example.Com&quot;&gt;Yamada@Example.Com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;メールアドレスとして無効になる&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;power apps&lt;/td&gt;
&lt;td&gt;Power Apps&lt;/td&gt;
&lt;td&gt;これは正しく変換される&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;sharepoint-list&lt;/td&gt;
&lt;td&gt;Sharepoint-List&lt;/td&gt;
&lt;td&gt;ハイフン後も大文字になる&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;メールアドレスを含むデータには、ProperではなくLowerを使いましょう。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-upper-lower05.4TUfiZxA_2grJl6.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;まとめ比較前はlower表示整形はproper&quot;&gt;まとめ：比較前はLower、表示整形はProper&lt;/h2&gt;
&lt;p&gt;使い分けの基準を一言でまとめると、比較前はLower、表示整形はProperです。Upperは英字コードの統一など、特定の用途で使います。&lt;/p&gt;
&lt;p&gt;大文字小文字の問題は、スペースの混入と並んでデータ不一致の代表的な原因です。スペース除去にはTrimやTrimEndsが効果的で、こちらも合わせて使うと比較処理がより堅牢になります。TrimとTrimEndsの使い方は&lt;a href=&quot;/powerapps-trim/&quot;&gt;こちらの記事&lt;/a&gt;をご覧ください。&lt;/p&gt;
&lt;p&gt;IfやSwitchと組み合わせた使い方については&lt;a href=&quot;/powerapps-if-switch/&quot;&gt;Power AppsのIfとSwitch&lt;/a&gt;もあわせて参考にしてください。&lt;/p&gt;
&lt;p&gt;Power Appsのその他のテキスト関数についての完全ガイドは&lt;a href=&quot;/powerapps-text-functions/&quot;&gt;こちらの記事をご覧ください&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;小さな関数ですが、使いどころを知っておくだけでアプリの信頼性がぐっと上がります。ぜひ取り入れてみてください。&lt;/p&gt;</content:encoded></item><item><title>重すぎる画像を弾く！Power Appsで添付ファイルのサイズや枚数を制限する方法</title><link>https://shiminkaihatsu.com/powerapps-validation-attachment-limit/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-validation-attachment-limit/</guid><description>重すぎる画像を弾く！Power Appsで添付ファイルのサイズや枚数を制限する方法</description><pubDate>Sat, 11 Apr 2026 11:26:47 GMT</pubDate><content:encoded>&lt;h2 id=&quot;添付ファイルのサイズ制限はpower-apps側で作るしかない&quot;&gt;添付ファイルのサイズ制限は、Power Apps側で作るしかない&lt;/h2&gt;
&lt;p&gt;スマホで撮影した写真を何枚も添付されて、保存時にエラーが出る、Power Appsで添付ファイルを扱うアプリを作ったことがある人なら、一度は経験するトラブルです。SharePointには列ごとのファイルサイズ上限はありますが、Power Appsは標準状態ではその上限を超える添付を止めてくれません。つまり、制限の仕組みはアプリ側で作る必要があります。&lt;/p&gt;
&lt;p&gt;この記事では、添付ファイルの枚数制限・拡張子チェック・送信ボタンの制御という3つの観点から、実用的なバリデーション設計を解説します。&lt;/p&gt;
&lt;h2 id=&quot;なぜ添付ファイルのバリデーションが必要なのか&quot;&gt;なぜ添付ファイルのバリデーションが必要なのか&lt;/h2&gt;
&lt;p&gt;私が開発した現場報告アプリでも、運用開始直後に同じ問題が起きました。スマホで高解像度の写真を5〜6枚添付した状態で送信ボタンを押すと、SharePointへの保存が途中でタイムアウトし、データが中途半端な状態で残ってしまうのです。しかも、エラーメッセージが分かりにくいため、保存できたと思い込んで離席するユーザーも出てきました。&lt;/p&gt;
&lt;p&gt;こうした問題を未然に防ぐには、添付時点でファイルをチェックする仕組みが必要です。添付コントロールには OnAddFile という専用のプロパティがあり、ここにバリデーション処理を書くことでファイル追加のタイミングで制御できます。&lt;/p&gt;
&lt;h2 id=&quot;枚数制限の実装&quot;&gt;枚数制限の実装&lt;/h2&gt;
&lt;h3 id=&quot;countrowsで添付数をカウントする&quot;&gt;CountRowsで添付数をカウントする&lt;/h3&gt;
&lt;p&gt;添付ファイルコントロールの .Attachments プロパティは、添付されているファイルのテーブル（コレクション）を返します。これを CountRows 関数に渡せば、現在の添付枚数をリアルタイムに取得できます。&lt;/p&gt;
&lt;p&gt;枚数制限を実装する基本的な考え方は次の通りです。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;添付コントロールの OnAddFile プロパティを開く&lt;/li&gt;
&lt;li&gt;CountRows で枚数を確認し、上限を超えていたら Notify でエラーを表示しつつ Reset で追加をキャンセルする&lt;/li&gt;
&lt;li&gt;送信ボタンの DisplayMode も添付枚数の条件に連動させる&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-validation-attachment-limit01.CGulz7yU_otuQg.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;p&gt;OnAddFile プロパティに書く数式の例です。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    CountRows&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(DataCardValue5_1.Attachments) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 3&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Notify&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;添付ファイルは3枚までです&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;NotificationType.Error&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Reset&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(DataCardValue5_1)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Reset 関数を呼ぶことで、追加しようとしたファイルをその場でキャンセルできます。ユーザーには Notify のポップアップでメッセージが表示されるため、なぜ添付できなかったのかが一目でわかります。&lt;/p&gt;
&lt;h2 id=&quot;拡張子チェックの実装&quot;&gt;拡張子チェックの実装&lt;/h2&gt;
&lt;h3 id=&quot;onaddfileにsplit関数で拡張子を取り出す&quot;&gt;OnAddFileにSplit関数で拡張子を取り出す&lt;/h3&gt;
&lt;p&gt;枚数だけでなくPDFしか添付できないといった拡張子の制限も、同じく OnAddFile プロパティで実装できます。ファイル名から拡張子を取り出すには Split 関数を使います。ファイル名をドット（.）で分割して末尾の要素を取れば、拡張子だけを抽出できます。Split 関数については&lt;a href=&quot;/powerapps-text-functions/&quot;&gt;テキスト関数の解説記事&lt;/a&gt;でも触れていますが、この使い方は特に実用的です。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-validation-attachment-limit02.DJm3HxNe_Z1f1NWr.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;p&gt;拡張子チェックの実装例です。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    CountRows&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(DataCardValue5_1.Attachments, &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Last&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Split&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(Name, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;.&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)).Value &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&amp;#x3C;&gt;&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot;pdf&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Notify&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;PDFファイルのみ添付可能です&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;NotificationType.Error&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Reset&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(DataCardValue5_1),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Set&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(varValidationAttachment, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;この数式の動きを分解すると次の通りです。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Filter で拡張子がpdfでないファイルを絞り込む&lt;/li&gt;
&lt;li&gt;CountRows で該当ファイルが1件でもあるか判定する&lt;/li&gt;
&lt;li&gt;あれば Notify でエラーを出し、Reset でキャンセルする&lt;/li&gt;
&lt;li&gt;問題なければ変数 varValidationAttachment を true にする&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;許可する拡張子は「pdf」の部分を変更するだけです。「xlsx」や「png」など複数許可したい場合は Filter の条件を And や Or で組み合わせます。&lt;/p&gt;
&lt;h2 id=&quot;送信ボタンの制御&quot;&gt;送信ボタンの制御&lt;/h2&gt;
&lt;h3 id=&quot;変数と-displaymode-を連動させる&quot;&gt;変数と DisplayMode を連動させる&lt;/h3&gt;
&lt;p&gt;バリデーションが通ったかどうかを変数（varValidationAttachment）で管理することで、送信ボタンの DisplayMode と連動させられます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 送信ボタンの DisplayMode&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(varValidationAttachment, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;DisplayMode.Edit&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;DisplayMode.Disabled&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ここで注意したいのが、変数の初期化タイミングです。画面の OnVisible プロパティで Set(varValidationAttachment, false) を実行しておくことで、画面を再訪問したときに前回の状態が引き継がれる問題を防げます。変数の設計パターンについては&lt;a href=&quot;/powerapps-variables/&quot;&gt;変数の使い分けガイド&lt;/a&gt;も参考にしてください。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-validation-attachment-limit03.BjAqeqeh_w4bsp.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;添付ファイル制限のまとめと応用&quot;&gt;添付ファイル制限のまとめと応用&lt;/h2&gt;
&lt;h3 id=&quot;3つの制御をセットで実装する&quot;&gt;3つの制御をセットで実装する&lt;/h3&gt;
&lt;p&gt;添付ファイルのバリデーションは、次の3つをセットで実装するのがおすすめです。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;制御の種類&lt;/th&gt;
&lt;th&gt;実装場所&lt;/th&gt;
&lt;th&gt;主な関数&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;枚数制限&lt;/td&gt;
&lt;td&gt;添付コントロールのOnAddFile&lt;/td&gt;
&lt;td&gt;CountRows / Reset / Notify&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;拡張子チェック&lt;/td&gt;
&lt;td&gt;添付コントロールのOnAddFile&lt;/td&gt;
&lt;td&gt;Split / Last / Filter / Reset&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ボタン制御&lt;/td&gt;
&lt;td&gt;送信ボタンのDisplayMode&lt;/td&gt;
&lt;td&gt;変数（varValidationAttachment）&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;バリデーション設計全体の考え方については、&lt;a href=&quot;/powerapps-validation-guide/&quot;&gt;Power Apps入力ミス防止ガイド&lt;/a&gt;の記事で4つのアプローチをまとめています。添付ファイル制限はその中のアプローチ③：UI・選択制御の延長線上にある実装です。&lt;/p&gt;
&lt;p&gt;また、カメラコントロールを使って写真を撮影してSharePointに保存するパターンとの違いも押さえておくと、設計の幅が広がります。カメラ撮影の実装については&lt;a href=&quot;/powerapps-cam-sp/&quot;&gt;カメラコントロールと添付ファイル保存&lt;/a&gt;の記事を参照してください。&lt;/p&gt;
&lt;h3 id=&quot;なぜ添付できないのかをユーザーに伝える&quot;&gt;なぜ添付できないのかをユーザーに伝える&lt;/h3&gt;
&lt;p&gt;エラーメッセージは「エラーが発生しました」だけでは、ユーザーは何をすれば解決するかわかりません。PDFファイルのみ添付可能です・添付ファイルは3枚までですのように、制約と理由が1文でわかるメッセージを設定することが大切です。Notify 関数で表示するメッセージは NotificationType.Error（赤）・NotificationType.Warning（黄）・NotificationType.Information（青）から選べます。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;添付ファイルのバリデーションは、OnAddFile プロパティを使うことでファイル追加のその場で制御できます。&lt;/p&gt;
&lt;p&gt;CountRows による枚数確認、Split と Last による拡張子チェック、変数と DisplayMode による送信ボタン制御。この3つを組み合わせれば、ファイルサイズ起因のエラーや不正形式の添付をアプリ側でほぼ防ぎきれます。&lt;/p&gt;
&lt;p&gt;仕組みを作るのは最初の1回だけです。あとは要件が変わったときに数式の一部を修正するだけで対応できます。市民開発とはこういう地道な積み上げだと思っています。&lt;/p&gt;</content:encoded></item><item><title>言った・言わないを防ぐ！Power Appsで誰がいつ入力・変更したかログを残す設計</title><link>https://shiminkaihatsu.com/powerapps-validation-audit-log/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-validation-audit-log/</guid><description>言った・言わないを防ぐ！Power Appsで誰がいつ入力・変更したかログを残す設計</description><pubDate>Sat, 11 Apr 2026 11:26:44 GMT</pubDate><content:encoded>&lt;p&gt;データがおかしくなったとき、誰がいつ変えたのかがわからないと原因調査が止まります。Power Appsにログ保存の仕組みを組み込んでおくだけで、そのストレスがなくなります。&lt;/p&gt;
&lt;h2 id=&quot;ログを残さないと何が起きるか&quot;&gt;ログを残さないと何が起きるか&lt;/h2&gt;
&lt;p&gt;現場でよくある話です。SharePointリストを使った申請アプリを運用していたら、ある日突然登録内容がおかしいと報告が来ました。担当者に確認しても自分は入力していない、自分が変えたわけじゃないと言う。SharePoint標準のバージョン履歴を確認すれば変更者はわかりますが、Power Appsから直接Patchした場合、SharePoint側に誰が何の項目を変えたかの詳細は残りません。&lt;/p&gt;
&lt;p&gt;私が社内で最初にアプリを作ったときも、ログ機能を後付けしてかなり苦労しました。最初から設計に組み込んでおけばよかったと今でも思っています。特に承認フローや在庫管理のような重要なデータを扱うアプリほど、ログは必須です。&lt;/p&gt;
&lt;p&gt;ログがあれば、問題発生時、2月14日 15:23に田中さんが数量を5から12に変更したという事実を即座に確認できます。言った・言わないの水掛け論がなくなり、何より担当者への不当な疑いを防ぐことができます。&lt;/p&gt;
&lt;h2 id=&quot;ログ用リストの設計&quot;&gt;ログ用リストの設計&lt;/h2&gt;
&lt;p&gt;まず、本番データとは別にログ専用のSharePointリストを用意します。本番リストにログ列を追加する方法もありますが、データが混在して見づらくなるため、リストを分けることをおすすめします。&lt;/p&gt;
&lt;h3 id=&quot;ログリストの列構成&quot;&gt;ログリストの列構成&lt;/h3&gt;
&lt;p&gt;最低限必要な列は以下の5つです。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;列名&lt;/th&gt;
&lt;th&gt;型&lt;/th&gt;
&lt;th&gt;内容&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Title&lt;/td&gt;
&lt;td&gt;テキスト&lt;/td&gt;
&lt;td&gt;操作種別（登録・更新・削除など）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OperationBy&lt;/td&gt;
&lt;td&gt;テキスト&lt;/td&gt;
&lt;td&gt;操作したユーザーのメールアドレス&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OperationAt&lt;/td&gt;
&lt;td&gt;日付と時刻&lt;/td&gt;
&lt;td&gt;操作日時&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TargetID&lt;/td&gt;
&lt;td&gt;数値&lt;/td&gt;
&lt;td&gt;操作対象レコードのID&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Detail&lt;/td&gt;
&lt;td&gt;複数行テキスト&lt;/td&gt;
&lt;td&gt;変更内容の詳細（任意）&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;最初はシンプルな5列で十分です。運用しながら必要な情報が見えてきたら列を追加していくのが現実的です。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-validation-audit-log01.Bczc04pb_Z1lBaQD.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;power-appsからログをpatchする実装&quot;&gt;Power AppsからログをPatchする実装&lt;/h2&gt;
&lt;p&gt;ログの書き込みはPatch関数1本で完結します。本番データの保存処理と同じタイミングで、ログリストにも書き込むように設定します。&lt;/p&gt;
&lt;h3 id=&quot;新規登録時のログ保存&quot;&gt;新規登録時のログ保存&lt;/h3&gt;
&lt;p&gt;申請データを新規作成するボタンのOnSelectに、本番データへのPatchとログへのPatchを並べて書きます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 本番データを保存&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Patch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;  &apos;申請データ&apos;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;  Defaults&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&apos;申請データ&apos;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;  {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    Title: TextInput_Subject.Text,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    担当者: TextInput_Name.Text,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    金額: &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Value&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(TextInput_Amount.Text)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// ログを記録&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Patch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;  &apos;操作ログ&apos;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;  Defaults&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&apos;操作ログ&apos;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;  {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    Title: &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;新規登録&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    OperationBy: &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;User&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;().Email,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    OperationAt: &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Now&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    TargetID: &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Last&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Sort&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&apos;申請データ&apos;, ID, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;SortOrder.Descending&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)).ID,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    Detail: &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;件名：&quot;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; TextInput_Subject.Text &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot; / 担当者：&quot;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; TextInput_Name.Text&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;2つのPatch関数をセミコロンでつなぐだけです。Power Appsのセミコロン区切りは順番に実行されます。本番データを先に保存し、そのIDをログに記録する流れになります。&lt;/p&gt;
&lt;p&gt;Patch関数の基本的な書き方については&lt;a href=&quot;/powerapps-patch-function/&quot;&gt;Patch関数の使い方&lt;/a&gt;の記事で詳しく解説しています。Defaults関数の使い方や列の型ごとの値指定も確認できるので、あわせて参照してください。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-validation-audit-log02.BrSPZjrk_NdvSK.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;更新時のログ保存&quot;&gt;更新時のログ保存&lt;/h3&gt;
&lt;p&gt;既存レコードを更新する場合は、変更前後の値を Detail に記録しておくと後から見やすくなります。変更前の値はギャラリーで選択したレコード（Gallery.Selected）から取得できます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 本番データを更新&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Patch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;  &apos;申請データ&apos;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;  Gallery_Main.Selected,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;  {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    金額: &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Value&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(TextInput_Amount.Text)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 変更前後をログに記録&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Patch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;  &apos;操作ログ&apos;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;  Defaults&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&apos;操作ログ&apos;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;  {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    Title: &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;更新&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    OperationBy: &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;User&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;().Email,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    OperationAt: &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Now&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    TargetID: Gallery_Main.Selected.ID,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    Detail: &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;金額変更：&quot;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; Text&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(Gallery_Main.Selected.金額) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot; → &quot;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; TextInput_Amount.Text&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;変更前の値を Gallery_Main.Selected.金額 で、変更後の値を TextInput_Amount.Text で取得し、Detailに「変更前 → 変更後」の形で文字列結合しています。この形式にしておくと、ログを見ただけで何がどう変わったか一目でわかります。&lt;/p&gt;
&lt;p&gt;レコードの更新パターンについては&lt;a href=&quot;/powerapps-patch-update-record/&quot;&gt;Patch関数で既存レコードを更新する方法&lt;/a&gt;の記事も参考になります。Gallery.SelectedとvarRecordの使い分けも解説しています。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-validation-audit-log03.CL4AOUQi_Ziggsw.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;ログをアプリ内で確認できるようにする&quot;&gt;ログをアプリ内で確認できるようにする&lt;/h2&gt;
&lt;p&gt;ログリストはSharePointで直接確認することもできますが、アプリ内にログ表示画面を作ると現場での使い勝手が上がります。ギャラリーを使った実装はシンプルです。&lt;/p&gt;
&lt;h3 id=&quot;対象レコードのログだけ絞り込む&quot;&gt;対象レコードのログだけ絞り込む&lt;/h3&gt;
&lt;p&gt;ギャラリーの Items に Filter 関数を使って、選択中のレコードに関するログだけ表示します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;  &apos;操作ログ&apos;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;  TargetID &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; Gallery_Main.Selected.ID&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;さらに日時の新しい順に並べるなら Sort を追加します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;SortByColumns&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;  Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&apos;操作ログ&apos;, TargetID &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; Gallery_Main.Selected.ID),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;  &quot;OperationAt&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;  SortOrder.Descending&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ギャラリーのテンプレート内に OperationAt（日時）・OperationBy（操作者）・Detail（詳細）のラベルを並べれば、最新の操作履歴が時系列で確認できる画面が完成します。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-validation-audit-log04.BrU2YUzw_2sQ746.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;実装時に気をつけること&quot;&gt;実装時に気をつけること&lt;/h2&gt;
&lt;p&gt;ログ実装でよくある失敗が、Patchの順序によるIDの取得ミスです。新規登録の直後に最後に追加されたレコードのIDを取るため、Last(Sort(‘申請データ’, ID, SortOrder.Descending)).ID を使う方法が簡便ですが、複数ユーザーが同時に使うアプリでは別の人が登録したIDを取ってしまうリスクがあります。&lt;/p&gt;
&lt;p&gt;より確実な方法は、Patchの戻り値を変数で受け取ることです。Patch関数は保存したレコードを戻り値として返すので、以下のように書けば取得したIDが正確です。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Set&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;  varNewRecord,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;  Patch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    &apos;申請データ&apos;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Defaults&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&apos;申請データ&apos;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;      Title: TextInput_Subject.Text&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;  )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Patch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;  &apos;操作ログ&apos;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;  Defaults&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&apos;操作ログ&apos;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;  {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    Title: &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;新規登録&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    OperationBy: &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;User&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;().Email,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    OperationAt: &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Now&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    TargetID: varNewRecord.ID&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Set(varNewRecord, Patch(…)) の形で、Patchの戻り値をそのまま変数に格納します。次の行で varNewRecord.ID を参照すれば、今作ったレコードのIDが確実に取れます。SharePointへのデータ読み書きの基本については&lt;a href=&quot;/powerapps-sharepoint-crud/&quot;&gt;SharePointリストのCRUDパターン&lt;/a&gt;の記事も参考になります。&lt;/p&gt;
&lt;p&gt;もうひとつ注意したいのが、ログが膨らみすぎる問題です。アクティブに使われるアプリでは、1日に数百件のログが積み上がることもあります。SharePointリストは委任制限（標準2000件）があるため、古いログを定期的にアーカイブするPower Automateのフローを組み合わせることをおすすめします。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;ログ機能の実装はPatch関数を1本追加するだけです。難しいことは何もありませんが、後付けになると既存のボタンをすべて修正する手間が発生します。新しいアプリを作るときには最初の設計に組み込む習慣をつけると、後々の運用がぐっと楽になります。&lt;/p&gt;
&lt;p&gt;入力ミス防止の全体的な設計については&lt;a href=&quot;/powerapps-validation-guide/&quot;&gt;Power Apps入力ミス防止ガイド&lt;/a&gt;にまとめています。バリデーション・UX改善・ログ保存を組み合わせた設計で、信頼性の高いアプリを現場に届けましょう。積み上げた仕組みが業務を守ってくれる、そんな実感が、市民開発を続ける原動力になっていきます。&lt;/p&gt;</content:encoded></item><item><title>自分の名前の手打ちは不要！Power Appsでログインユーザー情報を自動入力させる方法</title><link>https://shiminkaihatsu.com/powerapps-validation-auto-user-info/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-validation-auto-user-info/</guid><description>自分の名前の手打ちは不要！Power Appsでログインユーザー情報を自動入力させる方法</description><pubDate>Sat, 11 Apr 2026 11:26:48 GMT</pubDate><content:encoded>&lt;p&gt;Power Apps のフォームで、毎回自分の名前や所属部署を手打ちしていませんか。入力の手間だけでなく、タイポによる誤登録も起きます。User() 関数や Office365Users コネクタを使えば、ログインしているユーザーの情報を自動で取得し、初期値として埋め込めます。手入力させない設計が、最も確実な入力ミス防止です。&lt;/p&gt;
&lt;h2 id=&quot;手打ちをなくすことが最大の入力ミス対策&quot;&gt;手打ちをなくすことが最大の入力ミス対策&lt;/h2&gt;
&lt;p&gt;バリデーションの多くは入力された値が正しいかをチェックする仕組みです。しかし考えてみると、そもそも入力させなければチェック自体が不要になります。物流系の現場でよく見るのが、申請フォームに毎回自分の名前・メールアドレス・社員番号を手打ちするケースです。20人のスタッフが毎日使うアプリなら、1日に20回は不要な入力が発生していることになります。&lt;/p&gt;
&lt;p&gt;さらに問題なのは、タイポが誰にでも起きることです。自分の名前のはずなのに1文字ミスが入り、集計でその行だけ弾かれる。そういうトラブルを何度か経験してから、私はユーザー情報を自動取得する設計を標準にしました。&lt;/p&gt;
&lt;h2 id=&quot;user-関数で取得できる情報&quot;&gt;User() 関数で取得できる情報&lt;/h2&gt;
&lt;p&gt;Power Apps には標準で User() 関数が用意されています。追加のコネクタなしに使えるため、ライセンスの心配もありません。取得できるプロパティは3つです。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;プロパティ&lt;/th&gt;
&lt;th&gt;取得できる値&lt;/th&gt;
&lt;th&gt;使用例&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;User().FullName&lt;/td&gt;
&lt;td&gt;表示名（例：守屋 祐輔）&lt;/td&gt;
&lt;td&gt;申請者名フィールドの初期値&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;User().Email&lt;/td&gt;
&lt;td&gt;メールアドレス&lt;/td&gt;
&lt;td&gt;通知先・ログ記録&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;User().Image&lt;/td&gt;
&lt;td&gt;プロフィール画像URL&lt;/td&gt;
&lt;td&gt;アバター表示&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;テキスト入力コントロールの Default プロパティに User().FullName を設定するだけで、アプリを開いた瞬間に自分の名前が入力された状態になります。さらに DisplayMode プロパティを Disabled に設定すれば、ユーザーが書き換えることもできなくなります。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// TextInput_Name の Default プロパティ&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;User&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;().FullName&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// TextInput_Name の DisplayMode プロパティ&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;DisplayMode.Disabled&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-validation-auto-user-info01.Dx8NGQBx_Z21zx5c.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;p&gt;ただし注意点があります。User() 関数で取得できる名前は、Microsoft 365 のアカウントに登録された表示名です。社内で表示名が統一されていない環境（例：英語名と日本語名が混在している）では、期待した値と異なる場合があります。事前にどのプロパティが現場に合っているか確認しておきましょう。&lt;/p&gt;
&lt;h2 id=&quot;office365users-コネクタでより詳細な情報を取得する&quot;&gt;Office365Users コネクタでより詳細な情報を取得する&lt;/h2&gt;
&lt;p&gt;User() 関数は手軽ですが、取得できる情報が3つに限られています。部署名・役職・社員番号・上長のメールアドレスなど、より詳細な情報が必要な場合は Office365Users コネクタを使います。ただしこれはプレミアムコネクタではなく標準コネクタなので、Power Apps の標準ライセンスで利用できます。&lt;/p&gt;
&lt;p&gt;Office365Users コネクタの主要な関数は MyProfileV2() です。ログインユーザーの Azure AD プロファイルにアクセスし、DisplayName・Mail・Department・JobTitle・Id などを取得できます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// App.Formulas（名前付き計算式）での定義例&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;currentUser &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; Office365Users.&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;MyProfileV2&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// フォームで使う場合&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;TextInput_Dept.DefaultText &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; currentUser.Department&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;TextInput_JobTitle.DefaultText &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; currentUser.JobTitle&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;毎回 Office365Users.MyProfileV2() を直接プロパティに書くと、コントロールが増えるたびに API 呼び出しが増えてパフォーマンスが低下します。&lt;a href=&quot;/powerapps-named-formulas/&quot;&gt;名前付き計算式（App.Formulas）&lt;/a&gt;を使って一度だけ取得し、結果を参照する設計が推奨です。アプリ全体で1回だけ API を呼び出し、複数のコントロールがその結果を共有できます。&lt;/p&gt;
&lt;h3 id=&quot;appformulas-への定義手順&quot;&gt;App.Formulas への定義手順&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Power Apps Studio の左上メニューからアプリの設定を開き、App オブジェクトを選択します&lt;/li&gt;
&lt;li&gt;Formulas プロパティに currentUser = Office365Users.MyProfileV2(); を追加します&lt;/li&gt;
&lt;li&gt;各テキスト入力の Default プロパティで currentUser.DisplayName や currentUser.Department を参照します&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-validation-auto-user-info02.BfRhq8V9_Z2l39Wm.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;ユーザー情報をフィルターに使う応用設計&quot;&gt;ユーザー情報をフィルターに使う応用設計&lt;/h2&gt;
&lt;p&gt;ユーザー情報の自動取得は、入力ミス防止だけでなくデータの絞り込みにも活用できます。ログインユーザーが自分に関係するデータだけを見られる設計です。申請フォームなら、自分が提出した申請だけがギャラリーに表示される、といった使い方になります。&lt;/p&gt;
&lt;p&gt;ギャラリーの Items プロパティに Filter 関数と User().Email を組み合わせれば実現できます。&lt;a href=&quot;/powerapps-filter-by-user/&quot;&gt;ユーザー情報を使ったフィルター実装&lt;/a&gt;の詳細はそちらの記事で解説していますが、基本構文は次のとおりです。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// ギャラリーの Items プロパティ（自分の申請のみ表示）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(RequestList, Applicant &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; User&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;().Email)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;この設計はセキュリティの観点からも有効です。他のユーザーのデータが画面に表示されないため、個人情報や機密データを誤って見せてしまうリスクが減ります。Power Apps のコンテナを使ったレイアウト設計と組み合わせると、&lt;a href=&quot;/powerapps-container-guide/&quot;&gt;ギャラリーとフォームを並べた申請管理アプリ&lt;/a&gt;のUIをすっきり構成できます。&lt;/p&gt;
&lt;h2 id=&quot;自己割り当て禁止のバリデーションへの応用&quot;&gt;自己割り当て禁止のバリデーションへの応用&lt;/h2&gt;
&lt;p&gt;Office365Users.MyProfileV2().id を使うと、より高度なバリデーションが作れます。たとえば、承認者フィールドに申請者自身を選べないようにする制御です。&lt;/p&gt;
&lt;p&gt;承認ワークフローを Power Apps で実装するとき、申請者が自分自身を承認者に指定できてしまうと内部統制が崩れます。これを防ぐには、ユーザーピッカーで選択した人物の ID とログインユーザーの ID を比較し、一致していたらエラーにする設計が有効です。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 承認者選択コントロールの ValidationState（モダンフォーム）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;  And&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(varFormSubmitted, PeoplePicker_Approver.Selected.Id &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; Office365Users.&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;MyProfileV2&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;().id),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;  &quot;Error&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;  &quot;None&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// ValidationMessage&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;申請者自身は承認者に指定できません&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;この応用パターンは、バリデーションがデータの整合性を守るだけでなく、ビジネスルールを強制する手段になることを示しています。フォームのルールを Power Apps 側に組み込むことで、利用者がルールを覚えていなくても自然に正しい操作へ誘導できます。&lt;/p&gt;
&lt;h2 id=&quot;まとめ入力させない設計が最も強いバリデーション&quot;&gt;まとめ：入力させない設計が、最も強いバリデーション&lt;/h2&gt;
&lt;p&gt;User() 関数と Office365Users コネクタを使えば、ログインユーザーの名前・メール・部署・役職を自動で取得してフォームに埋め込めます。手打ちをゼロにすることで、タイポも二重確認の手間も発生しなくなります。&lt;/p&gt;
&lt;p&gt;フォーム設計の全体像を整理したい場合は、&lt;a href=&quot;/powerapps-form-basics/&quot;&gt;フォームコントロールの基本的な仕組み&lt;/a&gt;も合わせて読むと、どの場面でどの実装パターンを選ぶかの判断がしやすくなります。市民開発とは、こうした地道な設計の積み重ねです。&lt;/p&gt;
&lt;p&gt;入力エラーに関する一覧は&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-validation-guide/&quot;&gt;こちらの記事&lt;/a&gt;をご覧ください。&lt;/p&gt;</content:encoded></item><item><title>13桁の手打ちは地獄！Power Appsのバーコードリーダーで入力ミスをゼロにする方法</title><link>https://shiminkaihatsu.com/powerapps-validation-barcode-scanner/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-validation-barcode-scanner/</guid><description>13桁の手打ちは地獄！Power Appsのバーコードリーダーで入力ミスをゼロにする方法</description><pubDate>Sat, 11 Apr 2026 11:26:46 GMT</pubDate><content:encoded>&lt;p&gt;13桁のJANコードを手打ちするのは地獄です。1桁でも間違えれば、まったく別の商品として登録されてしまいます。Power Appsにはバーコードリーダー機能が標準搭載されており、スマホのカメラでコードを読み取って自動入力できます。入力ミス防止の設計全体については&lt;a href=&quot;/powerapps-validation-guide/&quot;&gt;Power Apps入力ミス防止ガイド&lt;/a&gt;でまとめているので、手入力をなくす設計の位置づけとして確認してください。&lt;/p&gt;
&lt;p&gt;この記事では、バーコードスキャナーコントロールの基本的な使い方から、読み取った値をPatchで即座に登録するフロー設計まで解説します。&lt;/p&gt;
&lt;h2 id=&quot;手入力をやめるのが最強の入力ミス防止策&quot;&gt;手入力をやめるのが最強の入力ミス防止策&lt;/h2&gt;
&lt;p&gt;バリデーションや視覚フィードバックは、ユーザーが誤った値を入力したあとに気づかせる仕組みです。それに対して、そもそも手入力させない設計はミスが起きる余地を根本から消します。&lt;/p&gt;
&lt;p&gt;倉庫での在庫管理、店舗での商品登録、資産管理。バーコードやQRコードが印刷されているものを扱う現場では、スキャン入力を取り入れるだけで入力ミスがほぼゼロになります。私が社内で作った棚卸しアプリでも、バーコード入力に切り替えた後からミスの報告がなくなりました。&lt;/p&gt;
&lt;h2 id=&quot;バーコードスキャナーコントロールの基本&quot;&gt;バーコードスキャナーコントロールの基本&lt;/h2&gt;
&lt;p&gt;Power Appsでバーコードを読み取るには、バーコードスキャナーコントロールを使います。挿入メニューから追加でき、スマホのカメラを自動的に起動してコードをスキャンします。&lt;/p&gt;
&lt;h3 id=&quot;コントロールの追加手順&quot;&gt;コントロールの追加手順&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Power Appsの編集画面で、挿入タブを開く&lt;/li&gt;
&lt;li&gt;メディアカテゴリからバーコードスキャナーを選択して追加する&lt;/li&gt;
&lt;li&gt;コントロール名を BarcodeScanner1 のように分かりやすい名前に変更する&lt;/li&gt;
&lt;li&gt;必要に応じてサイズと配置を調整する&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-validation-barcode-scanner01.DsIuGBcf_NADq4.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;p&gt;読み取った値はBarcodeScanner1.Valueで参照できます。スキャンが完了した瞬間に値が更新されるので、この値をラベルに表示したり、変数にセットしたりして利用します。&lt;/p&gt;
&lt;h3 id=&quot;onscanプロパティで読み取り後の処理を設定する&quot;&gt;OnScanプロパティで読み取り後の処理を設定する&lt;/h3&gt;
&lt;p&gt;バーコードスキャナーコントロールには、OnScanというプロパティがあります。コードが読み取られた瞬間に実行されるアクションをここに書きます。&lt;/p&gt;
&lt;p&gt;読み取った値を変数にセットする例です。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Set&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(varScannedCode, BarcodeScanner1.Value)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;変数に格納しておくことで、スキャン後に画面の別の場所（テキスト入力のDefaultや、Patch関数の引数）からその値を参照できます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-validation-barcode-scanner02.B76bFLq7_1sAwLd.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;スキャンしてそのままpatchで登録するフロー&quot;&gt;スキャンしてそのままPatchで登録するフロー&lt;/h2&gt;
&lt;p&gt;最もシンプルな実装は、スキャンと同時にデータを登録してしまうパターンです。棚卸しや入庫確認のように、コードを読んだらその場で記録したい場面に向いています。&lt;/p&gt;
&lt;p&gt;OnScanプロパティに直接Patch関数を書きます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Patch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    棚卸リスト,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Defaults&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(棚卸リスト),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        バーコード: BarcodeScanner1.Value,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        スキャン日時: &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Now&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        スキャン者: &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;User&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;().FullName&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;スキャンした瞬間にSharePointリストへ書き込まれます。スキャン日時にはNow()、スキャン者にはUser().FullNameを自動セットするので、誰がいつ読んだかも記録に残ります。&lt;/p&gt;
&lt;h3 id=&quot;確認ステップを挟むパターン&quot;&gt;確認ステップを挟むパターン&lt;/h3&gt;
&lt;p&gt;スキャンしてすぐに登録するのではなく、一旦内容を確認してから保存したい場合は、OnScanで変数にセットし、別の保存ボタンで登録するフローにします。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// OnScan&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Set&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(varScannedCode, BarcodeScanner1.Value);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Set&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(varShowConfirm, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 保存ボタンのOnSelect&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Patch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    棚卸リスト,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Defaults&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(棚卸リスト),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        バーコード: varScannedCode,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        スキャン日時: &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Now&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        スキャン者: &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;User&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;().FullName&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Set&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(varShowConfirm, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;varShowConfirmをtrueにした瞬間に確認用のコンテナ（スキャン値を表示するパネル）が表示され、保存ボタンを押したら登録してパネルを閉じる、というUXになります。誤スキャンのやり直しも、保存前なら変数を書き換えるだけで対応できます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-validation-barcode-scanner03.B_jStKDR_Z1yDTho.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;対応コードの種類と注意点&quot;&gt;対応コードの種類と注意点&lt;/h2&gt;
&lt;p&gt;Power Appsのバーコードスキャナーが対応しているコード形式は複数あります。主なものは次のとおりです。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;コード形式&lt;/th&gt;
&lt;th&gt;用途の例&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;QRコード&lt;/td&gt;
&lt;td&gt;URLや文字列の埋め込み、社内帳票&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;コード128&lt;/td&gt;
&lt;td&gt;物流・在庫管理の国際標準&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;JANコード（EAN-13）&lt;/td&gt;
&lt;td&gt;小売商品のバーコード&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;コード39&lt;/td&gt;
&lt;td&gt;製造業・医療の部品管理&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;注意点として、暗い環境や印刷が薄いバーコードはスキャン精度が下がります。現場テストは必ず実機スマホで行い、実際の印刷物でスキャンできるかを確認してください。PCのプレビューではスキャン機能は動作しません。&lt;/p&gt;
&lt;p&gt;また、スキャンした値はあくまで文字列として取得されます。数値として扱いたい場合はValue関数で変換が必要です。&lt;a href=&quot;/powerapps-patch-update-record/&quot;&gt;Patchで既存レコードを更新するパターン&lt;/a&gt;も合わせて確認しておくと、スキャンデータを既存マスターに紐付ける実装がスムーズになります。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;バーコードスキャナーコントロールをOnScanとPatchと組み合わせるだけで、手入力ゼロの登録フローが実現します。コードを読むだけで日時も担当者も自動記録されるので、ユーザーの負担が最小になり、ミスも入り込む余地がなくなります。&lt;/p&gt;
&lt;p&gt;入力させないことが最強のバリデーションです。現場にバーコードやQRコードがあるなら、ぜひスキャン入力を取り入れてみてください。&lt;/p&gt;</content:encoded></item><item><title>北海道なのに新宿区？Power Appsで存在しない組み合わせを防ぐ連動プルダウンの作り方</title><link>https://shiminkaihatsu.com/powerapps-validation-cascading-dropdown/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-validation-cascading-dropdown/</guid><description>北海道なのに新宿区？Power Appsで存在しない組み合わせを防ぐ連動プルダウンの作り方</description><pubDate>Sat, 11 Apr 2026 11:26:47 GMT</pubDate><content:encoded>&lt;p&gt;都道府県で北海道を選んでいるのに、市区町村で新宿区が選べてしまう、こんな入力ミスがデータに混入すると、集計やレポートの段階で大きな問題になります。Power Apps では連動プルダウン（カスケードドロップダウン）を実装することで、存在しない組み合わせをそもそも選べないようにできます。この記事では、Filter 関数を使った連動プルダウンの作り方を、マスターデータの準備から動作確認まで順を追って解説します。&lt;/p&gt;
&lt;h2 id=&quot;連動プルダウンが必要な理由&quot;&gt;連動プルダウンが必要な理由&lt;/h2&gt;
&lt;p&gt;Power Apps でドロップダウンを単体で使う場合、各コントロールは互いに独立しています。都道府県の選択結果に関係なく、市区町村の一覧には全都道府県の市区町村がすべて並んでしまいます。ユーザーは意図せず不正な組み合わせを選べてしまい、後工程でデータを使う人が困ることになります。&lt;/p&gt;
&lt;p&gt;物流系の社内アプリでこのパターンを経験しました。配送先の都道府県と市区町村を別々のドロップダウンで選ばせていたのですが、誤った組み合わせのデータが数件混入し、配送先への連絡で問題が発生したのです。連動プルダウンに変えてからは、そういったミスは完全になくなりました。&lt;/p&gt;
&lt;p&gt;連動プルダウンは業務アプリでよく登場するパターンです。都道府県と市区町村に限らず、大カテゴリと小カテゴリ、部署と担当者、製品ラインとモデル番号など、親子関係のある選択肢ならどこでも同じ設計が使えます。&lt;/p&gt;
&lt;h2 id=&quot;マスターデータの準備&quot;&gt;マスターデータの準備&lt;/h2&gt;
&lt;p&gt;連動プルダウンを実装するには、大分類と小分類を紐づけたマスターデータが必要です。SharePoint リストを使うのが最も一般的で、委任にも対応しているため大量データにも対応できます。&lt;/p&gt;
&lt;p&gt;SharePoint リストの構成はシンプルです。大分類列（例：Prefecture / 都道府県）と小分類列（例：City / 市区町村）の2列を持つリストを作成します。行ごとに「北海道, 札幌市」「北海道, 函館市」「東京都, 新宿区」のように、大分類と小分類の組み合わせを1行ずつ登録します。&lt;/p&gt;
&lt;p&gt;データ件数が100件以下の場合は、SharePoint リストの代わりにコレクションをアプリ起動時に作成する方法もあります。&lt;a href=&quot;/powerapps-collection/&quot;&gt;コレクションの基本的な使い方&lt;/a&gt;を理解していれば、OnStart でマスターデータを定義するアプローチも取れます。ただし将来的なデータ追加のしやすさを考えると、SharePoint リストで管理するほうが運用しやすいです。&lt;/p&gt;
&lt;h2 id=&quot;filter-関数で連動させる実装&quot;&gt;Filter 関数で連動させる実装&lt;/h2&gt;
&lt;p&gt;マスターデータが用意できたら、子のドロップダウンの Items プロパティに Filter 関数を設定します。親のドロップダウンで選ばれた値を条件として、対応する小分類だけを絞り込むのが基本の考え方です。&lt;/p&gt;
&lt;h3 id=&quot;設定手順&quot;&gt;設定手順&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;都道府県を選ぶ親ドロップダウン（dd_Prefecture）をキャンバスに配置し、Items に SharePoint リストや Distinct 関数で重複除去した都道府県一覧を設定します&lt;/li&gt;
&lt;li&gt;市区町村を選ぶ子ドロップダウン（dd_City）を配置し、Items プロパティに下記の Filter 式を設定します&lt;/li&gt;
&lt;li&gt;アプリをプレビューして、親を選択したときに子の選択肢が絞り込まれることを確認します&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// dd_City の Items プロパティ&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Filter&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(MasterList, Prefecture &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; dd_Prefecture.Selected.Value)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-validation-cascading-dropdown01.CR8gHtlL_CHaqs.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;/powerapps-gallery-filter-basic/&quot;&gt;Filter 関数の基本的な書き方&lt;/a&gt;はギャラリーの絞り込みでよく使いますが、ドロップダウンの Items プロパティにも同じように使えます。Filter の書き方に慣れていない方はそちらの記事も合わせて読むと理解が深まります。&lt;/p&gt;
&lt;h3 id=&quot;親を変更したときに子をリセットする&quot;&gt;親を変更したときに子をリセットする&lt;/h3&gt;
&lt;p&gt;連動プルダウンで見落としがちなのが、親の選択を変えたときの子のリセットです。例えば北海道を選んで札幌市を選択した後、都道府県を東京都に変更しても、子のドロップダウンには札幌市が選択状態のまま残ることがあります。これは実際には東京都に存在しない市区町村が選択された状態なので、データとして不正になります。&lt;/p&gt;
&lt;p&gt;対策は親ドロップダウンの OnChange プロパティで子をリセットすることです。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// dd_Prefecture の OnChange プロパティ&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Reset&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(dd_City)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;この1行を追加するだけで、親を変更したときに子の選択が自動的にクリアされます。&lt;/p&gt;
&lt;h2 id=&quot;allowemptyselection-と-isblank-を組み合わせた必須チェック&quot;&gt;AllowEmptySelection と IsBlank を組み合わせた必須チェック&lt;/h2&gt;
&lt;p&gt;通常のドロップダウンは初期状態で必ず何かが選択されています。アプリを起動した瞬間から先頭の選択肢が選ばれた状態になるため、IsBlank でチェックしても必ず false が返ってきます。これでは未選択状態を検出できません。&lt;/p&gt;
&lt;p&gt;未選択状態を許可したい場合は、ドロップダウンの AllowEmptySelection プロパティを true に設定します。これにより何も選択されていない状態が作れるようになり、IsBlank(dd_Prefecture.Selected.Value) が正しく true を返すようになります。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 必須チェックの例（AllowEmptySelection: true の場合）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;IsBlank&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(dd_Prefecture.Selected.Value)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;必須入力チェックの全体設計については、&lt;a href=&quot;/powerapps-validation-required-error/&quot;&gt;エラーメッセージの実装パターン&lt;/a&gt;でも詳しく解説しています。送信ボタンの制御や varFormSubmitted パターンと組み合わせることで、連動プルダウンの必須チェックも同じ設計の中に自然に組み込めます。&lt;/p&gt;
&lt;h2 id=&quot;3階層以上の連動プルダウン&quot;&gt;3階層以上の連動プルダウン&lt;/h2&gt;
&lt;p&gt;都道府県→市区町村→町名のように3階層になる場合も、同じパターンを繰り返すだけです。第2階層の子ドロップダウンをさらに親として、第3階層の子ドロップダウンの Items に Filter を設定します。&lt;/p&gt;
&lt;p&gt;ただし、階層が増えるほどリセット処理も階段状に必要になります。第1階層を変更したときは第2・第3階層をリセット、第2階層を変更したときは第3階層をリセット、という具合です。OnChange の中に Reset を複数書けば対応できます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// dd_Prefecture の OnChange（3階層の場合）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Reset&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(dd_City);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Reset&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(dd_Town)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// dd_City の OnChange&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Reset&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(dd_Town)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;階層が深い選択肢を扱う場合、マスターデータの列設計が重要になります。それぞれの階層に対応した列を用意し、Filter の条件が確実に一致するように列名と値の形式を統一しておきましょう。&lt;/p&gt;
&lt;h2 id=&quot;まとめ選ばせない設計が後工程を守る&quot;&gt;まとめ：選ばせない設計が、後工程を守る&lt;/h2&gt;
&lt;p&gt;連動プルダウンの実装は Filter 関数1行で実現できます。難しい処理はありませんが、親変更時のリセット処理や AllowEmptySelection の設定を忘れると、不正なデータが入り込む穴が残ります。設計の細部まで意識することが、現場で使い続けられるアプリを作る基本です。&lt;/p&gt;
&lt;p&gt;バリデーション設計の全体像は入力ミス防止ガイドにまとめています。個々のテクニックを組み合わせて、ユーザーが迷わず正確に入力できるフォームを作り上げましょう。市民開発とはこういう地道な設計の積み重ねだと、私は思っています。&lt;/p&gt;
&lt;p&gt;入力エラーに関する一覧は&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-validation-guide/&quot;&gt;こちらの記事&lt;/a&gt;をご覧ください。&lt;/p&gt;</content:encoded></item><item><title>未来の日付は入力禁止！Power Appsのカレンダーで選択可能日を制限する方法</title><link>https://shiminkaihatsu.com/powerapps-validation-datepicker-limit/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-validation-datepicker-limit/</guid><description>未来の日付は入力禁止！Power Appsのカレンダーで選択可能日を制限する方法</description><pubDate>Sat, 11 Apr 2026 11:26:46 GMT</pubDate><content:encoded>&lt;p&gt;経費精算で「2年後の日付」が入力されていたことがあります。操作ミスとはわかっていても、システムが弾いてくれれば防げた話です。&lt;/p&gt;
&lt;p&gt;Power Appsの日付ピッカー（Date Picker）は、デフォルトでは過去・未来を問わず、あらゆる日付を選択できてしまいます。ちょっとした設定を追加するだけで、選択できる範囲をぐっと絞れます。&lt;/p&gt;
&lt;h2 id=&quot;なぜ日付の誤入力が起きるのか&quot;&gt;なぜ日付の誤入力が起きるのか&lt;/h2&gt;
&lt;p&gt;経費精算・勤怠申請・予定登録など、日付を扱うフォームはPower Appsの定番用途です。しかし現場では、スマホ操作中にうっかりスクロールしすぎて数ヶ月先を選んでしまったり、前月の申請を見ながら入力してそのまま日付を更新し忘れたりと、ありえない日付が登録されるトラブルが後を絶ちません。&lt;/p&gt;
&lt;p&gt;データを集計する側は、Excelで月次集計をかけた際に「なぜか未来の行がある」という状況に直面し、その調査と修正に余計な時間を取られます。問題は入力者のミスだけでなく、そもそも選べてしまう設計にあります。&lt;/p&gt;
&lt;p&gt;Power Appsの&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-form-basics/&quot;&gt;フォームコントロールの基本&lt;/a&gt;を理解していれば、日付ピッカーにも同じ考え方が使えます。コントロールのプロパティで制御するのが基本です。&lt;/p&gt;
&lt;h2 id=&quot;モダン日付ピッカーのstartdate--enddateプロパティ&quot;&gt;モダン日付ピッカーのStartDate / EndDateプロパティ&lt;/h2&gt;
&lt;p&gt;Power Appsの日付ピッカーには2種類あります。クラシックとモダンです。現在新しく追加されるコントロールはモダンが主流であり、この記事ではモダン版を前提にします。&lt;/p&gt;
&lt;p&gt;モダン日付ピッカーには、&lt;strong&gt;StartDate&lt;/strong&gt;と&lt;strong&gt;EndDate&lt;/strong&gt;という2つのプロパティがあります。この2つを設定するだけで、カレンダー上で選択できる日付の範囲をコントロールが自動的に制限してくれます。バリデーション式を別途書く必要はありません。&lt;/p&gt;
&lt;p&gt;設定方法は非常にシンプルです。&lt;/p&gt;
&lt;h3 id=&quot;過去90日今日だけを選択可能にする設定&quot;&gt;過去90日〜今日だけを選択可能にする設定&lt;/h3&gt;
&lt;p&gt;経費精算のような過去の日付のみのユースケースに向いた設定です。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;画面にモダン日付ピッカーを追加します&lt;/li&gt;
&lt;li&gt;コントロールを選択した状態で、右ペインまたは数式バーから &lt;strong&gt;StartDate&lt;/strong&gt; プロパティを選びます&lt;/li&gt;
&lt;li&gt;次の式を入力します&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;DateAdd&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Today&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(), &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;90&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-validation-datepicker-limit01.Bszi3lBi_29NNMd.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;p&gt;続いて &lt;strong&gt;EndDate&lt;/strong&gt; プロパティに以下を設定します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Today&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;これだけです。カレンダーを開くと、今日より先の日付はグレーアウトされてタップできない状態になります。90日より前の日付も同様です。バリデーション式を一行も書かずに、コントロール自体が入力範囲を守ってくれます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-validation-datepicker-limit02.DctWreIV_Z1PyrxT.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;未来の予定登録今日1年後を許可する設定&quot;&gt;未来の予定登録（今日〜1年後）を許可する設定&lt;/h3&gt;
&lt;p&gt;会議室予約や作業予定登録など、未来の日付を入力させたい場合は逆の設定にします。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;StartDate：&lt;code&gt;Today()&lt;/code&gt;（今日以前は選択不可）&lt;/li&gt;
&lt;li&gt;EndDate：&lt;code&gt;DateAdd(Today(), 365)&lt;/code&gt;（1年後以降は選択不可）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;こちらも設定値を変えるだけで、同じ考え方が使えます。DateAdd関数の第二引数の数値を変えれば、任意の日数に調整できます。&lt;/p&gt;
&lt;h3 id=&quot;startdate--enddate-を設定しない場合の挙動&quot;&gt;StartDate / EndDate を設定しない場合の挙動&lt;/h3&gt;
&lt;p&gt;これらのプロパティを設定しない（またはBlankにした）場合、日付ピッカーは制限なしの状態になります。過去も未来も自由に選べてしまうため、申請系フォームには必ず設定する習慣をつけることをおすすめします。&lt;/p&gt;
&lt;h2 id=&quot;クラシック版との違いonchangeバリデーションパターン&quot;&gt;クラシック版との違い：OnChangeバリデーションパターン&lt;/h2&gt;
&lt;p&gt;クラシック日付ピッカーにはStartDate/EndDateがありません。そのため、選択後に検知するアプローチが必要になります。&lt;/p&gt;
&lt;p&gt;具体的には、コントロールの &lt;strong&gt;OnChange&lt;/strong&gt; プロパティにIf関数を書き、条件を満たさない場合にエラー変数をTrueにします。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    DateValue1.SelectedDate &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; Today&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Set&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(varDateError, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Set&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(varDateError, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;そして画面上のラベルコントロールに「未来の日付は選択できません」というメッセージを配置し、その &lt;strong&gt;Visible&lt;/strong&gt; プロパティを &lt;code&gt;varDateError&lt;/code&gt; に設定します。このラベルはエラーのある間だけ表示されます。&lt;/p&gt;
&lt;p&gt;変数を使ったエラーフラグの管理については、&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-variables/&quot;&gt;グローバル変数とコンテキスト変数の使い分けガイド&lt;/a&gt;を参照してください。&lt;/p&gt;
&lt;p&gt;ただし現実的には、クラシックコントロールを今から新規で使う機会は少なくなっています。既存アプリの改修でクラシックが残っている場合はOnChangeパターンで対応し、新規作成ならモダン版のStartDate/EndDateを使うのがよいです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-validation-datepicker-limit03.DfiwCvGq_HeoKq.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;送信ボタンと連動させる&quot;&gt;送信ボタンと連動させる&lt;/h2&gt;
&lt;p&gt;日付の範囲制限とあわせて、送信ボタンのDisplayModeも制御するとより堅牢になります。&lt;/p&gt;
&lt;p&gt;クラシックコントロールを使ってOnChangeパターンで実装した場合、&lt;code&gt;varDateError&lt;/code&gt; が true のときはボタンを無効化できます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(varDateError, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;DisplayMode.Disabled&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;DisplayMode.Edit&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;モダン日付ピッカーの場合、StartDate/EndDateの範囲外は物理的に選べないため、原則として送信ボタンの追加制御は不要です。ただし、日付が未選択（Blank）のまま送信されるリスクは残ります。IsBlankでの必須チェックは別途行う必要があります。&lt;/p&gt;
&lt;p&gt;必須チェックの組み合わせ方については、&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-validation-required-error/&quot;&gt;必須チェックとエラーメッセージの作り方&lt;/a&gt;で詳しく解説しています。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-validation-datepicker-limit04.D8ZVXiyD_ZSXT6v.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;dateadd関数の基本&quot;&gt;DateAdd関数の基本&lt;/h2&gt;
&lt;p&gt;この記事で繰り返し登場したDateAdd関数について、簡単に補足しておきます。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;DateAdd(基準日, 加算する数値, 単位)&lt;/code&gt; という構文で、基準日に対して指定した期間を加減算した日付を返します。単位はデフォルトでは「日（Days）」です。月単位や年単位で制限したい場合は第3引数を指定します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;DateAdd&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Today&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(), &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;TimeUnit.Months&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)  &lt;/span&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 3ヶ月前&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;DateAdd&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Today&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(), &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;TimeUnit.Years&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)    &lt;/span&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 1年後&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;月末が存在しない日付（例：2月31日）は自動的に調整されます。経費申請なら「当月1日〜今日」、有給申請なら「今日〜3ヶ月後」のように、業務ルールに合わせて柔軟に設定できます。&lt;/p&gt;
&lt;h2 id=&quot;入力ミス防止の考え方選ばせないが最強&quot;&gt;入力ミス防止の考え方：「選ばせない」が最強&lt;/h2&gt;
&lt;p&gt;バリデーションの考え方として、エラーを検知して後から弾くより、そもそも選べない設計にするほうが強いです。モダン日付ピッカーのStartDate/EndDateはまさにその考え方を体現したプロパティです。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-validation-guide/&quot;&gt;Power Apps入力ミス防止ガイド&lt;/a&gt;では、こうした「入力させない」設計の全体像を整理しています。フォーマット制御・選択制御・UX向上・自動化の4アプローチから、現場に合う手段を選んでもらえればと思います。&lt;/p&gt;
&lt;p&gt;コントロールのプロパティひとつ変えるだけで、誰も傷つかないフォームが作れます。地味ですが、こういうひと手間が積み重なって使いやすいアプリができていくものです。&lt;/p&gt;</content:encoded></item><item><title>そのデータ、もうあります！Power Appsで既存データの重複登録を事前に防ぐ</title><link>https://shiminkaihatsu.com/powerapps-validation-duplicate-check/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-validation-duplicate-check/</guid><description>そのデータ、もうあります！Power Appsで既存データの重複登録を事前に防ぐ</description><pubDate>Sat, 11 Apr 2026 11:26:45 GMT</pubDate><content:encoded>&lt;p&gt;同じ社員番号が2件登録されていた、そのせいでVLOOKUPが意図しない行を返し、給与計算がおかしくなった。そんなトラブルを経験したことはないでしょうか。Power Appsで重複登録を防ぐには、LookUp関数を使った事前チェックが効果的です。入力ミス防止の設計全体については&lt;a href=&quot;/powerapps-validation-guide/&quot;&gt;Power Apps入力ミス防止ガイド&lt;/a&gt;でまとめているので、あわせて参考にしてください。&lt;/p&gt;
&lt;p&gt;この記事では、LookUp関数でデータの重複を判定し、送信ボタンをDisabledにするガードレールの作り方を解説します。さらに応用として、自己割り当て禁止（ログインユーザー自身を担当者に選べないようにする）パターンも紹介します。&lt;/p&gt;
&lt;h2 id=&quot;重複登録が引き起こす現場の問題&quot;&gt;重複登録が引き起こす現場の問題&lt;/h2&gt;
&lt;p&gt;取引先管理アプリに同じ会社名が複数登録されると、担当者ごとに異なるレコードを更新してしまい、情報が分断されます。社員番号の重複なら給与・人事データへの影響は深刻です。発覚するのが後になればなるほど、修正のコストが跳ね上がります。&lt;/p&gt;
&lt;p&gt;問題は、Power Appsの標準フォームには重複チェック機能が内蔵されていないことです。SubmitForm関数でSharePointに保存する際、既存データと同じ値であっても構わず書き込んでしまいます。防ぐには自分で判定ロジックを組み込む必要があります。&lt;/p&gt;
&lt;p&gt;一応私は社内でPower Platformを教える立場なので、新しくアプリを作る人から、気づいたら同じデータが2件あるという相談をよく受けます。ほぼ毎回、重複チェックが実装されていないことが原因です。&lt;/p&gt;
&lt;h2 id=&quot;lookup関数で既存データの存在を確認する&quot;&gt;LookUp関数で既存データの存在を確認する&lt;/h2&gt;
&lt;p&gt;LookUp関数は、データソースから条件に一致する最初のレコードを返す関数です。一致するレコードがなければblankを返すので、IsBlankと組み合わせることで重複の有無を判定できます。&lt;a href=&quot;/powerapps-filter-search-lookup/&quot;&gt;LookUp関数の基本的な使い方&lt;/a&gt;については別記事で詳しく解説しているので、関数の構文に不安がある方は先に確認しておくと理解が深まります。&lt;/p&gt;
&lt;p&gt;基本的な判定式は次のとおりです。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;IsBlank&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;LookUp&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(社員マスター, 社員番号 &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; TextInput_EmpNo.Text))&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;この式は、社員マスターに同じ社員番号が存在する場合にtrueを返します。falseなら重複なし、trueなら重複ありです。&lt;/p&gt;
&lt;h3 id=&quot;送信ボタンをdisabledにして登録をブロックする&quot;&gt;送信ボタンをDisabledにして登録をブロックする&lt;/h3&gt;
&lt;p&gt;重複チェックの結果を送信ボタンのDisplayModeプロパティに反映させます。重複が検出された場合は送信できないようにします。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    !&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;IsBlank&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;LookUp&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(社員マスター, 社員番号 &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; TextInput_EmpNo.Text)),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;    DisplayMode.Disabled&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;    DisplayMode.Edit&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;これで、既存の社員番号が入力されている間はボタンが押せなくなります。ボタンは非表示にするのではなく、Disabledのまま表示し続けることが重要です。消してしまうとユーザーがどこに保存ボタンがあるか分からなくなります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-validation-duplicate-check01.B3D4j4su_ZbSqOW.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;エラーメッセージで理由を伝える&quot;&gt;エラーメッセージで理由を伝える&lt;/h3&gt;
&lt;p&gt;送信ボタンがグレーアウトするだけでは、なぜ送れないかユーザーが分かりません。入力フィールドの直下にラベルコントロールを配置し、重複検出時のみ表示させます。&lt;/p&gt;
&lt;p&gt;ラベルのVisibleプロパティに次の式を設定します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;IsBlank&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;LookUp&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(社員マスター, 社員番号 &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; TextInput_EmpNo.Text))&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ラベルのTextプロパティには この社員番号はすでに登録されています という文言を設定し、Colorプロパティは赤にします。これで、重複があるときだけ入力欄のすぐ下に赤いメッセージが表示されます。&lt;/p&gt;
&lt;h2 id=&quot;委任の警告に注意する&quot;&gt;委任の警告に注意する&lt;/h2&gt;
&lt;p&gt;LookUp関数はSharePointやDataverseに対して委任可能な関数ですが、フィルター条件によっては委任の警告が出ることがあります。特に文字列の完全一致（=）は委任されますが、関数を使った変換（例：Lower関数で大文字小文字を無視する）は委任できないことがあります。&lt;/p&gt;
&lt;p&gt;委任については&lt;a href=&quot;/powerapps-delegation-warning/&quot;&gt;委任の警告と対処法&lt;/a&gt;の記事で詳しく解説しています。大量データを扱うアプリでは、委任可能な書き方になっているかを必ず確認してください。500件を超えるデータで先頭500件しか検索されない状態だと、重複チェックとして機能しなくなります。&lt;/p&gt;
&lt;h2 id=&quot;応用自己割り当て禁止のバリデーション&quot;&gt;応用：自己割り当て禁止のバリデーション&lt;/h2&gt;
&lt;p&gt;重複チェックの発想を応用すると、ログインユーザー自身を担当者に選べないようにするバリデーションも実装できます。例えば、承認フローで申請者と承認者が同じ人にならないようにする制御です。&lt;/p&gt;
&lt;p&gt;ドロップダウンで担当者を選ぶ場合、選択したユーザーのIDとログインユーザーのIDを比較します。Office365Usersコネクタを使えばログインユーザーのIDを取得できます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    Dropdown_Approver.Selected.Id &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; Office365Users.&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;MyProfileV2&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;().id,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;    DisplayMode.Disabled&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;    DisplayMode.Edit&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;自分自身のIDが選択されている間は送信ボタンがDisabledになり、承認者に自分を指定した状態での送信を防げます。モダンコントロールのドロップダウンでは、ValidationStateプロパティを使った別の実装方法もあります。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;    And&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(varFormSubmitted, Self.Selected.Id &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; Office365Users.&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;MyProfileV2&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;().id),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;    &quot;Error&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;    &quot;None&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;varFormSubmittedは送信ボタンを押したタイミングでtrueに変える変数です。この方法だとフォームの送信を試みたときにだけエラーが発動するので、最初から赤枠が出てユーザーを混乱させることがありません。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-validation-duplicate-check02.BCkWiZTq_1Tjwfg.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;重複チェックの実装はシンプルです。LookUpで既存レコードを検索し、IsBlankで存在確認、結果を送信ボタンのDisplayModeとエラーラベルのVisibleに反映させる。この3ステップで、ユーザーが気づかないまま重複データを登録してしまう事故をほぼ防げます。&lt;/p&gt;
&lt;p&gt;データが壊れてから直すより、入口で守る方がずっと楽です。フォームを作るたびに重複チェックをセットで入れる習慣にすると、後から泣くことが格段に減ります。&lt;/p&gt;</content:encoded></item><item><title>スマホ入力のイライラ解消！Power Appsで数値用キーボードを自動表示させる設定</title><link>https://shiminkaihatsu.com/powerapps-validation-format-number/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-validation-format-number/</guid><description>スマホ入力のイライラ解消！Power Appsで数値用キーボードを自動表示させる設定</description><pubDate>Sat, 11 Apr 2026 11:26:45 GMT</pubDate><content:encoded>&lt;p&gt;スマホで数量を入力するたびに、日本語キーボードから数字キーボードに切り替えるのは地味にストレスです。Power Appsのテキスト入力コントロールにはFormatプロパティという設定があり、これを変えるだけでスマホに数値専用キーボードを自動表示させることができます。入力ミス防止の設計全体については&lt;a href=&quot;/powerapps-validation-guide/&quot;&gt;Power Apps入力ミス防止ガイド&lt;/a&gt;でまとめているので、スマホ向けフォーム設計の参考に合わせてどうぞ。&lt;/p&gt;
&lt;p&gt;この記事では、Formatプロパティの設定方法と、IsNumeric関数を使って数値以外の入力を弾くバリデーションの組み合わせ方を解説します。&lt;/p&gt;
&lt;h2 id=&quot;なぜスマホのキーボード設定が重要なのか&quot;&gt;なぜスマホのキーボード設定が重要なのか&lt;/h2&gt;
&lt;p&gt;現場で使われるPower Appsアプリの多くは、スマートフォンで操作されます。倉庫での在庫数入力、営業の訪問件数記録、工場での作業時間報告。どれもスマホから数字を入力する場面です。&lt;/p&gt;
&lt;p&gt;デフォルト設定のままだと、テキスト入力コントロールを選択したときに表示されるキーボードは日本語・テキスト用のものです。数字を入力するには、キーボードを数字モードに切り替えてから入力する手間がかかります。1入力あたり数秒の操作でも、1日100件の入力があれば積み重なります。&lt;/p&gt;
&lt;p&gt;加えて、テキスト用キーボードからだと誤って全角数字や漢字を入力してしまうリスクもあります。後から集計するときに数値として扱えないデータが混入する原因になります。&lt;/p&gt;
&lt;h2 id=&quot;formatプロパティで数値専用キーボードを表示する&quot;&gt;Formatプロパティで数値専用キーボードを表示する&lt;/h2&gt;
&lt;p&gt;テキスト入力コントロールにはFormatプロパティという設定があります。デフォルトはTextFormat.Textですが、これをTextFormat.Numberに変更するだけで、スマホでそのコントロールをタップしたときに数値専用キーボードが自動表示されます。&lt;/p&gt;
&lt;h3 id=&quot;formatプロパティの設定手順&quot;&gt;Formatプロパティの設定手順&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Power Appsの編集画面でテキスト入力コントロールを選択する&lt;/li&gt;
&lt;li&gt;右側のプロパティパネル、またはツリービューから数式バーを表示する&lt;/li&gt;
&lt;li&gt;プロパティのドロップダウンからFormatを選ぶ&lt;/li&gt;
&lt;li&gt;値をTextFormat.Numberに変更する&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-validation-format-number01.rSwvX551_Z1AkTy6.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;p&gt;これだけで、スマホでそのフィールドをタップすると数値専用キーボードが表示されます。0〜9のキーとマイナス符号、小数点が並ぶシンプルなキーボードで、誤入力のリスクが大幅に下がります。&lt;/p&gt;
&lt;p&gt;社内でスマホ向けの日報アプリを作ったとき、この設定を入れる前後でユーザーから聞こえる声がまったく変わりました。切り替え操作が不要になっただけで、体感的に入力がずいぶんスムーズになったという感想をもらいました。&lt;/p&gt;
&lt;h2 id=&quot;isnumeric関数で数値以外の入力を弾く&quot;&gt;IsNumeric関数で数値以外の入力を弾く&lt;/h2&gt;
&lt;p&gt;Formatプロパティを変えても、PCブラウザからアプリを使う人は通常のキーボードで入力します。また、スマホでも数値専用キーボードからテキストを入力できる環境もあります。フォームに数値しか受け付けたくない場合は、IsNumeric関数を使ったバリデーションを追加するのが確実です。&lt;/p&gt;
&lt;p&gt;IsNumeric関数は、渡した文字列が数値として解釈できるかどうかをtrue/falseで返します。テキスト入力コントロールのOnChangeプロパティに条件チェックを入れておくと、数値以外が入力されたときに自動でリセットできます。&lt;/p&gt;
&lt;h3 id=&quot;onchangeで入力値をリアルタイム検証する&quot;&gt;OnChangeで入力値をリアルタイム検証する&lt;/h3&gt;
&lt;p&gt;テキスト入力コントロールのOnChangeプロパティに次の数式を設定します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;    Not&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;IsNumeric&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(TextInput1.Text)),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Reset&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(TextInput1)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;数値として解釈できない文字が入力されたとき、Reset関数でコントロールを空に戻します。ユーザーが文字を入力しようとしても、即座に消えるためテキストが登録されません。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-validation-format-number02.C2rOE_PU_1xwkYf.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;notifyで理由をユーザーに伝える&quot;&gt;Notifyで理由をユーザーに伝える&lt;/h3&gt;
&lt;p&gt;黙ってリセットするだけでは、なぜ入力が消えたかわからずユーザーが戸惑います。Notify関数でポップアップ通知を出すと、入力ルールが明確になります。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;    Not&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;IsNumeric&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(TextInput1.Text)),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Notify&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;数値を入力してください&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;NotificationType.Error&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Reset&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(TextInput1)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Notify関数の第2引数にNotificationType.Errorを渡すと、画面上部に赤いエラーバナーが表示されます。NotificationType.Warningなら黄色、NotificationType.Successなら緑のバナーになります。&lt;/p&gt;
&lt;h2 id=&quot;数値の範囲チェックも組み合わせる&quot;&gt;数値の範囲チェックも組み合わせる&lt;/h2&gt;
&lt;p&gt;数値であることを確認するだけでなく、値の範囲チェックも一緒に入れておくと実用的なバリデーションになります。例えば年齢チェック（18歳以上のみ受付）や、個数の上限チェック（999個まで）などは現場でよく必要になります。&lt;/p&gt;
&lt;p&gt;Value関数でテキストを数値に変換してから比較します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;    Or&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;        Not&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;IsNumeric&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(TextInput1.Text)),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;        Value&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(TextInput1.Text) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;        Value&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(TextInput1.Text) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 999&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    ),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Notify&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;1〜999の数値を入力してください&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;NotificationType.Error&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Reset&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(TextInput1)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Or関数で複数の条件をまとめているので、数値でない場合も範囲外の場合も同じエラーメッセージで対処できます。条件によってメッセージを出し分けたい場合は、If文を入れ子にして対応します。&lt;/p&gt;
&lt;p&gt;なお、このようなバリデーション設計全体の考え方については、&lt;a href=&quot;/powerapps-validation-required-error/&quot;&gt;必須チェックとエラーメッセージの作り方&lt;/a&gt;の記事でIsBlankやIsEmpty関数を使った実装パターンと合わせて解説しています。フォームバリデーションの設計に取り組む場合は、あわせて確認しておくと全体像がつかみやすいです。&lt;/p&gt;
&lt;h2 id=&quot;入力ミス防止の設計は入口で決まる&quot;&gt;入力ミス防止の設計は入口で決まる&lt;/h2&gt;
&lt;p&gt;Power Appsのバリデーション設計は、&lt;a href=&quot;/powerapps-container-guide/&quot;&gt;コンテナガイド&lt;/a&gt;で解説しているUI設計の原則と同じで、後から直すより最初に入れておく方がコストが低いです。Formatプロパティの変更とIsNumericによる検証は、どちらも数分でできる実装です。&lt;/p&gt;
&lt;p&gt;特にスマホ向けアプリでは、入力しやすさがアプリの使用率に直結します。ユーザーがストレスなく入力できる環境を整えることが、正確なデータ収集への近道です。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;テキスト入力コントロールのFormatプロパティをTextFormat.Numberにすることで、スマホに数値専用キーボードを自動表示できます。さらにIsNumericとNotify・Resetを組み合わせることで、数値以外の入力を弾く確実なバリデーションになります。&lt;/p&gt;
&lt;p&gt;設定そのものはシンプルですが、現場のユーザーに与える影響は小さくありません。使いやすさと正確なデータを両立させるために、ぜひフォーム設計の標準として取り入れてみてください。&lt;/p&gt;</content:encoded></item><item><title>全角で打たないで…を防ぐ！Power Appsで全角半角の混在や不要な空白を自動制御する方法</title><link>https://shiminkaihatsu.com/powerapps-validation-fullwidth-halfwidth/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-validation-fullwidth-halfwidth/</guid><description>全角で打たないで…を防ぐ！Power Appsで全角半角の混在や不要な空白を自動制御する方法</description><pubDate>Sat, 11 Apr 2026 11:26:45 GMT</pubDate><content:encoded>&lt;p&gt;全角で打たないでほしい。現場でそう思ったことはありませんか。Power Appsでフォームを作ったはいいものの、入力されたデータを後でExcelに取り込んだらVLOOKUPがことごとくエラー。原因を調べると、ある人は全角スペース、ある人は全角英数字で名前を入力していた。そんな経験が私にも何度もあります。&lt;/p&gt;
&lt;p&gt;この記事では、Power Appsで全角・半角の混在や不要なスペースを自動制御する方法を解説します。IsMatch関数とTrim関数を組み合わせれば、入力ミスを保存前に食い止めることができます。&lt;/p&gt;
&lt;h2 id=&quot;なぜ全角半角の混在が問題になるのか&quot;&gt;なぜ全角半角の混在が問題になるのか&lt;/h2&gt;
&lt;p&gt;Power Appsのフォームから入力されたデータは、SharePointリストやExcelシートに保存されます。このとき、VLOOKUPやCOUNTIFといった集計関数は文字の一致判定が厳密で、全角のAと半角のAは別の文字として扱われます。&lt;/p&gt;
&lt;p&gt;例えば、20人の営業担当がそれぞれ日報を入力するアプリを想像してください。担当者名を手入力する欄があれば、ある人は全角で入力し、ある人は半角で入力します。月に400件、半年で2,400件のデータが蓄積されたとき、Excel側でピボットを組もうとして同じ人の集計値がバラバラに出てくる。これは実際によくある話です。&lt;/p&gt;
&lt;p&gt;問題はデータが登録された後では修正が大変なことです。入力時点で制御するのが最も効率的です。&lt;/p&gt;
&lt;h2 id=&quot;ismatch関数で全角文字をリアルタイム検知する&quot;&gt;IsMatch関数で全角文字をリアルタイム検知する&lt;/h2&gt;
&lt;p&gt;Power AppsのIsMatch関数は、入力値が指定したパターンに一致するかどうかをtrue/falseで返す関数です。正規表現を渡すことができるので、半角英数字以外の文字が含まれているかどうかを判定できます。&lt;/p&gt;
&lt;h3 id=&quot;bordercolorを使った視覚フィードバック&quot;&gt;BorderColorを使った視覚フィードバック&lt;/h3&gt;
&lt;p&gt;最もシンプルな実装は、テキスト入力コントロールのBorderColorプロパティをIsMatchの結果に連動させる方法です。半角英数字以外が入力されたときに枠線を赤くすることで、ユーザーに即座に気づかせることができます。&lt;/p&gt;
&lt;p&gt;テキスト入力コントロールのBorderColorプロパティに次の数式を設定します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    IsMatch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(TextInput1.Text, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;^[a-zA-Z0-9!-/:-@\[-`{-~\s]*$&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    RGBA&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    RGBA&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;255&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;正規表現の意味は、先頭から末尾まで半角英数字・記号・スペースのみで構成されているかどうかを判定するものです。全角文字が1文字でも含まれていれば条件に一致しなくなるため、枠線が赤くなります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-validation-fullwidth-halfwidth01.CZXUjVkI_Z1qAlFw.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;送信ボタンを無効化してデータ汚染を防ぐ&quot;&gt;送信ボタンを無効化してデータ汚染を防ぐ&lt;/h3&gt;
&lt;p&gt;枠線の色を変えるだけでは、ユーザーが気づかないまま送信してしまう可能性があります。確実にデータ汚染を防ぐには、送信ボタンのDisplayModeプロパティをIsMatchの結果で制御するのが有効です。&lt;/p&gt;
&lt;p&gt;送信ボタンのDisplayModeプロパティに次のように設定します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    IsMatch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(TextInput1.Text, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;^[a-zA-Z0-9!-/:-@\[-`{-~\s]*$&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;    DisplayMode.Edit&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;    DisplayMode.Disabled&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;全角文字が入力されている間はボタンがグレーアウトして押せなくなります。ボタンは常に表示したままDisabledにするのがポイントです。非表示にしてしまうと、ユーザーが保存方法を見失ってしまいます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-validation-fullwidth-halfwidth02.DiD_PsB7_Zoxmhk.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;trim関数でコピペ由来の不要スペースを除去する&quot;&gt;Trim関数でコピペ由来の不要スペースを除去する&lt;/h2&gt;
&lt;p&gt;全角半角の問題とは別に、コピペ操作による末尾スペースも集計ミスの原因になります。見た目では気づかないのに、VLOOKUPがエラーになってしまう。その犯人がこの見えない空白です。&lt;/p&gt;
&lt;p&gt;Power AppsのTrim関数とTrimEnds関数は、文字列から余分なスペースを取り除きます。&lt;a href=&quot;/powerapps-trim/&quot;&gt;TrimとTrimEndsの違い&lt;/a&gt;を簡単にまとめると、Trimは文字列の先頭・末尾・単語間の余分なスペースをすべて除去するのに対し、TrimEndsは先頭と末尾のスペースだけを除去します。コピペ時の末尾スペース対策にはTrimEndsで十分なことが多いです。&lt;/p&gt;
&lt;h3 id=&quot;保存時にtrimendsで自動クリーニングする&quot;&gt;保存時にTrimEndsで自動クリーニングする&lt;/h3&gt;
&lt;p&gt;ユーザーに気づかせずに自動でスペースを除去するには、Patchで保存する際にTrimEndsで値を包む方法がシンプルです。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Patch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    &apos;担当者リスト&apos;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Defaults&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&apos;担当者リスト&apos;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        担当者名: &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;TrimEnds&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(TextInput1.Text),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        電話番号: &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;TrimEnds&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(TextInput2.Text)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;入力フォームに保存ボタンがあり、そのOnSelectプロパティにPatchを書いている場合は、このように各フィールドをTrimEndsで囲むだけです。ユーザーは意識しなくてよく、保存されるデータは常にクリーンな状態になります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-validation-fullwidth-halfwidth03.DdsqG0AU_Z1JleSj.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;delayoutputで入力中のストレスを減らす&quot;&gt;DelayOutputで入力中のストレスを減らす&lt;/h2&gt;
&lt;p&gt;IsMatchを使ったリアルタイムチェックは便利ですが、1文字入力するたびに枠線が赤くなるとユーザーがイライラすることがあります。例えば電話番号を入力中に最初の1桁を打った瞬間から赤くなれば、入力途中なのにエラー扱いされている気分になります。&lt;/p&gt;
&lt;p&gt;この問題を解決するのがDelayOutputプロパティです。テキスト入力コントロールのDelayOutputプロパティをtrueに設定すると、入力が止まってから約1秒後に値の再評価が行われます。タイプ中に即座にエラーが出るのを防ぎ、入力が落ち着いてから判定するUX設計になります。&lt;/p&gt;
&lt;p&gt;設定は簡単で、テキスト入力コントロールのDelayOutputプロパティをtrueにするだけです。デフォルトはfalseなので、リアルタイムバリデーションを使う場面では積極的にtrueにすることをおすすめします。&lt;/p&gt;
&lt;h2 id=&quot;実装パターンの組み合わせ方&quot;&gt;実装パターンの組み合わせ方&lt;/h2&gt;
&lt;p&gt;ここまでで紹介した方法は、組み合わせて使うのが実践的です。個人的には次の組み合わせをよく使います。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;DelayOutputをtrueにして入力中のチラつきを防ぐ&lt;/li&gt;
&lt;li&gt;BorderColorをIsMatchで赤/黒に切り替えて視覚フィードバック&lt;/li&gt;
&lt;li&gt;送信ボタンのDisplayModeをIsMatchで制御してデータ汚染ブロック&lt;/li&gt;
&lt;li&gt;Patchの際にTrimEndsで末尾スペースを自動除去&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;この4つをセットで設計しておくと、全角入力も末尾スペースも保存されることがありません。フォームを作るたびに同じ設計を踏襲するようにしたところ、社内でデータの集計ミスがほぼなくなりました。&lt;/p&gt;
&lt;p&gt;なお、IsMatchの正規表現については、&lt;a href=&quot;/powerapps-text-functions/&quot;&gt;テキスト関数ピラー記事&lt;/a&gt;でも関連する文字列操作の関数をまとめているので、合わせて参考にしてください。また、入力フォームのバリデーション設計全体については、&lt;a href=&quot;/powerapps-validation-required-error/&quot;&gt;必須チェックとエラーメッセージの作り方&lt;/a&gt;の記事で詳しく解説しています。バリデーション全体の設計思想については、&lt;a href=&quot;/powerapps-container-guide/&quot;&gt;コンテナ完全ガイド&lt;/a&gt;でもUI/UX観点から触れています。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;Power Appsで全角半角の混在や不要スペースを防ぐには、IsMatch関数とTrim関数の組み合わせが効果的です。IsMatchで全角文字を検知して送信ボタンをDisabledにし、保存時にTrimEndsで末尾スペースを除去する。この設計を入れておくだけで、後から集計がつらくなる状況をかなり防げます。&lt;/p&gt;
&lt;p&gt;データの整備を後からやるのは、作り直すのと同じくらい大変です。入力時点で正しいデータを作る設計に、最初から投資するのが結果的には早いです。市民開発とはそういう地道な積み重ねだと思っています。&lt;/p&gt;
&lt;p&gt;入力エラーに関する一覧は&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-validation-guide/&quot;&gt;こちらの記事&lt;/a&gt;をご覧ください。&lt;/p&gt;</content:encoded></item><item><title>【保存版】Power Apps入力ミス防止ガイド！現場が助かるUI/UX設計の極意</title><link>https://shiminkaihatsu.com/powerapps-validation-guide/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-validation-guide/</guid><description>【保存版】Power Apps入力ミス防止ガイド！現場が助かるUI/UX設計の極意</description><pubDate>Sat, 11 Apr 2026 11:26:47 GMT</pubDate><content:encoded>&lt;h2 id=&quot;なぜ入力ミスはなくならないのか&quot;&gt;なぜ入力ミスはなくならないのか&lt;/h2&gt;
&lt;p&gt;Power Appsでアプリを作ってデータを蓄積し始めたはいいものの、全角と半角が混在していてVLOOKUPがエラーになる、ありえない日付が登録されている、メアドが@なしで保存されていた、そんな経験はないでしょうか。&lt;/p&gt;
&lt;p&gt;入力ミスは、使う人が悪いのではありません。ミスが起きやすい設計になっているのが原因です。Power Appsには、ミスを事前に防ぐための仕組みが豊富に用意されています。この記事では、入力ミス防止の4つのアプローチを体系的に整理して解説します。&lt;/p&gt;
&lt;h2 id=&quot;入力ミスが現場に与えるコスト&quot;&gt;入力ミスが現場に与えるコスト&lt;/h2&gt;
&lt;p&gt;私が勤める物流会社では、かつてExcelの集計作業を担当する社員が毎月頭を抱えていました。社内システムから出力したデータに株式会社と（株）が混在し、取引先ごとの集計が崩れてしまうのです。VLOOKUPは完全一致で判定するため、表記ゆれが1文字あるだけで別のデータとして扱われます。&lt;/p&gt;
&lt;p&gt;こうした問題の根本は入力時に遡ります。入力した人に悪意はなく、ただどう入力すればいいか分からなかっただけです。Power Appsでアプリを設計する立場になった今、入力制御はアプリ品質の根幹だと痛感しています。&lt;/p&gt;
&lt;p&gt;入力ミスが引き起こすコストは大きく3つに分類できます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;データクレンジングの工数（月次で何時間も費やす）&lt;/li&gt;
&lt;li&gt;ミスに気づくまでのタイムラグ（登録から数週間後に発覚するケースが多い）&lt;/li&gt;
&lt;li&gt;信頼性の低下（集計値を疑い始めると、データ活用そのものが止まる）&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;入力ミス防止の4つのアプローチ&quot;&gt;入力ミス防止の4つのアプローチ&lt;/h2&gt;
&lt;p&gt;Power Appsで入力ミスを防ぐ手法は、大きく4つのカテゴリに整理できます。それぞれが異なる種類のミスに対処するもので、現場のニーズに合わせて組み合わせて使うのがおすすめです。&lt;/p&gt;
&lt;h3 id=&quot;アプローチテキスト入力の自動制御フォーマット表記ゆれ&quot;&gt;アプローチ①：テキスト入力の自動制御（フォーマット・表記ゆれ）&lt;/h3&gt;
&lt;p&gt;テキスト入力のミスで最も多いのが、全角半角の混在と不要な空白です。手作業による入力では、半角英数字と指定していても全角で打ち込む人が必ず出てきます。コピペ時に末尾に見えない空白（スペース）が紛れ込むことも日常的です。&lt;/p&gt;
&lt;p&gt;こうした表記ゆれは、Trim関数やValue関数、IsMatch関数の正規表現を使ってアプリ側で吸収できます。保存ボタンを押した瞬間に自動で正規化する設計にすれば、ユーザーは意識せずに正しいデータを登録できます。文字列置換や大文字小文字統一については&lt;a href=&quot;/powerapps-text-functions/&quot;&gt;Power Appsテキスト関数の使い方&lt;/a&gt;の記事が参考になります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-validation-guide01.BpaUS3GZ_6jmeq.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;アプローチフォーマットチェックismatch関数&quot;&gt;アプローチ②：フォーマットチェック（IsMatch関数）&lt;/h3&gt;
&lt;p&gt;メールアドレスや電話番号のように形式のルールがあるデータには、IsMatch関数によるフォーマット検証が有効です。Power Appsにはメールアドレス形式（Match.Email）や数字のみ（Match.Digit）など、よく使うパターンが組み込まれています。&lt;/p&gt;
&lt;p&gt;IsMatch関数は入力中にリアルタイムで評価できるため、入力が正しければ緑のチェックアイコンを表示し、間違っていたら入力欄の枠線を赤くするというUXを作れます。ユーザーが送信ボタンを押す前に気づけるので、後からエラーになるよりずっとストレスが少なくなります。&lt;/p&gt;
&lt;h3 id=&quot;アプローチui選択制御選ばせ間違いを防ぐ&quot;&gt;アプローチ③：UI・選択制御（選ばせ間違いを防ぐ）&lt;/h3&gt;
&lt;p&gt;自由入力ではなく選択肢から選ばせる設計にすれば、そもそも表記ゆれは発生しません。ドロップダウンやコンボボックスを使って選べる範囲を絞るのが最も根本的な対策です。&lt;/p&gt;
&lt;p&gt;さらに踏み込んで実装したいのが、連動プルダウン（カスケード接続）です。都道府県を選んだら市区町村の選択肢が絞られる設計にすれば、北海道なのに新宿区を選ぶという論理的にありえない組み合わせを防げます。Filter関数と子ドロップダウンのItemsプロパティを組み合わせることで実現できます。&lt;a href=&quot;/powerapps-filter-search-lookup/&quot;&gt;Filter・Search・LookUp関数の使い分けガイド&lt;/a&gt;で基本的な絞り込みの書き方を確認しておくと理解が深まります。&lt;/p&gt;
&lt;p&gt;必須項目のチェック（IsBlank関数）や重複登録の防止（LookUp関数で既存データを事前確認）も、このカテゴリに含まれます。必須チェックのエラーメッセージ設計については、サテライト記事で詳しく解説しています。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-validation-guide02.D6s9Zeyp_1iSFhQ.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;アプローチ日付数値の範囲制限&quot;&gt;アプローチ④：日付・数値の範囲制限&lt;/h3&gt;
&lt;p&gt;日付ピッカーは標準設定だとすべての日付が選べてしまいます。経費精算アプリで来月の日付や10年前の日付を入力できると、後から人の目でチェックするしかなくなります。&lt;/p&gt;
&lt;p&gt;モダン日付ピッカーコントロールには StartDate と EndDate のプロパティがあり、ここに Today() を使った数式を設定するだけで選択可能な日付の範囲を制限できます。バリデーション式を書く必要もなく、コントロール自体が制御してくれるのでシンプルです。&lt;/p&gt;
&lt;p&gt;数値入力のキーボード制御も地味に重要です。スマホで数量を入力するたびに日本語キーボードから数字に切り替えるのは、現場のユーザーには小さなストレスの積み重ねです。テキスト入力コントロールの Format プロパティを Number に設定するだけで、スマホ操作時に数値専用キーボードが自動的に表示されるようになります。&lt;/p&gt;
&lt;h2 id=&quot;4つのアプローチの選び方&quot;&gt;4つのアプローチの選び方&lt;/h2&gt;
&lt;p&gt;現場で実際に使うとき、どのアプローチを選べばいいかを整理してみます。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;入力の種類&lt;/th&gt;
&lt;th&gt;推奨アプローチ&lt;/th&gt;
&lt;th&gt;主な関数・設定&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;会社名・住所など自由テキスト&lt;/td&gt;
&lt;td&gt;①テキスト自動制御&lt;/td&gt;
&lt;td&gt;Trim / Value / Lower / Upper&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;メールアドレス・電話番号&lt;/td&gt;
&lt;td&gt;②IsMatchフォーマットチェック&lt;/td&gt;
&lt;td&gt;IsMatch / Match.Email / Match.Digit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;部署・カテゴリ・ステータス&lt;/td&gt;
&lt;td&gt;③選択制御&lt;/td&gt;
&lt;td&gt;Dropdown / ComboBox / Filter&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;日付・数量・金額&lt;/td&gt;
&lt;td&gt;④範囲制限&lt;/td&gt;
&lt;td&gt;StartDate / EndDate / Format=Number&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;必須項目&lt;/td&gt;
&lt;td&gt;共通&lt;/td&gt;
&lt;td&gt;IsBlank / DisplayMode.Disabled&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;重要なのは組み合わせることです。たとえば担当者欄であれば、自由入力をやめてユーザーピッカーコントロールに変えつつ（アプローチ③）、必須チェック（IsBlank）でガードする、という2重の設計にするのがおすすめです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-validation-guide03.BTJPu_Wd_Z1QXily.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;ボタンのdisabledとエラーメッセージの設計&quot;&gt;ボタンのDisabledとエラーメッセージの設計&lt;/h2&gt;
&lt;p&gt;バリデーション設計で見落としがちなのが、送信ボタンの見た目の扱いです。入力が不完全な状態でボタンを非表示にすると、どこに保存するのかと迷うユーザーが出てきます。一方で DisplayMode.View を使うと見た目は表示されていてもクリックできないため、ユーザーを混乱させます。&lt;/p&gt;
&lt;p&gt;正解は常に表示し、DisplayMode.Disabled で押せない状態にすることです。条件が揃ったときだけ DisplayMode.Edit に切り替えます。&lt;a href=&quot;/powerapps-variables/&quot;&gt;グローバル変数とコンテキスト変数の使い分け&lt;/a&gt;の記事でエラーフラグの管理方法を確認しておくと、実装がスムーズです。&lt;/p&gt;
&lt;p&gt;エラーメッセージは、入力欄の直下に赤字のラベルを配置し、Visible プロパティで動的に表示するのが現場で最もわかりやすいパターンです。画面上部に小さく出る標準エラーは、スクロールしていると気づかないことが多い。入力欄のすぐ隣で伝えるのが親切な設計です。&lt;/p&gt;
&lt;h2 id=&quot;まとめ設計で防ぐ仕組みで守る&quot;&gt;まとめ：設計で防ぐ、仕組みで守る&lt;/h2&gt;
&lt;p&gt;入力ミスは使う人の問題ではなく設計の問題です。4つのアプローチ（テキスト自動制御・IsMatchフォーマットチェック・選択制御・範囲制限）を組み合わせることで、大半の入力ミスはアプリ側で未然に防げます。&lt;/p&gt;
&lt;p&gt;完璧なバリデーションを最初から実装する必要はありません。まずはこのフィールドで一番多いミスは何かを現場に聞いてみてください。そこから1つずつ対策を加えていく、地道な積み重ねがデータ品質を上げていきます。&lt;a href=&quot;/app-development-map/&quot;&gt;Power Apps開発の全体マップ&lt;/a&gt;も合わせて参照すれば、バリデーション設計をアプリ開発全体の中に位置づけて考えることができます。&lt;/p&gt;
&lt;p&gt;楽しみながら、データを守る設計を作っていきましょう。&lt;/p&gt;</content:encoded></item><item><title>Power Appsでメアドや電話番号の形式間違いを防ぐ！IsMatch関数を使ったフォーマットチェック術</title><link>https://shiminkaihatsu.com/powerapps-validation-ismatch/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-validation-ismatch/</guid><description>Power Appsでメアドや電話番号の形式間違いを防ぐ！IsMatch関数を使ったフォーマットチェック術</description><pubDate>Sat, 11 Apr 2026 11:26:46 GMT</pubDate><content:encoded>&lt;p&gt;「@」マークのないメールアドレスが登録されていたことがあります。入力した本人は正しいつもりでも、システムはそのまま通してしまいます。&lt;/p&gt;
&lt;p&gt;IsMatch関数を使えば、メールアドレスや電話番号の形式をリアルタイムでチェックし、間違いがあれば即座にフィードバックできます。正規表現と聞くと難しそうですが、Power Appsには組み込みパターンが用意されているので、意外とシンプルに実装できます。&lt;/p&gt;
&lt;h2 id=&quot;なぜ形式チェックが必要か&quot;&gt;なぜ形式チェックが必要か&lt;/h2&gt;
&lt;p&gt;名簿登録・問い合わせフォーム・社内申請など、メールアドレスや電話番号を入力させる場面は多いです。しかし「必須チェック（IsBlank）」だけでは、何かが入力されているかどうかしか確認できません。&lt;/p&gt;
&lt;p&gt;問題は「形式が正しいかどうか」です。「test@」や「090-1234」のような不完全な値も、IsBlankの観点では合格してしまいます。後から連絡を取ろうとしたとき、データが使い物にならないと気づいても遅いです。&lt;/p&gt;
&lt;p&gt;IsMatch関数はこの問題に対処するための関数です。入力値が指定したパターンに一致するかどうかをtrueかfalseで返します。必須チェックと組み合わせることで、「何か入力されていて、かつ正しい形式である」ことを同時に保証できます。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-validation-guide/&quot;&gt;Power Apps入力ミス防止ガイド&lt;/a&gt;でも、フォーマット制御はバリデーションの重要な柱として位置づけています。&lt;/p&gt;
&lt;h2 id=&quot;ismatch関数の基本構文&quot;&gt;IsMatch関数の基本構文&lt;/h2&gt;
&lt;p&gt;IsMatch関数の基本的な書き方は次のとおりです。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;IsMatch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(テキスト, パターン)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;第一引数に検証したいテキスト、第二引数にパターンを指定します。パターンには、Power Appsが用意している組み込みパターン（Match列挙型）か、正規表現文字列を使います。&lt;/p&gt;
&lt;p&gt;戻り値はtrueまたはfalseです。一致すればtrue、一致しなければfalseが返ります。&lt;/p&gt;
&lt;h3 id=&quot;組み込みパターン一覧&quot;&gt;組み込みパターン一覧&lt;/h3&gt;
&lt;p&gt;Power Appsには、よく使うパターンがあらかじめ定義されています。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;パターン&lt;/th&gt;
&lt;th&gt;意味&lt;/th&gt;
&lt;th&gt;使いどき&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Match.Email&lt;/td&gt;
&lt;td&gt;メールアドレス形式&lt;/td&gt;
&lt;td&gt;メアド入力欄&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Match.Digit&lt;/td&gt;
&lt;td&gt;1桁の数字&lt;/td&gt;
&lt;td&gt;電話番号・郵便番号（繰り返しと組み合わせ）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Match.Letter&lt;/td&gt;
&lt;td&gt;1文字のアルファベット&lt;/td&gt;
&lt;td&gt;英字チェック&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Match.MultipleLetters&lt;/td&gt;
&lt;td&gt;1文字以上のアルファベット&lt;/td&gt;
&lt;td&gt;英単語チェック&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Match.MultipleDigits&lt;/td&gt;
&lt;td&gt;1桁以上の数字列&lt;/td&gt;
&lt;td&gt;数値文字列の汎用チェック&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;メールアドレスのチェックなら、こう書きます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;IsMatch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(txtEmail.Text, Match.Email)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-validation-ismatch01.Co6blzuB_24cDw1.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;実装パターン変数アイコンでリアルタイムフィードバック&quot;&gt;実装パターン①：変数＋アイコンでリアルタイムフィードバック&lt;/h2&gt;
&lt;p&gt;入力中に正誤をリアルタイムで表示するUXは、ユーザーのストレスを大幅に減らします。実装のポイントは3つです。&lt;/p&gt;
&lt;h3 id=&quot;onchangeプロパティで変数をセット&quot;&gt;OnChangeプロパティで変数をセット&lt;/h3&gt;
&lt;p&gt;テキスト入力コントロールのOnChangeプロパティに、次の式を書きます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    IsMatch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(txtEmail.Text, Match.Email),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Set&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(varValidEmail, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Set&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(varValidEmail, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;入力のたびにIsMatchが評価され、結果が変数に格納されます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-validation-ismatch02.C7m_brVL_1zBJsU.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;アイコンコントロールで合否を視覚化&quot;&gt;アイコンコントロールで合否を視覚化&lt;/h3&gt;
&lt;p&gt;チェックアイコンと警告アイコンを組み合わせて表示します。アイコンコントロールの各プロパティを次のように設定します。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Icon：&lt;code&gt;If(varValidEmail, Icon.Check, Icon.Warning)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Color：&lt;code&gt;If(varValidEmail, Color.Green, Color.Red)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Visible：&lt;code&gt;Not(IsBlank(txtEmail.Text))&lt;/code&gt;（未入力時は非表示）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;これで、入力が始まったらアイコンが現れ、正しい形式ならチェックマーク、間違っていれば警告マークが表示されます。入力前から赤いアイコンが出て「なぜ怒られてるの？」となるのを防ぐ工夫です。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-validation-ismatch03.C_Y9zOR8_Z2msHrm.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;delayoutputで入力途中の誤検知を防ぐ&quot;&gt;DelayOutputで入力途中の誤検知を防ぐ&lt;/h3&gt;
&lt;p&gt;テキスト入力コントロールには &lt;strong&gt;DelayOutput&lt;/strong&gt; プロパティがあります。これをtrueにすると、入力が止まってから約1秒後にOnChangeが発火します。デフォルト（false）では1文字打つたびに評価されるため、入力途中でずっとエラー表示になるストレスが生まれます。&lt;/p&gt;
&lt;p&gt;実務では DelayOutput を true にするのをおすすめします。設定場所はコントロールのプロパティパネル、または数式バーから直接 &lt;code&gt;DelayOutput: true&lt;/code&gt; と書きます。&lt;/p&gt;
&lt;h2 id=&quot;実装パターン背景色で視覚フィードバック&quot;&gt;実装パターン②：背景色で視覚フィードバック&lt;/h2&gt;
&lt;p&gt;アイコンを使わず、入力欄の背景色を変えてフィードバックするパターンもあります。テキスト入力コントロールの &lt;strong&gt;Fill&lt;/strong&gt; プロパティに次の式を設定します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    varValidEmail,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;    Color.White&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;    If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;IsBlank&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(txtEmail.Text), &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;Color.White&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;Color.LightCoral&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ポイントは、空欄のときは白（エラー色にしない）、入力後に不正なら薄赤、正しければ白に戻るという3段階の制御です。未入力なのに赤くなると、フォームを開いた瞬間から全項目が赤くなって見た目が悪くなります。&lt;/p&gt;
&lt;p&gt;枠線を赤くするパターンは、&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-validation-visual-feedback/&quot;&gt;未入力項目の枠線を赤く光らせるUX改善&lt;/a&gt;の記事で詳しく解説しています。&lt;/p&gt;
&lt;h2 id=&quot;正規表現を使ったカスタムパターン&quot;&gt;正規表現を使ったカスタムパターン&lt;/h2&gt;
&lt;p&gt;組み込みパターンでは対応できない場合、正規表現文字列を直接指定できます。&lt;/p&gt;
&lt;h3 id=&quot;電話番号10桁または11桁の数字のチェック&quot;&gt;電話番号（10桁または11桁の数字）のチェック&lt;/h3&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;IsMatch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(txtPhone.Text, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;d{10,11}&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ハイフンなしの数字のみを想定した場合のパターンです。ハイフンありの形式（例：090-1234-5678）を許容する場合は、パターンを調整する必要があります。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;IsMatch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(txtPhone.Text, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;d{2,4}-d{2,4}-d{4}&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;urlの先頭チェック&quot;&gt;URLの先頭チェック&lt;/h3&gt;
&lt;p&gt;URLが「https://」から始まっているかどうかだけ確認したい場合は、MatchOptions.BeginsWithを第3引数に指定します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;IsMatch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(txtURL.Text, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;https://&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, MatchOptions.BeginsWith)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;MatchOptionsを使うことで、文字列全体ではなく「先頭だけ」「末尾だけ」の部分マッチも可能になります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-validation-ismatch04.umRNdADY_bxySW.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;送信ボタンの制御と組み合わせる&quot;&gt;送信ボタンの制御と組み合わせる&lt;/h2&gt;
&lt;p&gt;バリデーションを実装しても、ボタンを制御しなければ無効な値のまま送信できてしまいます。送信ボタンのDisplayModeプロパティに次の式を設定します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;    Or&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;IsBlank&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(txtEmail.Text), &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;Not&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(varValidEmail)),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;    DisplayMode.Disabled&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;    DisplayMode.Edit&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;メールアドレスが空欄か、形式が不正な場合はボタンが押せない状態になります。複数フィールドを同時にチェックする場合はOrでつなげていきます。&lt;/p&gt;
&lt;p&gt;変数を使ったエラーフラグの設計については、&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-variables/&quot;&gt;グローバル変数とコンテキスト変数の使い分けガイド&lt;/a&gt;も参考にしてください。&lt;/p&gt;
&lt;h2 id=&quot;ismatchを使う上での注意点&quot;&gt;IsMatchを使う上での注意点&lt;/h2&gt;
&lt;p&gt;IsMatch関数を使い始めると、いくつかの落とし穴に気づきます。&lt;/p&gt;
&lt;p&gt;ひとつは、組み込みパターン Match.Email は厳密なRFC準拠ではないという点です。実務上のメールアドレスのほぼすべてはカバーできますが、極めて特殊な形式に対応しきれない場合があります。実用上は問題になりません。&lt;/p&gt;
&lt;p&gt;もうひとつは、入力欄が空欄のとき IsMatch は false を返すという点です。IsBlankとIsMatchを組み合わせる場合、「空欄かどうか」と「形式が正しいかどうか」を別々に判定するか、空欄時だけ評価を免除する設計を明示的に書く必要があります。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    IsBlank&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(txtEmail.Text),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;    true&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,  &lt;/span&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 空欄は別途必須チェックに任せる&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    IsMatch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(txtEmail.Text, Match.Email)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;このように役割を分けて書くと、それぞれのチェックが独立してわかりやすくなります。&lt;/p&gt;
&lt;h2 id=&quot;フォームの品質はバリデーションの積み重ねでできている&quot;&gt;フォームの品質はバリデーションの積み重ねでできている&lt;/h2&gt;
&lt;p&gt;IsMatch関数は、コントロールのOnChangeに数行書くだけで動作します。正規表現というと身構えてしまいがちですが、Match.Emailなどの組み込みパターンがあれば正規表現を書かずに済むケースが大半です。&lt;/p&gt;
&lt;p&gt;アイコンの切り替えやDelayOutputの設定も含めて、実装そのものは30分かからないと思います。それで連絡先データの品質が大きく上がるなら、やっておく価値は十分あります。トライしてみましょう。&lt;/p&gt;</content:encoded></item><item><title>送信ボタンの連打によるデータ二重登録を防ぐ！Power Appsのボタン制御テクニック</title><link>https://shiminkaihatsu.com/powerapps-validation-prevent-double-submit/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-validation-prevent-double-submit/</guid><description>送信ボタンの連打によるデータ二重登録を防ぐ！Power Appsのボタン制御テクニック</description><pubDate>Sat, 11 Apr 2026 11:26:48 GMT</pubDate><content:encoded>&lt;p&gt;社内アプリで同じデータが2件・3件と登録されているというトラブルに遭遇したことはありませんか。原因のほとんどは送信ボタンの連打です。処理が重いときやネットワークが遅いときに、ユーザーが押せた？と思って何度もボタンをタップしてしまい、同じデータが複数作られます。この記事では、変数と DisplayMode を組み合わせた連打防止の実装方法を解説します。&lt;/p&gt;
&lt;h2 id=&quot;なぜ連打問題が起きるのか&quot;&gt;なぜ連打問題が起きるのか&lt;/h2&gt;
&lt;p&gt;Power Apps で SubmitForm や Patch 関数を実行したとき、処理が完了するまでの数秒間、画面には何も変化が起きません。特にモバイル環境や SharePoint リストへの書き込みは、通信状況によって 1〜3 秒かかることもあります。ユーザーはボタンが反応していないと判断して、もう一度タップします。&lt;/p&gt;
&lt;p&gt;私が展開した日報アプリで、まさにこの問題が起きました。20人のスタッフが使うアプリで、1日に数件ずつ重複データが登録されていたのです。現場からは、保存を何回か押さないと保存されない気がして…という声がありました。処理中であることをユーザーに伝えないまま放置したのが原因でした。&lt;/p&gt;
&lt;p&gt;解決策は2つのアプローチを組み合わせることです。1つ目は処理中のボタンを押せない状態にすること。2つ目はいま処理中ですよとユーザーに伝えることです。&lt;/p&gt;
&lt;h2 id=&quot;varissubmitting-変数でボタンを制御する&quot;&gt;varIsSubmitting 変数でボタンを制御する&lt;/h2&gt;
&lt;p&gt;基本的な実装パターンを解説します。varIsSubmitting という変数を用意し、送信処理の前後でフラグを切り替えます。処理中は true になるため、ボタンを DisplayMode.Disabled に変えて押せなくします。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;/powerapps-variables/&quot;&gt;変数の基本的な使い方&lt;/a&gt;を理解していれば、実装は難しくありません。UpdateContext か Set のどちらを使うかはスコープによって選びます。フォーム送信は通常1画面内の処理なので UpdateContext で十分ですが、複数画面をまたぐ場合は Set を使います。&lt;/p&gt;
&lt;h3 id=&quot;送信ボタンの-onselect&quot;&gt;送信ボタンの OnSelect&lt;/h3&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 送信ボタンの OnSelect&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;UpdateContext&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;({varIsSubmitting: &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;SubmitForm&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(Form1);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;UpdateContext&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;({varIsSubmitting: &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;})&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;送信ボタンの-displaymode-プロパティ&quot;&gt;送信ボタンの DisplayMode プロパティ&lt;/h3&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 送信ボタンの DisplayMode プロパティ&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(varIsSubmitting, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;DisplayMode.Disabled&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;DisplayMode.Edit&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-validation-prevent-double-submit01.7H8i4-Z1_HH159.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;p&gt;ただし、SubmitForm はフォームコントロールの非同期処理を内包しているため、OnSelect の3行目（varIsSubmitting を false に戻す処理）が SubmitForm の完了を待たずに実行されることがあります。確実な制御には OnSuccess・OnFailure イベントでフラグをリセットする方法がより堅牢です。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// フォームの OnSuccess プロパティ&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;UpdateContext&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;({varIsSubmitting: &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Navigate&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(Screen_List, ScreenTransition.Fade)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// フォームの OnFailure プロパティ&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;UpdateContext&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;({varIsSubmitting: &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;})&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;or-条件で複数バリデーションと組み合わせる&quot;&gt;Or 条件で複数バリデーションと組み合わせる&lt;/h2&gt;
&lt;p&gt;実際のフォームでは、送信ボタンの制御条件が連打防止だけでなく、バリデーションの結果とも連動していることがほとんどです。複数の条件を Or でまとめることで、1つでも問題があればボタンが押せない設計にできます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 送信ボタンの DisplayMode（バリデーション複合）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;  Or&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    varIsSubmitting,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    IsBlank&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(TextInput_Name.Text),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    IsBlank&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(TextInput_Email.Text),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    lbl_EmailError.Visible&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;  ),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;  DisplayMode.Disabled&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;  DisplayMode.Edit&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;この Or 条件をそのまま書き続けると、フィールドが増えるたびに条件式が長くなり管理が難しくなります。そこで&lt;a href=&quot;/powerapps-named-formulas-syntax/&quot;&gt;名前付き計算式の書き方&lt;/a&gt;を使い、formValid という named formula にまとめるアプローチが有効です。App.Formulas に定義することで、各ボタンの条件式を formValid の1参照だけに簡潔化できます。&lt;/p&gt;
&lt;h2 id=&quot;タイマーを使った堅牢な送信パターン&quot;&gt;タイマーを使った堅牢な送信パターン&lt;/h2&gt;
&lt;p&gt;モダンフォームを使っている場合は、タイマーコントロールを組み合わせた設計がより確実です。Power Apps の OnSelect は処理を同時評価するため、変数のセット→バリデーション再評価→フォーム送信という順序を素直な記述で保証できません。&lt;/p&gt;
&lt;p&gt;タイマーパターンは次のように設計します。送信ボタンを押すとタイマーが起動し、100〜200ミリ秒後に OnTimerEnd が発火します。この時点でバリデーションが再評価されているため、formValid が true の場合のみ SubmitForm を実行します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 送信ボタンの OnSelect&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Set&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(varFormSubmitted, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;UpdateContext&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;({varIsSubmitting: &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;UpdateContext&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;({varStartTimer: &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;UpdateContext&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;({varStartTimer: &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;})  &lt;/span&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// タイマー起動&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// Timer コントロールの Duration: 150&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// Timer コントロールの Start プロパティ: varStartTimer&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// Timer コントロールの OnTimerEnd&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;  formValid,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;  SubmitForm&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(Form1),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;  UpdateContext&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;({varIsSubmitting: &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;})&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-validation-prevent-double-submit02.BVKzmnoK_2ab44f.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;p&gt;このパターンは少し複雑に見えますが、一度テンプレートとして作ってしまえばどのフォームにも使い回せます。私はこのパターンをスニペットとして保存しており、新しいフォームを作るたびにコピーして使っています。&lt;/p&gt;
&lt;h2 id=&quot;ローディングスピナーでユーザーに処理中を伝える&quot;&gt;ローディングスピナーでユーザーに処理中を伝える&lt;/h2&gt;
&lt;p&gt;連打を防ぐだけでなく、ユーザーにいま処理中ですと伝えることも重要です。ボタンが灰色になるだけでは気づかないユーザーもいます。簡単な方法は varIsSubmitting が true のときにボタン上にラベルを重ねて、保存中…と表示することです。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// ローディングラベルの Visible プロパティ&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;varIsSubmitting&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// ローディングラベルの Text プロパティ&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;保存中...&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;もう少し手間をかける場合は、GIF アニメーション画像をボタンの上に重ねて表示する方法もあります。ローディングスピナーのGIFをアプリのメディアに追加し、Image コントロールの Visible を varIsSubmitting で制御します。&lt;/p&gt;
&lt;p&gt;視覚フィードバックの設計は、バリデーションのエラー表示と同様にユーザーが今何が起きているかわかる状態を作ることが目的です。&lt;a href=&quot;/powerapps-container-guide/&quot;&gt;コンテナを使ったレイアウト設計&lt;/a&gt;と組み合わせることで、ローディング表示の重ね配置もすっきり管理できます。&lt;/p&gt;
&lt;h2 id=&quot;まとめ処理中を見える化する設計で信頼感を上げる&quot;&gt;まとめ：処理中を見える化する設計で信頼感を上げる&lt;/h2&gt;
&lt;p&gt;連打防止の実装は varIsSubmitting 変数と DisplayMode.Disabled の組み合わせで実現できます。さらにローディング表示を加えることで、ユーザーが迷わずアプリを使える状態になります。&lt;/p&gt;
&lt;p&gt;重複登録が発生するアプリは、現場への信頼感を大きく損ないます。またデータが重複してたという経験を積み重ねると、アプリへの信頼が失われ、最終的には紙に戻ってしまうことすらあります。連打防止はシンプルな実装ですが、アプリの信頼性を守る重要な設計です。地道なUX改善の積み重ねが、長く使われるアプリを作ります。&lt;/p&gt;
&lt;p&gt;入力エラーに関する一覧は&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-validation-guide/&quot;&gt;こちらの記事&lt;/a&gt;をご覧ください。&lt;/p&gt;</content:encoded></item><item><title>本当に送信しますか？Power Appsで入力内容のプレビューと確認ダイアログを作る方法</title><link>https://shiminkaihatsu.com/powerapps-validation-preview-dialog/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-validation-preview-dialog/</guid><description>本当に送信しますか？Power Appsで入力内容のプレビューと確認ダイアログを作る方法</description><pubDate>Sat, 11 Apr 2026 11:26:47 GMT</pubDate><content:encoded>&lt;p&gt;送信ボタンをタップした瞬間、画面が切り替わって「あ、間違えた」——そんな経験はありませんか。Power Appsは一度Patchで保存してしまうと簡単に取り消せません。だからこそ、送信前に確認ダイアログを挟む設計が重要です。&lt;/p&gt;
&lt;h2 id=&quot;なぜ確認ダイアログが必要なのか&quot;&gt;なぜ確認ダイアログが必要なのか&lt;/h2&gt;
&lt;p&gt;スマートフォンで使うアプリであれば、タッチ操作のミスは日常茶飯事です。フォームに5〜6項目入力して、最後に送信ボタンを押した瞬間に「あ、担当者を間違えた」と気づく。そのまま登録されてしまうと、後から上司に「この件誰が対応してるの？」と聞かれる羽目になります。&lt;/p&gt;
&lt;p&gt;私が現場でアプリを使ってもらい始めた頃、一番多かった問い合わせが「間違えて登録してしまった、消してほしい」でした。SharePointリストから手動で削除する作業が積み重なると、それだけで1日数十分が消えていきます。確認ダイアログひとつで、その手間が丸ごとなくなります。&lt;/p&gt;
&lt;p&gt;また、申請・承認フローと連動しているアプリなら、誤送信のコストはさらに大きくなります。一度承認フローが走り始めると、承認者に不要な通知が届いてしまいます。送信前に「本当によろしいですか？」と聞く一手間は、関わる全員の時間を守ることにつながります。&lt;/p&gt;
&lt;h2 id=&quot;確認ダイアログの基本設計&quot;&gt;確認ダイアログの基本設計&lt;/h2&gt;
&lt;p&gt;Power Appsには標準の確認ダイアログ機能はありません。ですので、コンテナとラベルを組み合わせて自分で作る必要があります。仕組みはシンプルで、変数を使ってダイアログの表示・非表示を切り替えるだけです。&lt;/p&gt;
&lt;h3 id=&quot;ダイアログの表示制御変数の役割&quot;&gt;ダイアログの表示制御（変数の役割）&lt;/h3&gt;
&lt;p&gt;まず、ダイアログの表示状態を管理するための変数を用意します。名前は &lt;code&gt;varShowConfirmDialog&lt;/code&gt; とします。ボタンを押したら変数を &lt;code&gt;true&lt;/code&gt; にし、ダイアログ内のキャンセルを押したら &lt;code&gt;false&lt;/code&gt; に戻す——これが基本の動きです。&lt;/p&gt;
&lt;p&gt;送信ボタンの &lt;code&gt;OnSelect&lt;/code&gt; プロパティに以下を設定します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Set&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(varShowConfirmDialog, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;これだけで送信処理は実行せず、まずダイアログを表示する動きになります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-validation-preview-dialog01.B6GmLbCE_Z1yTLlF.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;ダイアログ本体の作り方&quot;&gt;ダイアログ本体の作り方&lt;/h3&gt;
&lt;p&gt;ダイアログはコンテナで作ります。画面上に半透明の黒いオーバーレイを被せ、その上に白いカードを浮かせるデザインが一般的です。実装手順は以下の通りです。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;新しいコンテナを追加し、名前を &lt;code&gt;con_ConfirmDialog&lt;/code&gt; とする&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Visible&lt;/code&gt; プロパティを &lt;code&gt;varShowConfirmDialog&lt;/code&gt; に設定（変数が true のときだけ表示）&lt;/li&gt;
&lt;li&gt;コンテナの &lt;code&gt;Width&lt;/code&gt; と &lt;code&gt;Height&lt;/code&gt; を画面いっぱいに広げる（&lt;code&gt;Parent.Width&lt;/code&gt;、&lt;code&gt;Parent.Height&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;コンテナ内に半透明の背景レイヤー用コンテナ（Fill: RGBA(0,0,0,0.5)）を作る&lt;/li&gt;
&lt;li&gt;その上に白いカードコンテナを重ねる（Z-indexは自動で前面になる）&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-validation-preview-dialog02.DGJ8MuXl_1pFDYp.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;p&gt;コンテナを使ったUIの基礎については、&lt;a href=&quot;/powerapps-container-dropshadow/&quot;&gt;コンテナのドロップシャドウとカードUI&lt;/a&gt;の記事も参考になります。ドロップシャドウを加えると、ダイアログが画面から浮いているような立体感が出てより見やすくなります。&lt;/p&gt;
&lt;h2 id=&quot;プレビュー表示の実装&quot;&gt;プレビュー表示の実装&lt;/h2&gt;
&lt;p&gt;確認ダイアログに入力内容をそのまま表示することで、ユーザーは送信前に内容を見直せます。実装は非常にシンプルで、ラベルの &lt;code&gt;Text&lt;/code&gt; プロパティにフォームのコントロール参照を書くだけです。&lt;/p&gt;
&lt;h3 id=&quot;テキスト入力の内容を表示する&quot;&gt;テキスト入力の内容を表示する&lt;/h3&gt;
&lt;p&gt;例えば、フォームに氏名・件名・メモの3項目があるとします。ダイアログ内に配置したラベルの &lt;code&gt;Text&lt;/code&gt; プロパティをそれぞれ以下のように設定します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;氏名：&quot;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; TextInput_Name.Text&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;件名：&quot;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; TextInput_Subject.Text&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;メモ：&quot;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; TextInput_Memo.Text&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;これでダイアログを開いたときに入力内容がそのまま表示されます。ドロップダウンの場合は &lt;code&gt;Dropdown.Selected.Value&lt;/code&gt;、日付ピッカーの場合は &lt;code&gt;Text(DatePicker.SelectedDate, &amp;quot;YYYY/MM/DD&amp;quot;)&lt;/code&gt; のように参照方法が変わるので、コントロールの種類に合わせて調整してください。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-validation-preview-dialog03.DVnQI8mQ_Z25VpKY.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;670&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;必須項目の未入力チェックと組み合わせる&quot;&gt;必須項目の未入力チェックと組み合わせる&lt;/h3&gt;
&lt;p&gt;確認ダイアログを出す前に、必須項目の入力チェックを済ませておくのが理想です。未入力のまま確認ダイアログが開いても意味がないので、送信ボタンの &lt;code&gt;OnSelect&lt;/code&gt; に条件を追加します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;  IsBlank&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(TextInput_Name.Text) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;||&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; IsBlank&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(TextInput_Subject.Text),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;  Notify&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;必須項目を入力してください&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;NotificationType.Error&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;  Set&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(varShowConfirmDialog, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;入力チェックの詳しい実装については、&lt;a href=&quot;/powerapps-validation-required-error/&quot;&gt;必須チェックとエラーメッセージの作り方&lt;/a&gt;の記事で解説しています。バリデーションの変数管理との組み合わせ方も参考になるので、あわせて読んでみてください。&lt;/p&gt;
&lt;h2 id=&quot;確認キャンセルボタンの動作設定&quot;&gt;確認・キャンセルボタンの動作設定&lt;/h2&gt;
&lt;p&gt;ダイアログ内には送信確定のボタンとキャンセルボタンの2つを置きます。それぞれの動作は明確に分けます。&lt;/p&gt;
&lt;h3 id=&quot;確定ボタン送信実行&quot;&gt;確定ボタン（送信実行）&lt;/h3&gt;
&lt;p&gt;確定ボタンの &lt;code&gt;OnSelect&lt;/code&gt; では、実際のデータ保存処理と変数のリセットをまとめて行います。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Patch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;  &apos;申請リスト&apos;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;  Defaults&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&apos;申請リスト&apos;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;  {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    Title: TextInput_Name.Text,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    件名: TextInput_Subject.Text,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    メモ: TextInput_Memo.Text&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Set&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(varShowConfirmDialog, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Notify&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;送信が完了しました&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;NotificationType.Success&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Navigate&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(Screen_Complete)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;保存後にダイアログを閉じて完了通知を出し、完了画面へ遷移する流れです。二重送信を防ぐために、Patch処理が完了するまでボタンを無効化する設計も有効です。その方法については&lt;a href=&quot;/powerapps-validation-prevent-double-submit/&quot;&gt;連打防止とボタン制御&lt;/a&gt;の記事が参考になります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-validation-preview-dialog04.wFdxBEaS_Z2RoIN.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;670&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;キャンセルボタンダイアログを閉じる&quot;&gt;キャンセルボタン（ダイアログを閉じる）&lt;/h3&gt;
&lt;p&gt;キャンセルボタンはシンプルです。変数を &lt;code&gt;false&lt;/code&gt; にするだけでダイアログが消えます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Set&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(varShowConfirmDialog, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;大切なのはキャンセルしたらフォームの入力内容はそのまま残すことです。入力をリセットしてしまうと、ユーザーが確認画面を見てから内容を直そうとしたときに入力し直す手間が生じます。確認 → キャンセル → 修正 → 再確認の流れが自然に使えるよう設計しましょう。&lt;/p&gt;
&lt;h2 id=&quot;応用入力内容をテーブル形式で表示する&quot;&gt;応用：入力内容をテーブル形式で表示する&lt;/h2&gt;
&lt;p&gt;項目数が多い場合は、ラベルを縦に並べるよりもギャラリーでテーブル表示するほうがすっきり見えます。コレクションを使ってプレビュー用データを一時的に組み立てる方法が便利です。&lt;/p&gt;
&lt;p&gt;送信ボタンの &lt;code&gt;OnSelect&lt;/code&gt; で、確認ダイアログを開く直前にコレクションを作ります。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;ClearCollect&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;  colPreview,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;  {項目: &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;氏名&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, 内容: TextInput_Name.Text},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;  {項目: &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;件名&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, 内容: TextInput_Subject.Text},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;  {項目: &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;メモ&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, 内容: TextInput_Memo.Text}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Set&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(varShowConfirmDialog, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;あとはダイアログ内にギャラリーを配置し、&lt;code&gt;Items&lt;/code&gt; を &lt;code&gt;colPreview&lt;/code&gt; に設定するだけです。テンプレート内に「項目」ラベルと「内容」ラベルを並べると、入力内容が一覧で確認できる表になります。項目が増えても &lt;code&gt;ClearCollect&lt;/code&gt; に1行追加するだけで対応できるので、後からのメンテナンスも楽です。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-validation-preview-dialog05.iiCQcN9O_Z1TQvv8.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;ダイアログ設計で気をつけること&quot;&gt;ダイアログ設計で気をつけること&lt;/h2&gt;
&lt;p&gt;確認ダイアログを実装するときに私がよくやってしまうのが、ダイアログコンテナのZ-order（前後の重なり順）の問題です。コンテナを後から追加したつもりが、ツリービューで見ると他のコントロールの下に入ってしまっていることがあります。ダイアログが他のコントロールに隠れて見えない場合は、ツリービューでダイアログのコンテナを一番下（画面上では最前面）に移動してください。&lt;/p&gt;
&lt;p&gt;もうひとつ注意したいのが、ダイアログを閉じた後の変数リセットです。画面の &lt;code&gt;OnVisible&lt;/code&gt; プロパティで &lt;code&gt;Set(varShowConfirmDialog, false)&lt;/code&gt; を設定しておくと、別の画面から戻ってきたときに意図せずダイアログが開いている状態を防げます。変数の初期化は&lt;a href=&quot;/powerapps-variables/&quot;&gt;変数の種類と使い分け&lt;/a&gt;の記事で詳しく解説しているので、変数管理を整理したい方はあわせて確認してみてください。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;確認ダイアログの実装はそれほど複雑ではありません。変数1つ、コンテナ1つあれば基本的な仕組みは作れます。重要なのは設計の考え方で、間違えた後に直す仕組みより間違えないように確認させる仕組みのほうが、結果的に運用コストが下がります。&lt;/p&gt;
&lt;p&gt;入力ミス防止の全体像については、&lt;a href=&quot;/powerapps-validation-guide/&quot;&gt;Power Apps入力ミス防止ガイド&lt;/a&gt;にまとめています。バリデーション・フォーマット制御・UX設計の組み合わせで、ミスが起きにくいアプリを目指しましょう。市民開発はこういう地道な積み上げの繰り返しだと、現場で何度も実感しています。&lt;/p&gt;</content:encoded></item><item><title>「未入力です」と優しく伝える！Power Apps必須チェックと分かりやすいエラーメッセージの作り方</title><link>https://shiminkaihatsu.com/powerapps-validation-required-error/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-validation-required-error/</guid><description>「未入力です」と優しく伝える！Power Apps必須チェックと分かりやすいエラーメッセージの作り方</description><pubDate>Sat, 11 Apr 2026 11:26:49 GMT</pubDate><content:encoded>&lt;p&gt;Power Apps のフォームで送信ボタンを押したとき、画面上部にちっぽけなエラーが出て終わる。そんな経験はありませんか。ユーザーはそのエラーに気づかず再度ボタンを押し、なんで保存されないの？と混乱します。入力ミスを防ぐには、&lt;strong&gt;エラーをユーザーの目線で、わかりやすい場所に、わかりやすい言葉で伝える&lt;/strong&gt;設計が必要です。&lt;/p&gt;
&lt;p&gt;この記事では、Power Apps で必須チェックを実装し、入力項目のすぐ下にエラーメッセージを出す方法を解説します。&lt;/p&gt;
&lt;h2 id=&quot;標準フォームのエラー表示が弱い理由&quot;&gt;標準フォームのエラー表示が弱い理由&lt;/h2&gt;
&lt;p&gt;Power Apps の標準フォーム（EditForm）には SubmitForm 関数を使った保存機能があり、必須列の未入力も検出してくれます。ところが、そのエラーは画面上部のシステムメッセージとして表示されるだけです。スマホアプリで画面を下にスクロールしていると、上部のエラーは視野の外に出てしまい、ユーザーがエラーに気づかないまま何度もボタンを押すことになります。&lt;/p&gt;
&lt;p&gt;私が社内でアプリを展開したとき、現場のスタッフから、保存ボタンを押しても何も起きないという報告が複数きました。原因を調べると、必須項目が空欄のままで上部にエラーが出ていたのに、全員がそれを見ていなかったのです。エラーを出す場所と伝え方を変えるだけで、そういった問い合わせはほぼゼロになりました。&lt;/p&gt;
&lt;p&gt;標準フォームの弱点をまとめると、エラー位置が固定（上部のみ）、エラー文言が英語や無機質な自動生成メッセージ、どの項目が問題なのかパッと見てわからない、の3点です。これを解決するのが、本記事で解説するカスタムエラー表示の実装です。&lt;/p&gt;
&lt;h2 id=&quot;isblank-と-isempty-の違いと使い分け&quot;&gt;IsBlank と IsEmpty の違いと使い分け&lt;/h2&gt;
&lt;p&gt;必須チェックを実装する前に、よく混同される IsBlank 関数と IsEmpty 関数の違いを整理しておきます。この2つは名前が似ていますが、チェックする対象が根本的に異なります。&lt;/p&gt;
&lt;p&gt;IsBlank はテキスト入力・日付・数値など単一のフィールドや値が空かどうかを判定します。テキスト入力コントロールの空欄チェックにはこちらを使います。一方 IsEmpty はテーブル（コレクションや Recordset）が0件かどうかを判定するものです。テキスト入力に IsEmpty を使うと、空欄でも必ず false を返してしまい、バリデーションが機能しないので注意が必要です。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;関数&lt;/th&gt;
&lt;th&gt;対象&lt;/th&gt;
&lt;th&gt;空のとき&lt;/th&gt;
&lt;th&gt;使うケース&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;IsBlank&lt;/td&gt;
&lt;td&gt;値・フィールド&lt;/td&gt;
&lt;td&gt;true&lt;/td&gt;
&lt;td&gt;テキスト入力・日付・数値の未入力チェック&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IsEmpty&lt;/td&gt;
&lt;td&gt;テーブル・コレクション&lt;/td&gt;
&lt;td&gt;true&lt;/td&gt;
&lt;td&gt;ギャラリーの件数ゼロ・コレクション未初期化チェック&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;必須チェックの基本構文は次のとおりです。IsBlank 関数にテキスト入力コントロールの Text プロパティを渡します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;IsBlank&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(TextInput_Name.Text)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;これが true を返したとき、エラーラベルを表示するという設計になります。&lt;/p&gt;
&lt;h2 id=&quot;エラーメッセージを入力項目のすぐ下に配置する&quot;&gt;エラーメッセージを入力項目のすぐ下に配置する&lt;/h2&gt;
&lt;p&gt;実装の考え方はシンプルです。各入力項目の直下にエラー用ラベルコントロールを配置し、Visible プロパティを条件式で制御します。エラーがない状態ではラベルは非表示になっていますが、未入力で送信しようとした瞬間に赤字のメッセージが現れます。&lt;/p&gt;
&lt;p&gt;ただし、ここで一点注意があります。画面を開いた直後から入力前にいきなりエラーを出すのは、ユーザーにとってストレスになります。名前欄に何も入れていないのに最初から「未入力です」と赤字が出ていたら、使いにくいですよね。そこで varFormSubmitted という変数を使い、送信ボタンを押した後にだけエラーを表示する設計にします。&lt;/p&gt;
&lt;h3 id=&quot;varformsubmitted-パターンの実装手順&quot;&gt;varFormSubmitted パターンの実装手順&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;送信ボタンの OnSelect に &lt;code&gt;Set(varFormSubmitted, true)&lt;/code&gt; を追加します&lt;/li&gt;
&lt;li&gt;エラーラベルの Visible プロパティに &lt;code&gt;And(varFormSubmitted, IsBlank(TextInput_Name.Text))&lt;/code&gt; を設定します&lt;/li&gt;
&lt;li&gt;キャンセルボタンの OnSelect と画面の OnVisible に &lt;code&gt;Set(varFormSubmitted, false)&lt;/code&gt; を追加してリセットします&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-validation-required-error01.BCXgG2FI_ZwV0wT.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;p&gt;この設計の利点は、ユーザーが送信を試みるまではまったくエラーが見えないため、入力作業中の余計なストレスがゼロになることです。送信ボタンを押した瞬間に問題のある項目だけが赤くなるので、どこが問題かが一目でわかります。&lt;/p&gt;
&lt;h3 id=&quot;送信ボタンの表示と無効化のルール&quot;&gt;送信ボタンの表示と無効化のルール&lt;/h3&gt;
&lt;p&gt;エラー表示と合わせて、送信ボタンの状態制御も設計しておく必要があります。ここで陥りやすいミスが2つあります。&lt;/p&gt;
&lt;p&gt;1つ目は DisplayMode.View を使うことです。Power Apps の DisplayMode.View は見た目はボタンに見えますが、実際にはタップできません。ユーザーがボタンを押しても反応がなく、故障していると思われます。ボタンのモードは DisplayMode.Edit（通常）か DisplayMode.Disabled（非活性）のみを使うようにしましょう。&lt;/p&gt;
&lt;p&gt;2つ目はボタンを Visible:false で隠すことです。入力前から送信ボタンが消えていると、どこで保存するの？とユーザーが迷います。ボタンは常に表示した状態を保ち、条件を満たさないときは DisplayMode.Disabled で押せない状態にするのが正解です。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 送信ボタンの DisplayMode プロパティ&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;  Or&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;IsBlank&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(TextInput_Name.Text), &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;IsBlank&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(TextInput_Email.Text)),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;  DisplayMode.Disabled&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;  DisplayMode.Edit&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;a href=&quot;/powerapps-variables/&quot;&gt;グローバル変数とコンテキスト変数の使い分け&lt;/a&gt;を理解していると、varFormSubmitted のようなフラグ変数の管理がスムーズになります。&lt;/p&gt;
&lt;h2 id=&quot;モダンフォームのバリデーション設計&quot;&gt;モダンフォームのバリデーション設計&lt;/h2&gt;
&lt;p&gt;Power Apps にはクラシックフォームとモダンフォームの2種類があります。モダンフォームの場合は ValidationState プロパティと ValidationMessage プロパティを使うことで、よりシンプルにエラー表示を実装できます。&lt;/p&gt;
&lt;p&gt;モダンフォームのテキスト入力では、ValidationState プロパティに Error または None を設定します。Error にすると自動的に赤枠が付き、ValidationMessage に指定した文字列がエラーメッセージとして表示されます。カスタムのラベルコントロールを別途配置しなくても済むのが利点です。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// モダンフォームの ValidationState プロパティ&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;And&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(varFormSubmitted, &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;IsBlank&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(Self.Value)), &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;Error&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;None&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// ValidationMessage プロパティ&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;名前は必須です&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;また、複数フィールドのバリデーション状態を一括管理したい場合は、&lt;a href=&quot;/powerapps-named-formulas/&quot;&gt;名前付き計算式（App.Formulas）&lt;/a&gt;を使ったアプローチが有効です。たとえば formValid という named formula を App.Formulas に定義しておくと、送信ボタンの DisplayMode や各エラーラベルの Visible を1箇所で管理できます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// App.Formulas に定義する named formula の例&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;formValid &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; Not&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;Or&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(lbl_NameError.Visible, lbl_EmailError.Visible));&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;この formValid を送信ボタンの DisplayMode 判定に使えば、フィールドを追加するたびに各所の条件式を書き直す手間がなくなります。再利用性が高く、メンテナンスしやすい設計です。&lt;/p&gt;
&lt;h2 id=&quot;タイマーで変数セットバリデーション送信の順序を保証する&quot;&gt;タイマーで変数セット→バリデーション→送信の順序を保証する&lt;/h2&gt;
&lt;p&gt;Power Apps の OnSelect はすべての処理が同時に評価されるため、変数を true にしてからバリデーションを動かし、問題なければ保存、という順番を素直に書いてもうまくいかないことがあります。&lt;/p&gt;
&lt;p&gt;Set(varFormSubmitted, true) を書いた直後に SubmitForm を書いても、変数の更新がバリデーションの再評価より先に終わらない場合があるのです。これはモダンフォームで特に顕著です。&lt;/p&gt;
&lt;p&gt;解決策はタイマーコントロールを使うことです。送信ボタンの OnSelect でタイマーを起動し、OnTimerEnd の中で formValid が true のときだけ SubmitForm を実行します。Duration を 100〜200 ミリ秒に設定するだけで、評価順序の問題を回避できます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 送信ボタンの OnSelect&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Set&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(varFormSubmitted, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Set&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(varStartTimer, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Set&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(varStartTimer, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)  &lt;/span&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// タイマーを起動&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// Timer コントロールの OnTimerEnd&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(formValid, &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;SubmitForm&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(Form1))&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-validation-required-error02.BITblEhR_ZeQMsd.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;p&gt;この設計は少し手間に見えますが、一度作ればほぼどんなフォームでも使い回せます。私はこのパターンをテンプレート化して、新しいフォームを作るたびにコピーして使っています。&lt;/p&gt;
&lt;h2 id=&quot;まとめエラーの見せ方がアプリの信頼感を決める&quot;&gt;まとめ：エラーの見せ方が、アプリの信頼感を決める&lt;/h2&gt;
&lt;p&gt;Power Apps で入力ミスを防ぐには、エラーを出すこと自体よりもどこでどう伝えるかの設計が重要です。入力項目のすぐ下にエラーメッセージを出し、ボタンは常に見えていて条件次第で押せない状態にする、この2点を守るだけで、現場からの問い合わせは大きく減ります。&lt;/p&gt;
&lt;p&gt;バリデーション設計は &lt;a href=&quot;/powerapps-container-guide/&quot;&gt;コンテナを使ったレイアウト設計&lt;/a&gt;とも組み合わさると威力を発揮します。エラーラベルの配置をコンテナで管理すれば、レイアウト崩れを気にせずフォームを改修できます。地道な設計の積み重ねが、使ってもらえるアプリに近づく一歩です。&lt;/p&gt;
&lt;p&gt;入力エラーに関する一覧は&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-validation-guide/&quot;&gt;こちらの記事&lt;/a&gt;をご覧ください。&lt;/p&gt;</content:encoded></item><item><title>10項目の入力がパーに…を防ぐ！Power Appsで保存せず戻る時に警告を出す方法</title><link>https://shiminkaihatsu.com/powerapps-validation-unsaved-warning/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-validation-unsaved-warning/</guid><description>10項目の入力がパーに…を防ぐ！Power Appsで保存せず戻る時に警告を出す方法</description><pubDate>Sat, 11 Apr 2026 11:26:48 GMT</pubDate><content:encoded>&lt;p&gt;フォームに10項目入力した直後、間違えて戻るボタンを押してしまい、全部消えた。そんな経験がある現場スタッフは少なくありません。Power Apps では、未保存の変更がある状態で画面を離れようとしたとき、確認ダイアログを出して離脱を防ぐ設計が作れます。&lt;/p&gt;
&lt;p&gt;この記事で解説する未保存警告は、&lt;a href=&quot;/powerapps-validation-guide/&quot;&gt;Power Appsの入力ミス防止設計の全体像&lt;/a&gt;の中でもうっかりミスを防ぐフロー制御の一つです。Unsaved プロパティと OnChange フラグを使った警告ダイアログの実装方法を解説します。&lt;/p&gt;
&lt;h2 id=&quot;入力途中で画面を離れるとデータが消える問題&quot;&gt;入力途中で画面を離れるとデータが消える問題&lt;/h2&gt;
&lt;p&gt;Power Apps の画面遷移は Navigate 関数で実装します。戻るボタンの OnSelect に Back() や Navigate(Screen_List) を書くだけで、即座に画面が切り替わります。このシンプルさが便利な一方、確認なしに離脱できてしまうという問題も生みます。&lt;/p&gt;
&lt;p&gt;私が現場展開したアプリで、最初は何も警告を入れていませんでした。社内の勉強会で実演中にスタッフが入力フォームのテスト中に誤って戻るボタンを押し、全入力が消えるという場面がありました。その場はデモだったので笑い話で済みましたが、実務で起きたらシャレになりません。&lt;/p&gt;
&lt;p&gt;スマホ操作では特にこの問題が顕在化します。画面端のスワイプ操作がアプリの戻るボタンと競合したり、誤タップが起きやすかったりします。入力量が多い申請フォームほど、未保存警告の設計は重要です。&lt;/p&gt;
&lt;h2 id=&quot;unsaved-プロパティを使う方法&quot;&gt;Unsaved プロパティを使う方法&lt;/h2&gt;
&lt;p&gt;EditForm コントロールを使っているなら、Unsaved プロパティが利用できます。フォームに紐づいたいずれかのデータカードで値が変更された場合、Unsaved は自動的に true になります。保存（SubmitForm）か Reset（ResetForm）が実行されると false に戻ります。&lt;/p&gt;
&lt;p&gt;この仕組みを戻るボタンの制御に使います。戻るボタンの OnSelect に直接 Back() を書く代わりに、Unsaved の値によって処理を分岐させます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 戻るボタンの OnSelect&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;  Form1.Unsaved,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;  Set&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(varShowUnsavedDialog, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;  Navigate&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(Screen_List, ScreenTransition.Fade)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Unsaved が true のとき、確認ダイアログを表示する変数を立てます。false なら未変更なのでそのまま画面遷移します。&lt;a href=&quot;/powerapps-variables/&quot;&gt;変数の基本的な使い方&lt;/a&gt;を理解していれば、このフラグ制御はすぐに実装できます。&lt;/p&gt;
&lt;h2 id=&quot;確認ダイアログをコンテナで作る&quot;&gt;確認ダイアログをコンテナで作る&lt;/h2&gt;
&lt;p&gt;警告ダイアログは、コンテナコントロールを使ったオーバーレイUIで実装します。ダイアログ用のコンテナを画面の最前面に配置し、varShowUnsavedDialog が true のときだけ表示する設計です。&lt;/p&gt;
&lt;h3 id=&quot;ダイアログの構成&quot;&gt;ダイアログの構成&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;垂直コンテナを1つ作成し、Visible プロパティに varShowUnsavedDialog を設定します&lt;/li&gt;
&lt;li&gt;コンテナの背景色を半透明の黒（RGBA(0,0,0,0.5)）にして、画面全体を覆う大きさにします&lt;/li&gt;
&lt;li&gt;その中に白背景の内側コンテナを配置し、メッセージとボタン2つ（破棄して戻る・キャンセル）を配置します&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-validation-unsaved-warning01.CMWrERGL_ZjLdR0.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;p&gt;破棄して戻るボタンの OnSelect には、ダイアログを閉じてから画面遷移する処理を書きます。キャンセルボタンはダイアログを閉じるだけです。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 破棄して戻るボタンの OnSelect&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Set&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(varShowUnsavedDialog, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;ResetForm&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(Form1);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Navigate&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(Screen_List, ScreenTransition.Fade)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// キャンセルボタンの OnSelect&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Set&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(varShowUnsavedDialog, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;コンテナを使ったオーバーレイダイアログの配置については、&lt;a href=&quot;/powerapps-container-guide/&quot;&gt;コンテナを使ったレイアウト設計の全体ガイド&lt;/a&gt;が参考になります。Z軸方向の重なり順（コンテナの配置順）を正しく設定しないと、ダイアログが他のコントロールの下に隠れてしまうことがあります。&lt;/p&gt;
&lt;h2 id=&quot;onchange-フラグを使う方法editform-非使用の場合&quot;&gt;OnChange フラグを使う方法（EditForm 非使用の場合）&lt;/h2&gt;
&lt;p&gt;EditForm を使わず、個別のテキスト入力やドロップダウンを直接配置している画面では、Unsaved プロパティが使えません。この場合は各コントロールの OnChange プロパティでフラグを立てる方法を使います。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 各テキスト入力コントロールの OnChange プロパティ&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Set&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(varHasChanges, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 画面の OnVisible プロパティ（画面を開くたびにリセット）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Set&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(varHasChanges, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;戻るボタンの処理は Unsaved パターンと同様です。varHasChanges が true なら確認ダイアログを出し、false ならそのまま遷移します。保存処理（Patch 関数など）が成功したタイミングでも varHasChanges を false に戻すことを忘れないようにしましょう。&lt;a href=&quot;/powerapps-patch-function/&quot;&gt;Patch 関数の使い方&lt;/a&gt;と組み合わせると、保存後の状態リセットがスムーズに実装できます。&lt;/p&gt;
&lt;h3 id=&quot;画面遷移の基本と組み合わせる&quot;&gt;画面遷移の基本と組み合わせる&lt;/h3&gt;
&lt;p&gt;Power Apps の画面遷移は Navigate 関数が基本です。&lt;a href=&quot;/navigate-powerapps/&quot;&gt;Navigate 関数の使い方&lt;/a&gt;で解説しているように、画面遷移に引数としてコンテキスト変数を渡すこともできます。未保存警告の実装では、遷移先画面に情報を渡す必要はほとんどありませんが、複雑な遷移フローを組む場合は知っておくと便利な機能です。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-validation-unsaved-warning02.C6hcZfZF_wqaTP.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;注意点スワイプ操作やハードウェアバックには対応できない&quot;&gt;注意点：スワイプ操作やハードウェアバックには対応できない&lt;/h2&gt;
&lt;p&gt;このアプローチには1つ大きな制限があります。Power Apps 内の戻るボタンを制御するのは有効ですが、Android 端末のハードウェアバックボタンやスワイプ操作による戻るアクションには対応できません。Power Apps はこれらのシステム操作を上書きする機能を持っていないためです。&lt;/p&gt;
&lt;p&gt;割り切りが必要な部分です。スマホ利用が多い現場では、この制限をユーザーに周知するか、画面の上部に保存状態を常時表示するUI（保存済み / 未保存の表示ラベル）を追加して意識させる設計も有効です。完璧な防止は難しくても、ほとんどのユーザーのうっかりミスを防ぐことに意味があります。&lt;/p&gt;
&lt;h2 id=&quot;まとめ入力の労力を守るのもアプリ設計の仕事&quot;&gt;まとめ：入力の労力を守るのも、アプリ設計の仕事&lt;/h2&gt;
&lt;p&gt;未保存警告は、ユーザーが積み上げた入力作業を守るための設計です。EditForm を使うなら Unsaved プロパティ、個別コントロールなら OnChange フラグと、状況に応じて使い分けられます。確認ダイアログはコンテナで作るのが最もシンプルで、他の画面にも流用しやすいコンポーネントになります。&lt;/p&gt;
&lt;p&gt;現場のスタッフが安心してアプリを使い続けられる環境を作ることが、市民開発の本質だと思っています。地道な UX 改善の積み重ねが、長く使われるアプリを作ります。&lt;/p&gt;</content:encoded></item><item><title>どこがエラーか一目でわかる！Power Appsで未入力項目の枠線を赤く光らせるUX改善</title><link>https://shiminkaihatsu.com/powerapps-validation-visual-feedback/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-validation-visual-feedback/</guid><description>どこがエラーか一目でわかる！Power Appsで未入力項目の枠線を赤く光らせるUX改善</description><pubDate>Sat, 11 Apr 2026 11:26:46 GMT</pubDate><content:encoded>&lt;p&gt;送信してからエラーに気づく。これがユーザーにとって最もストレスの高いUXのひとつです。どの項目が問題なのかを送信前に一目でわかるように、Power Appsでは枠線の色や背景色を動的に変えることができます。入力ミス防止の設計全体については&lt;a href=&quot;/powerapps-validation-guide/&quot;&gt;Power Apps入力ミス防止ガイド&lt;/a&gt;でまとめているので、UX設計の全体像と合わせて確認してください。&lt;/p&gt;
&lt;p&gt;この記事では、BorderColorとFillプロパティをIsBlankやIsMatchと組み合わせて、未入力・不正入力を視覚的にフィードバックする方法を解説します。&lt;/p&gt;
&lt;h2 id=&quot;視覚フィードバックがuxを変える理由&quot;&gt;視覚フィードバックがUXを変える理由&lt;/h2&gt;
&lt;p&gt;ユーザーが10項目のフォームを入力し終えて送信ボタンを押したとき、画面上部に小さく未入力の項目があります、と出るだけでは、どこを直せばいいか分かりません。探すのに時間がかかり、ストレスが溜まります。最悪の場合、何度試してもどこが問題か気づけず離脱につながります。&lt;/p&gt;
&lt;p&gt;対して、問題のある入力欄そのものの枠線が赤くなっていれば、どこを直せばいいかが一目瞭然です。これがリアルタイムの視覚フィードバックの価値です。社内アプリでも、使われないアプリと使われるアプリの差はこういったUXの細部に出ることが多いと思っています。&lt;/p&gt;
&lt;h2 id=&quot;bordercolorで枠線を動的に変える&quot;&gt;BorderColorで枠線を動的に変える&lt;/h2&gt;
&lt;p&gt;テキスト入力コントロールのBorderColorプロパティは、通常RGBA値や色定数で固定設定されています。これをIf関数で条件付きの式にすることで、入力状態に応じて枠線の色を切り替えられます。&lt;/p&gt;
&lt;h3 id=&quot;未入力時に赤枠を表示する基本パターン&quot;&gt;未入力時に赤枠を表示する基本パターン&lt;/h3&gt;
&lt;p&gt;最もシンプルな実装は、IsBlankで未入力を検知して赤枠にするパターンです。テキスト入力コントロールのBorderColorプロパティに次の式を設定します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    IsBlank&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(TextInput_Name.Text),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;    Color.Red&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;    Color.Black&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;空欄のときは赤、何か入力されていれば黒になります。ただしこのままでは、画面を開いた瞬間からすべての必須フィールドが赤くなっており、ユーザーを萎えさせます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-validation-visual-feedback01.CY5wIl5c_1bebP1.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;送信ボタンを押したあとだけエラーを表示する&quot;&gt;送信ボタンを押したあとだけエラーを表示する&lt;/h3&gt;
&lt;p&gt;最初から赤くするのではなく、送信ボタンを押したあとにだけエラーを表示するのが実用的です。varFormSubmittedという変数を用意し、送信ボタンのOnSelectで最初にtrueにします。そのフラグが立っているときだけ、バリデーションが発動する設計です。&lt;a href=&quot;/powerapps-validation-required-error/&quot;&gt;必須チェックとエラーメッセージの作り方&lt;/a&gt;でも同じ変数パターンを解説しているので合わせて確認してください。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;    And&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(varFormSubmitted, &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;IsBlank&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(TextInput_Name.Text)),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;    Color.Red&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;    Color.Black&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;送信ボタンのOnSelectプロパティの先頭に UpdateContext({varFormSubmitted: true}) を入れておけば、ボタンを押した瞬間にエラーが可視化されます。フォームが正常に保存されたタイミング（OnSuccess等）でfalseに戻すのを忘れないようにしてください。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-validation-visual-feedback02.CMpGDeVT_2k06ty.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;fillプロパティで背景色も変える&quot;&gt;Fillプロパティで背景色も変える&lt;/h2&gt;
&lt;p&gt;枠線だけでなく、入力フィールドの背景色（Fillプロパティ）も変えることで、より目立つエラー表示ができます。ただし、真っ赤な背景にすると視覚的に強烈すぎるので、薄いピンクや薄い赤にするのが現場では使いやすいです。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;    And&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(varFormSubmitted, &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;IsBlank&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(TextInput_Name.Text)),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    RGBA&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;255&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;220&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;220&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;    Color.White&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;枠線が赤くなるだけより、背景も薄赤になることでエラー箇所がより直感的に伝わります。特に高齢のユーザーが多い職場や、色覚のバリエーションがある環境では、枠線の色だけに頼らず背景色やアイコンも組み合わせることを意識しています。&lt;/p&gt;
&lt;h2 id=&quot;ismatchで形式チェックの枠線制御をする&quot;&gt;IsMatchで形式チェックの枠線制御をする&lt;/h2&gt;
&lt;p&gt;未入力チェックだけでなく、入力形式（メールアドレス・電話番号・郵便番号など）が正しいかをリアルタイムで枠線に反映させることもできます。&lt;/p&gt;
&lt;p&gt;メールアドレスの形式チェックをBorderColorに組み込む例です。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;    Or&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;        IsBlank&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(TextInput_Email.Text),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;        IsMatch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(TextInput_Email.Text, Match.Email)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    ),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;    Color.Black&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;    Color.Red&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;空欄または正しいメール形式のときは黒枠、何か入力されているのに形式が間違っているときだけ赤枠にしています。空欄を黒枠扱いにするのは、入力前からエラーを出さないためです。&lt;/p&gt;
&lt;h2 id=&quot;モダンコントロールのvalidationstateを使う&quot;&gt;モダンコントロールのValidationStateを使う&lt;/h2&gt;
&lt;p&gt;モダンコントロールのテキスト入力には、ValidationStateプロパティという専用の設定があります。Errorを設定すると自動的に赤枠が付き、Noneにすると通常の状態に戻ります。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;    And&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(varFormSubmitted, &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;IsBlank&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(Self.Value)),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;    &quot;Error&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;    &quot;None&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ValidationStateを使うと、エラー時のスタイリングをPower Appsが自動で処理してくれます。カスタムのRGBA値を書かなくて済むため、コードがすっきりします。エラーメッセージのTextプロパティには、Parent.Error（フォームの標準エラー）と組み合わせることで既存のバリデーションと共存できます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-validation-visual-feedback03.Bw397NHB_21QB24.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;送信ボタンをすべての条件がクリアされるまでdisabledにする&quot;&gt;送信ボタンをすべての条件がクリアされるまでDisabledにする&lt;/h2&gt;
&lt;p&gt;視覚フィードバックと合わせて、すべての必須フィールドが正しく入力されるまで送信ボタンを押せないようにするとより安全です。複数フィールドの条件をOr関数でまとめ、ひとつでも問題があればDisabledにします。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;    Or&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;        IsBlank&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(TextInput_Name.Text),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;        Not&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;IsMatch&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(TextInput_Email.Text, Match.Email)),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;        IsBlank&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(TextInput_Tel.Text)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    ),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;    DisplayMode.Disabled&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;    DisplayMode.Edit&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;この設計を再利用しやすくするには、App.FormulasにNamed Formulaとして条件をまとめておく方法もあります。コンテナの設計思想と同様、&lt;a href=&quot;/powerapps-container-guide/&quot;&gt;UI設計全体&lt;/a&gt;の中で再利用性を意識することが長期的なメンテナンスコストを下げます。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;BorderColorとFillプロパティをIsBlankやIsMatchの結果と連動させることで、どの項目に問題があるかをユーザーが一目で把握できるフォームになります。送信してから気づくのではなく、入力中に気づける設計が、ユーザーのストレスを下げてデータ品質を上げます。&lt;/p&gt;
&lt;p&gt;見た目の工夫に見えますが、実際には入力ミスを防ぐ実用的な仕組みです。市民開発とは、こういった地道な配慮の積み重ねだと思っています。&lt;/p&gt;</content:encoded></item><item><title>Power Appsのグローバル変数とコンテキスト変数。違いと使い分けを図解</title><link>https://shiminkaihatsu.com/powerapps-variables/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-variables/</guid><description>Power Appsのグローバル変数とコンテキスト変数。違いと使い分けを図解</description><pubDate>Tue, 10 Mar 2026 23:13:20 GMT</pubDate><content:encoded>&lt;p&gt;Power Appsの変数は、グローバル変数とコンテキスト変数の2種類があります。この使い分けさえ最初に理解しておけば、後になって迷子になることがぐっと減ります。&lt;/p&gt;
&lt;h2 id=&quot;変数とは何か&quot;&gt;変数とは何か&lt;/h2&gt;
&lt;h3 id=&quot;変数を使うとどう変わるか&quot;&gt;変数を使うとどう変わるか&lt;/h3&gt;
&lt;p&gt;変数とは、数値・テキスト・真偽値などの情報を一時的に記憶しておく入れ物です。料理にたとえるなら、調理中に使う小皿のようなものです。作業途中に出た値をそこに置いておき、必要なときに取り出す。Power Appsではこの仕組みを使って、画面間でデータを渡したり、UIの状態を管理したりします。&lt;/p&gt;
&lt;p&gt;変数を使わなくてもアプリは作れます。ただ、複数の画面を持つアプリや、条件によって表示内容を切り替えたいアプリでは、変数なしに実現するのはかなり難しくなります。社内で勉強会をやっていると、変数の概念でつまずく方は多いのですが、仕組みを整理すると意外とシンプルです。&lt;/p&gt;
&lt;p&gt;Power Appsには変数の種類が2つあります。アプリ全体で使えるグローバル変数と、特定の画面の中だけで使えるコンテキスト変数です。この2つは仕組みが異なるので、それぞれ順番に見ていきます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-variables01.FbYP_kT-_ZrcFLo.webp&quot; alt=&quot;Power Appsのグローバル変数とコンテキスト変数——違いと使い分けの図&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;890&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;グローバル変数とコンテキスト変数の違い&quot;&gt;グローバル変数とコンテキスト変数の違い&lt;/h2&gt;
&lt;h3 id=&quot;グローバル変数set&quot;&gt;グローバル変数（Set）&lt;/h3&gt;
&lt;p&gt;グローバル変数は、アプリ全体のどこからでも読み書きできる変数です。Set という関数を使って値を保存します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Set&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(gv_UserName, &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;User&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;().Email)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;この1行で、ログイン中のユーザーのメールアドレスを gv_UserName という名前で保存できます。一度 Set で保存すると、アプリ内のどの画面からでも gv_UserName と書けば値を呼び出せます。&lt;/p&gt;
&lt;p&gt;グローバル変数の名前の先頭に gv_ をつけるのが個人的なルールです。変数の一覧を見返したときに、グローバルかどうかが名前だけで判別できるので、後から見直す際にとても楽です。チームで開発するときは、こういった命名規則をはじめに決めておくことをおすすめします。&lt;/p&gt;
&lt;h3 id=&quot;コンテキスト変数updatecontext&quot;&gt;コンテキスト変数（UpdateContext）&lt;/h3&gt;
&lt;p&gt;コンテキスト変数は、その画面（スクリーン）の中だけで有効な変数です。UpdateContext という関数を使います。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;UpdateContext&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;({lv_showForm: &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;})&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;lv_showForm が true のときにフォームを表示する、といった使い方ができます。UpdateContext はレコード形式（波括弧で囲む）で書くのが特徴で、複数の変数をまとめて更新することも可能です。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;UpdateContext&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;({lv_showForm: &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, lv_editMode: &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;})&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;コンテキスト変数の重要なポイントは、定義した画面の中でしか読み取れないことです。別の画面に移動すると、その変数は参照できません。私は頭に lv_（local variable の略）をつけてグローバル変数と区別しています。&lt;/p&gt;
&lt;h3 id=&quot;2つの違いを整理する&quot;&gt;2つの違いを整理する&lt;/h3&gt;
&lt;p&gt;まとめると次のとおりです。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;グローバル変数&lt;/th&gt;
&lt;th&gt;コンテキスト変数&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;使う関数&lt;/td&gt;
&lt;td&gt;Set()&lt;/td&gt;
&lt;td&gt;UpdateContext()&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;有効範囲&lt;/td&gt;
&lt;td&gt;アプリ全体&lt;/td&gt;
&lt;td&gt;定義した画面のみ&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;主な使いどころ&lt;/td&gt;
&lt;td&gt;画面をまたいで使う値&lt;/td&gt;
&lt;td&gt;画面内のUI制御&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;命名例（慣習）&lt;/td&gt;
&lt;td&gt;gv_UserName&lt;/td&gt;
&lt;td&gt;lv_ShowForm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;初期化タイミング&lt;/td&gt;
&lt;td&gt;OnStart が多い&lt;/td&gt;
&lt;td&gt;OnVisible が多い&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;どちらを使うべきか実務での判断基準&quot;&gt;どちらを使うべきか——実務での判断基準&lt;/h2&gt;
&lt;h3 id=&quot;グローバル変数を選ぶとき&quot;&gt;グローバル変数を選ぶとき&lt;/h3&gt;
&lt;p&gt;画面をまたいで値を渡したいときはグローバル変数一択です。代表的な使いどころは次の3つです。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;ログイン情報（User().Email などをアプリ起動時に保存しておく）&lt;/li&gt;
&lt;li&gt;選択したアイテムのIDや名称（一覧画面から詳細画面に渡す）&lt;/li&gt;
&lt;li&gt;編集モードと参照モードの切り替えフラグ&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;特に多いのが、ギャラリーで行をタップして詳細画面に遷移するパターンです。タップしたタイミングで選択行の情報をグローバル変数に保存しておけば、詳細画面側でその情報を自由に使えます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// ギャラリーの OnSelect に書く例&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Set&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(gv_SelectedItem, ThisItem);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Navigate&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(DetailScreen, ScreenTransition.None)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;これで DetailScreen に移動した後も、gv_SelectedItem からタップした行のデータを参照できます。シンプルですが、現場のアプリでは非常によく使うパターンです。&lt;/p&gt;
&lt;h3 id=&quot;コンテキスト変数を選ぶとき&quot;&gt;コンテキスト変数を選ぶとき&lt;/h3&gt;
&lt;p&gt;その画面の中で完結するUI制御にはコンテキスト変数が適しています。代表的なケースは次のとおりです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;フォームの表示・非表示の切り替え（追加ボタンを押したらフォームが開く）&lt;/li&gt;
&lt;li&gt;ポップアップや確認ダイアログの開閉&lt;/li&gt;
&lt;li&gt;ボタンを押してデータ送信中にローディング表示を出す&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;これらはアプリ全体に共有する必要がない、画面限定の状態管理です。グローバル変数で代用することもできますが、コンテキスト変数のほうがスコープが狭い分、意図しない値の上書きが起きにくくなります。グローバル変数を必要のない場面で乱用すると、後から見直したときに何のために使っているのかわかりにくくなるので注意が必要です。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-variables02.gcMaLfsB_Z1bEqAR.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;670&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;初心者がよくやる失敗パターン&quot;&gt;初心者がよくやる失敗パターン&lt;/h2&gt;
&lt;h3 id=&quot;コンテキスト変数を別の画面から読もうとする&quot;&gt;コンテキスト変数を別の画面から読もうとする&lt;/h3&gt;
&lt;p&gt;コンテキスト変数でつまずく原因のほぼすべては、定義した画面の外で参照しようとすることです。画面Aで設定したコンテキスト変数は、画面Bからは見えません。勉強会でも毎回と言っていいほど出てくる質問がこれです。&lt;/p&gt;
&lt;p&gt;画面間で値を渡したい場合は、グローバル変数を使うか、&lt;a href=&quot;/navigate-powerapps/&quot;&gt;Navigate 関数&lt;/a&gt;の第3引数を使う方法があります。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// Navigate の第3引数でコンテキストを渡す方法&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Navigate&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(DetailScreen, ScreenTransition.None, {lv_itemId: ThisItem.ID})&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Navigate の第3引数にレコードを渡すと、遷移先の画面のコンテキスト変数として値を引き渡せます。ただし私はこの方法よりもグローバル変数で渡す方が直感的でわかりやすいと感じており、通常はグローバル変数を使っています。どちらでも動くので、自分がわかりやすいほうを選べば問題ありません。&lt;/p&gt;
&lt;h3 id=&quot;変数を初期化しないままアプリを作る&quot;&gt;変数を初期化しないままアプリを作る&lt;/h3&gt;
&lt;p&gt;OnStart や OnVisible で変数を初期化しておかないと、アプリの状態によって予期しない値が残ることがあります。特に、編集フォームを開いた状態で別の操作をして戻ってきたときに、前回の値がそのまま残っていてバグになるケースがよくあります。&lt;/p&gt;
&lt;p&gt;対策はシンプルで、画面に入るたびに使う変数はOnVisibleでリセットするか、初期値を明示的に設定しておくことです。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// DetailScreen の OnVisible に書く例&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;UpdateContext&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;({lv_showForm: &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, lv_editMode: &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;})&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;体感では、この初期化の漏れが初心者のバグの原因としてかなりの割合を占めています。動かないと思って悩んでいたら、変数に古い値が残っていたというケースは珍しくありません。アプリが複雑になってくると特に起きやすいので、早い段階から習慣づけておくことをおすすめします。&lt;/p&gt;
&lt;h2 id=&quot;コレクションとの違いも知っておこう&quot;&gt;コレクションとの違いも知っておこう&lt;/h2&gt;
&lt;p&gt;変数とは別に、コレクションという仕組みもあります。変数が単一の値（1つの数値や文字列）を保持するのに対して、コレクションは複数行のテーブルデータを保持できます。簡単にいえば、Excelのような表形式のデータを一時的に保存するための入れ物です。&lt;/p&gt;
&lt;p&gt;一時的なリストを画面に表示したい場合や、データを加工してから保存したい場合にコレクションを使います。変数とコレクションを両方理解しておくと、Power Appsで作れるアプリの幅が大きく広がります。コレクションについては別の記事で詳しく解説する予定です。&lt;/p&gt;
&lt;p&gt;また、変数を使いこなせるようになったら、&lt;a href=&quot;/powerappstips/&quot;&gt;Power Appsで使える実用テクニック&lt;/a&gt;の記事もあわせて読んでみてください。実際の現場で役立つ記法がまとまっています。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;グローバル変数は Set、コンテキスト変数は UpdateContext——まずこの2つの関数と有効範囲の違いを覚えてしまえば大丈夫です。画面をまたぐならグローバル、その画面の中で完結するならコンテキスト。この判断基準が頭に入れば、変数で迷う場面はかなり減ります。&lt;/p&gt;
&lt;p&gt;最初から完璧に使い分けようとしなくても大丈夫です。実際にアプリを作りながら、動かして確認していくうちに自然と身につきます。変数の使い方が手に馴染んでくると、アプリで表現できることが一気に増えます。ぜひ小さなアプリから試してみてください。&lt;/p&gt;</content:encoded></item><item><title>Power AppsのWith関数で数式をすっきり書く。ネストを解消するテクニック</title><link>https://shiminkaihatsu.com/powerapps-with/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerapps-with/</guid><description>Power AppsのWith関数で数式をすっきり書く。ネストを解消するテクニック</description><pubDate>Mon, 16 Mar 2026 15:46:47 GMT</pubDate><content:encoded>&lt;p&gt;Power AppsのWith関数は、複雑な数式を見やすく整理するためのツールです。ネストが深くなった数式や、同じ計算を何度も繰り返している数式があれば、With関数で書き直すと一気にスッキリします。&lt;/p&gt;
&lt;p&gt;変数（Set/UpdateContext）と似ていますが、With関数はその数式の中だけで使えるスコープを作ります。副作用がなく、読み込み専用の一時的な値として使えるのが特徴です。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-with03.Dp9uFoF5_Z1ffNCs.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;with関数の基本構文&quot;&gt;With関数の基本構文&lt;/h2&gt;
&lt;p&gt;With関数の構文は次のとおりです。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;With&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        変数名1: 値1,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        変数名2: 値2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;    // 変数名1や変数名2を使った式&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;最初の引数にレコード形式で名前と値のペアを定義し、2番目の引数でそれを使った式を書きます。定義した変数名はその式の中だけで有効です。&lt;/p&gt;
&lt;h3 id=&quot;シンプルな例計算の再利用&quot;&gt;シンプルな例：計算の再利用&lt;/h3&gt;
&lt;p&gt;例えば、税込み価格と割引後の価格を両方表示したいとします。With関数を使わない場合はこうなります。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Text&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(SliderPrice.Value &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 1.1&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;#,##0&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot;円（割引後：&quot;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; Text&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(SliderPrice.Value &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 1.1&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 0.9&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;#,##0&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot;円）&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;SliderPrice.Value * 1.1 が2回出てきて冗長です。With関数を使うとこうなります。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;With&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    {taxPrice: SliderPrice.Value &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 1.1&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    Text&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(taxPrice, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;#,##0&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot;円（割引後：&quot;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; Text&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(taxPrice &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 0.9&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;#,##0&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot;円）&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;taxPriceという名前をつけることで、意図が明確になり繰り返しも消えます。&lt;/p&gt;
&lt;h2 id=&quot;ネストを解消する使い方&quot;&gt;ネストを解消する使い方&lt;/h2&gt;
&lt;p&gt;With関数の真価が発揮されるのは、If関数やSwitch関数とネストした複雑な数式を整理するときです。&lt;/p&gt;
&lt;h3 id=&quot;ネストが深い数式の問題&quot;&gt;ネストが深い数式の問題&lt;/h3&gt;
&lt;p&gt;例えば、ギャラリーの各アイテムについて「ステータスに応じた色」と「期限切れかどうかの判定」を同時に使う数式はこうなりがちです。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;    DateDiff&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Today&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(), &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;DateValue&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(ThisItem.期限), Days) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; &amp;#x26;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; ThisItem.ステータス &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&amp;#x3C;&gt;&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot;完了&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;    Color.Red&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;    If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;        DateDiff&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Today&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(), &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;DateValue&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(ThisItem.期限), Days) &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 3&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; &amp;#x26;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; ThisItem.ステータス &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&amp;#x3C;&gt;&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot;完了&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;        Color.Orange&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;        Color.Black&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;DateDiff(Today(), DateValue(ThisItem.期限), Days) が2回登場しています。With関数で整理するとこうなります。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;With&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        daysLeft: &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;DateDiff&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;Today&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(), &lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt;DateValue&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(ThisItem.期限), Days),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        isDone: ThisItem.ステータス &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt; &quot;完了&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;    If&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        daysLeft &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; &amp;#x26;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; !isDone, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;Color.Red&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;        daysLeft &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt; 3&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt; &amp;#x26;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; !isDone, &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;Color.Orange&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;        Color.Black&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;    )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;daysLeftとisDoneという名前がついたことで、「残り日数が0未満かつ未完了なら赤」という意図が一目でわかるようになりました。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerapps-with04.DXnoZ7lX_gMHdD.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;withとsetの使い分け&quot;&gt;WithとSetの使い分け&lt;/h2&gt;
&lt;p&gt;Withと変数（Set/UpdateContext）は似ていますが、役割が異なります。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;比較&lt;/th&gt;
&lt;th&gt;With&lt;/th&gt;
&lt;th&gt;Set / UpdateContext&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;スコープ&lt;/td&gt;
&lt;td&gt;その数式の中だけ&lt;/td&gt;
&lt;td&gt;グローバル / 画面内&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;副作用&lt;/td&gt;
&lt;td&gt;なし（読み取り専用）&lt;/td&gt;
&lt;td&gt;あり（値を書き換える）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;主な用途&lt;/td&gt;
&lt;td&gt;数式の整理・可読性向上&lt;/td&gt;
&lt;td&gt;状態管理・画面間の値の受け渡し&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;パフォーマンス&lt;/td&gt;
&lt;td&gt;良い（評価時のみ）&lt;/td&gt;
&lt;td&gt;変数更新で再評価が走る&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;まとめると、計算の途中結果を名前づけして再利用したいだけなら With、別のボタンや別の画面からも参照・変更したいならSet/UpdateContextを使います。&lt;/p&gt;
&lt;p&gt;変数の使い方については別記事で詳しく解説しています。&lt;/p&gt;
&lt;p&gt;→ &lt;a href=&quot;/powerapps-variables/&quot;&gt;Power Appsのグローバル変数とコンテキスト変数——違いと使い分けを図解&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;withを使うと良い場面のまとめ&quot;&gt;Withを使うと良い場面のまとめ&lt;/h2&gt;
&lt;p&gt;With関数を使うと数式が読みやすくなるのは、次のような場面です。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;同じ計算（DateDiff、FilterなどのLookUp）が2回以上出てくる&lt;/li&gt;
&lt;li&gt;If/Switchの条件が長くなりすぎて何を判定しているかわかりにくい&lt;/li&gt;
&lt;li&gt;ネストが3段以上になっている&lt;/li&gt;
&lt;li&gt;数式を後から自分以外が読む可能性がある&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;With関数自体がパフォーマンスを上げるわけではありませんが、数式が読みやすくなることで後からのメンテナンスが楽になります。私は「3ヶ月後の自分が読んでわかるか」を基準に、Withを入れるかどうか判断しています。&lt;/p&gt;
&lt;p&gt;条件分岐の書き方はこちらも参考にしてください。&lt;/p&gt;
&lt;p&gt;→ &lt;a href=&quot;/powerapps-if-switch/&quot;&gt;Power AppsのIfとSwitch——条件分岐の書き方と場面別の使い分け&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;With関数は数式の中に一時的な名前つきの値を定義して、その数式内で使い回せるツールです。変数と違って副作用がなく、数式の可読性を上げるためだけに使います。同じ計算が繰り返し出てきたり、ネストが深くなってきたりしたらWith関数への切り替えを検討してみてください。&lt;/p&gt;
&lt;p&gt;数式がスッキリすると、バグも減りますし、チームで開発するときも理解しやすくなります。地道ですが、こういう積み重ねが良いアプリ開発につながると思っています。&lt;/p&gt;</content:encoded></item><item><title>Power Appsで使える実用テクニック</title><link>https://shiminkaihatsu.com/powerappstips/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerappstips/</guid><description>Power Appsで使える実用テクニック</description><pubDate>Mon, 14 Oct 2024 21:01:03 GMT</pubDate><content:encoded>&lt;p&gt;Power Apps開発を効率的に進めるテクニックを紹介します。&lt;/p&gt;
&lt;h2 id=&quot;power-appsショートカット&quot;&gt;Power Appsショートカット&lt;/h2&gt;
&lt;p&gt;ショートカットキーを使って効率的に開発しましょう。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;ショートカット&lt;/th&gt;
&lt;th&gt;内容&lt;/th&gt;
&lt;th&gt;備考&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Ctrl + S&lt;/td&gt;
&lt;td&gt;保存&lt;/td&gt;
&lt;td&gt;オートセーブもあり&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ctrl + A&lt;/td&gt;
&lt;td&gt;全選択&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ctrl + X&lt;/td&gt;
&lt;td&gt;切り取り&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ctrl + C&lt;/td&gt;
&lt;td&gt;コピー&lt;/td&gt;
&lt;td&gt;他アプリからコントロールをコピーすることも可能&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ctrl + V&lt;/td&gt;
&lt;td&gt;貼り付け&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ctrl + Z&lt;/td&gt;
&lt;td&gt;取り消し&lt;/td&gt;
&lt;td&gt;6−7ステップ戻しが限界？&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ctrl + Y&lt;/td&gt;
&lt;td&gt;やり直し&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ctrl + クリック、または Shift + クリック&lt;/td&gt;
&lt;td&gt;複数オブジェクトの選択&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;F2&lt;/td&gt;
&lt;td&gt;コントロール名の変更&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;F5&lt;/td&gt;
&lt;td&gt;プレビュー&lt;/td&gt;
&lt;td&gt;PC, スマホ両方のデザイン確認が可能&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Alt押しながら&lt;/td&gt;
&lt;td&gt;動作確認&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ctrl + [ Ctrl + ]&lt;/td&gt;
&lt;td&gt;コントロールの 背面・全面移動&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Shift + Ctrl + L&lt;/td&gt;
&lt;td&gt;複数同時編集&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;一般的なPC操作とほぼ同じショートカットが有効です。&lt;/p&gt;
&lt;p&gt;紹介した中からいくつかピックアップします。&lt;/p&gt;
&lt;h3 id=&quot;ctrl--cコピー&quot;&gt;Ctrl + C（コピー）&lt;/h3&gt;
&lt;p&gt;非常によく使うショートカットの1つ。&lt;/p&gt;
&lt;p&gt;別のアプリからコントロールをコピーすることも可能です。&lt;/p&gt;
&lt;p&gt;例えばアプリ1でLabel1をコピーし、アプリ2で貼り付けすると同じLabel1がアプリ2に複製されます。&lt;/p&gt;
&lt;p&gt;これを使えば、1つ1つ手動で追加せずとも複数のアプリで機能の使い回しができます。&lt;/p&gt;
&lt;h3 id=&quot;ctrl--z取り消し&quot;&gt;Ctrl + Z（取り消し）&lt;/h3&gt;
&lt;p&gt;うっかりコントロールを消してしまったとき、関数を入力ミスしたときなど、Ctrl + Zを使います。&lt;/p&gt;
&lt;p&gt;便利な半面、戻せるステップ数に上限があり、体感的に6−7ステップかと。&lt;/p&gt;
&lt;p&gt;これもなぜか日によって（タイミングによって？）変わるので、過信しすぎは禁物です。&lt;/p&gt;
&lt;h3 id=&quot;f5プレビュー&quot;&gt;F5（プレビュー）&lt;/h3&gt;
&lt;p&gt;アプリのプレビューボタンを押さずとも、F5を押せば同じ効果があります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerappstips1-1.Bl1RHaMD_Z17lQUJ.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;685&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;altを押しながら動作確認&quot;&gt;Altを押しながら（動作確認）&lt;/h3&gt;
&lt;p&gt;「このボタンを押した動きを確認したい」&lt;br/&gt;
「ソート機能の動きを確認したい」&lt;/p&gt;
&lt;p&gt;こういう時、プレビューボタン（またはF5）を押してから挙動を確認すると思いますが、実はいちいちプレビューにする必要はありません。&lt;/p&gt;
&lt;p&gt;Altを押しながらボタンを押したり、並び替えをしてみてください。&lt;/p&gt;
&lt;p&gt;簡易的に動きを確認できます。&lt;/p&gt;
&lt;p&gt;Mac環境の場合はoptionを押しながら、になります。&lt;/p&gt;
&lt;h3 id=&quot;ctrl--ctrl--前面背面移動&quot;&gt;Ctrl + [、Ctrl + ]（前面・背面移動）&lt;/h3&gt;
&lt;p&gt;コントロールの並び順を変える時におすすめのショートカット。かなり使います。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerappstips2.BX-8-vD__ZRNssn.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;938&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;shift--ctrl--l複数同時編集&quot;&gt;Shift + Ctrl + L（複数同時編集）&lt;/h3&gt;
&lt;p&gt;Power Fx内で使える便利ショートカット。&lt;/p&gt;
&lt;p&gt;例えばこんな式があります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerappstips3.M8Fg5pvt_Z2wGD61.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;614&quot;&gt;&lt;/p&gt;
&lt;p&gt;varDisplayを修正したいが、数が多い・・・&lt;/p&gt;
&lt;p&gt;このうち、varDisplayを別の変数に置き換えたいとした時、1つずつ手動で修正するのは手間がかかります。&lt;/p&gt;
&lt;p&gt;そんな時、修正したい値を選択した状態（クリックしてカーソルがそこで点滅している状態）で、Shift + Ctrl + L を押します。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerappstips4.BwZcqOd9_pS6Uc.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;636&quot;&gt;&lt;/p&gt;
&lt;p&gt;式の中のvarDisplayが全選択される&lt;/p&gt;
&lt;p&gt;式の中のすべてのvarDisplayが選択状態になりました。&lt;/p&gt;
&lt;p&gt;この状態でBackspaceを押したり文字を入力すると、&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerappstips6.bNDsJWuT_20zgjB.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;755&quot;&gt;&lt;/p&gt;
&lt;p&gt;すべてのvarDisplayを一度に編集することができます。&lt;/p&gt;
&lt;p&gt;Ctrl + F からの一括置換もほぼ似たような機能ですが、個人的に Shift + Ctrl + L のほうが使いやすく、リアルタイム同時置換みたいな感じでしょうか。&lt;/p&gt;
&lt;p&gt;Macの場合はなぜか Shift + Ctrl + L に相当する機能がなく、代わりに Shift + Ctrl + D を複数回押して代用できます。&lt;/p&gt;
&lt;h2 id=&quot;オートセーブ機能&quot;&gt;オートセーブ機能&lt;/h2&gt;
&lt;p&gt;Power Appsには2分間隔で自動的に変更内容を保存するオートセーブ機能があります。&lt;/p&gt;
&lt;p&gt;デフォルトではONになっています。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerappstips7.CWTrDVBc_Z24KKEQ.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;627&quot;&gt;&lt;/p&gt;
&lt;p&gt;ONだと、ネットワークエラーやうっかり画面を閉じてしまった時の救済措置になります。&lt;/p&gt;
&lt;p&gt;OFFにすると救済措置が使えなくなる反面、変更内容が勝手に保存されなくなります。&lt;/p&gt;
&lt;p&gt;OFFのメリットとしては、複雑なPower Fxを編集していて、原型から大きく変更をかけてしまい、やっぱり初期状態に戻したいときに重宝します。&lt;/p&gt;
&lt;h2 id=&quot;グループは使わないコンテナを使う&quot;&gt;グループは使わない。コンテナを使う&lt;/h2&gt;
&lt;p&gt;複数のコントロールをまとめる機能でグループ化機能がありますが、使わないことをおすすめします。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerappstips8.DDin2eut_Z1iH3fF.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;944&quot;&gt;&lt;/p&gt;
&lt;p&gt;Power Pointなどでもおなじみの機能なので意外に思われる方がいらっしゃることでしょう。&lt;/p&gt;
&lt;p&gt;複数の要素を1つにまとめたいなら、代わりにコンテナ機能を使います。&lt;/p&gt;
&lt;p&gt;なぜなら、Power Appsのグループ化機能は開発において不便極まりないもので、コンテナ機能が完全な上位互換だからです。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;グループ&lt;/th&gt;
&lt;th&gt;コンテナ&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;コントロールを直接追加できない。一旦グループ化を解除しなくてはいけない&lt;/td&gt;
&lt;td&gt;コントロールを直接追加できる&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;再グループ化すると名前がリセットされる&lt;/td&gt;
&lt;td&gt;名前はリセットされない&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;背景色を付けるなら図形（四角形）コントロールが必要&lt;/td&gt;
&lt;td&gt;コンテナそのものにFillプロパティがある&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;中身が絶対座標&lt;/td&gt;
&lt;td&gt;中身が相対座標&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;グループへの処理がすべてのコントロールに影響する&lt;/td&gt;
&lt;td&gt;コンテナへの処理はコンテナのみに影響する&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;グループ in グループは不可&lt;/td&gt;
&lt;td&gt;コンテナ in コンテナが可能&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&quot;コントロールの追加が不便すぎる&quot;&gt;コントロールの追加が不便すぎる&lt;/h3&gt;
&lt;p&gt;例えばこんな状態のグループがあります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerappstips9.C45rcty6_Z1r8La0.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;509&quot;&gt;&lt;/p&gt;
&lt;p&gt;このグループの中に新たにButtonコントロールを追加したい場合、Group1の子要素を選択した状態で[挿入]→[ボタン]と進めると、Group1の外側に追加されてしまいます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerappstips10.DI_cUb2X_Z1gq7FE.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;626&quot;&gt;&lt;/p&gt;
&lt;p&gt;グループ内に直接追加することができない&lt;/p&gt;
&lt;p&gt;こうなったら、Group1を一度グループ解除し、Button2を含めたすべてのグループ化したいコントロールを再び全て選択してグループ化しなければなりません。&lt;/p&gt;
&lt;p&gt;また、この際にGroup1の名称を仮にgrpMembersのように任意の名称にしていたとすると、再グループ化したらGroup1に戻ってしまうので、それも修正の手間がかかります。&lt;/p&gt;
&lt;p&gt;コンテナはこんな手間はいっさい不要です。&lt;/p&gt;
&lt;h3 id=&quot;背景色は図形が必要&quot;&gt;背景色は図形が必要&lt;/h3&gt;
&lt;p&gt;グループ全体に色付けしたい場合、グループ内に図形（基本的に四角形）を追加し、最背面に配置し、図形のFillプロパティで色付けします。&lt;/p&gt;
&lt;p&gt;一方のコンテナは、コンテナそのものにFillプロパティがあるため、図形挿入は不要です。&lt;/p&gt;
&lt;h3 id=&quot;絶対座標と相対座標&quot;&gt;絶対座標と相対座標&lt;/h3&gt;
&lt;p&gt;グループは絶対座標、コンテナは相対座標です。&lt;/p&gt;
&lt;p&gt;図で表すとこんなイメージです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerappstips12.BRXeDou-_Z2rPmdC.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;698&quot;&gt;&lt;/p&gt;
&lt;p&gt;グループ化した要素は、アプリ画面全体に対する絶対座標を持ちます。&lt;/p&gt;
&lt;p&gt;つまり、グループ全体が移動しても、内部の要素のサイズや位置は変わりません。&lt;/p&gt;
&lt;p&gt;コンテナ内の要素は相対的な座標位置を持ち、コントロール内に対する位置の指定となります。&lt;/p&gt;
&lt;p&gt;これは、画面のサイズ変更や他のコントロールとの関係に基づいて、内部の要素が自動的に位置やサイズを調整するというもので、例えばレスポンシブデザイン（PCレイアウトとスマホレイアウトを自動的に切り替える機能）の実現に欠かせない機能の1つです。&lt;/p&gt;
&lt;h3 id=&quot;グループ-in-グループができない&quot;&gt;グループ in グループができない&lt;/h3&gt;
&lt;p&gt;グループの中にグループを作ることはできません。&lt;/p&gt;
&lt;p&gt;コンテナ in コンテナは可能です。&lt;/p&gt;
&lt;h2 id=&quot;複数のコントロールを一括して編集できる&quot;&gt;複数のコントロールを一括して編集できる&lt;/h2&gt;
&lt;p&gt;コントロールを Ctrl+クリック、またはShift+クリックで複数選択した状態で、一括してプロパティを編集することができます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerappstips1_.nbnl3_1G_Z2sWATb.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;751&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;リセットは変数で処理するのがおすすめ&quot;&gt;リセットは変数で処理するのがおすすめ&lt;/h2&gt;
&lt;p&gt;TextInputなどに入力した値を消去するため、ButtonなどのOnSelectにReset関数を使い、 Reset(TextInput1)とすることがあります。&lt;/p&gt;
&lt;p&gt;でもコントロールが増えると管理が大変になりますね。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerappstips14.CcyoT9l2_ZBLdnq.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;844&quot;&gt;&lt;/p&gt;
&lt;p&gt;Resetしたいコントロールを全て書くのが大変&lt;/p&gt;
&lt;p&gt;そんな時は変数のTrue/Falseを使って簡単にResetすることができます。&lt;/p&gt;
&lt;p&gt;まず、TextInputのResetプロパティに変数を設定します。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerappstips15.BFCD7Ku0_ZVgbEQ.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;206&quot;&gt;&lt;/p&gt;
&lt;p&gt;この時点でエラーが出ても問題ありません&lt;/p&gt;
&lt;p&gt;次に、ButtonのOnSelectでこの変数をTrue、Falseと宣言します。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerappstips16.Dt7F9n38_Z1nAa0i.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;136&quot;&gt;&lt;/p&gt;
&lt;p&gt;これでボタンを押せば、locResetをResetプロパティに設定したTextInputの値がResetされます。&lt;/p&gt;
&lt;p&gt;あとは同様に、ResetしたいコントロールのResetプロパティにlocResetを設定すればOKです。&lt;/p&gt;
&lt;h2 id=&quot;データ行の制限数は1で開発するとよい&quot;&gt;データ行の制限数は1で開発するとよい&lt;/h2&gt;
&lt;p&gt;[設定]-[全般]-[データ行の制限]から、委任がサポートされていない場合の取得行数を変更できるのはよく知られたことです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerappstips17.eT-9AJgK_LMy0V.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;468&quot;&gt;&lt;/p&gt;
&lt;p&gt;上限は2,000行&lt;/p&gt;
&lt;p&gt;アプリを作る場合、この値を1にして開発することをおすすめします。&lt;/p&gt;
&lt;p&gt;実は関数の中には、委任警告は表示されないが実は裏で委任できていない時が存在します。&lt;/p&gt;
&lt;p&gt;具体的には、SoryByColumnsで第三引数にテーブルが含まれる場合がそれに該当するのですが、これ以外にも似たケースは存在すると思われます。&lt;/p&gt;
&lt;p&gt;これらはMicrosoftの公式ドキュメントにも掲載されていないのでやっかいなのです。&lt;/p&gt;
&lt;p&gt;万が一にも委任できない状況を見落とさないためにも、開発中はデータ上限を1にすることで、想定外の委任問題をあなた（開発者）が認知することができます。&lt;/p&gt;
&lt;p&gt;もちろん、アプリを公開する際は2,000行に戻しておくのを忘れずに。&lt;/p&gt;
&lt;h2 id=&quot;随時更新します&quot;&gt;随時更新します&lt;/h2&gt;
&lt;p&gt;他にも便利技があれば更新していきます。&lt;/p&gt;</content:encoded></item><item><title>Power Automateのそれぞれに適用（Apply to each）完全攻略</title><link>https://shiminkaihatsu.com/powerautomate-apply-to-each/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerautomate-apply-to-each/</guid><description>Power Automateのそれぞれに適用（Apply to each）完全攻略</description><pubDate>Mon, 16 Mar 2026 11:42:00 GMT</pubDate><content:encoded>&lt;p&gt;Power Automateで複数件のデータを処理しようとすると、自動的にPower Automateのそれぞれに適用（Apply to each）が挿入されます。便利な反面、フローが遅い・エラーが出る原因の多くがここにあります。&lt;/p&gt;
&lt;h2 id=&quot;apply-to-eachとは何か&quot;&gt;Apply to eachとは何か&lt;/h2&gt;
&lt;h3 id=&quot;繰り返し処理の入れ物&quot;&gt;繰り返し処理の入れ物&lt;/h3&gt;
&lt;p&gt;それぞれに適用（Apply to each）は、配列（複数のデータの集まり）の中の要素を1件ずつ取り出して処理を繰り返すアクションです。Excelでいえば、セルの範囲を1行ずつ処理するループ処理と同じ考え方です。&lt;/p&gt;
&lt;p&gt;たとえばSharePointリストのアイテムを複数件取得して、それぞれにメールを送りたい場合。リスト取得のアクションはアイテムの配列を返します。その後にメール送信アクションを追加すると、Power Automateが自動でそれぞれに適用（Apply to each）を挿入して、全件分のメール送信をループしてくれます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/apply-to-eachthumb01.Dxpbr0Qm_Z1PuvjW.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;667&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;なぜ自動で挿入されるのか&quot;&gt;なぜ自動で挿入されるのか&lt;/h3&gt;
&lt;p&gt;Power Automateは、配列型のデータに対してアクションを設定しようとすると、自動的にそれぞれに適用（Apply to each）を挿入します。これは仕様で、意図したかどうかに関係なく起きます。&lt;/p&gt;
&lt;p&gt;よくある疑問は、1件しかないはずなのにApply to eachが入ったというものです。これはSharePointやOutlookの取得系アクションが、1件しかなくても配列型でデータを返すためです。1件確実に取れるとわかっていても、取得アクションの返り値が配列型である限り、Power Automateはそれぞれに適用（Apply to each）を提案してきます。&lt;/p&gt;
&lt;h2 id=&quot;apply-to-eachが遅くなる原因&quot;&gt;Apply to eachが遅くなる原因&lt;/h2&gt;
&lt;h3 id=&quot;デフォルトは1件ずつ順番に処理する&quot;&gt;デフォルトは1件ずつ順番に処理する&lt;/h3&gt;
&lt;p&gt;それぞれに適用（Apply to each）のデフォルト設定は、1件ずつ順番に処理するシリアル実行です。10件のアイテムがあれば、1件目の処理が終わってから2件目、2件目が終わってから3件目、と順番に処理します。1件あたり1秒かかる処理なら10件で10秒、100件なら100秒かかります。&lt;/p&gt;
&lt;p&gt;フローが実際に動き出すと想定より遅い、という相談を受けたとき、大半はそれぞれに適用（Apply to each）の中で時間のかかる処理（メール送信、HTTP要求、承認アクションなど）を大量に繰り返しているケースです。&lt;/p&gt;
&lt;h3 id=&quot;ループ内に余計なアクションが入っている&quot;&gt;ループ内に余計なアクションが入っている&lt;/h3&gt;
&lt;p&gt;もう一つの原因は、それぞれに適用（Apply to each）の中に本来ループ外に置けるアクションが含まれているパターンです。毎回同じデータを取得するアクション（変わらないマスタデータの参照など）がループ内にあると、10件処理するなら同じデータを10回取得します。これは無駄な処理です。&lt;/p&gt;
&lt;p&gt;それぞれに適用（Apply to each）の中に入れるのは、ループ内の各要素に依存する処理だけにするのが原則です。ループに依存しない処理はそれぞれに適用（Apply to each）の前に出して、結果を変数に保存しておきます。&lt;/p&gt;
&lt;h2 id=&quot;apply-to-eachを速くする方法&quot;&gt;Apply to eachを速くする方法&lt;/h2&gt;
&lt;h3 id=&quot;同時実行数を設定する&quot;&gt;同時実行数を設定する&lt;/h3&gt;
&lt;p&gt;それぞれに適用（Apply to each）の処理を並列で実行する設定があります。それぞれに適用（Apply to each）アクションのメニューから設定を開くと、同時実行の制御というトグルがあります。これをオンにして並列度を設定すると、複数件を同時に処理するようになります。&lt;/p&gt;
&lt;p&gt;並列度を1にするとシリアル（順番）実行、2以上にすると指定した数だけ同時に処理します。最大50まで設定できます。ただし、並列実行にすると順番が保証されなくなります。処理の順番が重要な場合（連番の採番など）は並列実行にしないようにしましょう。&lt;/p&gt;
&lt;p&gt;実際に使ってみると、メール送信を10件シリアルで処理すると40〜50秒かかっていたものが、並列度5にすると10秒以内に終わることがあります。劇的に速くなるので、順番を問わない処理には積極的に使いましょう。&lt;/p&gt;
&lt;h3 id=&quot;apply-to-eachを使わない書き方に変える&quot;&gt;Apply to eachを使わない書き方に変える&lt;/h3&gt;
&lt;p&gt;件数が多くて速度が問題になる場合、そもそもそれぞれに適用（Apply to each）を使わない設計を検討します。SharePointのアイテムを更新するだけなら、HTTP要求でSharePointのREST APIをバッチ処理すると複数件を1回のリクエストで更新できます。ただしこれは中〜上級の話なので、最初はApply to each + 並列実行で対応するので十分です。&lt;/p&gt;
&lt;h2 id=&quot;apply-to-eachでエラーが出るときの対処法&quot;&gt;Apply to eachでエラーが出るときの対処法&lt;/h2&gt;
&lt;h3 id=&quot;1件のエラーで全件が止まる&quot;&gt;1件のエラーで全件が止まる&lt;/h3&gt;
&lt;p&gt;デフォルトの設定では、それぞれに適用（Apply to each）の中の処理が1件でもエラーになると、そこでフロー全体が失敗します。10件のうち3件目でエラーが出ると、4件目以降は処理されません。&lt;/p&gt;
&lt;p&gt;これを防ぐには、それぞれに適用（Apply to each）内のアクションに実行条件の構成でエラー時でも次に進む設定を入れるか、アクションをScope（スコープ）で囲んでエラーハンドリングを追加します。エラーが出た件だけスキップして残りを処理したい場合は、後者のScope + 実行条件の組み合わせが使いやすいです。&lt;/p&gt;
&lt;h3 id=&quot;ネストしたapply-to-eachは避ける&quot;&gt;ネストしたApply to eachは避ける&lt;/h3&gt;
&lt;p&gt;それぞれに適用（Apply to each）の中にさらにそれぞれに適用（Apply to each）を入れるネスト構造は、できる限り避けましょう。外側が10件、内側が10件なら、処理の総数は100件になります。さらに内側が増えると指数的に増えて、タイムアウトや想定外の処理件数につながります。&lt;/p&gt;
&lt;p&gt;ネストが必要になる設計のときは、外側のループ処理を先に完了させてデータを整形し、内側のループに渡す前にデータ構造をフラットにできないか検討しましょう。選択（Select）や アレイのフィルター処理（Filter Array）といったデータ操作アクションがこの整形に役立ちます。&lt;/p&gt;
&lt;h3 id=&quot;件数が多すぎるときはデータを絞り込んでから渡す&quot;&gt;件数が多すぎるときはデータを絞り込んでから渡す&lt;/h3&gt;
&lt;p&gt;それぞれに適用（Apply to each）に渡すデータは、できるだけ少なくしておくのが基本です。SharePointリストを取得するときに件数の上限（デフォルト100件、最大5000件）があることも意識しましょう。複数の項目の取得（Get items ）アクションのフィルタークエリで事前に絞り込んでおくと、ループ処理の件数を減らせます。&lt;/p&gt;
&lt;p&gt;複数の項目の取得（Get items）の上限を5000件に設定して全件取得してからそれぞれに適用（Apply to each）に渡す方法もありますが、処理時間が長くなります。フィルタークエリを使って必要なアイテムだけを取得してから処理するのが、速度・コストともに優れた設計です。&lt;/p&gt;
&lt;h2 id=&quot;apply-to-eachを正しく使うためのチェックリスト&quot;&gt;Apply to eachを正しく使うためのチェックリスト&lt;/h2&gt;
&lt;p&gt;それぞれに適用（Apply to each）を使うときに確認しておきたいポイントをまとめます。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;ループ内に「全件で同じ処理」がないか確認する（ある場合はループの外に出す）&lt;/li&gt;
&lt;li&gt;件数が多い場合は同時実行数の設定を検討する&lt;/li&gt;
&lt;li&gt;処理の順番が重要かどうかを確認し、問題なければ並列実行にする&lt;/li&gt;
&lt;li&gt;ネストしたApply to eachになっていないか確認する&lt;/li&gt;
&lt;li&gt;渡すデータをフィルタークエリなどで事前に絞り込んでいるか確認する&lt;/li&gt;
&lt;li&gt;エラー時に全件が止まっていいか確認し、必要ならエラーハンドリングを追加する&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Power Automateのトリガーの選び方については&lt;a href=&quot;/powerautomate-trigger-types/&quot;&gt;トリガーはどれを選ぶ？の記事&lt;/a&gt;も合わせてご覧ください。フロー全体の設計を理解するとApply to eachの使いどころも見えてきます。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;それぞれに適用（Apply to each）はPower Automateの繰り返し処理の核です。デフォルトのシリアル実行のまま大量データを処理すると遅くなるので、並列実行の設定とループ内のアクションの最小化を意識するだけで体感が大きく変わります。&lt;/p&gt;
&lt;p&gt;最初はフローが自動でApply to eachを挿入する仕組みに戸惑うかもしれませんが、慣れてくるとなぜここにApply to eachが入るのかが自然にわかるようになります。地道な積み重ねで、フロー設計の精度は確実に上がっていきます。&lt;/p&gt;</content:encoded></item><item><title>承認コネクタの裏側と Dataverse テーブルの仕組み｜プレミアムライセンスでできること</title><link>https://shiminkaihatsu.com/powerautomate-approval-advanced/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerautomate-approval-advanced/</guid><description>承認コネクタの裏側と Dataverse テーブルの仕組み｜プレミアムライセンスでできること</description><pubDate>Wed, 08 Apr 2026 19:21:14 GMT</pubDate><content:encoded>&lt;p&gt;Power Automate の承認フローを使っていると、いつか必ず承認者のコメントを後から取得したい誰がいつ承認したか記録に残したいという要件に直面します。標準の承認アクションだけではここに限界があり、Dataverse の中身を理解する必要が出てきます。&lt;/p&gt;
&lt;p&gt;この記事では、承認データが裏側でどのように Dataverse に保存されているかを整理し、コメント取得・履歴追跡・ライセンスの考え方まで解説します。中級〜上級者向けの内容ですが、仕組みを知るだけでフロー設計の選択肢が広がります。&lt;/p&gt;
&lt;h2 id=&quot;承認データはどこに保存されているのか&quot;&gt;承認データはどこに保存されているのか&lt;/h2&gt;
&lt;p&gt;Power Automate の承認コネクタを使ってフローを実行すると、承認に関するデータは自動的に Dataverse の標準テーブルに書き込まれます。フローの実行履歴には結果（承認 or 拒否）しか表示されませんが、その裏では承認依頼・承認者の応答・コメントといった情報が構造化されて保存されています。&lt;/p&gt;
&lt;p&gt;この仕組みを知らないと、コメントを取得したくても動的コンテンツに出てこない、という壁にぶつかります。私もはじめて承認者のコメントを SharePoint リストに記録しようとしたとき、承認アクションの出力だけでは不十分なことに気づいて Dataverse の構造を調べることになりました。&lt;/p&gt;
&lt;p&gt;承認フロー全体の設計については&lt;a href=&quot;https://shiminkaihatsu.com/powerautomate-approval-guide/&quot;&gt;Power Automate 承認フロー完全ガイド&lt;/a&gt;で解説しています。この記事では Dataverse の裏側に絞って掘り下げます。&lt;/p&gt;
&lt;h2 id=&quot;4つの主要テーブルと役割&quot;&gt;4つの主要テーブルと役割&lt;/h2&gt;
&lt;p&gt;承認コネクタが使う Dataverse テーブルは主に4つあります。それぞれの役割を理解することが、必要なデータを取得するための第一歩です。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;テーブル名&lt;/th&gt;
&lt;th&gt;論理名&lt;/th&gt;
&lt;th&gt;役割&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;承認&lt;/td&gt;
&lt;td&gt;msdyn_approval&lt;/td&gt;
&lt;td&gt;承認フロー全体の親レコード。最終結果（承認/拒否）が入る&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;承認依頼&lt;/td&gt;
&lt;td&gt;msdyn_approvalrequest&lt;/td&gt;
&lt;td&gt;承認者への通知・依頼情報。誰に依頼したかが記録される&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;承認応答&lt;/td&gt;
&lt;td&gt;msdyn_approvalresponse&lt;/td&gt;
&lt;td&gt;各承認者の回答・コメント。ここにコメントが入る&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;承認ステップ&lt;/td&gt;
&lt;td&gt;msdyn_approvalstep&lt;/td&gt;
&lt;td&gt;多段承認の各ステップの状態・順序が記録される&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautomate-approval-advanced01.B-gSq9Kx_prfsn.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;承認テーブル親&quot;&gt;承認テーブル（親）&lt;/h3&gt;
&lt;p&gt;承認フロー全体を管理する親レコードです。フローが完了したとき、最終的な結果（承認されたか拒否されたか）がここに入ります。承認アクションの動的コンテンツで取れる結果はこのテーブルから来ています。ただし承認者のコメントはここには入りません。&lt;/p&gt;
&lt;h3 id=&quot;承認応答テーブルコメントの在処&quot;&gt;承認応答テーブル（コメントの在処）&lt;/h3&gt;
&lt;p&gt;承認者が承認・拒否をクリックしたときの応答レコードです。ここに各承認者のコメントが保存されます。多段承認の場合、承認者の数だけレコードが作られます。標準の承認アクションの動的コンテンツだけではこのテーブルにアクセスできないため、コメントを取得するには Dataverse コネクタを別途使う必要があります。&lt;/p&gt;
&lt;h2 id=&quot;コメント取得の落とし穴&quot;&gt;コメント取得の落とし穴&lt;/h2&gt;
&lt;p&gt;承認フローが完了した後、承認者のコメントをフロー内で取得しようとすると、ほとんどの人が一度はつまずきます。承認アクションの出力にコメントが入っていないためです。&lt;/p&gt;
&lt;h3 id=&quot;標準の動的コンテンツにコメントがない理由&quot;&gt;標準の動的コンテンツにコメントがない理由&lt;/h3&gt;
&lt;p&gt;承認アクション（承認の開始と待機）の出力として使える動的コンテンツには、結果・応答概要などは含まれますが、承認者が入力したコメントの本文は含まれていません。コメントは承認応答テーブルに別途保存されるため、そのテーブルを直接クエリしないと取得できない仕組みになっています。&lt;/p&gt;
&lt;h3 id=&quot;コメントを取得する2つのアプローチ&quot;&gt;コメントを取得する2つのアプローチ&lt;/h3&gt;
&lt;p&gt;コメントを取得する方法は2つあります。1つ目は承認アクションの出力にある応答詳細を使う方法、2つ目は Dataverse コネクタで承認応答テーブルを直接クエリする方法です。&lt;/p&gt;
&lt;p&gt;1つ目のアプローチでは、承認の開始と待機アクションの出力から応答配列を参照し、それぞれに適用（Apply to each）で回して各承認者のコメントを取り出します。これは標準コネクタのみで完結するため、ライセンス追加が不要です。ただし応答配列の構造を正確に把握する必要があります。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// Apply to each の中で使うコメント取得の式&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;items(&apos;Apply_to_each&apos;)?[&apos;comments&apos;]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;2つ目の Dataverse コネクタを使うアプローチでは、承認応答テーブルを承認IDでフィルターしてコメントを取得します。こちらのほうが柔軟性は高いですが、後述するプレミアムライセンスが必要になります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautomate-approval-advanced02.7h-01OGc_MVYjH.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;多段承認の履歴追跡&quot;&gt;多段承認の履歴追跡&lt;/h2&gt;
&lt;p&gt;連続した承認（多段承認）を使っている場合、第1承認者のコメントと第2承認者のコメントを分けて記録したいケースがあります。承認ステップテーブルと承認応答テーブルを組み合わせることで実現できますが、設計がやや複雑になります。&lt;/p&gt;
&lt;h3 id=&quot;ステップ番号でコメントを仕分ける&quot;&gt;ステップ番号でコメントを仕分ける&lt;/h3&gt;
&lt;p&gt;承認ステップテーブルにはステップ番号（順序）が記録されています。承認応答テーブルと承認ステップテーブルをリレーションでつなぐことで、第1ステップの承認者コメント・第2ステップの承認者コメントを区別して取得できます。&lt;/p&gt;
&lt;p&gt;ただし、この操作は Dataverse コネクタのリレーションクエリを使うため、プレミアムライセンスが必要です。標準ライセンスのみの環境では、Apply to each でステップインデックスを自分で管理する方法で代替するのが現実的です。&lt;/p&gt;
&lt;h2 id=&quot;ライセンスの考え方&quot;&gt;ライセンスの考え方&lt;/h2&gt;
&lt;p&gt;Dataverse コネクタ（行を一覧表示する・行を取得するなど）はプレミアムコネクタに分類されます。つまり、承認応答テーブルや承認ステップテーブルを Dataverse コネクタで直接操作するには、フローを実行するユーザーに Power Automate Premium（または Power Apps Premium）ライセンスが必要です。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;操作&lt;/th&gt;
&lt;th&gt;必要なライセンス&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;承認コネクタで承認フローを動かす&lt;/td&gt;
&lt;td&gt;Microsoft 365 標準ライセンス&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;承認アクションの出力でコメントを取得する&lt;/td&gt;
&lt;td&gt;Microsoft 365 標準ライセンス&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dataverse コネクタで承認応答テーブルを直接クエリする&lt;/td&gt;
&lt;td&gt;Power Automate Premium&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dataverse コネクタでリレーションクエリを使う&lt;/td&gt;
&lt;td&gt;Power Automate Premium&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;社内でプレミアムライセンスが使えない場合は、標準の動的コンテンツの範囲でコメントを取得する設計に留めるのが現実解です。コメントの記録先として SharePoint リストを使う場合は、&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-sharepoint-crud/&quot;&gt;SharePoint リストのデータ読み書きの基本&lt;/a&gt;も参考にしてください。&lt;/p&gt;
&lt;h2 id=&quot;dataverse-テーブルを確認する方法&quot;&gt;Dataverse テーブルを確認する方法&lt;/h2&gt;
&lt;p&gt;実際にどんなデータが入っているかを確認したい場合は、Power Apps のメーカーポータル（make.powerapps.com）からテーブルを直接参照できます。Dataverse の標準テーブルは隠しテーブルとして存在しているため、テーブル一覧には表示されませんが、論理名で検索すると見つかります。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;make.powerapps.com にアクセスし、左メニューからテーブルを選ぶ&lt;/li&gt;
&lt;li&gt;すべてのテーブルを表示に切り替え、検索欄に msdyn_approval と入力する&lt;/li&gt;
&lt;li&gt;該当テーブルを開き、データタブでレコードを確認する&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;実際のレコードを見ながら設計するほうが、どのカラムに何が入るかイメージしやすくなります。フローの設計で詰まったときは一度確認してみることをおすすめします。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautomate-approval-advanced03.DZmhHij7_yNUvp.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;承認コネクタの裏側では、Dataverse の4つの標準テーブルが連携してデータを管理しています。コメントを取得したい場合は承認応答テーブルを、多段承認の履歴を追いたい場合は承認ステップテーブルを参照する必要があります。&lt;/p&gt;
&lt;p&gt;プレミアムライセンスなしでもコメント取得は可能ですが、できることの範囲は変わります。仕組みを理解した上で、自分の環境に合った設計を選んでいきましょう。市民開発とはこういう地道な仕組み理解の積み重ねだと思っています。&lt;/p&gt;</content:encoded></item><item><title>テンプレートで始める！Forms 承認フロー作成法｜Excel 台帳への自動記録まで</title><link>https://shiminkaihatsu.com/powerautomate-approval-forms-excel/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerautomate-approval-forms-excel/</guid><description>テンプレートで始める！Forms 承認フロー作成法｜Excel 台帳への自動記録まで</description><pubDate>Wed, 08 Apr 2026 19:21:16 GMT</pubDate><content:encoded>&lt;p&gt;Power Automate の承認フローは、一から作ろうとすると意外なところでハマります。初心者にとっては、まずテンプレートを使って動くものを作ることが最初の一歩です。&lt;/p&gt;
&lt;p&gt;この記事では、Power Automate に用意されている「Microsoft Forms の応答を承認して Excel に追加する」テンプレートを使い、Forms で申請を受け付けて Excel 台帳に記録するところまでの手順を解説します。テンプレートを使うことで、承認フローの骨格をゼロから組む手間が省け、接続設定と判定ロジックの修正に集中できます。承認フロー全体の種類や使い分けについては &lt;a href=&quot;https://shiminkaihatsu.com/powerautomate-approval-guide/&quot;&gt;Power Automate 承認フロー完全ガイド&lt;/a&gt; にまとめていますので、全体像を把握したい方はそちらも参照してください。&lt;/p&gt;
&lt;h2 id=&quot;まずはテンプレートを探す&quot;&gt;まずはテンプレートを探す&lt;/h2&gt;
&lt;p&gt;Power Automate の画面を開き、左メニューのテンプレートをクリックします。検索欄に承認と入力すると、承認に関するテンプレートが一覧表示されます。その中から Microsoft Forms の応答を承認して Excel に追加する、を選んでください。&lt;/p&gt;
&lt;p&gt;テンプレートの説明画面が開いたら、接続に使うアカウントが表示されます。Forms・Approvals・Excel・OneDrive の4つのコネクタが並んでいるはずです。すべて自分のアカウントでサインインされていれば、そのまま続行をクリックします。ここで別のアカウントが表示されている場合は、後の手順で接続のズレが起きるので注意が必要です。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautomate-approval-forms-excel01.DExC0Dap_ZfmzkA.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;準備物を揃える&quot;&gt;準備物を揃える&lt;/h2&gt;
&lt;p&gt;テンプレートを使う前に、3つのものを先に用意しておくとスムーズです。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Microsoft Forms で申請フォームを作成する（例：書籍購入申請フォーム。申請者名・書籍名・金額・理由の4項目）&lt;/li&gt;
&lt;li&gt;Excel ファイルをテーブル形式で作成し、OneDrive に保存する（列は申請者名・書籍名・金額・理由・承認結果の5列を用意する）&lt;/li&gt;
&lt;li&gt;OneDrive の保存場所のパスをメモしておく&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautomate-approval-forms-excel02.Dxc9hi1k_Z2ohHOD.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;p&gt;Excel はテーブル形式でないと Power Automate から正しく認識されません。データを入力した範囲を選択して、挿入 → テーブル、からテーブル化しておきましょう。なお、Excel のデータソースとしての使い方については &lt;a href=&quot;https://shiminkaihatsu.com/excel-datasource/&quot;&gt;Excel をデータソースとして使う際の注意点&lt;/a&gt; にまとめているので、併せて参考にしてください。&lt;/p&gt;
&lt;h2 id=&quot;接続設定とフローidの紐付け&quot;&gt;接続設定とフローIDの紐付け&lt;/h2&gt;
&lt;p&gt;テンプレートを続行すると、フローの編集画面が開きます。最初のトリガー「フォームが送信されたとき」の設定から始めましょう。フォームIDのドロップダウンを開き、先ほど作成した申請フォームを選択します。&lt;/p&gt;
&lt;p&gt;次にフォーム応答の詳細を取得するアクション（Get response details）に進みます。ここでも同じフォームを選んだうえで、応答IDの欄に動的コンテンツから応答IDを差し込みます。この応答IDの挿入を忘れると、毎回同じ回答しか取得できないというバグが発生します。私が最初に作ったときもここで詰まりました。動的コンテンツのパネルで応答IDが見つからない場合は、一度フォームIDを別の選択肢にしてから戻すと表示されることがあります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautomate-approval-forms-excel03.CRZvJeJz_1VUkTU.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;判定ロジックの修正&quot;&gt;判定ロジックの修正&lt;/h2&gt;
&lt;p&gt;テンプレートには承認の開始と待機アクションの後に条件分岐（条件 / Condition）が用意されています。この条件分岐の設定を確認してください。&lt;/p&gt;
&lt;p&gt;テンプレートのデフォルトでは、結果が Approve と等しい場合を承認ルートにしていることがあります。しかし、実際の承認コネクタが返す値は Approve です（スペルに問題はありませんが、大文字・小文字が厳密に一致しているかを確認してください）。条件式の右辺の文字列が正しく Approve になっているかを確認し、必要であれば修正してください。特にテンプレートによっては approved と小文字になっているケースがあります。&lt;/p&gt;
&lt;p&gt;なお、Power Automate の条件分岐の考え方については &lt;a href=&quot;https://shiminkaihatsu.com/powerapps-if-switch/&quot;&gt;If と Switch の使い分け&lt;/a&gt; も参考になります。Power Apps の記事ですが、条件の組み立て方は共通する部分が多いです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautomate-approval-forms-excel04.BW0CoRwF_Zw9JEu.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;アクションのコピペで却下側も設定する&quot;&gt;アクションのコピペで却下側も設定する&lt;/h2&gt;
&lt;p&gt;条件分岐の「はい（承認）」ルートには Excel にデータを追加するアクション「テーブルに行を追加」が入っています。却下側にも同じ処理を入れたい場合、ゼロから設定し直す必要はありません。承認ルートのアクションを右クリックしてコピーし、却下（いいえ）ルートにペーストするだけです。&lt;/p&gt;
&lt;p&gt;コピーしたアクション内の承認結果列に差し込んでいる動的コンテンツを拒否や却下に書き換えれば、却下された申請も Excel 台帳に記録されるようになります。承認・却下どちらのケースも記録することで、後から申請状況を一覧で確認できる台帳が完成します。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautomate-approval-forms-excel05.CvLA2Wzo_1hJDCz.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;テスト送信して動作確認する&quot;&gt;テスト送信して動作確認する&lt;/h2&gt;
&lt;p&gt;フローを保存したら、まず自分でフォームに回答してテスト送信します。Power Automate のフロー詳細画面から実行履歴を確認すると、各アクションが正常に完了しているかどうかをステップごとにチェックできます。&lt;/p&gt;
&lt;p&gt;承認の通知は Teams または Outlook に届きます。承認・拒否いずれかのボタンを押してから実行履歴を再確認し、Excel 台帳にデータが追記されていれば成功です。もし実行履歴でエラーが表示されている場合は、該当のアクション名を展開して入力、出力を確認するのが最速の解決方法です。&lt;/p&gt;
&lt;p&gt;フロー全体の変数や命名については &lt;a href=&quot;https://shiminkaihatsu.com/powerautomate-variable-naming/&quot;&gt;Power Automateの変数命名規則&lt;/a&gt; も参考になります。テンプレートをそのまま使うと変数名がわかりにくいまま残ることがあるので、自分が後から見てわかる名前に変えておくことをおすすめします。&lt;/p&gt;
&lt;h2 id=&quot;まずは小規模な申請から始める&quot;&gt;まずは小規模な申請から始める&lt;/h2&gt;
&lt;p&gt;書籍購入申請のような、承認者1人・金額も少額な申請から始めるのがおすすめです。最初から経費申請や稟議書に使おうとすると、例外ケースが多くて設定が複雑になります。小さな申請で一度フローを動かし、承認の流れを実感してからステップアップしていくほうが、チーム全体の理解も得やすいです。&lt;/p&gt;
&lt;p&gt;承認通知のメール文面や Teams メッセージは、フローの承認の開始と待機アクション内の詳細欄でカスタマイズできます。申請者の名前や申請内容を動的コンテンツで差し込み、承認者がひと目で内容を判断できる文面にしておきましょう。Power Automate 全体の機能マップは &lt;a href=&quot;https://shiminkaihatsu.com/powerautomate-intro/&quot;&gt;Power Automate 入門ガイド&lt;/a&gt; で確認できます。&lt;/p&gt;
&lt;p&gt;市民開発とは、こういう地道な積み上げだと思っています。テンプレートをベースに、自分たちの業務に合わせて少しずつ改良を重ねていくことで、使い勝手のいいフローに育っていきます。&lt;/p&gt;</content:encoded></item><item><title>Power Automate 承認フロー完全ガイド｜作り方・種類・運用のコツを徹底解説</title><link>https://shiminkaihatsu.com/powerautomate-approval-guide/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerautomate-approval-guide/</guid><description>Power Automate 承認フロー完全ガイド｜作り方・種類・運用のコツを徹底解説</description><pubDate>Wed, 08 Apr 2026 19:21:14 GMT</pubDate><content:encoded>&lt;p&gt;Power Automate の承認フローは、使いこなすまでの道のりが意外と長いです。基本の作り方を覚えた後も、申請者名が自分の名前になってしまう、30日で勝手に止まる、コメントが取得できない、といった問題が次々と出てきます。&lt;/p&gt;
&lt;p&gt;この記事では、承認フローの全体像を把握するためのハブ記事として、作り方の種類・通知先の選び方・よくあるトラブルと解決策・上級テクニックまでを一気に整理します。それぞれの詳細は各サテライト記事で解説しているので、気になるテーマに合わせて読み進めてください。&lt;/p&gt;
&lt;h2 id=&quot;承認フローの基本構造&quot;&gt;承認フローの基本構造&lt;/h2&gt;
&lt;p&gt;Power Automate の承認フローは、承認コネクタが提供する承認の開始と待機アクションを中心に組み立てます。このアクションが承認者に通知を送り、承認者がボタンを押すまでフローが一時停止し、応答を受け取ったら後続の処理（記録・通知・ステータス更新など）に進む、という流れです。&lt;/p&gt;
&lt;p&gt;トリガーの種類は大きく2つに分かれます。Forms の回答をトリガーにするフォーム型と、SharePoint リストのアイテム作成・変更をトリガーにするリスト型です。どちらを選ぶかは申請の入口（申請者がどこで入力するか）によって決まります。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;種類&lt;/th&gt;
&lt;th&gt;申請入口&lt;/th&gt;
&lt;th&gt;向いているケース&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;フォーム型&lt;/td&gt;
&lt;td&gt;Microsoft Forms&lt;/td&gt;
&lt;td&gt;社外からの申請・シンプルな1回限りの申請&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;リスト型&lt;/td&gt;
&lt;td&gt;SharePoint リスト&lt;/td&gt;
&lt;td&gt;ステータス管理が必要・証跡を一覧で管理したい&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Power Apps型&lt;/td&gt;
&lt;td&gt;Power Apps アプリ&lt;/td&gt;
&lt;td&gt;入力UIをカスタマイズしたい・複雑な申請フォーム&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Power Automate 全体の入門については&lt;a href=&quot;https://shiminkaihatsu.com/powerautomate-intro/&quot;&gt;Power Automate 入門——変数・データ処理・通知・デバッグの全体マップ&lt;/a&gt;で解説しています。承認フローを作る前にフロー全体の基礎を押さえておくと、設計がスムーズになります。&lt;/p&gt;
&lt;h2 id=&quot;承認の種類1人並列多段&quot;&gt;承認の種類：1人・並列・多段&lt;/h2&gt;
&lt;p&gt;承認コネクタには、承認の種類として単一の承認・全員の承認・最初に応答した人の承認・連続した承認の4種類があります。フローの要件に合わせて選びます。&lt;/p&gt;
&lt;h3 id=&quot;単一承認と全員承認&quot;&gt;単一承認と全員承認&lt;/h3&gt;
&lt;p&gt;単一の承認は、承認者として指定した誰か1人が応答すればフローが進みます。複数人を指定した場合は最初に応答した人の判断が採用されます。全員の承認は、指定した全員が承認しないと次に進みません。役員全員の合意が必要な稟議などに適しています。&lt;/p&gt;
&lt;h3 id=&quot;連続した承認多段承認&quot;&gt;連続した承認（多段承認）&lt;/h3&gt;
&lt;p&gt;連続した承認は、承認者が複数のステップに分かれて順番に承認していく多段承認を実現します。第1承認者が承認したら第2承認者に通知が届く、という直列フローを1つのアクションで組めます。途中で誰かが拒否した時点でフローが終了します。詳しくは&lt;a href=&quot;https://shiminkaihatsu.com/powerautomate-approval-sequential/&quot;&gt;多段承認の設定方法と連続した承認の実装&lt;/a&gt;で解説しています。&lt;/p&gt;
&lt;h2 id=&quot;通知先teams-か-outlook-か&quot;&gt;通知先：Teams か Outlook か&lt;/h2&gt;
&lt;p&gt;承認依頼の通知先は Teams と Outlook の2択です。承認者が Teams を日常的に使っている組織では Teams 通知が圧倒的に反応が早く、メール文化が根強い組織では Outlook 通知のほうが自然に受け取ってもらえます。&lt;/p&gt;
&lt;p&gt;どちらを選ぶべきか、それぞれのメリット・デメリット・ハイブリッド設計のアイデアは&lt;a href=&quot;https://shiminkaihatsu.com/powerautomate-approval-teams-vs-outlook/&quot;&gt;Teams と Outlook どっちが正解？最適な通知設計&lt;/a&gt;でまとめています。&lt;/p&gt;
&lt;h2 id=&quot;フォーム型承認の作り方&quot;&gt;フォーム型承認の作り方&lt;/h2&gt;
&lt;p&gt;初心者が最初に試すなら、Microsoft Forms と承認フローを組み合わせるフォーム型がおすすめです。Power Automate にはテンプレートが用意されており、Forms の回答を承認して Excel 台帳に記録する、という一連の流れをゼロから作らずに始められます。&lt;/p&gt;
&lt;p&gt;テンプレートの使い方・接続設定のポイント・判定ロジックの修正まで、&lt;a href=&quot;https://shiminkaihatsu.com/powerautomate-approval-forms-excel/&quot;&gt;テンプレートで始める Forms 承認フロー作成法&lt;/a&gt;で丁寧に解説しています。承認フローを初めて作る方はここから読んでください。&lt;/p&gt;
&lt;h2 id=&quot;リスト型承認の作り方&quot;&gt;リスト型承認の作り方&lt;/h2&gt;
&lt;p&gt;証跡管理や複数申請の一覧把握が必要な場合は、SharePoint リストをデータソースにするリスト型が向いています。申請ごとにステータス列を持たせ、フローがステータスを自動更新する設計にすることで、承認待ち・承認済み・却下の状態を一覧で管理できます。&lt;/p&gt;
&lt;p&gt;ステータス列の設計・催促機能・取り下げ機能の実装まで、&lt;a href=&quot;https://shiminkaihatsu.com/powerautomate-approval-sharepoint/&quot;&gt;SharePoint リストで構築する本格承認ワークフロー&lt;/a&gt;で解説しています。&lt;/p&gt;
&lt;h2 id=&quot;よくあるトラブルと解決策&quot;&gt;よくあるトラブルと解決策&lt;/h2&gt;
&lt;h3 id=&quot;承認依頼の要求元が開発者の名前になる&quot;&gt;承認依頼の要求元が開発者の名前になる&lt;/h3&gt;
&lt;p&gt;自動トリガーで起動する承認フローで起きやすい問題です。承認コネクタの要求元プロパティを指定していないと、コネクタ接続に使われているアカウント（フロー作成者）の名前が表示されてしまいます。トリガーから申請者のメールアドレスを取得して要求元に差し込む設定で解決します。詳細は&lt;a href=&quot;https://shiminkaihatsu.com/powerautomate-approval-requester-fix/&quot;&gt;承認依頼の要求元が開発者になる問題の解決法&lt;/a&gt;を参照してください。&lt;/p&gt;
&lt;h3 id=&quot;30日でフローが止まる&quot;&gt;30日でフローが止まる&lt;/h3&gt;
&lt;p&gt;承認者が30日以内に応答しないと、フローが強制終了してエラーになります。役員承認や長期休暇をまたぐ申請で特に起きやすいです。次の実行条件でタイムアウト時の通知を送る設定と、Do Until ループを使った高度な設計の両方を&lt;a href=&quot;https://shiminkaihatsu.com/powerautomate-approval-timeout-error/&quot;&gt;承認フロー30日の期限切れ対策&lt;/a&gt;で解説しています。&lt;/p&gt;
&lt;h2 id=&quot;承認依頼の詳細欄を読みやすくする&quot;&gt;承認依頼の詳細欄を読みやすくする&lt;/h2&gt;
&lt;p&gt;承認依頼の詳細欄に申請内容をベタ書きすると、承認者の画面では改行なし・装飾なしの読みにくいテキストになります。Markdown 記法（太字・改行・箇条書き・リンク）と concat 関数を組み合わせることで、承認者が判断しやすい見やすい詳細欄を作れます。&lt;/p&gt;
&lt;p&gt;実践的なテンプレートとデバッグ手順は&lt;a href=&quot;https://shiminkaihatsu.com/powerautomate-approval-markdown/&quot;&gt;承認依頼を読みやすく装飾する Markdown 実践術&lt;/a&gt;にまとめています。&lt;/p&gt;
&lt;h2 id=&quot;承認コメント履歴を記録に残す&quot;&gt;承認コメント・履歴を記録に残す&lt;/h2&gt;
&lt;p&gt;承認者のコメントを後から参照したい、誰がいつ承認したかを記録したい、という要件は実務でよく出てきます。承認データは Dataverse の4つの標準テーブルに保存されており、コメントは承認応答テーブルを参照しないと取得できません。&lt;/p&gt;
&lt;p&gt;Dataverse テーブルの構造・コメント取得の方法・プレミアムライセンスの必要性については&lt;a href=&quot;https://shiminkaihatsu.com/powerautomate-approval-advanced/&quot;&gt;承認コネクタの裏側と Dataverse テーブルの仕組み&lt;/a&gt;で詳しく解説しています。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautomate-approval-guide01.C83rjReY_1bgiHl.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;まとめ読む順番のガイド&quot;&gt;まとめ：読む順番のガイド&lt;/h2&gt;
&lt;p&gt;承認フローに初めて取り組む方は、まずフォーム型承認の記事から手を動かして動くフローを作り、その後でリスト型・多段承認と段階的に発展させていくのが着実です。トラブルが出たら要求元問題・30日制限の記事を参照してください。&lt;/p&gt;
&lt;p&gt;運用が安定してきたら、詳細欄の Markdown 装飾・通知先の設計・Dataverse の裏側という順で深掘りしていくと、承認フローの設計力が一段上がります。市民開発は一度に完璧を目指さず、動くものを作りながら改善していくのが長続きのコツです。&lt;/p&gt;</content:encoded></item><item><title>承認依頼を読みやすく装飾する Markdown 実践術｜詳細欄に改行・太字・リンクを入れる方法</title><link>https://shiminkaihatsu.com/powerautomate-approval-markdown/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerautomate-approval-markdown/</guid><description>承認依頼を読みやすく装飾する Markdown 実践術｜詳細欄に改行・太字・リンクを入れる方法</description><pubDate>Wed, 08 Apr 2026 19:21:15 GMT</pubDate><content:encoded>&lt;p&gt;承認依頼の詳細欄がベタ書きで読みにくい、という声は多いです。改行が反映されず情報が詰まって見える、どこに何が書いてあるかわからない、そういった問題は Markdown 記法を使うだけで一気に解決します。&lt;/p&gt;
&lt;p&gt;この記事では、Power Automate の承認アクションの詳細欄で使える Markdown 記法の基本から、文字列補間を使った実践的な組み立て方、デバッグの手順までを解説します。設定変更は不要で、記法を覚えるだけですぐに使えます。&lt;/p&gt;
&lt;h2 id=&quot;なぜ詳細欄は読みにくくなるのか&quot;&gt;なぜ詳細欄は読みにくくなるのか&lt;/h2&gt;
&lt;p&gt;Power Automate の承認コネクタには詳細（Details）という項目があります。承認者が通知を受け取ったとき、この欄に書いた内容が申請内容として表示されます。しかしここに普通にテキストを入力すると、改行が無視されてすべての情報が1行にぎゅっと詰まった状態で届いてしまいます。&lt;/p&gt;
&lt;p&gt;たとえば申請者名・申請日・申請内容・金額を縦に並べて書いたつもりでも、承認者の画面では全部つながった一文として表示されます。これでは承認者が内容を把握するのに時間がかかり、判断ミスや承認漏れの原因にもなります。私が社内で承認フローを作り始めた頃、承認者から何が書いてあるかわからないとフィードバックをもらい、ここに手を入れるようになりました。&lt;/p&gt;
&lt;p&gt;承認フロー全体の設計については&lt;a href=&quot;https://shiminkaihatsu.com/powerautomate-approval-guide/&quot;&gt;Power Automate 承認フロー完全ガイド&lt;/a&gt;にまとめています。この記事では詳細欄の装飾に絞って解説します。&lt;/p&gt;
&lt;h2 id=&quot;markdown-記法の基本まず覚える5つのルール&quot;&gt;Markdown 記法の基本：まず覚える5つのルール&lt;/h2&gt;
&lt;p&gt;Power Automate の承認詳細欄では Markdown 記法の一部が使えます。すべてが使えるわけではありませんが、実務で必要な装飾はほぼカバーできます。&lt;/p&gt;
&lt;h3 id=&quot;改行半角スペース2つ改行&quot;&gt;改行：半角スペース2つ＋改行&lt;/h3&gt;
&lt;p&gt;Markdown の改行は、行末に半角スペースを2つ入れてから改行する必要があります。ただし Power Automate の式エディターでは改行コード \n を使うほうが確実です。テキスト入力欄で直接改行しても反映されないことが多いため、後述する文字列補間と組み合わせて \n で改行を明示するのをおすすめします。&lt;/p&gt;
&lt;h3 id=&quot;太字アスタリスク2つで囲む&quot;&gt;太字：アスタリスク2つで囲む&lt;/h3&gt;
&lt;p&gt;強調したい語句は **太字にしたい文字** のようにアスタリスク2つで前後を囲みます。申請内容のラベル部分（申請者・申請日・金額など）を太字にすると、承認者が一目で項目を把握しやすくなります。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;**&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;申請者&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;**&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;：守屋 祐輔&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;**&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;申請日&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;**&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;：&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;2026&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;04&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;07&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;**&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;申請金額&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;**&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;：&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;50&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,000円&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautomate-approval-markdown01.B-ce_DcS_ZilVVc.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;箇条書きハイフンで始める&quot;&gt;箇条書き：ハイフンで始める&lt;/h3&gt;
&lt;p&gt;ハイフン（-）で始めると箇条書きリストになります。申請内容が複数の項目にわたる場合や、承認条件を列挙する場合に便利です。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; 申請理由：社内備品購入&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; 購入先：〇〇株式会社&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; 納品予定：2026年4月末&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;リンクテキストとurlをセットで書く&quot;&gt;リンク：テキストとURLをセットで書く&lt;/h3&gt;
&lt;p&gt;承認者に関連資料や申請フォームのリンクを渡したい場合は [リンクテキスト](URL) という形式で書きます。SharePoint の申請ページや添付ファイルへの直リンクを詳細欄に入れておくと、承認者が内容を確認するまでの手間が減ります。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;[申請フォームを確認する](https:&lt;/span&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;//sharepoint.com/sites/your-site/申請一覧)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;水平線ハイフン3つ&quot;&gt;水平線：ハイフン3つ&lt;/h3&gt;
&lt;p&gt;-– とハイフンを3つ並べると水平線が引けます。申請内容と添付情報を区切るなど、セクションを視覚的に分けたいときに使います。&lt;/p&gt;
&lt;h2 id=&quot;文字列補間で-markdown-を動的に組み立てる&quot;&gt;文字列補間で Markdown を動的に組み立てる&lt;/h2&gt;
&lt;p&gt;実務では申請者名や申請内容は動的コンテンツから取得するため、固定テキストとして書くわけにはいきません。そこで Power Apps の文字列補間（$“…” 記法）の考え方を Power Automate の式でも応用します。&lt;/p&gt;
&lt;h3 id=&quot;concat-関数で文字列を組み立てる&quot;&gt;concat 関数で文字列を組み立てる&lt;/h3&gt;
&lt;p&gt;承認アクションの詳細欄には式を入力できます。concat 関数を使って Markdown の文字列と動的コンテンツを連結するのが基本パターンです。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;concat(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;  &apos;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;**&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;申請者&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;**&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;：&apos;, triggerOutputs()?[&apos;body&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;申請者名&apos;], &apos;\n&apos;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;  &apos;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;**&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;申請日&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;**&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;：&apos;, triggerOutputs()?[&apos;body&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;申請日&apos;], &apos;\n&apos;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;  &apos;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;**&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;金額&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;**&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;：&apos;, triggerOutputs()?[&apos;body&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;金額&apos;], &apos;円&apos;, &apos;\n&apos;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;  &apos;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;---&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;&apos;, &apos;\n&apos;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;  &apos;[申請内容の詳細を確認する](&apos;, triggerOutputs()?[&apos;body&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;リンク&apos;], &apos;)&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;\n が改行コードです。concat 関数の引数として文字列リテラルと動的コンテンツを交互に並べていくイメージです。文字列補間と concat の使い方について詳しくは&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-string-interpolation/&quot;&gt;文字列補間 $“…” とアンパサンド記法の比較&lt;/a&gt;も参考になります。Power Apps の考え方ですが、文字列連結の感覚は共通しています。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautomate-approval-markdown02.Cvufz9Q3_KI4Ts.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;デバッグのコツcompose-で事前に確認する&quot;&gt;デバッグのコツ：Compose で事前に確認する&lt;/h2&gt;
&lt;p&gt;組み立てた文字列が意図通りに表示されるかどうかは、実際に承認依頼を送ってみるまでわかりません。しかし毎回承認依頼を送って確認するのは手間がかかりすぎます。そこで作成（Compose）アクションを使って、詳細欄に入れる前に文字列の中身を確認する手順をおすすめします。&lt;/p&gt;
&lt;h3 id=&quot;compose-で文字列の出力を確認する手順&quot;&gt;Compose で文字列の出力を確認する手順&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;承認アクションの前に作成（Compose）アクションを追加する&lt;/li&gt;
&lt;li&gt;Compose の入力欄に、詳細欄に入れる予定の式をそのまま貼り付ける&lt;/li&gt;
&lt;li&gt;フローを手動実行し、Compose の出力結果を実行履歴から確認する&lt;/li&gt;
&lt;li&gt;改行や太字が意図通りに組み立てられていれば、その式を承認アクションの詳細欄に移植する&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautomate-approval-markdown03.CC4mNgrN_ZUMA07.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;p&gt;Compose アクションはこういったデバッグ用途でも非常に便利です。式の組み立て方や活用パターンについては&lt;a href=&quot;https://shiminkaihatsu.com/powerautomate-compose/&quot;&gt;Compose アクションのデバッグと式の整理に使う実践ガイド&lt;/a&gt;で詳しく解説しています。&lt;/p&gt;
&lt;h2 id=&quot;承認者が読みやすい詳細欄のテンプレート&quot;&gt;承認者が読みやすい詳細欄のテンプレート&lt;/h2&gt;
&lt;p&gt;実務で使いやすい詳細欄のテンプレートをまとめておきます。動的コンテンツの部分はフローのトリガーや取得元に合わせて書き換えてください。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;concat(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;  &apos;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;**&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;申請者&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;**&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;：&apos;, triggerOutputs()?[&apos;body&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;申請者名&apos;], &apos;\n&apos;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;  &apos;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;**&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;部署&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;**&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;：&apos;, triggerOutputs()?[&apos;body&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;部署&apos;], &apos;\n&apos;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;  &apos;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;**&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;申請日&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;**&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;：&apos;, triggerOutputs()?[&apos;body&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;申請日&apos;], &apos;\n&apos;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;  &apos;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;---&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;&apos;, &apos;\n&apos;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;  &apos;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;**&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;申請内容&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;**&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;&apos;, &apos;\n&apos;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;  triggerOutputs()?[&apos;body&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;申請内容&apos;], &apos;\n&apos;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;  &apos;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;---&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;&apos;, &apos;\n&apos;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;  &apos;[申請フォームを確認する](&apos;, triggerOutputs()?[&apos;body&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;フォームURL&apos;], &apos;)&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;このテンプレートを使うと、承認者の画面では申請者・部署・申請日が太字のラベル付きで整然と並び、水平線で区切られた後に申請内容の本文が続き、最後に申請フォームへのリンクが表示されます。ベタ書きのときと比べると、承認者の判断スピードが体感的に上がります。&lt;/p&gt;
&lt;p&gt;テキスト関数の全体像を理解したい場合は&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-text-functions/&quot;&gt;Power Apps テキスト関数 完全ガイド&lt;/a&gt;も合わせて読んでみてください。文字列操作の考え方は Power Automate の式にも通じる部分が多いです。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;承認依頼の詳細欄は、ちょっとした工夫で承認者の負担を大きく減らせる場所です。太字・改行・箇条書き・リンクを組み合わせるだけで、読み解くのに苦労していた詳細欄が一目でわかる申請書に変わります。&lt;/p&gt;
&lt;p&gt;まずは太字と改行だけでも取り入れてみてください。フローの品質は、こういう細かい積み重ねで上がっていくものです。&lt;/p&gt;</content:encoded></item><item><title>Power Automate 承認依頼の要求元が開発者になる問題を解決する｜フロー接続とプロパティ設定</title><link>https://shiminkaihatsu.com/powerautomate-approval-requester-fix/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerautomate-approval-requester-fix/</guid><description>Power Automate 承認依頼の要求元が開発者になる問題を解決する｜フロー接続とプロパティ設定</description><pubDate>Wed, 08 Apr 2026 19:21:15 GMT</pubDate><content:encoded>&lt;p&gt;Power Automate で承認フローを作ったとき、承認者に届くメッセージの送り主が自分（フロー作成者）の名前になってしまうことがあります。申請者は別の人のはずなのに、なぜそうなるのか。原因と解決策を整理します。&lt;/p&gt;
&lt;h2 id=&quot;発生する問題承認依頼の送り主が開発者になってしまう&quot;&gt;発生する問題：承認依頼の送り主が開発者になってしまう&lt;/h2&gt;
&lt;p&gt;自動トリガー（SharePoint リストの項目作成など）を使った承認フローでは、承認者が Teams や Outlook で受け取るメッセージの要求元欄に、フローを作成したアカウントの名前が表示されます。申請者が田中さんなのに、承認者のTeamsには守屋さん（開発者）からの承認依頼と表示される、という状況です。&lt;/p&gt;
&lt;p&gt;これは承認者にとって非常に紛らわしく、誰の申請なのかを本文を読まないと判断できません。承認件数が増えてくると、この問題が運用上のストレスになります。社内で承認フローを展開してすぐにこの問題に直面しました。実際に誰からの申請かわからないという声が承認者から上がってきたので、早急に直した経験があります。&lt;/p&gt;
&lt;p&gt;Power Automate の基本的なコネクタ構成については&lt;a href=&quot;/powerautomate-intro/&quot;&gt;Power Automate 入門記事&lt;/a&gt;でも解説していますが、承認コネクタ特有のこの問題は見落とされやすいポイントです。&lt;/p&gt;
&lt;h2 id=&quot;原因コネクタ接続と要求元プロパティの仕組み&quot;&gt;原因：コネクタ接続と要求元プロパティの仕組み&lt;/h2&gt;
&lt;p&gt;承認コネクタの「開始して承認を待機する」アクションには、詳細オプションの中に「要求元」というプロパティがあります。このプロパティを空白のまま使うと、コネクタの接続に使われているアカウント情報が自動的に要求元として使われます。&lt;/p&gt;
&lt;p&gt;コネクタの接続はフロー作成時に設定するもので、通常はフロー作成者のアカウントが使われます。つまり、要求元を明示的に指定しない限り、誰が申請してもフロー作成者の名前が表示され続けるのです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautomate-approval-requester-fix01.BaOMS-Xq_2b0ir0.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;解決策トリガーから申請者のメールアドレスを取得する&quot;&gt;解決策①：トリガーから申請者のメールアドレスを取得する&lt;/h2&gt;
&lt;p&gt;最もシンプルな解決策は、トリガーの動的コンテンツから申請者のメールアドレスを取得して要求元に差し込むことです。SharePoint リストのトリガーであれば、作成者（Created By）の中にEmailという動的コンテンツが含まれています。これを要求元フィールドにそのまま入れるだけです。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;承認アクションの詳細オプションを表示するをクリックして展開する&lt;/li&gt;
&lt;li&gt;要求元フィールドをクリックする&lt;/li&gt;
&lt;li&gt;動的コンテンツから作成者 Emailを選択する&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;これだけで、承認者が受け取るメッセージの送り主が申請者のアカウントに変わります。追加のアクションも不要で、設定箇所は1か所だけです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautomate-approval-requester-fix02.F9D9k8k__Z1uICa3.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;formsトリガーの場合の注意点&quot;&gt;Formsトリガーの場合の注意点&lt;/h3&gt;
&lt;p&gt;Microsoft Forms をトリガーにしている場合、動的コンテンツに直接メールアドレスが出てきません。Forms の回答データには「回答者のメール」という項目がありますが、匿名回答を許可している場合は取得できないことがあります。&lt;/p&gt;
&lt;p&gt;Formsでログインユーザーのみ回答を許可する設定にしている場合は、回答者のメールを要求元に設定できます。外部ユーザーが申請するケースがある場合は、Formsフォームに申請者メールアドレスの入力欄を用意しておき、その値を要求元に使う方法もあります。&lt;/p&gt;
&lt;h2 id=&quot;解決策office-365-ユーザーコネクタで表示名を取得する&quot;&gt;解決策②：Office 365 ユーザーコネクタで表示名を取得する&lt;/h2&gt;
&lt;p&gt;メールアドレスを要求元に設定するだけでも表示が改善されますが、承認者のTeamsに表示される名前が &lt;a href=&quot;mailto:yamada@company.com&quot;&gt;yamada@company.com&lt;/a&gt; のようなメールアドレスのまま表示されることがあります。見た目をより自然にしたい場合は、Office 365 ユーザーコネクタの ユーザー プロファイルの取得（V2）（Get user profile (V2)）アクションを使って正式な表示名を取得する方法があります。&lt;/p&gt;
&lt;p&gt;手順は以下の通りです。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;承認アクションの前に ユーザー プロファイルの取得（V2）アクションを追加する&lt;/li&gt;
&lt;li&gt;ユーザー（User (UPN)）フィールドに、トリガーから取得した申請者のメールアドレスを入れる&lt;/li&gt;
&lt;li&gt;このアクションの出力 表示名（Display Name）を、承認アクションの要求元フィールドに設定する&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;こうすることで、承認者のTeamsに山田 太郎のような正式な表示名が出るようになります。社内ユーザーであればほぼ確実に取得できますが、外部ユーザーやゲストアカウントの場合は取得できないことがあるため注意が必要です。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautomate-approval-requester-fix03.CKdRIMzt_Z1y0zeo.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;承認履歴への影響と運用上のメリット&quot;&gt;承認履歴への影響と運用上のメリット&lt;/h2&gt;
&lt;p&gt;要求元を正しく設定することで得られる恩恵は、見た目の改善だけではありません。Teams の承認アプリや Outlook の承認履歴を振り返ったとき、誰がどの申請を出したかが一目瞭然になります。承認者が複数の案件を同時に抱えている場合、要求元が正しく表示されているほうが優先度の判断がしやすくなります。&lt;/p&gt;
&lt;p&gt;また、承認フローの運用ログとして SharePoint リストのステータス列とあわせて管理している場合、申請者情報の一貫性が保たれるため、後から案件を検索・フィルターするときにも役立ちます。Power Apps で申請者別に案件を絞り込む&lt;a href=&quot;/powerapps-filter-by-user/&quot;&gt;ユーザーフィルターの実装&lt;/a&gt;と組み合わせると、申請管理アプリとしての完成度がさらに上がります。&lt;/p&gt;
&lt;h2 id=&quot;接続アカウントの管理共有フローでの注意&quot;&gt;接続アカウントの管理：共有フローでの注意&lt;/h2&gt;
&lt;p&gt;フローを同僚と共有したり、チームの共有環境に移行したりするタイミングで、コネクタの接続アカウントが意図せず変わってしまうことがあります。フローを別のユーザーが編集すると、そのユーザーの接続に切り替わり、要求元の設定が壊れるケースがあります。&lt;/p&gt;
&lt;p&gt;予防策としては、要求元に動的コンテンツを使って申請者のメールアドレスを明示的に設定しておくことです。固定値（ハードコード）で誰かのメールアドレスを入れるのは避けましょう。動的コンテンツで取得する限り、接続アカウントが変わっても申請者の名前が正しく表示されます。&lt;/p&gt;
&lt;p&gt;承認フロー全体の設計やコネクタの選び方については、&lt;a href=&quot;/powerautomate-approval-guide/&quot;&gt;承認フロー完全ガイド&lt;/a&gt;でより包括的にまとめています。要求元の設定はほんの1手間ですが、申請者・承認者の双方にとって使いやすいフローを作るうえで欠かせない設定です。設計段階で忘れずに組み込んでおきましょう。&lt;/p&gt;</content:encoded></item><item><title>Power Automate 連続した承認の設定方法｜多段（ステップ）承認をシンプルに実装する</title><link>https://shiminkaihatsu.com/powerautomate-approval-sequential/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerautomate-approval-sequential/</guid><description>Power Automate 連続した承認の設定方法｜多段（ステップ）承認をシンプルに実装する</description><pubDate>Wed, 08 Apr 2026 19:21:16 GMT</pubDate><content:encoded>&lt;p&gt;Power Automate の承認フローで多段承認を実装しようとしたとき、以前はループ処理を組まなければなりませんでした。しかし現在は、承認コネクタに標準搭載された連続した承認機能を使えば、アクション1つで順次承認フローを構築できます。&lt;/p&gt;
&lt;p&gt;この記事では、連続した承認の設定手順・宛先の指定方法・判定ルール・制限事項まで、実務ですぐに使えるレベルで解説します。承認フロー全体の種類や使い分けについては &lt;a href=&quot;https://shiminkaihatsu.com/powerautomate-approval-guide/&quot;&gt;Power Automate 承認フロー完全ガイド&lt;/a&gt; にまとめていますので、全体像を把握してから読むとより理解が深まります。&lt;/p&gt;
&lt;h2 id=&quot;連続した承認とは何か&quot;&gt;連続した承認とは何か&lt;/h2&gt;
&lt;p&gt;連続した承認とは、承認者を複数設定し、1人目が承認したら2人目へ、2人目が承認したら3人目へ、という順序で承認を回していく仕組みです。以前は Apply to each（それぞれに適用）アクションでループを組み、変数で承認者リストを管理する必要がありました。それが現在は、承認アクションの種類として連続した承認を選ぶだけで実現できるようになっています。&lt;/p&gt;
&lt;p&gt;Apply to each を使った方法は &lt;a href=&quot;https://shiminkaihatsu.com/powerautomate-apply-to-each/&quot;&gt;Power Automateの「Apply to each」完全攻略&lt;/a&gt; で詳しく解説していますが、連続した承認機能が使える場面ではそちらを使うほうがフローがシンプルになります。設定の手間も大幅に減るので、今から多段承認を実装するならまず連続した承認を検討することをおすすめします。&lt;/p&gt;
&lt;h2 id=&quot;設定手順&quot;&gt;設定手順&lt;/h2&gt;
&lt;h3 id=&quot;承認アクションを追加する&quot;&gt;承認アクションを追加する&lt;/h3&gt;
&lt;p&gt;フローの編集画面で承認の開始と待機アクションを追加します。アクションの種類（承認の種類）のドロップダウンを開くと、選択肢の中に連続した承認が表示されます。これを選択してください。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautomate-approval-sequential01.D3QRhNjg_1JTEdC.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;担当者を順番に設定する&quot;&gt;担当者を順番に設定する&lt;/h3&gt;
&lt;p&gt;連続した承認を選択すると、「担当者 1」「担当者 2」という入力欄が表示されます。ここに承認者のメールアドレスを順番に入力します。担当者を追加したい場合は新しいステップを追加から担当者を増やすことができます。&lt;/p&gt;
&lt;p&gt;注意点として、この担当者欄には通常のアクションのようにサジェスト（候補一覧）が表示されないことが多いです。メールアドレスを直接入力する必要があります。動的コンテンツから取得したメールアドレスを差し込む場合は、式（Expression）を使って直接参照するか、事前に作成（Compose）アクションで整形してから参照してください。&lt;/p&gt;
&lt;p&gt;複数人を1ステップに入れたい場合は、メールアドレスをセミコロンで区切ります。例えば担当者1欄に &lt;a href=&quot;mailto:user1@example.com&quot;&gt;user1@example.com&lt;/a&gt;;&lt;a href=&quot;mailto:user2@example.com&quot;&gt;user2@example.com&lt;/a&gt; と入れると、そのステップでは2人のどちらかが承認すれば次のステップに進みます。この区切り方については &lt;a href=&quot;https://shiminkaihatsu.com/powerapps-concat/&quot;&gt;Concat関数でセミコロン区切りの宛先を生成する方法&lt;/a&gt; も参考になります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautomate-approval-sequential02.YBhLAluz_Z1SIVhC.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;668&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;判定のルールを理解する&quot;&gt;判定のルールを理解する&lt;/h2&gt;
&lt;p&gt;連続した承認には、押さえておくべき判定ルールがいくつかあります。これを知らないままフローを組むと、意図しない動きをして原因がわからなくなります。&lt;/p&gt;
&lt;h3 id=&quot;1人が拒否したら即終了&quot;&gt;1人が拒否したら即終了&lt;/h3&gt;
&lt;p&gt;連続した承認では、途中のステップで1人でも拒否すると、そこでフローが終了します。残りのステップに通知は届きません。例えば担当者が3人いて担当者2が拒否した場合、担当者3には一切通知が行かず、フローは拒否ルートに分岐します。&lt;/p&gt;
&lt;p&gt;この仕様は業務フローとして自然なことが多いですが、全員の承認結果を記録したい場合などは別の実装方法を検討する必要があります。&lt;/p&gt;
&lt;h3 id=&quot;1ステップに複数人いる場合は誰か1人で進む&quot;&gt;1ステップに複数人いる場合は誰か1人で進む&lt;/h3&gt;
&lt;p&gt;1つのステップに複数人を設定している場合、そのうちの誰か1人が承認を返せば次のステップに進みます。全員の承認を待つ全員一致型とは異なります。部署内の誰でも承認できる運用に向いています。&lt;/p&gt;
&lt;p&gt;全員一致が必要な場合は、承認の種類で全員が承認する必要がありますを選ぶ別の設定を使ってください。連続した承認と全員一致は別の機能です。&lt;/p&gt;
&lt;h3 id=&quot;途中経過の通知について&quot;&gt;途中経過の通知について&lt;/h3&gt;
&lt;p&gt;各ステップの承認結果（誰が承認したか・拒否したか）は、申請者に自動で通知されます。ただし、第三者（部署全体への共有など）に通知したい場合は、条件分岐の後に別途 Teams や Outlook のアクションを追加する必要があります。&lt;/p&gt;
&lt;p&gt;また、各ステップのコメントをすべて記録・参照したい場合は、Dataverse の承認応答テーブルを参照する方法が必要になります。これはプレミアムライセンスが必要な操作です。フロー全体の構造については &lt;a href=&quot;https://shiminkaihatsu.com/powerautomate-intro/&quot;&gt;Power Automate 入門ガイド&lt;/a&gt; で全体像を確認しておくと、各アクションの位置づけが理解しやすくなります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautomate-approval-sequential03.DQXLGR8H_ZKfhLM.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;668&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;制限事項&quot;&gt;制限事項&lt;/h2&gt;
&lt;p&gt;連続した承認を使う際には、いくつかの制限事項を把握しておく必要があります。&lt;/p&gt;
&lt;p&gt;まず、カスタム応答が使えません。通常の承認アクションでは承認ボタンのラベルを「了承」「要確認」のようにカスタマイズできますが、連続した承認では承認・拒否の2択のみです。ボタンのラベルを変えたい場合は連続した承認は使えません。&lt;/p&gt;
&lt;p&gt;次に、承認コネクタのタイムアウト制限（30日）は連続した承認でも同様に適用されます。承認者全員のステップが30日以内に完了しない場合、フローがエラーで停止します。長期にわたる稟議フローなどでは事前に承認者への期限周知が重要です。&lt;/p&gt;
&lt;p&gt;また、連続した承認の各ステップに対して個別にタイムアウト設定や催促設定を入れることはできません。フロー全体として1つのアクションとして動くためです。細かい制御が必要な場合は、承認アクションを複数に分けて手動でフローを組む方法を検討してください。&lt;/p&gt;
&lt;h2 id=&quot;承認者リストを宛先として動的に取得する場合&quot;&gt;承認者リストを宛先として動的に取得する場合&lt;/h2&gt;
&lt;p&gt;承認者が固定でなく、申請内容によって変わる場合はどうするか。例えば金額が10万円以上のときは部長承認を追加する、といった場合です。&lt;/p&gt;
&lt;p&gt;このような場合は、条件分岐（条件 / Condition）で金額をチェックし、承認ルートを分岐させる方法が現実的です。金額が閾値以下のルートには担当者1人の通常承認、閾値以上のルートには連続した承認（担当者を2人設定）という構成にします。&lt;/p&gt;
&lt;p&gt;承認者のメールアドレスを変数（文字列変数 / 変数の初期化）で事前に組み立てておき、担当者欄にその変数を差し込む方法も有効です。変数の初期化・セット・追加の使い方については &lt;a href=&quot;https://shiminkaihatsu.com/powerautomate-variable-naming/&quot;&gt;Power Automateの変数命名規則&lt;/a&gt; と合わせて確認しておくと整理しやすいです。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;連続した承認は、多段承認を最短の設定で実装できる便利な機能です。ただし、カスタム応答が使えない・途中拒否で即終了・30日タイムアウトがあるといった制限もあります。&lt;/p&gt;
&lt;p&gt;まずは2段承認の単純なフローから試してみましょう。実際に動かして承認通知を受け取り、各ステップの挙動を体感することが一番の近道です。設定がシンプルなぶん、試行錯誤のコストが低いのも連続した承認の利点です。&lt;/p&gt;</content:encoded></item><item><title>SharePoint リストで構築する本格承認ワークフロー｜ステータス管理と催促の実装</title><link>https://shiminkaihatsu.com/powerautomate-approval-sharepoint/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerautomate-approval-sharepoint/</guid><description>SharePoint リストで構築する本格承認ワークフロー｜ステータス管理と催促の実装</description><pubDate>Wed, 08 Apr 2026 19:21:16 GMT</pubDate><content:encoded>&lt;p&gt;Power Automate の承認フローを Forms や Teams で試してみたけど、申請履歴の管理が難しいと感じたことはありませんか。SharePoint リストをデータソースにすれば、ステータスの追跡・証跡管理・催促の仕組みまで一気に整えることができます。&lt;/p&gt;
&lt;h2 id=&quot;なぜリスト型承認フローが選ばれるのか&quot;&gt;なぜリスト型承認フローが選ばれるのか&lt;/h2&gt;
&lt;p&gt;承認フローには大きく2つの設計パターンがあります。Microsoft Forms をトリガーにする方法と、SharePoint リストの項目作成をトリガーにする方法です。前者は手軽に始められる反面、申請状況をあとから確認しようとするとExcel台帳を手動で見に行かなければなりません。一方、後者はリスト自体が台帳を兼ねるため、承認担当者が現在どの案件が止まっているかを一覧で把握できます。&lt;/p&gt;
&lt;p&gt;私の会社でも最初は Forms 型で運用していましたが、月に30〜40件の申請が走るようになったタイミングであの申請、今どこにあるの？という問い合わせが増えました。リスト型に切り替えてからは、申請者も承認者もリストを見れば状況がわかるようになり、問い合わせがほぼゼロになりました。申請件数が10件を超えてくるあたりで、リスト型への移行を真剣に考えることをおすすめします。&lt;/p&gt;
&lt;p&gt;Power Automateの承認フロー全体の設計思想については&lt;a href=&quot;/powerautomate-approval-guide/&quot;&gt;承認フロー完全ガイド&lt;/a&gt;でまとめていますので、あわせて参照してください。&lt;/p&gt;
&lt;h2 id=&quot;ステータス列の設計&quot;&gt;ステータス列の設計&lt;/h2&gt;
&lt;p&gt;リスト型承認フローの核心は、ステータス列の設計にあります。列の型は選択肢にし、以下の4つの値を用意するのが基本パターンです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;未申請&lt;/li&gt;
&lt;li&gt;承認待ち&lt;/li&gt;
&lt;li&gt;承認済み&lt;/li&gt;
&lt;li&gt;却下&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;フローの流れとしては、申請者がリスト項目を新規作成した時点でステータスが「未申請」になっています。フローが起動して承認アクションが送信されると「承認待ち」に更新し、承認者が回答したら結果に応じて「承認済み」か「却下」に切り替えます。この更新には SharePoint コネクタの項目の更新（Update item）アクションを使います。&lt;/p&gt;
&lt;p&gt;ポイントは、フローの開始して承認を待機するアクションの前後それぞれに項目の更新を入れることです。前の更新でステータスを「承認待ち」にし、後の更新でステータスを結果に応じて分岐させます。SharePoint リストへの基本的な書き込み操作については&lt;a href=&quot;/powerapps-sharepoint-crud/&quot;&gt;SharePointリストのCRUD操作の基本&lt;/a&gt;を参考にしてください。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautomate-approval-sharepoint01.eiiAzofM_Z5OhYR.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;フロートリガーの設定無駄な起動を防ぐ&quot;&gt;フロートリガーの設定：無駄な起動を防ぐ&lt;/h3&gt;
&lt;p&gt;SharePoint リストのトリガーを「項目が作成されたとき」に設定するだけでは、列の更新のたびにフローが動いてしまう場合があります。「項目が作成または変更されたとき」を使う場合は、トリガー条件を設定して、ステータスが「未申請」のときだけフローが走るように絞り込む必要があります。&lt;/p&gt;
&lt;p&gt;トリガー条件の式は以下のようになります。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;@equals(triggerBody()?[&apos;Status&apos;]?[&apos;Value&apos;], &apos;未申請&apos;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;この設定を入れることで、承認結果の書き戻し処理（ステータスを承認済みに更新する処理）によってフローが再起動してしまうループを防げます。トリガー条件の詳しい使い方は&lt;a href=&quot;/powerautomate-trigger-condition/&quot;&gt;トリガー条件とフィルタークエリの解説記事&lt;/a&gt;で取り上げています。&lt;/p&gt;
&lt;h2 id=&quot;添付ファイルの扱いと承認依頼の詳細リンク&quot;&gt;添付ファイルの扱いと承認依頼の詳細リンク&lt;/h2&gt;
&lt;p&gt;稟議書や見積書など、添付ファイルを伴う申請フローでは、承認者が依頼メッセージを受け取った時点でファイルを確認できる状態にしておくことが大切です。承認アクションの詳細欄に SharePoint リスト項目のURLを差し込む方法が最もシンプルです。&lt;/p&gt;
&lt;p&gt;動的コンテンツから項目へのリンクを選ぶと、承認者がクリックすれば直接リスト項目のページに飛べます。そのページから添付ファイルを開く流れです。詳細欄に直接ファイルを添付する方法もありますが、ファイルサイズが大きいと承認メールが届かない場合があるため、リンク方式のほうが安定します。&lt;/p&gt;
&lt;p&gt;承認依頼の詳細欄には申請内容のサマリーも入れておくと承認者の判断が速くなります。例えば次のような文字列を作成（Compose）アクションで組み立てて、詳細欄に渡します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;申請者：@{triggerBody()?[&apos;Author&apos;]?[&apos;DisplayName&apos;]}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;申請内容：@{triggerBody()?[&apos;Title&apos;]}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;申請日：@{formatDateTime(triggerBody()?[&apos;Created&apos;], &apos;yyyy&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;MM&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;dd&apos;)}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;リンク：@{triggerBody()?[&apos;{Link}&apos;]}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautomate-approval-sharepoint02.oholWFMR_1XySim.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;催促フォローアップ機能の実装&quot;&gt;催促（フォローアップ）機能の実装&lt;/h2&gt;
&lt;p&gt;承認者が応答しないケースは必ず発生します。特に役員や部長クラスが承認者になっている場合、メールやTeamsの通知が埋もれてしまうことが多い。こういった状況に備えて、申請者が自分でプッシュできる催促の仕組みを用意しておくと運用がスムーズになります。&lt;/p&gt;
&lt;p&gt;実装方法は2段階に分けて考えます。まず1つ目は、承認アクションのリマインダー設定を使う方法です。承認アクションの詳細オプションに承認期限とリマインダーを送信の設定があり、指定した日時を過ぎても未回答の場合に自動でリマインダーメールを送れます。追加のフロー作成は不要なので、まずはこちらを使うことをおすすめします。&lt;/p&gt;
&lt;p&gt;2つ目は、申請者が手動で催促できるボタンをPower Apps上に設置する方法です。申請者がリスト項目を選択して催促するボタンを押すと、別途作成した催促フローが起動して承認者にTeamsメッセージを送る、というパターンです。この場合、ステータスが承認待ちの項目のみボタンが押せるよう、&lt;a href=&quot;/powerapps-filter-by-user/&quot;&gt;ユーザー別フィルターの設計&lt;/a&gt;と組み合わせてUIを制御すると完成度が上がります。&lt;/p&gt;
&lt;h2 id=&quot;取り下げキャンセル機能の考え方&quot;&gt;取り下げ（キャンセル）機能の考え方&lt;/h2&gt;
&lt;p&gt;申請を間違えた場合に申請者自身が取り下げられる仕組みも重要です。Power Automate のフローはいったん開始して承認を待機するに入ると、外部から強制停止する手段がほぼありません。そのため取り下げ機能はフローを止めるのではなく、承認アクションが完了した後、キャンセルフラグを確認して処理を分岐させる設計にするのが現実的です。&lt;/p&gt;
&lt;p&gt;具体的な手順としては、まずリストに「取り下げ（YesNo型）」列を追加します。申請者がこの列をオンにすると、承認担当者に取り下げの旨を通知する別フローが起動します。本フローでは承認待ちに入った後に取り下げ列がTrueかどうかをチェックする条件分岐を追加しておき、Trueだった場合はステータスを取り下げに更新して処理を終了します。&lt;/p&gt;
&lt;p&gt;取り下げのステータス値は最初の設計に含めておくと後から変更しなくて済みます。選択肢に取り下げを追加するのを忘れがちなので注意してください。私はこれを後から追加して、既存フローの条件式を全部書き直す羽目になったことがあります。設計段階でひと手間かけておくと、運用フェーズで楽になります。&lt;/p&gt;
&lt;h2 id=&quot;power-apps-連携でuiをリッチにする展望&quot;&gt;Power Apps 連携でUIをリッチにする展望&lt;/h2&gt;
&lt;p&gt;SharePoint リストとフローの組み合わせができあがったら、次のステップとして Power Apps でフロントエンドのUIを作ることが多いです。リストを直接開いて入力・確認するより、専用アプリのほうが操作ミスが減り、申請件数が増えても管理しやすくなります。&lt;/p&gt;
&lt;p&gt;アプリ側では、自分の申請のみ表示、承認待ち案件だけ赤くハイライト、ステータス別にタブを切り替えるといったUIが作りやすくなります。Power Apps でのユーザー別フィルタリングの実装については、別記事で詳しく取り上げています。&lt;/p&gt;
&lt;p&gt;承認フローはフロー単体で完結させず、Power Apps・SharePoint・Power Automate の3つをセットで設計することで、申請から承認・記録・通知まで一気通貫のワークフローが完成します。まずはシンプルな1ステップ承認から始めて、運用しながら催促や取り下げ機能を追加していくのが現実的な進め方です。市民開発はこういった地道な積み重ねで完成度が上がっていくものです。&lt;/p&gt;</content:encoded></item><item><title>承認依頼は Teams と Outlook どっちが正解？ユーザー環境に合わせた最適な通知設計</title><link>https://shiminkaihatsu.com/powerautomate-approval-teams-vs-outlook/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerautomate-approval-teams-vs-outlook/</guid><description>承認依頼は Teams と Outlook どっちが正解？ユーザー環境に合わせた最適な通知設計</description><pubDate>Wed, 08 Apr 2026 19:21:14 GMT</pubDate><content:encoded>&lt;p&gt;Power Automate で承認フローを作るとき、承認依頼の通知先を Teams にするか Outlook にするか迷う場面があります。どちらが正解というわけではなく、組織のコミュニケーション文化と承認者の作業環境によって最適解が変わります。&lt;/p&gt;
&lt;p&gt;この記事では Teams 承認と Outlook 承認それぞれのメリット・デメリットを整理し、どちらを選ぶべきかの判断基準と、両方を使いこなすハイブリッド設計のアイデアを紹介します。&lt;/p&gt;
&lt;h2 id=&quot;teams-承認のメリットとデメリット&quot;&gt;Teams 承認のメリットとデメリット&lt;/h2&gt;
&lt;p&gt;承認コネクタのデフォルトは Teams への通知です。承認者が Teams を普段使いしている組織では、最も導線がシンプルになる選択肢です。&lt;/p&gt;
&lt;h3 id=&quot;チャット感覚で即レスできる&quot;&gt;チャット感覚で即レスできる&lt;/h3&gt;
&lt;p&gt;Teams の承認通知はアクティビティフィードに届き、ポップアップ通知も出ます。承認者はその場でボタンをタップするだけで完了できるため、メールを開いて内容を確認するよりも圧倒的にレスポンスが早くなります。スマートフォンの Teams アプリでも同様に操作できるため、外出中や移動中に承認できる点も実務上の強みです。&lt;/p&gt;
&lt;p&gt;私が社内で承認フローを導入したとき、メール通知から Teams 通知に切り替えただけで平均承認時間が半分以下になりました。承認者に余計な操作をさせない設計が、フローの定着に大きく影響します。&lt;/p&gt;
&lt;h3 id=&quot;承認アプリで一元管理できる&quot;&gt;承認アプリで一元管理できる&lt;/h3&gt;
&lt;p&gt;Teams には承認（Approvals）という専用アプリがあります。自分が申請者・承認者として関わっているすべての承認フローの状況を一覧で確認でき、対応漏れを防ぐ管理ハブとして機能します。フローが増えてくると特に重宝します。&lt;/p&gt;
&lt;p&gt;承認アプリは Teams の左サイドバーから追加できます。承認者に事前に使い方を案内しておくと、承認依頼が届いたときに迷わず対応してもらえます。&lt;/p&gt;
&lt;h3 id=&quot;teams-を使っていない承認者には届かない&quot;&gt;Teams を使っていない承認者には届かない&lt;/h3&gt;
&lt;p&gt;デメリットとして、承認者が Teams を日常的に使っていない場合に通知を見逃しやすい点があります。特に経営層や外部の取引先など、Teams よりメールを主に使う人が承認者になるケースでは機能しにくいです。そういう組織では Outlook 承認を検討する価値があります。&lt;/p&gt;
&lt;h2 id=&quot;outlook-承認のメリットとデメリット&quot;&gt;Outlook 承認のメリットとデメリット&lt;/h2&gt;
&lt;p&gt;Outlook 承認を選ぶと、承認者にアダプティブカード形式のメールが届きます。メール本文内に承認・拒否ボタンが表示され、メールを開いたままポチッと完結できます。&lt;/p&gt;
&lt;h3 id=&quot;メール文化の組織にフィットする&quot;&gt;メール文化の組織にフィットする&lt;/h3&gt;
&lt;p&gt;チャットよりメールを主なコミュニケーション手段として使っている組織では、承認依頼がメールで届くほうが自然に受け取ってもらえます。Teams の通知設定をしていない人でも、メールなら高確率で目に入ります。稟議フローや役員承認など、メール文化が根強い社内手続きとの相性が特によいです。&lt;/p&gt;
&lt;h3 id=&quot;アダプティブカードが崩れるリスクがある&quot;&gt;アダプティブカードが崩れるリスクがある&lt;/h3&gt;
&lt;p&gt;Outlook でアダプティブカードが正しく表示されるのは Outlook デスクトップアプリと Outlook on the web です。古いバージョンの Outlook や一部のメールクライアントでは表示が崩れ、ボタンが押せないことがあります。承認者の環境が統一されていない場合は注意が必要です。&lt;/p&gt;
&lt;p&gt;また、Outlook 承認では承認アプリのような一覧管理機能がないため、複数の承認フローが同時進行している場合に対応漏れが起きやすい点もデメリットです。&lt;/p&gt;
&lt;h2 id=&quot;teams-vs-outlook-比較表&quot;&gt;Teams vs Outlook 比較表&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;比較項目&lt;/th&gt;
&lt;th&gt;Teams 承認&lt;/th&gt;
&lt;th&gt;Outlook 承認&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;通知の受け取り方&lt;/td&gt;
&lt;td&gt;アクティビティ通知＋ポップアップ&lt;/td&gt;
&lt;td&gt;メール受信&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;承認操作の場所&lt;/td&gt;
&lt;td&gt;Teams アプリ内&lt;/td&gt;
&lt;td&gt;メール本文内（アダプティブカード）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;モバイル対応&lt;/td&gt;
&lt;td&gt;非常に良好&lt;/td&gt;
&lt;td&gt;環境依存&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;一覧管理&lt;/td&gt;
&lt;td&gt;承認アプリで可能&lt;/td&gt;
&lt;td&gt;なし（受信トレイで管理）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;向いている組織&lt;/td&gt;
&lt;td&gt;Teams を日常使いしている&lt;/td&gt;
&lt;td&gt;メール文化が主体&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;表示の安定性&lt;/td&gt;
&lt;td&gt;高い&lt;/td&gt;
&lt;td&gt;クライアントに依存&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautomate-approval-teams-vs-outlook01.BtLzqDZ0_2tD2Bo.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;どちらをメインにするか判断の基準&quot;&gt;どちらをメインにするか：判断の基準&lt;/h2&gt;
&lt;p&gt;結論から言えば、承認者が Teams をメインに使っているなら Teams 承認、メールが主体なら Outlook 承認を選ぶのが基本です。ただし実務では承認者が複数いて、Teams 派とメール派が混在することもあります。&lt;/p&gt;
&lt;h3 id=&quot;承認者に合わせて通知先を切り替える設計&quot;&gt;承認者に合わせて通知先を切り替える設計&lt;/h3&gt;
&lt;p&gt;承認アクションの前に条件（Condition）を置き、承認者のメールアドレスや部署情報に応じて Teams 通知と Outlook 通知のどちらを使うか動的に切り替える設計が可能です。少し設計が複雑になりますが、承認者ごとに最適な通知方法を選べます。&lt;/p&gt;
&lt;h3 id=&quot;ハイブリッド設計詳細欄に両方のリンクを置く&quot;&gt;ハイブリッド設計：詳細欄に両方のリンクを置く&lt;/h3&gt;
&lt;p&gt;通知方法をどちらか1つに絞れない場合は、詳細欄に Teams で開くリンクとブラウザで開くリンクの両方を置くハイブリッド設計が現実解になります。承認者は自分の環境や好みに合わせてどちらからでもアクセスできます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;concat(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;  &apos;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;**&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;申請内容&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;**&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;：&apos;, triggerOutputs()?[&apos;body&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;申請内容&apos;], &apos;\n&apos;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;  &apos;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;---&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;&apos;, &apos;\n&apos;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;  &apos;[Teams承認アプリで確認する](https:&lt;/span&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;//teams.microsoft.com/l/entity/...)&apos;, &apos;\n&apos;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;  &apos;[ブラウザで確認する](&apos;, triggerOutputs()?[&apos;body&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;申請URL&apos;], &apos;)&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Teams の承認アプリのリンクは、承認（Approvals）アプリ内の該当依頼のURLをコピーして使います。承認フローごとに固定リンクを作ることはできませんが、承認アプリへの入口として Teams アプリの一般URLを置くだけでも、承認者の利便性は上がります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautomate-approval-teams-vs-outlook02.DM5dn8iV_Z1TYkT7.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;ユーザー教育も合わせて行う&quot;&gt;ユーザー教育も合わせて行う&lt;/h2&gt;
&lt;p&gt;どちらの通知方法を選んでも、承認者に事前に使い方を案内しておくことが定着のカギになります。Teams 通知の場合は承認アプリの場所と使い方、Outlook 通知の場合はメール本文のボタン操作を簡単に説明する社内メモを用意しておくと、問い合わせが減ります。&lt;/p&gt;
&lt;p&gt;承認フローの通知設計と合わせて、Teams への自動通知の基本的な仕組みを理解しておくと応用しやすいです。&lt;a href=&quot;https://shiminkaihatsu.com/powerautomate-teams-notify/&quot;&gt;Teams チャットへの自動通知の設定方法&lt;/a&gt;で基礎から解説しているので参考にしてください。&lt;/p&gt;
&lt;p&gt;承認フロー全体の設計については&lt;a href=&quot;https://shiminkaihatsu.com/powerautomate-approval-guide/&quot;&gt;Power Automate 承認フロー完全ガイド&lt;/a&gt;にまとめています。通知先の選択は設計の一部に過ぎないため、フロー全体の流れも合わせて確認しておくことをおすすめします。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;Teams と Outlook のどちらが正解かは、承認者の環境次第です。Teams を日常的に使っている組織なら Teams 承認一択で問題ありません。メールがメインなら Outlook 承認を選び、アダプティブカードの表示確認を忘れずに行いましょう。&lt;/p&gt;
&lt;p&gt;どちらを選んでも、詳細欄の情報を Markdown で整理し、承認者が判断しやすい状態にしておくことが大切です。通知方法の選択よりも、承認者が読みやすいかどうかのほうが、フローの定着に影響します。&lt;/p&gt;</content:encoded></item><item><title>承認フロー30日の期限切れ対策｜タイムアウトの回避策とエラーハンドリング</title><link>https://shiminkaihatsu.com/powerautomate-approval-timeout-error/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerautomate-approval-timeout-error/</guid><description>承認フロー30日の期限切れ対策｜タイムアウトの回避策とエラーハンドリング</description><pubDate>Wed, 08 Apr 2026 19:21:15 GMT</pubDate><content:encoded>&lt;p&gt;Power Automate の承認フローを運用していると、ある日突然フローがエラーで止まっていた、という経験をした方は多いと思います。原因の大半は30日の壁です。承認者が長期間応答しなかっただけで、フロー全体が強制停止してしまうのです。&lt;/p&gt;
&lt;p&gt;この記事では、Power Automate の承認フローに存在する30日タイムアウト制限の仕組みを整理したうえで、運用でカバーする方法からエラーハンドリング、さらには高度なフロー設計まで3段階の対策を解説します。&lt;/p&gt;
&lt;h2 id=&quot;power-automate-の30日の壁とは何か&quot;&gt;Power Automate の30日の壁とは何か&lt;/h2&gt;
&lt;p&gt;Power Automate のアクションには、最大実行時間という制限があります。承認（Approvals）コネクタの承認の開始と待機アクションも例外ではなく、承認者が応答しないまま30日が経過すると、アクションが強制的にタイムアウトしてフローはエラー終了します。&lt;/p&gt;
&lt;p&gt;問題は、フローがエラーで終了した後に申請者も承認者も気づきにくい点です。Teamsやメールに通知が飛んでいたとしても、30日間放置されていた場合、申請自体が完全に宙に浮いた状態になります。月をまたぐような役員承認や、長期休暇中の代理対応が必要なケースでは特に起きやすい問題です。&lt;/p&gt;
&lt;p&gt;私自身も社内の稟議フローを Power Automate で構築した直後、年末年始をまたいだ申請がそのまま止まってしまい、年明けに発覚するという経験をしました。原因を調べるまでフローが壊れたと思っていたほどです。これは仕様なので、最初から対策を組み込んでおくことが大切です。&lt;/p&gt;
&lt;h2 id=&quot;対策運用でカバーする催促と周知の徹底&quot;&gt;対策①：運用でカバーする——催促と周知の徹底&lt;/h2&gt;
&lt;p&gt;一番シンプルな対策は、30日以内に必ず承認してもらうよう運用ルールを整備することです。技術的な対応を入れる前に、まずここから始めるのをおすすめします。&lt;/p&gt;
&lt;h3 id=&quot;申請時に期限を明示する&quot;&gt;申請時に期限を明示する&lt;/h3&gt;
&lt;p&gt;承認依頼の詳細欄に「このフローは30日以内に応答がない場合、自動的にエラー終了します」という一文を入れておくだけで、承認者の意識が変わります。システムの制約を明示することは、運用上の誠実さにもつながります。&lt;/p&gt;
&lt;p&gt;詳細欄の文字列を組み立てる方法については、作成（Compose）アクションを使って整形するのが便利です。承認依頼の本文をどう作るかという観点は、承認フロー全体の設計を扱った&lt;a href=&quot;https://shiminkaihatsu.com/powerautomate-approval-guide/&quot;&gt;Power Automate 承認フロー完全ガイド&lt;/a&gt;にまとめているので、合わせて参照してください。&lt;/p&gt;
&lt;h3 id=&quot;teamsのフォローアップ機能を活用する&quot;&gt;Teamsのフォローアップ機能を活用する&lt;/h3&gt;
&lt;p&gt;Teams の承認通知には、フォローアップのリマインダー設定ができます。承認者が通知を受け取った後、自分でリマインダーをセットできるため、うっかり忘れを防ぐ補助線として有効です。ただしこれはあくまで承認者側の操作に依存するため、申請者が積極的に声がけすることも併用するのが現実的です。&lt;/p&gt;
&lt;p&gt;また、承認フローのトリガー起動から一定日数後（たとえば20日後）に自動でリマインドメールを送る、という仕組みを別フローで作っておくと安心です。スケジュール（繰り返し）トリガーと SharePoint リストの申請日を組み合わせれば、承認待ち一覧を定期的にスキャンして催促することもできます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautomate-approval-timeout-error01.DWrUXxBP_Z1xORPy.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;対策エラーハンドリングで止まっても通知する&quot;&gt;対策②：エラーハンドリングで止まっても通知する&lt;/h2&gt;
&lt;p&gt;タイムアウトが発生したとき、フローが黙って止まるのが一番困ります。せめてタイムアウトしました。再申請してくださいという通知を申請者に送れれば、対応の起点にできます。これを実現するのが、アクションの次の実行条件設定です。&lt;/p&gt;
&lt;h3 id=&quot;次の実行条件でタイムアウト時の分岐を作る&quot;&gt;次の実行条件でタイムアウト時の分岐を作る&lt;/h3&gt;
&lt;p&gt;Power Automate では、各アクションに次の実行条件という設定があります。通常は前のアクションが成功したときだけ実行されますが、ここを失敗した場合やタイムアウトした場合に変更することで、エラー発生後の処理を追加できます。&lt;/p&gt;
&lt;p&gt;具体的な手順は以下のとおりです。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;承認の開始と待機アクションの直後に、メール送信またはTeams通知アクションを追加する&lt;/li&gt;
&lt;li&gt;追加したアクションの右上の「…」から設定を開く&lt;/li&gt;
&lt;li&gt;次の実行条件セクションでタイムアウトした場合にチェックを入れる（「成功した場合」のチェックは外す）&lt;/li&gt;
&lt;li&gt;通知の本文に承認フローが30日間応答なしのためタイムアウトしました。お手数ですが再申請をお願いします、などのメッセージを入れる&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautomate-approval-timeout-error02.hgdcQbAF_Z16ibFq.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;p&gt;この設定をしておくだけで、30日後に自動で再申請依頼の通知が届くようになります。フローが止まっても気づけるだけで、運用の安全性がぐっと上がります。&lt;/p&gt;
&lt;h3 id=&quot;スコープscopeを使ってエラー処理をまとめる&quot;&gt;スコープ（Scope）を使ってエラー処理をまとめる&lt;/h3&gt;
&lt;p&gt;フロー全体のエラーハンドリングを整理したい場合は、スコープ（Scope）アクションを使う方法が便利です。スコープは複数のアクションをグループ化できるコンテナで、グループ全体が失敗した場合に別処理を走らせるという設計が可能になります。&lt;/p&gt;
&lt;p&gt;承認フローの本体をスコープAに入れ、スコープAが失敗したときだけスコープBのエラー通知が動く、という構成にしておくと、フローの見通しがよくなります。スコープを使ったエラー処理の詳しい設計パターンは&lt;a href=&quot;https://shiminkaihatsu.com/powerautomate-scope-error/&quot;&gt;スコープを使ったエラーハンドリングの実装&lt;/a&gt;で解説しているので参考にしてください。&lt;/p&gt;
&lt;h2 id=&quot;対策do-until-ループで30日前に自己完結させる&quot;&gt;対策③：Do Until ループで30日前に自己完結させる&lt;/h2&gt;
&lt;p&gt;より根本的な解決策として、フローの設計自体を変えてしまう方法があります。Do Until（実行条件を満たすまで繰り返す）ループと変数を組み合わせて、30日が来る前にフローを一旦正常終了させ、必要なら再トリガーする設計です。&lt;/p&gt;
&lt;p&gt;ただしこの方法は実装の難易度が上がるため、まず対策①②を試してから、どうしても解決しない場合の選択肢として考えるのが現実的だと思っています。&lt;/p&gt;
&lt;h3 id=&quot;do-until-ループの基本的な考え方&quot;&gt;Do Until ループの基本的な考え方&lt;/h3&gt;
&lt;p&gt;通常の承認フローは承認の開始と待機で承認者の応答を待ちますが、この方法では承認の開始と承認の待機を別々のアクションに分割します。承認の開始後、Do Until ループで一定時間ごとに承認状況を確認し、応答があれば後続処理へ、応答がなければリマインド通知を送って再度ループする、という設計です。&lt;/p&gt;
&lt;p&gt;Do Until アクションの詳しい使い方については&lt;a href=&quot;https://shiminkaihatsu.com/powerautomate-do-until/&quot;&gt;Do Until ループで繰り返し処理を実装する方法&lt;/a&gt;で解説しています。承認フローに応用する前に、基本的な動作を理解しておくと実装がスムーズです。&lt;/p&gt;
&lt;h3 id=&quot;変数で経過日数を管理する&quot;&gt;変数で経過日数を管理する&lt;/h3&gt;
&lt;p&gt;Do Until ループの中で変数を使って経過日数をカウントし、たとえば25日を超えたらループを終了してタイムアウト直前の警告通知を送る、という設計が可能です。&lt;/p&gt;
&lt;p&gt;変数の初期化で日数カウンターを作り、ループのたびに変数の値を増やすで1日ずつ加算します。Do Until の終了条件として承認済みになっている、またはカウンターが25以上になったを設定するイメージです。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// Do Until の終了条件（式）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;@or(equals(variables(&apos;ApprovalStatus&apos;), &apos;Approved&apos;), greaterOrEquals(variables(&apos;DayCount&apos;), &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;25&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;))&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;上記はあくまで考え方を示すコード例です。実際には Power Automate のデザイナー上でアクションを組み合わせて実装します。フローが複雑になるため、デバッグ時はフロー実行履歴を活用して各ステップの状態を確認しながら進めることをおすすめします。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautomate-approval-timeout-error03.Dz154eX7_ZSREr4.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;3つの対策を組み合わせるのが現実解&quot;&gt;3つの対策を組み合わせるのが現実解&lt;/h2&gt;
&lt;p&gt;対策①②③をまとめると、以下のような使い分けになります。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;対策&lt;/th&gt;
&lt;th&gt;難易度&lt;/th&gt;
&lt;th&gt;効果&lt;/th&gt;
&lt;th&gt;おすすめのケース&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;①運用ルール・催促&lt;/td&gt;
&lt;td&gt;低&lt;/td&gt;
&lt;td&gt;中&lt;/td&gt;
&lt;td&gt;まずはここから。全フローに共通して有効&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;②次の実行条件＋エラー通知&lt;/td&gt;
&lt;td&gt;低〜中&lt;/td&gt;
&lt;td&gt;高&lt;/td&gt;
&lt;td&gt;タイムアウト発生時に気づける最低限の保険&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;③Do Until ループ&lt;/td&gt;
&lt;td&gt;高&lt;/td&gt;
&lt;td&gt;最高&lt;/td&gt;
&lt;td&gt;月またぎ・役員承認など長期化が確実なフロー&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;個人的には、まず全フローに対策②を入れておき、長期化が想定されるフローだけ対策③を追加する、という進め方をおすすめします。対策①はどんなフローでも前提として意識しておきたいところです。&lt;/p&gt;
&lt;p&gt;承認フローは一度動いたら終わりではなく、運用しながら改善し続けるものです。タイムアウトのエラーログが出たらそのつど記録し、再発防止の設計を積み重ねていくことが大切です。市民開発とはこういう地道な事柄の積み重ねだと思っています。&lt;/p&gt;</content:encoded></item><item><title>Power Automateの作成（Compose）アクション。デバッグと式の整理に使う実践ガイド</title><link>https://shiminkaihatsu.com/powerautomate-compose/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerautomate-compose/</guid><description>Power Automateの作成（Compose）アクション。デバッグと式の整理に使う実践ガイド</description><pubDate>Mon, 16 Mar 2026 15:46:49 GMT</pubDate><content:encoded>&lt;p&gt;Power Automateの作成（Compose）アクションは、式の結果を一時的に保存して確認するためのアクションです。デバッグと式の整理、両方の目的で使えます。&lt;/p&gt;
&lt;h3 id=&quot;式を評価して出力するだけのアクション&quot;&gt;式を評価して出力するだけのアクション&lt;/h3&gt;
&lt;p&gt;作成（Compose）アクションのしくみはシンプルです。入力に式や値を書くと、フロー実行時にその式が評価され、結果が出力として保存されます。保存した値は後続のアクションで動的なコンテンツとして参照できます。&lt;/p&gt;
&lt;p&gt;変数とよく似ていますが、作成（Compose）は変数の初期化・設定アクションよりも記述が短く、読み取り専用の中間値を保存するのに適しています。Power Automateの変数の使い方は&lt;a href=&quot;/powerautomate-variables/&quot;&gt;変数の解説&lt;/a&gt;でまとめています。&lt;/p&gt;
&lt;h3 id=&quot;2つの主な使い方&quot;&gt;2つの主な使い方&lt;/h3&gt;
&lt;p&gt;作成（Compose）を使う場面は大きく2つに分かれます。&lt;/p&gt;
&lt;p&gt;1つ目はデバッグ用途です。フローの途中で変数や式の値が想定通りかどうかを確認するために、作成（Compose）に差し込んで実行履歴から中身を見ます。&lt;/p&gt;
&lt;p&gt;2つ目は長い式を整理する用途です。後続のアクションで何度も使う長い式を、作成（Compose）で一度計算してから名前で参照すると、フローが読みやすくなります。&lt;/p&gt;
&lt;h2 id=&quot;デバッグツールとしての作成compose&quot;&gt;デバッグツールとしての作成（Compose）&lt;/h2&gt;
&lt;h3 id=&quot;フローの途中の値を確認する&quot;&gt;フローの途中の値を確認する&lt;/h3&gt;
&lt;p&gt;フローが動かないとき、どのアクションで何がおかしいのかを確認するのは意外と手間がかかります。そんなとき、疑わしい場所に作成（Compose）を差し込んで実行すると、実行履歴でその時点の値を見られます。&lt;/p&gt;
&lt;p&gt;例えばFilter arrayの差出人に正しい配列が渡っているか確認したい場合、Filter arrayの前に作成（Compose）を入れてSharePointのアイテムを取得のbody/valueを渡します。実行履歴で作成（Compose）の出力を開くと、配列の中身がJSON形式で表示されます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautomate-compose02.CjFcwLVd_ylXGK.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;667&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;実行履歴の確認方法&quot;&gt;実行履歴の確認方法&lt;/h3&gt;
&lt;p&gt;フローを手動実行またはテスト実行した後、実行履歴のリンクをクリックすると各アクションの実行結果が展開表示されます。作成（Compose）アクションを選ぶと入力と出力の値が確認できます。&lt;/p&gt;
&lt;p&gt;私が現場でフローのデバッグをするときは、作成（Compose）を複数箇所に差し込んで、どの段階でデータがおかしくなっているかを追いかけます。問題の箇所が特定できたら作成（Compose）を削除して、フローをスリムな状態に戻します。&lt;/p&gt;
&lt;h2 id=&quot;式の整理ツールとしての作成compose&quot;&gt;式の整理ツールとしての作成（Compose）&lt;/h2&gt;
&lt;h3 id=&quot;長い式に名前をつける&quot;&gt;長い式に名前をつける&lt;/h3&gt;
&lt;p&gt;フローの中で何度も使う計算や変換式がある場合、毎回同じ式を書くのは冗長です。作成（Compose）で一度計算した結果を、後続のアクションで outputs(‘作成’) として参照できます。&lt;/p&gt;
&lt;p&gt;例えば、現在日時を日本時間で特定のフォーマットにしたい場合を考えます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 作成（Compose）アクションの入力欄に書く式&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;formatDateTime(convertTimeZone(utcNow(), &apos;UTC&apos;, &apos;Tokyo Standard Time&apos;), &apos;yyyy年MM月dd日&apos;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;この式を毎回書くより、作成（Compose）でjpDateという名前のアクションに保存して、後続ではoutputs(‘jpDate’)と短く参照するほうがフローが読みやすくなります。&lt;/p&gt;
&lt;h3 id=&quot;配列や文字列を組み立てる&quot;&gt;配列や文字列を組み立てる&lt;/h3&gt;
&lt;p&gt;JSONオブジェクトや配列を手動で組み立てるときも作成（Compose）が便利です。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// SharePointに送るためのオブジェクトを組み立てる&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;  &quot;Title&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;: triggerBody()?[&apos;title&apos;],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;  &quot;Status&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;未対応&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;  &quot;CreatedDate&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;: utcNow(),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;  &quot;Priority&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;このようなJSONを作成（Compose）で一度組み立てておくと、後続のSharePoint更新アクションに作成（Compose）の出力をそのまま渡せます。Patchや変数アクションで直接書くより、構造が見やすくなります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautomate-compose04.2TbzxL8W_Z1eXTFU.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;変数との使い分け&quot;&gt;変数との使い分け&lt;/h2&gt;
&lt;h3 id=&quot;値を変えない中間計算は作成compose&quot;&gt;値を変えない中間計算は作成（Compose）&lt;/h3&gt;
&lt;p&gt;作成（Compose）と変数は似ていますが、使い分けの基準は明確です。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;作成（Compose）&lt;/th&gt;
&lt;th&gt;変数&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;値の更新&lt;/td&gt;
&lt;td&gt;できない（固定）&lt;/td&gt;
&lt;td&gt;できる&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;スコープ&lt;/td&gt;
&lt;td&gt;フロー全体で参照可&lt;/td&gt;
&lt;td&gt;フロー全体で参照可&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;初期化アクション&lt;/td&gt;
&lt;td&gt;不要&lt;/td&gt;
&lt;td&gt;必要（変数を初期化）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;記述の手間&lt;/td&gt;
&lt;td&gt;少ない&lt;/td&gt;
&lt;td&gt;初期化＋設定の2ステップ&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;ループの中でカウントアップしたいなら変数、一度計算した日付や文字列を使いまわしたいなら作成（Compose）、という使い分けが基本です。&lt;/p&gt;
&lt;h3 id=&quot;apply-to-eachの中では作成composeを使わない&quot;&gt;Apply to eachの中では作成（Compose）を使わない&lt;/h3&gt;
&lt;p&gt;Apply to eachのループ内に作成（Compose）を置いた場合、各ループの実行結果で出力が上書きされます。ループが終わった後に作成（Compose）を参照すると最後のループの値しか残っていません。ループをまたいで値を積み上げたいなら変数を使いましょう。&lt;/p&gt;
&lt;p&gt;Apply to eachとループ処理の詳細は&lt;a href=&quot;/powerautomate-apply-to-each/&quot;&gt;Apply to eachの解説&lt;/a&gt;を参照してください。&lt;/p&gt;
&lt;h2 id=&quot;作成composeの実践的な使い方まとめ&quot;&gt;作成（Compose）の実践的な使い方まとめ&lt;/h2&gt;
&lt;h3 id=&quot;デバッグのフロー&quot;&gt;デバッグのフロー&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;エラーまたは想定外の動作が起きているアクションの直前に作成（Compose）を追加&lt;/li&gt;
&lt;li&gt;確認したい値（配列・オブジェクト・文字列）を作成（Compose）の入力に設定&lt;/li&gt;
&lt;li&gt;フローを手動実行&lt;/li&gt;
&lt;li&gt;実行履歴で作成（Compose）の出力を確認&lt;/li&gt;
&lt;li&gt;問題の原因が特定できたら作成（Compose）を削除してフローを整理&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;デバッグが終わったら作成（Compose）を残したままにしないことが大切です。不要なアクションが増えるとフローが読みにくくなります。実行履歴の見方やデバッグの手順は Power Automateのデバッグ・実行履歴活用の記事でまとめます。&lt;/p&gt;
&lt;h3 id=&quot;式整理のフロー&quot;&gt;式整理のフロー&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;フローの中で複数回使う長い式を特定する&lt;/li&gt;
&lt;li&gt;最初に使う箇所の直前に作成（Compose）を追加して、わかりやすい名前をつける（例：FormatDate）&lt;/li&gt;
&lt;li&gt;後続のアクションでは outputs(‘FormatDate’) で参照する&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;作成（Compose）のアクション名はわかりやすい名前に変えておきましょう。デフォルトの名前だと、どれが何のための作成（Compose）か区別がつかなくなります。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;作成（Compose）はそれ自体が何かを実行するわけではありませんが、デバッグと式の整理という2つの目的でフロー開発をサポートしてくれます。&lt;/p&gt;
&lt;p&gt;まずはフローが期待通りに動かないときの確認手段として使ってみてください。データの流れを目で確認できるようになると、Power Automateの式のしくみも自然に理解が深まります。Power Automateの開発に慣れてきたら、長い式の整理にも積極的に使っていきましょう。&lt;/p&gt;</content:encoded></item><item><title>Power Automate × Excel Scripts でCSVをXLSXに変換してSharePointリストに取り込む</title><link>https://shiminkaihatsu.com/powerautomate-csv-to-excel/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerautomate-csv-to-excel/</guid><description>Power Automate × Excel Scripts でCSVをXLSXに変換してSharePointリストに取り込む</description><pubDate>Sun, 05 Apr 2026 10:18:36 GMT</pubDate><content:encoded>&lt;p&gt;Power AutomateにはCSVをそのまま処理するアクションがありません。CSVをXLSXのテーブル構造に変換してからSharePointリストに取り込む。Excel ScriptsとPower Automateを組み合わせることで、この流れを自動化できます。&lt;/p&gt;
&lt;h2 id=&quot;なぜcsvxlsx変換が必要か&quot;&gt;なぜCSV→XLSX変換が必要か&lt;/h2&gt;
&lt;p&gt;Power AutomateにはCSVファイルを直接読み込んで行データを取得するアクションがありません。一方でExcelファイルのテーブルに対しては「List rows present in a table（テーブルに存在する行の一覧表示）」アクションが使えます。このアクションさえ使えるようになれば、後はCreate item（項目の作成）でSharePointリストに一行ずつ書き込むだけです。&lt;/p&gt;
&lt;p&gt;CSVをXLSXのテーブル構造に変換することで、Power Automateの標準アクション群が使えるようになります。そのCSV→XLSX変換を担うのがExcel Scriptsです。SharePointへのデータ書き込みの基礎については&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-sharepoint-crud/&quot;&gt;SharePointのCRUD操作の基礎記事&lt;/a&gt;を先に確認しておくとスムーズです。&lt;/p&gt;
&lt;h2 id=&quot;excel-scriptsとは&quot;&gt;Excel Scriptsとは&lt;/h2&gt;
&lt;p&gt;Excel ScriptsはExcelのAutomateタブで作成・管理するTypeScriptベースのスクリプトです。Power Automateの「Run Script（スクリプトの実行）」アクションから引数を渡して実行できます。ブラウザ版ExcelのファイルFの内部でのみ動作するため、ファイル名の変更や外部ファイルへのアクセスはできません。&lt;/p&gt;
&lt;p&gt;TypeScriptを知らなくても使えます。後述するようにChatGPTで生成・修正するサイクルを回せばゼロ知識から実用的なスクリプトが完成します。私自身もTypeScriptはほぼ書けませんが、ChatGPTとの対話だけでCSV処理スクリプトを完成させた経験があります。&lt;/p&gt;
&lt;h2 id=&quot;フロー全体の構成とトリガーの選択&quot;&gt;フロー全体の構成とトリガーの選択&lt;/h2&gt;
&lt;h3 id=&quot;5ステップの全体像&quot;&gt;5ステップの全体像&lt;/h3&gt;
&lt;p&gt;フロー全体の処理は5つのステップで構成されます。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;CSVファイルを選択するトリガー（For Selected Item）&lt;/li&gt;
&lt;li&gt;CSVファイルのコンテンツを取得（Get file content・ファイルコンテンツの取得）&lt;/li&gt;
&lt;li&gt;テンプレートExcelファイルをコピーして新ファイルを生成（Create file・ファイルの作成）&lt;/li&gt;
&lt;li&gt;Run Script（スクリプトの実行）でCSVをXLSXテーブルに変換&lt;/li&gt;
&lt;li&gt;List rows present in a table → Apply to each（それぞれに適用）→ Create item（項目の作成）でSharePointに取り込み&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautomate-csv-to-excel01.Nq-VYdVA_AvKyL.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;for-selected-itemトリガーの重要な制約&quot;&gt;For Selected Itemトリガーの重要な制約&lt;/h3&gt;
&lt;p&gt;For Selected Itemトリガーを使うフローには重要な制約があります。このトリガーを使うフローはデフォルト環境で作成しないと、SharePointの自動化メニューに表示されません。他の環境で作成すると一覧に出てこず動作しないため、フロー作成時に最初に環境の選択を確認してください。デフォルト環境以外で作っていてシェアポイントの自動化メニューに出てこないという場合、環境の作り直しが必要になります。最初の一手で確認しておくのが重要です。&lt;/p&gt;
&lt;h2 id=&quot;テンプレートexcelファイルの設計思想&quot;&gt;テンプレートExcelファイルの設計思想&lt;/h2&gt;
&lt;p&gt;スクリプトをあらかじめ埋め込んだ空のXLSXをテンプレートとして用意します。フローの実行ごとにCreate file（ファイルの作成）でテンプレートをコピーして新しいExcelを生成する設計にすることで、同名ファイルの上書きや競合を防げます。&lt;/p&gt;
&lt;p&gt;ファイル名には日時を付与してユニークにします。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// ファイル名に日時を付与する例（Create fileのNameフィールド）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;concat(&apos;output_&apos;, formatDateTime(utcNow(), &apos;yyyyMMdd_HHmmss&apos;), &apos;.xlsx&apos;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;テンプレートファイルはSharePointの決まったフォルダに置いておきます。Get file content（ファイルコンテンツの取得）でコンテンツを取得してからCreate file（ファイルの作成）で出力先フォルダに複製する流れです。テンプレートを使い回すことで、スクリプトの再設定なしに何度でも実行できます。&lt;/p&gt;
&lt;h2 id=&quot;動的ファイル名でrun-scriptが動かない問題の回避策&quot;&gt;動的ファイル名でRun Scriptが動かない問題の回避策&lt;/h2&gt;
&lt;p&gt;Run Script（スクリプトの実行）アクションでファイルを動的コンテンツで指定すると、スクリプト名やテーブルの選択肢がドロップダウンに表示されなくなります。これはPower Automateのエディターがファイル名を静的に解決できないためです。&lt;/p&gt;
&lt;p&gt;回避手順はこうです。まず先にテンプレートファイル（静的なパスで指定）を使ってRun Scriptのパラメーターを設定します。スクリプト名・テーブル名・引数の設定が完了したら、その後でファイルの指定欄を動的コンテンツに差し替えます。設定してから差し替えるという順番を守るだけで解決します。最初から動的コンテンツで指定しようとすると設定が進まないので注意してください。&lt;/p&gt;
&lt;h2 id=&quot;chatgptを活用してスクリプトを作る&quot;&gt;ChatGPTを活用してスクリプトを作る&lt;/h2&gt;
&lt;p&gt;TypeScript未経験でもChatGPTとの対話でスクリプトを生成・修正できます。ChatGPTに「Power Automate の Run Script で使用するExcel Scriptを書いてほしい。CSVの文字列を受け取り、データをテーブルとして挿入するスクリプト」と伝えると、そのまま使えるコードを出してくれます。&lt;/p&gt;
&lt;p&gt;エラーが出たときはエラーメッセージをそのままChatGPTに貼り付けて修正を依頼します。コードをコピーしてExcelに貼り付けてテスト、エラーが出たら貼り付けて修正依頼、というサイクルを繰り返すだけで実用的なスクリプトが完成します。私が実際にこの方法で組んだとき、コードの中身はほとんど理解していませんでしたが3〜4回のやり取りで動くものができました。&lt;/p&gt;
&lt;h2 id=&quot;よくあるデータの問題と対処法&quot;&gt;よくあるデータの問題と対処法&lt;/h2&gt;
&lt;h3 id=&quot;カンマを含む住所データで列がずれる&quot;&gt;カンマを含む住所データで列がずれる&lt;/h3&gt;
&lt;p&gt;CSV内に「473 Dyer Station, West Virginia」のようなカンマを含むフィールドがあると、単純な分割処理で列がずれます。フィールドをダブルクォートで囲んでいても、スクリプト側でその処理を考慮していない場合は崩れます。&lt;/p&gt;
&lt;p&gt;ChatGPTにダブルクォート内のカンマを無視するよう修正してと伝えるだけで、対応したコードに書き直してくれます。住所や名称など文字列フィールドを含むCSVを扱うときは、最初からこの指示を加えておくといいです。&lt;/p&gt;
&lt;h3 id=&quot;日付がシリアル番号になる&quot;&gt;日付がシリアル番号になる&lt;/h3&gt;
&lt;p&gt;ExcelでCSVの日付を取り込むとデフォルトではシリアル番号（43061など）で保存されることがあります。Run Script（スクリプトの実行）アクションのオプションでDate/Time FormatをISO 8601に変更すると、正しい日付形式に変換できます。フローを組んだ後に日付の列が数字になっているという問題に気づくパターンが多いので、最初からDate/Timeの設定を確認する習慣をつけておくと手戻りが減ります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautomate-csv-to-excel02.BPLfQJSx_ZsdVQR.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;sharepointリストへの一括取り込み&quot;&gt;SharePointリストへの一括取り込み&lt;/h2&gt;
&lt;p&gt;Run Script（スクリプトの実行）でCSVをXLSXのテーブルに変換したら、後は通常のExcelデータと同じ扱いです。List rows present in a table（テーブルに存在する行の一覧表示）でExcelの全行を取得し、Apply to each（それぞれに適用）でCreate item（項目の作成）を実行してSharePointリストに一行ずつ書き込みます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// Apply to each（それぞれに適用）内のCreate item（項目の作成）設定イメージ&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// List rows present in a tableのOutputをApply to eachに渡し&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 各フィールドをitems()?[&apos;列名&apos;]で参照する&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;Title: items()?[&apos;商品名&apos;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;数量: items()?[&apos;数量&apos;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;申請日: items()?[&apos;申請日&apos;]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;一度XLSXテーブルにしてしまえば、通常のExcel連携と完全に同じ操作で扱えます。ExcelをPower Appsのデータソースとして使う方法については&lt;a href=&quot;https://shiminkaihatsu.com/excel-datasource/&quot;&gt;ExcelをPower Appsのデータソースにする記事&lt;/a&gt;が参考になります。CSVを生成する側の実装については&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-export-csv/&quot;&gt;Power AppsでギャラリーのデータをCSVに出力する記事&lt;/a&gt;で詳しく扱っています。&lt;/p&gt;
&lt;h2 id=&quot;excel-scriptsが広げる可能性&quot;&gt;Excel Scriptsが広げる可能性&lt;/h2&gt;
&lt;p&gt;これまでCSVはPower Automateで直接扱えないと答えていた場面が、この方法で扱えるに変わります。スクリプト自体はChatGPTで生成できるため、CSV処理以外にも応用できます。集計・フォーマット変換・テーブル整形など、Excelで手作業でやっていた処理を自動化する方法論として汎用的に使えます。&lt;/p&gt;
&lt;p&gt;TypeScriptを書けなくても、エラーメッセージを貼り付けてChatGPTに修正を依頼するサイクルだけで実用的なスクリプトが完成します。今まで諦めていたファイル処理が自動化できるようになると、フロー設計の選択肢が大きく広がります。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;CSV→XLSX変換の手順は、テンプレートExcelを準備してRun Scriptで変換し、List rows present in a tableで行を取得してSharePointに取り込む流れです。For Selected Itemトリガーの環境制約と、動的ファイル名でRun Scriptのドロップダウンが表示されない問題は最初に押さえておくべきポイントです。&lt;/p&gt;
&lt;p&gt;スクリプト開発はChatGPTを使えばTypeScript未経験でも進められます。一度この仕組みを身につけると、CSV処理だけでなくExcel自動化全般に転用できる方法論が手に入ります。楽しみながら、丁寧に組んでいきましょう。&lt;/p&gt;</content:encoded></item><item><title>Power Automateのフロー実行履歴の見方とデバッグのコツ。エラーの原因をすばやく特定する</title><link>https://shiminkaihatsu.com/powerautomate-debug-history/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerautomate-debug-history/</guid><description>Power Automateのフロー実行履歴の見方とデバッグのコツ。エラーの原因をすばやく特定する</description><pubDate>Mon, 16 Mar 2026 15:46:54 GMT</pubDate><content:encoded>&lt;h2 id=&quot;フロー実行履歴を使いこなすとデバッグの時間が半分になる&quot;&gt;フロー実行履歴を使いこなすと、デバッグの時間が半分になる&lt;/h2&gt;
&lt;p&gt;Power Automateのデバッグは、実行履歴の読み方を覚えればかなり効率が上がります。エラーが出たとき、なんで動かないんだろうとフローを眺めるだけでは原因はわかりません。実行履歴に答えが全部書いてあります。&lt;/p&gt;
&lt;p&gt;最初のころ、私はエラーの原因を探すのに30分以上かけていました。実行履歴の見方を覚えてからは、たいていのエラーは5分以内に特定できるようになりました。この記事で手順を整理します。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautomate-debug-history01.CcBmMvH__ZhU5Ij.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;670&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;実行履歴の場所と開き方&quot;&gt;実行履歴の場所と開き方&lt;/h2&gt;
&lt;p&gt;実行履歴はフローの詳細ページに表示されます。Power Automateのマイフロー一覧から確認したいフロー名をクリックすると、フロー詳細ページが開きます。ページ下部に「28日間の実行履歴」というセクションがあり、実行ごとの開始日時・終了日時・ステータスが一覧で確認できます。&lt;/p&gt;
&lt;p&gt;ステータスは「成功」「失敗」「キャンセル」の3種類です。「失敗」と表示されている行をクリックすると、その実行の詳細を確認できます。&lt;/p&gt;
&lt;h3 id=&quot;実行詳細の構成&quot;&gt;実行詳細の構成&lt;/h3&gt;
&lt;p&gt;実行詳細画面を開くと、フローの各アクションが上から順に表示されます。正常に完了したアクションには緑のチェックマーク、失敗したアクションには赤のエラーアイコンが表示されます。どのアクションでエラーが発生したかがひと目でわかります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautomate-debug-history02.Cjsx5LZr_5TBbC.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;エラーアクションの展開と読み方&quot;&gt;エラーアクションの展開と読み方&lt;/h2&gt;
&lt;p&gt;赤いアイコンのアクションをクリックすると展開されます。展開すると「入力」「出力」「エラー」の3つのセクションが表示されます。&lt;/p&gt;
&lt;h3 id=&quot;確認すべき3つのセクション&quot;&gt;確認すべき3つのセクション&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;セクション&lt;/th&gt;
&lt;th&gt;内容&lt;/th&gt;
&lt;th&gt;確認ポイント&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;入力&lt;/td&gt;
&lt;td&gt;そのアクションに渡されたデータ&lt;/td&gt;
&lt;td&gt;期待する値が入っているか&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;出力&lt;/td&gt;
&lt;td&gt;そのアクションが返したデータ&lt;/td&gt;
&lt;td&gt;次のアクションに渡る値を確認&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;エラー&lt;/td&gt;
&lt;td&gt;エラーコードとメッセージ&lt;/td&gt;
&lt;td&gt;原因を読み解く最重要情報&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;特に「入力」セクションは見落とされがちですが、ここを見るとアクションに何が渡されたかがわかります。式の評価結果が空（null）になっていたり、期待と違う値が入っていたりすることが多いです。&lt;/p&gt;
&lt;h3 id=&quot;よくあるエラーとその読み方&quot;&gt;よくあるエラーとその読み方&lt;/h3&gt;
&lt;p&gt;エラーメッセージはそのまま読むと難解に見えますが、パターンはある程度決まっています。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;エラーメッセージ例&lt;/th&gt;
&lt;th&gt;原因&lt;/th&gt;
&lt;th&gt;対処&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;The expression is invalid&lt;/td&gt;
&lt;td&gt;式の文法エラー&lt;/td&gt;
&lt;td&gt;入力セクションで式の評価結果を確認&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Resource not found&lt;/td&gt;
&lt;td&gt;参照先のリストやファイルが存在しない&lt;/td&gt;
&lt;td&gt;サイトURLやリスト名を再確認&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bad request&lt;/td&gt;
&lt;td&gt;送信データの形式が不正&lt;/td&gt;
&lt;td&gt;入力の型（文字列・数値など）を確認&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unauthorized&lt;/td&gt;
&lt;td&gt;接続が切れているか権限不足&lt;/td&gt;
&lt;td&gt;接続を再認証する&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;作成composeを使ったデバッグテクニック&quot;&gt;作成（Compose）を使ったデバッグテクニック&lt;/h2&gt;
&lt;p&gt;式の評価結果を確認したいとき、作成（Compose）アクションを途中に挿入する方法が便利です。確認したい値を作成（Compose）の入力に入れて実行すると、実行履歴の出力セクションに評価後の値が表示されます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;@{formatDateTime(utcNow(), &apos;yyyy&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;MM&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;dd&apos;)}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;これを実行すると、実行履歴でこの式が実際に何に評価されたかを確認できます。式が期待どおりに動いているかどうかを確かめるには、この方法が最速です。作成（Compose）の活用については別記事でも詳しく解説しています。&lt;/p&gt;
&lt;p&gt;→ &lt;a href=&quot;/powerautomate-compose/&quot;&gt;Power Automateの作成（Compose）アクション。デバッグと式の整理に使う実践ガイド&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautomate-debug-history03.B0L-nZJN_ZqqEuV.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;再実行機能の活用&quot;&gt;再実行機能の活用&lt;/h2&gt;
&lt;p&gt;実行履歴には「再実行」ボタンがあります。失敗した実行をそのままのデータで再実行できるので、修正後の動作確認に便利です。ただし、メールや通知を送るフローの場合は再実行するとメールが再送されてしまうので注意してください。&lt;/p&gt;
&lt;h2 id=&quot;実行履歴が表示されない古い場合&quot;&gt;実行履歴が表示されない・古い場合&lt;/h2&gt;
&lt;p&gt;実行履歴は最大28日間保存されます。それより古い実行の履歴は自動で削除されます。もし履歴が空の場合は、フローがそもそもトリガーされていない可能性があります。トリガーの設定を確認するか、インスタントフローの場合は手動で実行して履歴が残るか確認しましょう。&lt;/p&gt;
&lt;p&gt;フローが想定通りに動かない場合の詳しいトラブルシューティングは、こちらも参考にしてください。&lt;/p&gt;
&lt;p&gt;→ &lt;a href=&quot;/powerautomate-intro/&quot;&gt;Power Automate入門——変数・データ処理・通知・デバッグの全体マップ&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;Power Automateのデバッグは、実行履歴の「失敗したアクション」を展開して「入力・出力・エラー」を確認するのが基本です。エラーメッセージを読む習慣をつけると、原因特定のスピードが格段に上がります。Composeをデバッグ用に仮挿入する方法も併用すると、式の評価結果を素早く確認できます。&lt;/p&gt;
&lt;p&gt;エラーが出たときに慌てず、まず実行履歴を開く。この習慣が身につくと、フロー開発のストレスがかなり減ります。&lt;/p&gt;</content:encoded></item><item><title>Power AutomateのDesktopフロー（RPA）とクラウドフローの違い。どちらを使うべき？</title><link>https://shiminkaihatsu.com/powerautomate-desktop-vs-cloud/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerautomate-desktop-vs-cloud/</guid><description>Power AutomateのDesktopフロー（RPA）とクラウドフローの違い。どちらを使うべき？</description><pubDate>Mon, 16 Mar 2026 15:46:46 GMT</pubDate><content:encoded>&lt;p&gt;Power AutomateにはDesktopフロー（RPA）とクラウドフローの2種類があります。同じ「Power Automate」という名前ですが、仕組みも使いどころもまったく異なります。image&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautomate-desktop-vs-cloud01.IWPME0_F_1YQTMH.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;それぞれの仕組みの違い&quot;&gt;それぞれの仕組みの違い&lt;/h2&gt;
&lt;p&gt;クラウドフローはMicrosoftのクラウド上で動くフローです。SharePointやTeams、Outlookといったクラウドサービス同士をつなぎ、Web APIを経由してデータをやり取りします。インターネット経由で処理するため、パソコンの電源が入っていなくても自動実行できます。&lt;/p&gt;
&lt;p&gt;Desktopフローはパソコン上のアプリケーションをロボットのように操作するRPA（Robotic Process Automation）です。画面上のボタンをクリックしたり、Excelのファイルを開いて値をコピーしたりと、人間が手でやっていることをそのまま自動化します。パソコンが起動していないと動きません。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;比較項目&lt;/th&gt;
&lt;th&gt;クラウドフロー&lt;/th&gt;
&lt;th&gt;Desktopフロー（RPA）&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;動作場所&lt;/td&gt;
&lt;td&gt;Microsoftのクラウド上&lt;/td&gt;
&lt;td&gt;手元のパソコン上&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PC起動の必要性&lt;/td&gt;
&lt;td&gt;不要&lt;/td&gt;
&lt;td&gt;必要&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;操作対象&lt;/td&gt;
&lt;td&gt;クラウドサービス（SharePoint, Teams等）&lt;/td&gt;
&lt;td&gt;Windowsアプリ、ブラウザ、Excelファイル等&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;主な用途&lt;/td&gt;
&lt;td&gt;承認フロー、通知、データ連携&lt;/td&gt;
&lt;td&gt;レガシーシステム操作、画面操作の自動化&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;必要ライセンス&lt;/td&gt;
&lt;td&gt;Microsoft 365に付属（機能制限あり）&lt;/td&gt;
&lt;td&gt;Power Automate Desktopは無償だが有人RPA&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;どちらを選ぶべきか&quot;&gt;どちらを選ぶべきか&lt;/h2&gt;
&lt;h3 id=&quot;クラウドフローを選ぶケース&quot;&gt;クラウドフローを選ぶケース&lt;/h3&gt;
&lt;p&gt;SharePoint・Outlook・TeamsなどのMicrosoft 365サービスを組み合わせた自動化が目的であれば、クラウドフロー一択です。承認フロー、定期レポート配信、フォーム回答の通知といった業務の多くはクラウドフローで対応できます。Microsoft 365のライセンスに含まれている機能で動かせるため、コスト面でも有利です。&lt;/p&gt;
&lt;h3 id=&quot;desktopフローrpaを選ぶケース&quot;&gt;Desktopフロー（RPA）を選ぶケース&lt;/h3&gt;
&lt;p&gt;クラウド連携ができない社内の古いシステム（基幹システム、レガシーなWebアプリ）を操作したいとき、Desktopフローが必要になります。APIが提供されていないシステムでも、画面上の操作を記録して再生することで自動化できます。ただし、画面の構成が変わると動かなくなるリスクがあり、メンテナンスコストが高い点は理解した上で使う必要があります。&lt;/p&gt;
&lt;p&gt;個人的な印象では、Microsoft 365が整備されている会社であれば、クラウドフローだけで業務自動化の8割はカバーできます。DesktopフローはどうしてもAPIでつながらないシステムへの最終手段として位置づけるのが現実的です。image&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautomate-desktop-vs-cloud02.DuoovR1A_aQa9F.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;組み合わせて使うケース&quot;&gt;組み合わせて使うケース&lt;/h2&gt;
&lt;p&gt;クラウドフローとDesktopフローは組み合わせて使うことも可能です。たとえば、SharePointにデータが追加されたことをクラウドフローで検知し、その後Desktopフローを呼び出して社内の基幹システムに入力するという構成が取れます。&lt;/p&gt;
&lt;p&gt;ただしこの場合、Desktopフローを動かすパソコンが常時起動している必要があります。実際に会社の共用パソコンをRPA専用機として常時電源を入れて運用しているケースをよく見かけます。管理コストがかかるので、クラウドフローだけで完結できないか先に検討することをおすすめします。&lt;/p&gt;
&lt;h2 id=&quot;ライセンスの注意点&quot;&gt;ライセンスの注意点&lt;/h2&gt;
&lt;p&gt;クラウドフローはMicrosoft 365のライセンスに含まれていますが、プランによって使えるコネクタに制限があります。Desktopフローを有人で動かす（手動実行）分には追加ライセンスは不要ですが、無人で自動実行するには別途有償ライセンスが必要です。RPAの本格導入を検討するなら、ライセンスコストをあらかじめ確認しておくことをおすすめします。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;クラウドフローとDesktopフローは、それぞれ得意な領域がはっきり分かれています。まずクラウドフローで対応できないかを検討し、どうしても画面操作が必要な場合にDesktopフローを使うというアプローチが、導入・運用コストを抑えるうえで理にかなっています。Power Automateを学ぶ順番としても、まずクラウドフローを習得してからDesktopフローに進むことをおすすめします。&lt;/p&gt;</content:encoded></item><item><title>Power AutomateのDo Untilループ。使いどころと無限ループを防ぐ設定方法</title><link>https://shiminkaihatsu.com/powerautomate-do-until/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerautomate-do-until/</guid><description>Power AutomateのDo Untilループ。使いどころと無限ループを防ぐ設定方法</description><pubDate>Mon, 16 Mar 2026 15:46:46 GMT</pubDate><content:encoded>&lt;p&gt;Power AutomateのDo Untilループは、条件が満たされるまで処理を繰り返すアクションです。Apply to eachとは違い、件数ではなく状態を基準にループします。使いどころを押さえておくと、待機処理や再試行ロジックをシンプルに書けます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautomate-do-until05.Ch5JvQgv_2jWXw2.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;do-untilとapply-to-eachの違い&quot;&gt;Do UntilとApply to eachの違い&lt;/h2&gt;
&lt;p&gt;Power Automateのループ処理には主に2種類あります。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;アクション&lt;/th&gt;
&lt;th&gt;繰り返しの基準&lt;/th&gt;
&lt;th&gt;主な用途&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Apply to each&lt;/td&gt;
&lt;td&gt;配列の件数分だけ繰り返す&lt;/td&gt;
&lt;td&gt;リストの全件処理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Do Until&lt;/td&gt;
&lt;td&gt;条件が true になるまで繰り返す&lt;/td&gt;
&lt;td&gt;承認待ち、状態チェック、再試行&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Do Untilは「あるフラグがオンになるまで待つ」「HTTPリクエストが成功するまで最大3回試す」といった処理に向いています。件数が決まっていない、状態が変わるまで待ちたい——というときはDo Untilの出番です。&lt;/p&gt;
&lt;h2 id=&quot;設定方法&quot;&gt;設定方法&lt;/h2&gt;
&lt;p&gt;Do Untilアクションを追加すると、次の3つを設定します。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;終了条件：この条件が true になったらループを抜ける&lt;/li&gt;
&lt;li&gt;カウント上限：最大何回繰り返すか（デフォルト60回）&lt;/li&gt;
&lt;li&gt;タイムアウト：最大でどのくらい実行するか（ISO 8601形式。例：PT1H = 1時間）&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;カウントとタイムアウトのどちらかに達した時点でも、条件に関わらずループが終了します。無限ループを防ぐために必ず設定しておきましょう。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautomate-do-until06.BWXjee5P_cEDnz.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;よく使うパターン&quot;&gt;よく使うパターン&lt;/h2&gt;
&lt;h3 id=&quot;パターン-承認結果が出るまで待機する&quot;&gt;パターン① 承認結果が出るまで待機する&lt;/h3&gt;
&lt;p&gt;承認アクションの結果をSharePointリストに書き込んでおき、ステータスが「承認済み」または「却下」になるまでDo Untilで待機するという構成です。承認フローを別フローで管理していて、結果の反映タイミングを制御したいときに使います。&lt;/p&gt;
&lt;p&gt;ループの中に「アイテムの取得」を置いてステータスを確認し、承認済みか却下になっていればループを抜けるように終了条件を設定します。&lt;/p&gt;
&lt;h3 id=&quot;パターン-httpリクエストの再試行&quot;&gt;パターン② HTTPリクエストの再試行&lt;/h3&gt;
&lt;p&gt;外部APIを呼び出すとき、ネットワーク状況によって一時的に失敗することがあります。Do Untilで最大3回まで再試行し、成功したらループを抜けるという構成が取れます。&lt;/p&gt;
&lt;p&gt;変数（カウンター）をループ内でインクリメントし、成功フラグが立つかカウントが3になったらループ終了という書き方が定番です。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;（終了条件）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;@or(equals(variables(&apos;successFlag&apos;), &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;), greaterOrEquals(variables(&apos;retryCount&apos;), &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;))&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;パターン-ファイルが存在するまで待つ&quot;&gt;パターン③ ファイルが存在するまで待つ&lt;/h3&gt;
&lt;p&gt;別のシステムが特定のSharePointフォルダにファイルを置くまで待機し、ファイルが確認できたら後続処理を進めるというケースでも使えます。ループ内でファイルの存在確認を行い、見つかったらフラグを立てて終了します。&lt;/p&gt;
&lt;h2 id=&quot;無限ループを防ぐ&quot;&gt;無限ループを防ぐ&lt;/h2&gt;
&lt;p&gt;Do Untilで最も注意すべきは無限ループです。終了条件の式が間違っていると、カウント上限やタイムアウトに達するまで延々とループし続けます。結果として実行回数を無駄に消費し、フローの課金にも影響します。&lt;/p&gt;
&lt;p&gt;対策として必ずやっておきたいのは次の2点です。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;カウント上限を適切な値に設定する（再試行なら3〜5回、待機なら処理時間に見合った回数）&lt;/li&gt;
&lt;li&gt;タイムアウトを設定して、時間が来たら強制終了させる&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ループが意図せず長く続いている場合は、実行履歴でループの繰り返し回数を確認できます。デバッグの方法については&lt;a href=&quot;/powerautomate-debug-history/&quot;&gt;実行履歴の見方&lt;/a&gt;を参考にしてください。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautomate-do-until03.BVvIRueL_1kshYN.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;ループ内のアクションに遅延を入れる&quot;&gt;ループ内のアクションに遅延を入れる&lt;/h2&gt;
&lt;p&gt;Do Untilで状態チェックを繰り返すとき、処理間隔を空けずにループさせると短時間に大量のAPI呼び出しが発生します。ループ内に「遅延」アクション（Delay）を入れて、1〜5分間隔で確認するようにするのが一般的です。&lt;/p&gt;
&lt;p&gt;たとえば承認待ちのフローなら、5分ごとにSharePointのステータスを確認すれば十分です。インターバルなしで回すと、60回の上限にすぐ達してしまいます。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;Do Untilは「条件が変わるまで待つ」処理を書くための専用ループです。使いどころはApply to eachより少ないですが、承認待ちや再試行ロジックなど、特定の場面では他のアクションでは代替しにくい役割を担います。無限ループへの備えさえ怠らなければ、使い勝手のいいアクションです。&lt;/p&gt;</content:encoded></item><item><title>Power Automate でメール添付ファイルをAIで分類してSharePointに自動振り分けする</title><link>https://shiminkaihatsu.com/powerautomate-email-attachment-routing/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerautomate-email-attachment-routing/</guid><description>Power Automate でメール添付ファイルをAIで分類してSharePointに自動振り分けする</description><pubDate>Sun, 05 Apr 2026 10:18:37 GMT</pubDate><content:encoded>&lt;p&gt;メールで届いた添付ファイルを手動で確認して保存先を振り分ける作業は、毎日繰り返すと大きな手間になります。Power Automate と AI Builder を組み合わせれば、PDF や画像の内容を AI が自動判定し、SharePoint の適切なフォルダに保存してチームへ通知するまでをフローで自動化できます。&lt;/p&gt;
&lt;h2 id=&quot;フローの全体設計5-ステージ&quot;&gt;フローの全体設計（5 ステージ）&lt;/h2&gt;
&lt;p&gt;このフローは次の 5 ステージで構成されます。全体像を先に把握しておくと、後半の各設定が頭に入りやすくなります。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;トリガー&lt;/strong&gt;：新しいメールが届いたとき（添付ファイルあり）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;添付取得&lt;/strong&gt;：Get attachment V2 → 自動生成される ForEach ループ&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AI 分類&lt;/strong&gt;：Run a prompt でファイルの内容を判定&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Switch 振り分け&lt;/strong&gt;：AI の出力結果でフォルダを切り替え&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;保存 + 通知&lt;/strong&gt;：SharePoint 保存 → Teams でチームに連絡&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautomate-email-attachment-routing01.Do683RXM_ZgcypF.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;トリガーの設定&quot;&gt;トリガーの設定&lt;/h2&gt;
&lt;p&gt;トリガーは、新しいメールが届いたとき（When a new email arrives V3）、を使います。設定で「添付ファイルを含める：Yes」と「添付ファイルのみ：Yes」を有効にしてください。添付なしのメールでフローが起動するのを防げます。&lt;/p&gt;
&lt;p&gt;開発中は、送信者フィルター（From）に自分のメールアドレスを設定するとテストが安全に行えます。テスト用のメールを自分で送るだけでフローが起動するため、本番のメールボックスに影響を与えずに動作確認できます。共有メールボックスに届くメールを処理したい場合も同じトリガーのメールボックス アドレス欄を設定するだけで対応できます。&lt;/p&gt;
&lt;h2 id=&quot;get-attachment-v2-と自動生成される-foreach-ループ&quot;&gt;Get attachment V2 と自動生成される ForEach ループ&lt;/h2&gt;
&lt;p&gt;添付ファイルの取得（Get attachment V2）アクションを追加して、トリガーの添付ファイル ID を指定します。このとき Power Automate が自動で、それぞれに適用（Apply to each）ループを追加します。初めて見るとなぜループが増えたのかと戸惑いますが、これは正常な動作です。1 件でも複数件でも同じ構造で処理できるようになります。&lt;/p&gt;
&lt;p&gt;Apply to each の詳細な仕組みは&lt;a href=&quot;https://shiminkaihatsu.com/powerautomate-apply-to-each/&quot;&gt;Apply to each 完全攻略記事&lt;/a&gt;で解説しています。自動追加されるループを理解しておくと、後続のアクション設定で迷いが減ります。&lt;/p&gt;
&lt;h2 id=&quot;ai-プロンプトでファイルを分類する&quot;&gt;AI プロンプトでファイルを分類する&lt;/h2&gt;
&lt;p&gt;ForEach ループ内にプロンプトを実行（Run a prompt）アクションを追加します。取得した添付ファイルをプロンプトのファイル入力に渡し、分類の指示を書きます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;You are a document classifier. Analyze the provided file and classify it as one of: resume, contract, other.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;Also provide a brief summary &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#50FA7B&quot;&gt; Japanese &lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; sentences).&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;Return a JSON object with keys &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;category&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt; and &lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;&quot;summary&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;JSON 出力を指定することが重要です。&lt;code&gt;{&amp;quot;category&amp;quot;: &amp;quot;contract&amp;quot;, &amp;quot;summary&amp;quot;: &amp;quot;...&amp;quot;}&lt;/code&gt; という形式で返すよう指示することで、後続の Switch アクションで category を直接参照できます。プロンプトを後から開き直すたびにテストファイルを再アップロードしなければならない仕様があることは把握しておくと開発時に慌てずに済みます。&lt;/p&gt;
&lt;h2 id=&quot;ai-が対応できるファイル形式の制限&quot;&gt;AI が対応できるファイル形式の制限&lt;/h2&gt;
&lt;p&gt;Run a prompt アクションが処理できるファイル形式は現時点で PDF・JPEG・PNG・GIF（非アニメーション）に限られます。Word ファイル（.docx）や Excel ファイルはこの方法では処理できません。現実の運用でこれらのファイルが混在する場合は、Switch のその他（other）ケースで未対応ファイルとして別フォルダに保存するか、担当者に確認の通知を送る設計にしておくとよいでしょう。&lt;/p&gt;
&lt;h2 id=&quot;ai-モデルとクレジットの考え方&quot;&gt;AI モデルとクレジットの考え方&lt;/h2&gt;
&lt;p&gt;Run a prompt では複数の AI モデルから選択できます。最上位モデルは精度が高い一方で AI Builder クレジットの消費も大きくなります。要件を満たす最もシンプルなモデルを選ぶがコスト最適化の基本方針です。まず小規模でテストして精度を確認し、必要に応じてモデルをアップグレードする手順が安全です。&lt;/p&gt;
&lt;h2 id=&quot;switch-文で振り分け先を制御する&quot;&gt;Switch 文で振り分け先を制御する&lt;/h2&gt;
&lt;p&gt;AI の出力 JSON から category を取り出し、Switch（スイッチ）アクションで分岐させます。On には &lt;code&gt;outputs(&amp;#39;プロンプトを実行&amp;#39;)?[&amp;#39;text&amp;#39;]&lt;/code&gt; を JSON 解析した上で category を参照します。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;作成（Compose）アクションで AI 出力を確認する&lt;/li&gt;
&lt;li&gt;JSON の解析アクションで category と summary を個別変数として取り出す&lt;/li&gt;
&lt;li&gt;Switch の On に category を指定し、case を “contract” / “resume” / “other” で作る&lt;/li&gt;
&lt;li&gt;各 case 内に SharePoint への保存アクションをコピーして配置する&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Switch の case は既存のアクションをコピー＆ペーストして量産できます。contract 用のアクションをコピーして resume 用に貼り付け、保存先フォルダだけ変更するという方法が最も速いです。&lt;/p&gt;
&lt;h2 id=&quot;sharepoint-へのファイル保存とメタデータ更新2-ステップ必須&quot;&gt;SharePoint へのファイル保存とメタデータ更新（2 ステップ必須）&lt;/h2&gt;
&lt;p&gt;SharePoint へのファイル保存とメタデータ（AI 要約など）の書き込みは、別々のアクションで行う必要があります。ファイルの作成（Create file）でファイルを保存した後、ファイル プロパティの更新（Update file properties）で Description 列などに AI 要約を書き込みます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// ステップ1: ファイルを保存&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;Create file&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;  Site Address: [サイト URL]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;  Folder Path: &lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;Shared Documents&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;Contracts&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;  File Name: @{item()[&apos;Name&apos;]}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;  File Content: @{items(&apos;...の添付ファイルの取得&apos;)?[&apos;contentBytes&apos;]}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// ステップ2: メタデータを更新&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;Update file properties&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;  Id: 前のステップの ItemId&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;  Description: @{body(&apos;プロンプトを実行&apos;)?[&apos;summary&apos;]}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ファイル作成とメタデータ更新を同時に行うアクションは存在しないため、必ず 2 ステップに分けてください。この点を知らずに 1 アクションでまとめようとして詰まるケースがよくあります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautomate-email-attachment-routing02.ifLtlCy1_Zis1tW.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;teams-通知への添付とリンク埋め込み&quot;&gt;Teams 通知への添付とリンク埋め込み&lt;/h2&gt;
&lt;p&gt;各 case の最後に、チャットまたはチャネルでメッセージを投稿（Post a message in a chat or channel）アクションを追加します。Flow Bot として投稿し、SharePoint に保存されたファイルへの直接 URL を本文に埋め込むことで、チームメンバーがワンクリックでファイルをレビューできます。&lt;/p&gt;
&lt;p&gt;HTML モードに切り替えてハイパーリンクを設定すると、[ファイル名]を確認するのような表示になりより使いやすくなります。Teams 通知の設定の詳細については&lt;a href=&quot;https://shiminkaihatsu.com/powerautomate-teams-notify/&quot;&gt;Power Automate Teams 通知の設定方法&lt;/a&gt;を参照してください。&lt;/p&gt;
&lt;h2 id=&quot;compose-を使ったデバッグの習慣&quot;&gt;Compose を使ったデバッグの習慣&lt;/h2&gt;
&lt;p&gt;AI の出力は構造がわかりにくいことがあります。本番フローに組み込む前に必ず作成（Compose）アクションで AI の返り値を確認してください。特に JSON 形式を指示したはずなのに、テキストとして返ってくるケースがあります。信頼するが確認するがフロー開発の鉄則で、特に AI の出力は目視確認を省略しないことをお勧めします。&lt;/p&gt;
&lt;p&gt;フローのエラー処理や実行履歴の見方については&lt;a href=&quot;https://shiminkaihatsu.com/powerautomate-debug-history/&quot;&gt;Power Automate デバッグの記事&lt;/a&gt;も参考にしてください。AI を含む複雑なフローほど、実行履歴でのステップ別確認が問題特定の近道になります。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;メール受信 → 添付取得 → AI 分類 → Switch 振り分け → SharePoint 保存 + Teams 通知、の 5 ステージを押さえれば、添付ファイルの自動ルーティングが実現します。旧デザイナーを使うこと、Compose で AI 出力を先に確認すること、SharePoint 保存とメタデータ更新は 2 ステップに分けること、この 3 点が実装で詰まらないためのポイントです。&lt;/p&gt;
&lt;p&gt;メール・通知系のアウトプット全体を設計する際は&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-automate-output/&quot;&gt;Power Apps / Power Automate アウトプット完全ガイド&lt;/a&gt;も参照してください。&lt;/p&gt;</content:encoded></item><item><title>Power Automate でHTMLメールに画像を埋め込む｜Base64変換・Office365・SharePoint・OneDrive対応</title><link>https://shiminkaihatsu.com/powerautomate-email-image-embed/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerautomate-email-image-embed/</guid><description>Power Automate でHTMLメールに画像を埋め込む｜Base64変換・Office365・SharePoint・OneDrive対応</description><pubDate>Sun, 05 Apr 2026 10:18:37 GMT</pubDate><content:encoded>&lt;p&gt;Power Automate でメール本文に画像を貼り付けたい場合、URL リンクではなく Base64 形式で埋め込む方法が確実です。URL 方式は受信者の環境やセキュリティ設定によってブロックされることがありますが、Base64 埋め込みなら画像データがメール自体に含まれるため、確実に表示されます。Office 365 ユーザー写真・SharePoint ファイル・OneDrive のいずれにも同じパターンで対応できます。&lt;/p&gt;
&lt;h2 id=&quot;base64-埋め込みの仕組み&quot;&gt;Base64 埋め込みの仕組み&lt;/h2&gt;
&lt;p&gt;Base64 埋め込みは、HTML の &lt;code&gt;&amp;lt;img&amp;gt;&lt;/code&gt; タグの &lt;code&gt;src&lt;/code&gt; 属性に画像データを直接書き込む方式です。形式は次のようになります。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;html&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;img&lt;/span&gt;&lt;span style=&quot;color:#50FA7B;font-style:italic&quot;&gt; src&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E9F284&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;data:image/png;base64,[Base64文字列]&lt;/span&gt;&lt;span style=&quot;color:#E9F284&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#50FA7B;font-style:italic&quot;&gt; width&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E9F284&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;100&lt;/span&gt;&lt;span style=&quot;color:#E9F284&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#50FA7B;font-style:italic&quot;&gt; height&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E9F284&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;100&lt;/span&gt;&lt;span style=&quot;color:#E9F284&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;data:image/png;base64,&lt;/code&gt; という固定ヘッダーの後に Base64 文字列を続けます。JPEG なら &lt;code&gt;data:image/jpeg;base64,&lt;/code&gt;、GIF なら &lt;code&gt;data:image/gif;base64,&lt;/code&gt; と画像形式に合わせて変更するだけです。URL が無効になる心配がなく、外部サーバーへのアクセスも不要なため、セキュリティポリシーが厳しい社内環境でも安定して表示できます。&lt;/p&gt;
&lt;h2 id=&quot;旧デザイナーを使う理由&quot;&gt;旧デザイナーを使う理由&lt;/h2&gt;
&lt;p&gt;このフローを作るときは Power Automate の旧デザイナーを使ってください。新デザイナーには HTML コードビュー編集で入力内容が消えるバグがあり、メール本文の HTML を直接編集できません。旧デザイナーへの切り替えはフロー編集画面右上の「旧デザイナーに切り替える」から行えます。&lt;/p&gt;
&lt;h2 id=&quot;compose-でデータ型を先に確認する&quot;&gt;Compose でデータ型を先に確認する&lt;/h2&gt;
&lt;p&gt;フロー開発の基本は、まず見てから式を書くです。画像取得アクションの直後に作成（Compose）アクションを挟み、出力内容を確認します。Office 365 ユーザー写真や SharePoint ファイルの取得結果は次のようなオブジェクト形式になっています。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8BE9FE&quot;&gt;  &quot;&lt;/span&gt;&lt;span style=&quot;color:#8BE9FD&quot;&gt;$content-type&lt;/span&gt;&lt;span style=&quot;color:#8BE9FE&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#E9F284&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;image/jpeg&lt;/span&gt;&lt;span style=&quot;color:#E9F284&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8BE9FE&quot;&gt;  &quot;&lt;/span&gt;&lt;span style=&quot;color:#8BE9FD&quot;&gt;$content&lt;/span&gt;&lt;span style=&quot;color:#8BE9FE&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#E9F284&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;/9j/4AAQSkZJRgABAQAAAQABAAD...&lt;/span&gt;&lt;span style=&quot;color:#E9F284&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;この構造を確認してから式を組むことで、なぜ値が取れないのかという無駄なデバッグが減ります。Power Automate のフロー開発全体でこの習慣を持つことが、エラーに強い設計につながります。&lt;/p&gt;
&lt;h2 id=&quot;base64-関数でオブジェクトから文字列を取り出す&quot;&gt;base64() 関数でオブジェクトから文字列を取り出す&lt;/h2&gt;
&lt;p&gt;Power Automate のビルトイン関数 &lt;code&gt;base64(アクション出力)&lt;/code&gt; は、上記のオブジェクトから自動的に Base64 文字列を抽出してくれます。もう一つの方法として &lt;code&gt;outputs(&amp;#39;アクション名&amp;#39;)?[&amp;#39;$content&amp;#39;]&lt;/code&gt; で &lt;code&gt;$content&lt;/code&gt; フィールドを直接取り出すこともできます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 方法1: base64() 関数でラップ&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;base64(outputs(&apos;Get_user_photo&apos;))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 方法2: $content を直接取り出す&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;outputs(&apos;Get_user_photo&apos;)?[&apos;$content&apos;]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;どちらも同じ結果になりますが、&lt;code&gt;base64()&lt;/code&gt; 関数の方が記述がシンプルで、後から見てもわかりやすいです。&lt;/p&gt;
&lt;h2 id=&quot;img-タグに埋め込むhtml-コードビューの操作&quot;&gt;img タグに埋め込む（HTML コードビューの操作）&lt;/h2&gt;
&lt;p&gt;メールの送信（V2）アクションの Body 欄で、右上のコードビューボタンをクリックして HTML 編集モードに切り替えます。そこに次の形式で img タグを書き込みます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;html&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;img&lt;/span&gt;&lt;span style=&quot;color:#50FA7B;font-style:italic&quot;&gt; src&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E9F284&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;data:image/jpeg;base64,@{base64(outputs(&apos;Get_user_photo&apos;))}&lt;/span&gt;&lt;span style=&quot;color:#E9F284&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#50FA7B;font-style:italic&quot;&gt; width&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E9F284&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;80&lt;/span&gt;&lt;span style=&quot;color:#E9F284&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#50FA7B;font-style:italic&quot;&gt; height&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E9F284&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;80&lt;/span&gt;&lt;span style=&quot;color:#E9F284&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;@{}&lt;/code&gt; は Power Automate の動的コンテンツ埋め込み構文です。固定の &lt;code&gt;data:image/jpeg;base64,&lt;/code&gt; ヘッダーと Base64 値を連結するだけで、メール本文に動的な画像を埋め込めます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautomate-email-image-embed01.CAGyEenj_1Rdjs6.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;office-365-ユーザー写真を埋め込む&quot;&gt;Office 365 ユーザー写真を埋め込む&lt;/h2&gt;
&lt;p&gt;ユーザーのプロフィール写真を動的に埋め込む手順は次のとおりです。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;ユーザーの写真を取得する（Get user photo）アクションを追加し、User UPN や Email を指定する&lt;/li&gt;
&lt;li&gt;作成（Compose）アクションで出力を確認する&lt;/li&gt;
&lt;li&gt;&lt;code&gt;base64(outputs(&amp;#39;ユーザーの写真を取得する&amp;#39;))&lt;/code&gt; で Base64 文字列を取得する&lt;/li&gt;
&lt;li&gt;メール本文の HTML コードビューに &lt;code&gt;&amp;lt;img src=&amp;quot;data:image/jpeg;base64,@{base64(outputs(&amp;#39;ユーザーの写真を取得する&amp;#39;))}&amp;quot; width=&amp;quot;50&amp;quot; height=&amp;quot;50&amp;quot;&amp;gt;&lt;/code&gt; を書き込む&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;承認メールに承認者の顔写真を表示したり、通知メールに送信者のプロフィール画像を添えたりする場面で使えるパターンです。&lt;/p&gt;
&lt;h2 id=&quot;sharepointonedrive-のファイルを埋め込む&quot;&gt;SharePoint・OneDrive のファイルを埋め込む&lt;/h2&gt;
&lt;p&gt;SharePoint や OneDrive に保存された画像ファイルを埋め込む場合は、パスを使用してファイル コンテンツを取得（Get file content using path）アクションで取得します。返ってくるオブジェクト形式はユーザー写真と同じなので、手順は同一です。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;html&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;img&lt;/span&gt;&lt;span style=&quot;color:#50FA7B;font-style:italic&quot;&gt; src&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E9F284&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;data:image/png;base64,@{base64(outputs(&apos;パスを使用してファイル_コンテンツを取得&apos;))}&lt;/span&gt;&lt;span style=&quot;color:#E9F284&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#50FA7B;font-style:italic&quot;&gt; width&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E9F284&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#F1FA8C&quot;&gt;200&lt;/span&gt;&lt;span style=&quot;color:#E9F284&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;OneDrive や Azure Blob Storage も同じパターンで対応できます。画像ソースが変わってもオブジェクトを base64() でラップして img タグに渡すロジックは共通です。HTML テーブルをメールに送信するパターンについては&lt;a href=&quot;https://shiminkaihatsu.com/powerautomate-html-table/&quot;&gt;Power Automate HTML テーブル送信の記事&lt;/a&gt;も参考にしてください。&lt;/p&gt;
&lt;h2 id=&quot;ファイルサイズと-terminate-を使った開発効率化&quot;&gt;ファイルサイズと Terminate を使った開発効率化&lt;/h2&gt;
&lt;p&gt;Outlook が本文に表示できる Base64 サイズには上限があります。大きい画像ファイルで試す前に、必ず小さいファイルで動作確認を先に行ってください。本番で大きいファイルを渡してメールが届かないという事態を防げます。&lt;/p&gt;
&lt;p&gt;開発中はフローの途中終了（Terminate）アクションを挟み、ステータスを成功に設定する方法が効果的です。メール送信をスキップして構造確認だけができ、テストのたびにメールボックスにメールが溜まらなくなります。確認が終わったら Terminate を削除して本番に備えます。&lt;/p&gt;
&lt;h2 id=&quot;添付ファイルとしても送れる&quot;&gt;添付ファイルとしても送れる&lt;/h2&gt;
&lt;p&gt;Base64 コンテンツはメール本文への埋め込みだけでなく、添付ファイルとしても送れます。メールアクションの Attachments パラメーターに、名前とコンテンツをオブジェクト形式で渡します。&lt;/p&gt;
&lt;p&gt;「本文に埋め込む（視覚的なメール）」と「ファイル添付（保存・転送しやすい形式）」は用途に応じて使い分けてください。組み合わせることも可能で、メール本文に画像を表示しつつ同じ画像をダウンロード用に添付する、という設計もできます。Power Apps からフローを呼び出してこのメールを送信するパターンについては&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-send-outlook-email/&quot;&gt;Power Apps から Outlook でメールを送信する記事&lt;/a&gt;と合わせて参照してください。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;Base64 埋め込みの流れは、画像取得 → Compose で確認 → base64() でラップ → img タグの src に埋め込む、の 4 ステップです。旧デザイナーを使うこと、Compose で出力を先に確認すること、この 2 点を守れば実装で詰まることはほとんどありません。ユーザー写真・SharePoint ファイル・OneDrive のいずれでも同じパターンで対応できるので、一度覚えればどこでも応用できます。&lt;/p&gt;</content:encoded></item><item><title>Power Automateのアレイのフィルター処理（Filter Array）。配列を条件で絞り込む方法と式の書き方</title><link>https://shiminkaihatsu.com/powerautomate-filter-array/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerautomate-filter-array/</guid><description>Power Automateのアレイのフィルター処理（Filter Array）。配列を条件で絞り込む方法と式の書き方</description><pubDate>Mon, 16 Mar 2026 15:46:49 GMT</pubDate><content:encoded>&lt;p&gt;Power Automateのアレイのフィルター処理（Filter Array）は、配列の中から条件に合う行だけを抽出するアクションです。Apply to eachでif分岐を書かなくても、配列を一括で絞り込めます。&lt;/p&gt;
&lt;h2 id=&quot;アレイのフィルター処理filter-arrayとは&quot;&gt;アレイのフィルター処理（Filter Array）とは&lt;/h2&gt;
&lt;h3 id=&quot;行を条件で絞り込む&quot;&gt;行を条件で絞り込む&lt;/h3&gt;
&lt;p&gt;SharePointリストから取得した100件のアイテムの中から、ステータスが未完了のものだけを取り出したい。そういうケースで活躍するのがアレイのフィルター処理（Filter Array）です。SQLのWHERE句に近い感覚で使えます。&lt;/p&gt;
&lt;p&gt;アレイのフィルター処理（Filter Array）は配列を入力として受け取り、指定した条件に一致する要素だけを含む新しい配列を返します。元の配列の件数が何件あっても、条件に一致しない行はすべて除外されます。Power Automateのデータ加工アクション全体の位置づけは&lt;a href=&quot;/powerautomate-intro/&quot;&gt;Power Automate入門の全体マップ&lt;/a&gt;で整理しています。&lt;/p&gt;
&lt;h3 id=&quot;選択selectとの使い分け&quot;&gt;選択（Select）との使い分け&lt;/h3&gt;
&lt;p&gt;似た名前の選択（Select）アクションと混同しやすいですが、目的が違います。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;アクション&lt;/th&gt;
&lt;th&gt;何を変える&lt;/th&gt;
&lt;th&gt;出力&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;アレイのフィルター処理（Filter Array）&lt;/td&gt;
&lt;td&gt;行（レコード）&lt;/td&gt;
&lt;td&gt;条件を満たす行のみ&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;選択（Select）&lt;/td&gt;
&lt;td&gt;列（プロパティ）&lt;/td&gt;
&lt;td&gt;全行、列を変換&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;アレイのフィルター処理（Filter Array）で行を絞ってから、Selectで列を整形するという流れが現場でよく使うパターンです。&lt;/p&gt;
&lt;h2 id=&quot;アレイのフィルター処理filter-arrayの基本設定&quot;&gt;アレイのフィルター処理（Filter Array）の基本設定&lt;/h2&gt;
&lt;h3 id=&quot;アクションの設定項目&quot;&gt;アクションの設定項目&lt;/h3&gt;
&lt;p&gt;アレイのフィルター処理（Filter Array）の設定画面は2つの要素で構成されます。&lt;/p&gt;
&lt;p&gt;差出人（From）：フィルタリングしたい配列を指定します。SharePointのアイテムを取得のbody/valueや、別のアクションの出力配列を渡します。&lt;/p&gt;
&lt;p&gt;条件（Where）：絞り込みに使う条件を定義します。詳細編集モードとテキストモードの2種類があります。詳細編集モードは左辺・演算子・右辺をドロップダウンで選ぶGUI操作、テキストモードは式を直接書きます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautomate-filter-array03.BwCI0l8__Z2wzGGP.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;詳細編集モードで条件を設定する&quot;&gt;詳細編集モードで条件を設定する&lt;/h3&gt;
&lt;p&gt;詳細編集モードでは、左辺に絞り込みに使うプロパティ（動的なコンテンツから選択）、演算子にis equal toなどを選び、右辺に比較する値を入力します。&lt;/p&gt;
&lt;p&gt;例えばステータス列が未完了の行を絞り込む場合はこのように設定します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;左辺: item()?[&apos;Status&apos;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;演算子: is equal to&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;右辺: 未完了&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;詳細編集モードは直感的ですが、複数条件を組み合わせるときに制約があります。ANDとORを混在させたい場合はテキストモードのほうが柔軟です。&lt;/p&gt;
&lt;h3 id=&quot;テキストモードで条件を書く&quot;&gt;テキストモードで条件を書く&lt;/h3&gt;
&lt;p&gt;テキストモードに切り替えると、条件を式として直接書けます。複数条件の組み合わせが自由になります。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// ステータスが未完了の行を取得&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;@equals(item()?[&apos;Status&apos;], &apos;未完了&apos;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// ステータスが未完了かつ担当者が自分の行&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;@and(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;  equals(item()?[&apos;Status&apos;], &apos;未完了&apos;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;  equals(item()?[&apos;AssignedTo&apos;]?[&apos;DisplayName&apos;], &apos;守屋祐輔&apos;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// ステータスが未完了または期日が今日より前の行&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;@or(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;  equals(item()?[&apos;Status&apos;], &apos;未完了&apos;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;  less(item()?[&apos;DueDate&apos;], utcNow())&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;テキストモードの式は先頭に@をつけた書き方で評価されます。慣れると詳細編集モードより素早く設定できます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautomate-filter-array04.B1CUWu2w_102u80.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;よく使う絞り込みパターン&quot;&gt;よく使う絞り込みパターン&lt;/h2&gt;
&lt;h3 id=&quot;文字列の一致で絞り込む&quot;&gt;文字列の一致で絞り込む&lt;/h3&gt;
&lt;p&gt;最もよく使うのは文字列の完全一致です。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// カテゴリが営業の行&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;@equals(item()?[&apos;Category&apos;], &apos;営業&apos;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 特定の人が担当する行&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;@equals(item()?[&apos;AssignedTo&apos;]?[&apos;DisplayName&apos;], &apos;田中太郎&apos;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;日付の比較で絞り込む&quot;&gt;日付の比較で絞り込む&lt;/h3&gt;
&lt;p&gt;期日が今日より前の未対応タスクを抽出するようなケースでは、日付の比較を使います。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 期日が現在時刻より前の行（期限超過）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;@less(item()?[&apos;DueDate&apos;], utcNow())&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 期日が今日から7日以内の行&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;@and(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;  greaterOrEquals(item()?[&apos;DueDate&apos;], utcNow()),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;  less(item()?[&apos;DueDate&apos;], addDays(utcNow(), &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;7&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;utcNow()はUTC時刻を返すため、日本時間と9時間ずれます。日付比較をする場合は、SharePoint側の日時列がUTCで保存されていることを踏まえた上で設計してください。私が現場で期日アラートを作ったとき、時差を考慮せずに比較してしまい、1日ズレた通知が飛んでしまいました。&lt;/p&gt;
&lt;h3 id=&quot;数値の比較で絞り込む&quot;&gt;数値の比較で絞り込む&lt;/h3&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 金額が10万円以上の行&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;@greaterOrEquals(item()?[&apos;Amount&apos;], &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;100000&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 優先度が3以上の行&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;@greaterOrEquals(item()?[&apos;Priority&apos;], &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;アレイのフィルター処理filter-arrayの結果が空のときの処理&quot;&gt;アレイのフィルター処理（Filter Array）の結果が空のときの処理&lt;/h2&gt;
&lt;h3 id=&quot;空配列チェックを入れておく&quot;&gt;空配列チェックを入れておく&lt;/h3&gt;
&lt;p&gt;アレイのフィルター処理（Filter Array）の結果が0件になることがあります。その後のアクションで配列の先頭要素を参照するような処理があると、0件のときにエラーになります。&lt;/p&gt;
&lt;p&gt;条件分岐アクションを入れて、アレイのフィルター処理（Filter Array）の結果が空かどうかを確認してから後続の処理に進む設計が安全です。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// アレイのフィルター処理（Filter Array）の結果が空かチェックする条件式&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;empty(body(&apos;Filter_array&apos;))&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;empty()がtrueのときは処理をスキップする分岐を作り、falseのときだけ後続の通知や更新に進むようにします。本番で動かしているフローほど、0件パターンのケアを忘れないようにしてください。&lt;/p&gt;
&lt;h3 id=&quot;lengthで件数を確認する&quot;&gt;length()で件数を確認する&lt;/h3&gt;
&lt;p&gt;絞り込んだ結果の件数を取得したいときはlength()を使います。件数を変数に入れておくと、Teams通知のメッセージに差し込めます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// アレイのフィルター処理（Filter Array）の結果件数&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;length(body(&apos;Filter_array&apos;))&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;たとえば今日期日のタスクが何件あるかを通知する場合、length()の結果をメッセージに組み込むと実用的な通知になります。&lt;/p&gt;
&lt;h2 id=&quot;apply-to-eachとの使い分け&quot;&gt;Apply to eachとの使い分け&lt;/h2&gt;
&lt;p&gt;アレイのフィルター処理（Filter Array）を使えば、Apply to eachの中でif条件を書いてスキップする処理が不要になります。Apply to eachはループのたびにアクションを実行するため、件数が多いと実行時間がかかります。アレイのフィルター処理（Filter Array）で先に絞り込んでからApply to eachに渡せば、処理するループ回数を減らせます。&lt;/p&gt;
&lt;p&gt;Apply to eachの中でif分岐を書いて実質的にフィルタリングしている部分があれば、アレイのフィルター処理（Filter Array）に置き換えることを検討してみましょう。Apply to eachとその最適化については&lt;a href=&quot;/powerautomate-apply-to-each/&quot;&gt;Apply to eachの解説&lt;/a&gt;で詳しくまとめています。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;アレイのフィルター処理（Filter Array）は、配列の行を条件で絞り込むシンプルなアクションです。難しいのは最初の式の書き方だけで、一度覚えれば同じパターンを使いまわせます。&lt;/p&gt;
&lt;p&gt;まずは単一条件の完全一致から試してみましょう。慣れてきたらandやorを組み合わせた複数条件に挑戦してみてください。アレイのフィルター処理（Filter Array）で絞った配列をSelectで整形する流れが身につくと、Power Automateのデータ処理がぐっと楽になります。&lt;/p&gt;</content:encoded></item><item><title>Power Automateの選択（Select）→HTMLテーブル鉄板パターン。SharePointリストをそのまま表に変換する方法</title><link>https://shiminkaihatsu.com/powerautomate-html-table/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerautomate-html-table/</guid><description>Power Automateの選択（Select）→HTMLテーブル鉄板パターン。SharePointリストをそのまま表に変換する方法</description><pubDate>Mon, 16 Mar 2026 15:46:45 GMT</pubDate><content:encoded>&lt;p&gt;SharePointリストのデータをそのままメールの表として送りたい。Power Automateを使えばこれが自動化できますが、やり方を知らないとどうやってリストを表にするんだと詰まります。選択（Select）アクションでデータをHTMLテーブル向けに整形し、HTMLテーブル作成アクションで表を生成する、というのが定番の流れです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautomate-html-table01.CUSase7G_Z1FaXO5.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;流れの全体像&quot;&gt;流れの全体像&lt;/h2&gt;
&lt;p&gt;フローの構成はシンプルです。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;SharePointの「複数のアイテムの取得」で対象データを取得&lt;/li&gt;
&lt;li&gt;選択（Select）アクションで必要な列だけに絞り込み・整形&lt;/li&gt;
&lt;li&gt;HTMLテーブルの作成アクションで配列をHTML表に変換&lt;/li&gt;
&lt;li&gt;メールの送信アクションでHTMLテーブルを本文に差し込む&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;選択（Select）アクションはSharePointから取得した配列から必要な列だけを取り出す整形役です。選択（Select）を挟まずにHTMLテーブルに渡すと、SharePointの内部フィールド（_uiVersionStringなど）も全部表示されてしまい、見た目がひどいことになります。&lt;/p&gt;
&lt;h2 id=&quot;選択selectアクションで表の列を定義する&quot;&gt;選択（Select）アクションで表の列を定義する&lt;/h2&gt;
&lt;p&gt;選択（Select）アクションのMapに、HTMLテーブルの列名と値を定義します。左側に列名（自由につけられる）、右側に動的コンテンツから列の値を入れます。&lt;/p&gt;
&lt;p&gt;例えば未処理タスク一覧なら、こんな感じになります。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;左（列名）&lt;/th&gt;
&lt;th&gt;右（値）&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;タスク名&lt;/td&gt;
&lt;td&gt;動的コンテンツ：Title&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;担当者&lt;/td&gt;
&lt;td&gt;動的コンテンツ：担当者 DisplayName&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;期限&lt;/td&gt;
&lt;td&gt;動的コンテンツ：期限日&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ステータス&lt;/td&gt;
&lt;td&gt;動的コンテンツ：ステータス&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;選択（Select）の出力は整形済みの配列になります。これをそのままHTMLテーブルに渡します。&lt;/p&gt;
&lt;h2 id=&quot;htmlテーブルの作成アクション&quot;&gt;HTMLテーブルの作成アクション&lt;/h2&gt;
&lt;p&gt;HTMLテーブルの作成アクションの設定は実はシンプルです。差し込む値は1か所だけです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;開始：選択（Select）アクションの出力（動的コンテンツ：出力）&lt;/li&gt;
&lt;li&gt;列：自動（選択（Select）で整形済みなのでそのまま使える）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;列を「自動」にしておくと、選択（Select）で定義した列名がそのままHTMLテーブルのヘッダー行になります。列をカスタムにする必要はほとんどありません。&lt;/p&gt;
&lt;p&gt;このアクションの出力はHTMLの&amp;lt;table&amp;gt;タグで囲まれた文字列になります。これをメールの本文にそのまま差し込めば表として表示されます。&lt;/p&gt;
&lt;h2 id=&quot;メールの本文にhtmlテーブルを差し込む&quot;&gt;メールの本文にHTMLテーブルを差し込む&lt;/h2&gt;
&lt;p&gt;OutlookやGmailのメール送信アクションで、本文をHTMLモードにしてHTMLテーブルの出力を差し込みます。Outlookの「メールの送信（V2）」アクションなら、本文フィールドの右上のアイコンでHTMLモードに切り替えられます。&lt;/p&gt;
&lt;p&gt;本文の例はこうなります。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;html&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;&gt;本日の未処理タスク一覧です。&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;[HTMLテーブルの作成 - 出力]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;&gt;よろしくお願いします。&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;受信側のメールクライアントで表として見やすく表示されます。ただし表のスタイル（罫線・背景色など）はデフォルトでは最低限です。見た目を整えたい場合はHTMLテーブルアクションの出力を変数に受けてから、replaceを使ってstyleタグを差し込む方法もあります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautomate-html-table04.DexJwYLD_IT2tk.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;よくあるつまずきポイント&quot;&gt;よくあるつまずきポイント&lt;/h2&gt;
&lt;h3 id=&quot;それぞれに適用apply-to-eachが自動挿入される&quot;&gt;それぞれに適用（Apply to each）が自動挿入される&lt;/h3&gt;
&lt;p&gt;HTMLテーブルの作成アクションの差し込み先に配列（選択（Select）の出力）を入れる前に、それぞれに適用（Apply to each）が自動挿入されることがあります。これを防ぐには、差し込みに式で直接 outputs(‘選択’) を指定する方法が有効です。動的コンテンツではなく式モードで入力するとループなしで渡せます。&lt;/p&gt;
&lt;h3 id=&quot;日本語の日時フォーマットがずれる&quot;&gt;日本語の日時フォーマットがずれる&lt;/h3&gt;
&lt;p&gt;SharePointの日付列をそのまま表示すると、UTC時刻で表示されることがあります。日本時間に直すには、選択（Select）のマップで式を使います。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;formatDateTime(addHours(item()?[&apos;期限日&apos;], &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;9&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;), &apos;yyyy&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;MM&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;dd&apos;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;UTCに9時間を加算してから日本語形式にフォーマットする、という処理です。&lt;/p&gt;
&lt;p&gt;選択（Select）アクションの詳細な使い方はこちらで解説しています。&lt;/p&gt;
&lt;p&gt;→ &lt;a href=&quot;/powerautomate-select/&quot;&gt;Power Automateの選択（Select）アクション——配列から必要な列だけを取り出す整形術&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;SharePointリストをHTMLテーブルにしてメール送信するには、「複数のアイテムの取得」→選択（Select）→HTMLテーブルの作成→メール送信、の4ステップが定番の構成です。選択（Select）で列を整形しておくことで、HTMLテーブルの列名まで自由に設定できます。&lt;/p&gt;
&lt;p&gt;定時レポートや承認依頼一覧など、一覧を表形式でメール通知したいという場面で幅広く使えます。一度作ってしまえばあとは全自動なので、ぜひ試してみてください。&lt;/p&gt;</content:encoded></item><item><title>Power AutomateでHTTPリクエストを使って外部APIと連携する方法</title><link>https://shiminkaihatsu.com/powerautomate-http/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerautomate-http/</guid><description>Power AutomateでHTTPリクエストを使って外部APIと連携する方法</description><pubDate>Mon, 16 Mar 2026 15:46:53 GMT</pubDate><content:encoded>&lt;p&gt;Power AutomateのHTTPアクションを使うと、Microsoft以外のサービスともデータをやり取りできます。コネクタが用意されていない外部サービスへの連携や、社内システムのAPIを叩く場面で活躍します。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautomate-http01.B5EyL_aE_Zsol3i.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;httpアクションとは&quot;&gt;HTTPアクションとは&lt;/h2&gt;
&lt;p&gt;HTTPアクションは、任意のURLに対してHTTPリクエストを送るアクションです。GET・POST・PUT・DELETEなどのメソッドを選び、URLとヘッダー、必要であればリクエストボディを設定するだけで使えます。簡単にいえば、ブラウザのかわりにPower Automateがページを取りに行ったり、フォームを送信したりするような動作です。&lt;/p&gt;
&lt;p&gt;Microsoft 365のサービスはすでに専用コネクタがあるため、通常はHTTPアクションを使う必要はありません。HTTPアクションが必要になるのは、専用コネクタが存在しない社内の基幹システムや、外部のWeb APIと連携したいときです。&lt;/p&gt;
&lt;h2 id=&quot;基本的な設定項目&quot;&gt;基本的な設定項目&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;設定項目&lt;/th&gt;
&lt;th&gt;内容&lt;/th&gt;
&lt;th&gt;例&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;メソッド&lt;/td&gt;
&lt;td&gt;リクエストの種類&lt;/td&gt;
&lt;td&gt;GET（取得）、POST（送信）、PUT（更新）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;URI&lt;/td&gt;
&lt;td&gt;リクエスト先のURL&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://api.example.com/items&quot;&gt;https://api.example.com/items&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ヘッダー&lt;/td&gt;
&lt;td&gt;認証情報やコンテンツタイプ&lt;/td&gt;
&lt;td&gt;Authorization: Bearer トークン&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;本文&lt;/td&gt;
&lt;td&gt;POSTやPUT時に送るデータ&lt;/td&gt;
&lt;td&gt;JSON形式のデータ&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;認証&lt;/td&gt;
&lt;td&gt;APIの認証方式&lt;/td&gt;
&lt;td&gt;なし、基本認証、Active Directory OAuth等&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;設定の中で最も重要なのがヘッダーと認証の部分です。多くのAPIはAPIキーやBearerトークンを要求するため、APIのドキュメントを確認して正しい形式で設定する必要があります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautomate-http02.B8ZqfUVF_Z2fRgXc.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;レスポンスを使うにはparse-jsonとセット&quot;&gt;レスポンスを使うにはParse JSONとセット&lt;/h2&gt;
&lt;p&gt;HTTPアクションが返すレスポンス本文はJSON文字列です。そのままでは後続のアクションで個別の値を取り出せないため、JSON の解析（Parse JSON）アクションと組み合わせて使います。HTTPのレスポンス本文をJSON の解析（Parse JSON）に渡し、スキーマを定義することで、各フィールドが動的コンテンツとして使えるようになります。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;/powerautomate-parse-json/&quot;&gt;JSON の解析（Parse JSON）の記事&lt;/a&gt;で詳しく解説しています。&lt;/p&gt;
&lt;h2 id=&quot;実務でよく使うパターン&quot;&gt;実務でよく使うパターン&lt;/h2&gt;
&lt;h3 id=&quot;パターン-社内apiとの連携&quot;&gt;パターン① 社内APIとの連携&lt;/h3&gt;
&lt;p&gt;社内の基幹システムがREST APIを提供している場合、HTTPアクションで呼び出せます。たとえば、SharePointに入力されたデータを基幹システムのAPIを通じて登録するフローが作れます。認証方式は社内のIT部門に確認しておくと確実です。&lt;/p&gt;
&lt;h3 id=&quot;パターン-チャットボットやai-apiとの連携&quot;&gt;パターン② チャットボットやAI APIとの連携&lt;/h3&gt;
&lt;p&gt;OpenAI APIやGoogle APIなど、Microsoftのコネクタが存在しない外部AIサービスを呼び出すときにHTTPアクションを使います。個人的には、社内の問い合わせ対応フローにChatGPT APIを組み込むときに初めてHTTPアクションを使いました。動いたときは感動しました。&lt;/p&gt;
&lt;h3 id=&quot;パターン-webhookでの外部サービス通知&quot;&gt;パターン③ Webhookでの外部サービス通知&lt;/h3&gt;
&lt;p&gt;Slack、Chatwork、LINE Works など、Microsoft Teams以外のチャットツールに通知を送りたいときも使えます。各サービスのWebhook URLにHTTP POSTでメッセージを送信する形です。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautomate-http03.C3ybNSVO_Zsj4Bj.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;エラーへの備え&quot;&gt;エラーへの備え&lt;/h2&gt;
&lt;p&gt;HTTPアクションは外部のサービスに依存するため、ネットワーク障害やAPIの一時停止によってエラーになることがあります。重要なフローであれば、エラー発生時の通知や再試行ロジックをあわせて実装しておくことをおすすめします。&lt;/p&gt;
&lt;p&gt;再試行ロジックはDo Untilアクションと組み合わせることで実装できます（&lt;a href=&quot;/powerautomate-do-until/&quot;&gt;Do Untilの記事&lt;/a&gt;参照）。エラーハンドリング全般については&lt;a href=&quot;/powerautomate-scope-error/&quot;&gt;ScopeとRunAfterの記事&lt;/a&gt;も参考にしてください。&lt;/p&gt;
&lt;h2 id=&quot;ライセンスの注意&quot;&gt;ライセンスの注意&lt;/h2&gt;
&lt;p&gt;HTTPアクションはPower Automateの「プレミアムコネクタ」に分類されます。Microsoft 365の標準ライセンスには含まれていないため、使用するにはPower Automateのプレミアムライセンスが必要です。利用前にライセンス状況を確認しておきましょう。社内でライセンス管理者に相談するのが確実です。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;HTTPアクションはPower Automateの中でも応用度の高いアクションですが、使えるようになると連携できるサービスの幅が一気に広がります。専用コネクタがない外部サービスへのアクセスが必要になったとき、まずHTTPアクションで実現できないか検討してみてください。APIドキュメントを読むのに最初は戸惑いますが、一度動かせると次から応用できます。&lt;/p&gt;</content:encoded></item><item><title>Power Automate入門——変数・データ処理・通知・デバッグの全体マップ</title><link>https://shiminkaihatsu.com/powerautomate-intro/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerautomate-intro/</guid><description>Power Automate入門——変数・データ処理・通知・デバッグの全体マップ</description><pubDate>Mon, 16 Mar 2026 15:46:51 GMT</pubDate><content:encoded>&lt;p&gt;Power Automateは、繰り返しの手作業をフローとして自動化するツールです。メール通知・データ転記・承認フローといった業務のルーティンをそのまま自動化できます。この記事では、Power Automateで何ができるのか、どの順番で覚えればいいのかを整理します。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautomate-intro01.sYClbt0N_t2HMz.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;668&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;power-automateでできること&quot;&gt;Power Automateでできること&lt;/h2&gt;
&lt;p&gt;Power Automateのしくみは単純です。何かが起きたら（トリガー）、何かをする（アクション）——この2ステップの組み合わせがフローの基本形です。&lt;/p&gt;
&lt;p&gt;私が物流現場で最初に作ったフローは、SharePointリストに新しい行が追加されたらTeamsに通知するというものでした。それだけで、毎朝担当者が手動でスプレッドシートを確認していた作業がなくなりました。地味に見えますが、毎日10分が消える作業がなくなるのは積み重ねで効いてきます。&lt;/p&gt;
&lt;h3 id=&quot;トリガーとアクション&quot;&gt;トリガーとアクション&lt;/h3&gt;
&lt;p&gt;トリガーはフローの起点です。よく使うものは以下の3種類です。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;種類&lt;/th&gt;
&lt;th&gt;内容&lt;/th&gt;
&lt;th&gt;例&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;自動化&lt;/td&gt;
&lt;td&gt;外部のイベントで起動&lt;/td&gt;
&lt;td&gt;メール受信、SharePointへのデータ追加&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;インスタント&lt;/td&gt;
&lt;td&gt;手動で起動&lt;/td&gt;
&lt;td&gt;ボタンを押して実行、Power Appsから呼び出し&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;スケジュール&lt;/td&gt;
&lt;td&gt;決まった時刻に起動&lt;/td&gt;
&lt;td&gt;毎朝9時に集計、毎週月曜に送信&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;3種類の違いと使い分けは&lt;a href=&quot;/powerautomate-trigger-types/&quot;&gt;Power Automateのトリガー解説&lt;/a&gt;にまとめています。迷ったときはまずここを確認してください。&lt;/p&gt;
&lt;h3 id=&quot;クラウドフローとデスクトップフロー&quot;&gt;クラウドフローとデスクトップフロー&lt;/h3&gt;
&lt;p&gt;Power Automateにはクラウドフロー（オンライン上で動く）とデスクトップフロー（PC操作を自動化するRPA）の2種類があります。SharePointやOutlookといったMicrosoft 365のサービスと連携するならクラウドフロー一択です。この記事ではクラウドフローを前提に話を進めます。&lt;/p&gt;
&lt;h2 id=&quot;学習の全体マップ&quot;&gt;学習の全体マップ&lt;/h2&gt;
&lt;p&gt;Power Automateは学ぶ順番を間違えると遠回りになります。個人的には、以下の順番で進めるのが一番詰まりにくいと感じています。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;ステップ&lt;/th&gt;
&lt;th&gt;テーマ&lt;/th&gt;
&lt;th&gt;重要度&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;①基礎&lt;/td&gt;
&lt;td&gt;トリガーの種類と選び方&lt;/td&gt;
&lt;td&gt;★★★&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;②基礎&lt;/td&gt;
&lt;td&gt;変数の使い方（初期化・セット・追加）&lt;/td&gt;
&lt;td&gt;★★★&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;③基礎&lt;/td&gt;
&lt;td&gt;Apply to eachでループ処理&lt;/td&gt;
&lt;td&gt;★★★&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;④デバッグ&lt;/td&gt;
&lt;td&gt;Composeとフロー実行履歴の見方&lt;/td&gt;
&lt;td&gt;★★★&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;⑤データ加工&lt;/td&gt;
&lt;td&gt;SelectとFilter arrayで配列を絞り込む&lt;/td&gt;
&lt;td&gt;★★☆&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;⑥通知・出力&lt;/td&gt;
&lt;td&gt;Teamsへの通知、HTMLテーブル作成&lt;/td&gt;
&lt;td&gt;★★☆&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;⑦応用&lt;/td&gt;
&lt;td&gt;Parse JSON、HTTPリクエスト、子フロー&lt;/td&gt;
&lt;td&gt;★☆☆&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;①〜④を押さえれば、現場で使える自動化フローのほとんどは作れます。⑤以降は必要になったタイミングで習得すれば十分です。&lt;/p&gt;
&lt;h2 id=&quot;-トリガーと変数フローの土台&quot;&gt;① トリガーと変数——フローの土台&lt;/h2&gt;
&lt;h3 id=&quot;変数は最初に覚える&quot;&gt;変数は最初に覚える&lt;/h3&gt;
&lt;p&gt;フローの中でデータを一時的に保存したり、ループの中で値を積み上げていくのが変数の役割です。Power Automateの変数は使う前に必ず初期化（Initialize variable）が必要で、これを知らないとエラーで詰まります。初期化・セット・追加の3パターンは&lt;a href=&quot;/powerautomate-variables/&quot;&gt;Power Automateの変数の使い方&lt;/a&gt;で解説しています。&lt;/p&gt;
&lt;h3 id=&quot;apply-to-eachの扱い&quot;&gt;Apply to eachの扱い&lt;/h3&gt;
&lt;p&gt;SharePointリストからデータを取得すると、結果は配列（複数件のデータのまとまり）で返ってきます。その配列を1件ずつ処理するのがApply to eachです。Power Automateを使い始めると必ずぶつかるアクションなので早めに理解しておくことをおすすめします。動作が遅いときの改善策も含め&lt;a href=&quot;/powerautomate-apply-to-each/&quot;&gt;Apply to each完全攻略&lt;/a&gt;でまとめています。&lt;/p&gt;
&lt;h2 id=&quot;-デバッグフローが動かないときの対処&quot;&gt;② デバッグ——フローが動かないときの対処&lt;/h2&gt;
&lt;h3 id=&quot;作成composeとフロー実行履歴&quot;&gt;作成（Compose）とフロー実行履歴&lt;/h3&gt;
&lt;p&gt;フローを作っていると、思った通りに動かない場面は必ず来ます。そのときに使うのが作成（Compose） アクションとフロー実行履歴です。作成（Compose）は変数や式の中身を確認するためのデバッグ用途に使えます。実行履歴では各アクションの入出力を確認でき、どのステップで問題が起きているかを素早く特定できます。作成（Compose）の活用術とデバッグの手順については別記事で解説する予定です。&lt;/p&gt;
&lt;h2 id=&quot;-データ加工選択selectとアレイのフィルター処理filter-array&quot;&gt;③ データ加工——選択（Select）とアレイのフィルター処理（Filter Array）&lt;/h2&gt;
&lt;p&gt;配列から必要な列だけを取り出す作成（Compose）アクション、条件に合う行だけを絞り込むアレイのフィルター処理（Filter Array）アクション——この2つのアクションを組み合わせると、データ加工の幅が大きく広がります。SharePointリストを整形してTeamsに通知したり、HTMLテーブルに変換してメールで送ったりという実用的なフローが作れるようになります。こちらも別記事でそれぞれ詳しく解説する予定です。&lt;/p&gt;
&lt;h2 id=&quot;-通知出力teamsへの送信&quot;&gt;④ 通知・出力——Teamsへの送信&lt;/h2&gt;
&lt;p&gt;Power Automateを業務で使う場面の多くは、何かが起きたらTeamsやメールで通知するというパターンです。単純なテキスト通知だけでなく、HTMLテーブルを使って表形式のレポートを送ることもできます。Teams通知の設定方法と実用シーンについては別記事で解説する予定です。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautomate-intro02.CruEftvh_Z1FYzCV.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;667&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;power-appsとの連携&quot;&gt;Power Appsとの連携&lt;/h2&gt;
&lt;p&gt;Power AppsのボタンからPower Automateのフローを呼び出すことができます。アプリ単体では難しいメール送信・PDF生成・外部API連携といった処理をフローに任せる使い方が一般的です。AppsとAutomateを組み合わせると、できることの幅が一気に広がります。Power Platform全体での業務改善のイメージは&lt;a href=&quot;/simple-development/&quot;&gt;Power Platformで始めるシンプルな業務改善&lt;/a&gt;にまとめているので参照してください。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;Power Automateは、トリガー・変数・Apply to each・デバッグの4つを押さえれば実用レベルのフローが作れます。最初から全部覚えようとせず、まず1本フローを動かしてみることが大切です。&lt;/p&gt;
&lt;p&gt;動かせたフローが1本あると、次に作るときの感覚が全然違います。小さくていいので、自分の現場の繰り返し作業を1つ選んで自動化してみましょう。&lt;/p&gt;</content:encoded></item><item><title>Power Automateの結合（Join）アクション。複数の値を1本の文字列にまとめる方法</title><link>https://shiminkaihatsu.com/powerautomate-join/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerautomate-join/</guid><description>Power Automateの結合（Join）アクション。複数の値を1本の文字列にまとめる方法</description><pubDate>Mon, 16 Mar 2026 15:46:45 GMT</pubDate><content:encoded>&lt;p&gt;Power Automateの結合（Join）アクションは、配列の中身をひとつの文字列に結合するだけのシンプルなアクションです。それだけでも、使いこなすと通知メッセージやメール本文の組み立てが一気に楽になります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautomate-join04.DgauLPO6_Z8gr3p.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;結合joinアクションとは&quot;&gt;結合（Join）アクションとは&lt;/h2&gt;
&lt;p&gt;結合（Join）アクションは、配列（複数の値をまとめたもの）を指定した区切り文字でつなぎ合わせて、ひとつの文字列として出力するアクションです。設定項目は「配列（From）」と「区切り文字（Join with）」の2つだけで、非常にシンプルです。&lt;/p&gt;
&lt;p&gt;たとえば、配列の中に「田中さん」「鈴木さん」「山本さん」という3つの名前が入っていたとします。結合（Join）の区切り文字に「・」を指定すると、出力は「田中さん・鈴木さん・山本さん」という1本の文字列になります。Teamsへの通知文やメールの件名に、こういった文字列をそのまま使いたいことはよくあります。&lt;/p&gt;
&lt;h3 id=&quot;選択selectと組み合わせるのが王道&quot;&gt;選択（Select）と組み合わせるのが王道&lt;/h3&gt;
&lt;p&gt;実務で結合（Join）を使うとき、ほとんどのケースで選択（Select）アクションとセットになります。SharePointリストや配列から特定の列だけを取り出すのが選択（Select）の役割で、そこに結合（Join）をつなぐことで「特定フィールドの値を区切り文字でまとめる」という処理が完成します。&lt;/p&gt;
&lt;p&gt;たとえば、SharePointリストの申請者名だけを取り出して、承認通知メールに一覧表示したいケースを考えます。処理の流れはこうなります。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;SharePointのアイテムを取得（リストの行を取得など）&lt;/li&gt;
&lt;li&gt;Selectアクションで申請者名の列だけを抽出（配列を整形）&lt;/li&gt;
&lt;li&gt;結合（Join）アクションで「、」区切りの文字列に変換&lt;/li&gt;
&lt;li&gt;メール本文やTeams通知に組み込む&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautomate-join02.xjF6dtFg_Z2sKShp.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;区切り文字の選び方&quot;&gt;区切り文字の選び方&lt;/h2&gt;
&lt;p&gt;区切り文字は自由に設定できます。用途によって使い分けると読みやすくなります。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;用途&lt;/th&gt;
&lt;th&gt;おすすめの区切り文字&lt;/th&gt;
&lt;th&gt;出力例&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;日本語の列挙&lt;/td&gt;
&lt;td&gt;、（読点）&lt;/td&gt;
&lt;td&gt;田中さん、鈴木さん、山本さん&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;英語・コード系&lt;/td&gt;
&lt;td&gt;,（カンマ）またはパイプ記号&lt;/td&gt;
&lt;td&gt;tanaka,suzuki,yamamoto&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;メール本文の改行列挙&lt;/td&gt;
&lt;td&gt;\n（改行コード）&lt;/td&gt;
&lt;td&gt;各項目が1行ずつになる&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;箇条書き風&lt;/td&gt;
&lt;td&gt;・（中黒）&lt;/td&gt;
&lt;td&gt;田中さん・鈴木さん・山本さん&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;個人的によく使うのは「、」と改行コードです。Teamsメッセージなら読点でつないでも見やすいですし、メール本文に縦並びで出したいときは改行コードを使います。改行コードは\nを入力するか、数式バーで &lt;code&gt;decodeUriComponent(&amp;#39;%0A&amp;#39;)&lt;/code&gt; などで生成することもあります。&lt;/p&gt;
&lt;h2 id=&quot;結合joinアクションが使えないケース&quot;&gt;結合（Join）アクションが使えないケース&lt;/h2&gt;
&lt;p&gt;結合（Join）が機能するのはあくまで「フラットな配列（文字列や数値の1次元配列）」に対してです。SharePointの複数の項目の取得（Get items）で取得した「テーブル形式の配列」をそのまま結合（Join）に渡しても、意図した結果にはなりません。その場合は選択（Select）で整形してから結合（Join）を使う必要があります。&lt;/p&gt;
&lt;p&gt;また、配列が空のとき（アイテムが0件のとき）は、結合（Join）の出力も空文字列になります。後続の処理でその文字列を使う場合は、empty()関数で空チェックをしておくと安全です。これを怠ると、通知メッセージに何も出力されないまま送信されてしまうことがあります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautomate-join05.Ct6pBtLM_Z1ogWx4.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;実務でよく使う組み合わせパターン&quot;&gt;実務でよく使う組み合わせパターン&lt;/h2&gt;
&lt;h3 id=&quot;パターン-承認依頼の一覧をteamsに通知&quot;&gt;パターン① 承認依頼の一覧をTeamsに通知&lt;/h3&gt;
&lt;p&gt;SharePointから未対応の申請を取得 → 選択（Select）で申請者名を抽出 → 結合（Join）で「、」区切りに変換 → Teamsに送信。社内の承認フロー自動化でこの形はほぼ定番です。10件の申請者名を1行にまとめてメンションできるので、受け取る側も把握しやすいです。&lt;/p&gt;
&lt;h3 id=&quot;パターン-週次レポートのタスク一覧を整形&quot;&gt;パターン② 週次レポートのタスク一覧を整形&lt;/h3&gt;
&lt;p&gt;その週に完了したタスク名をSharePointから取得 → 結合（Join）で改行区切りに変換 → メール本文に差し込む。個人的には毎週月曜朝にこの形で週報を自動生成して、メールで自分宛てに送るフローを運用しています。手書きよりずっと楽です。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;結合（Join）アクション自体はシンプルですが、選択（Select）とセットで使うことで配列操作の幅が大きく広がります。複数の値を文字列にまとめる処理が必要になったとき、まず選択（Select）で整形して結合（Join）で結合するというパターンを頭に入れておくと迷わずに済みます。Power Automateの地道なパーツの組み合わせが、業務の自動化を支えています。&lt;/p&gt;</content:encoded></item><item><title>Power Automateでそれぞれに適用（Apply to each）が突然出てくる理由</title><link>https://shiminkaihatsu.com/powerautomate-loop-type/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerautomate-loop-type/</guid><description>Power Automateでそれぞれに適用（Apply to each）が突然出てくる理由</description><pubDate>Mon, 16 Mar 2026 15:46:53 GMT</pubDate><content:encoded>&lt;p&gt;Power Automateを使っていると何もしていないのにそれぞれに適用（Apply to each）が自動で追加されたという経験をした人は多いはずです。これはバグではなく、データが配列（Array）形式だったことへの自動対応です。この仕組みを理解しておくと、余計なループが出てきても慌てずに対処できます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautomate-loop-type01.a84cb1DB_1Dd8ny.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;オブジェクトと配列の違い&quot;&gt;オブジェクトと配列の違い&lt;/h2&gt;
&lt;p&gt;Power Automateが扱うデータには主に2種類の形式があります。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;種類&lt;/th&gt;
&lt;th&gt;形式&lt;/th&gt;
&lt;th&gt;例&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Object（オブジェクト）&lt;/td&gt;
&lt;td&gt;キーと値のペア（1件のデータ）&lt;/td&gt;
&lt;td&gt;{ “名前”: “山田”, “部署”: “営業” }&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Array（配列）&lt;/td&gt;
&lt;td&gt;オブジェクトが複数並んだリスト&lt;/td&gt;
&lt;td&gt;[ {“名前”: “山田”}, {“名前”: “田中”} ]&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;SharePointの「複数のアイテムの取得」アクションの結果は配列です。配列形式のデータから特定の値を取り出そうとすると、Power Automateは「これは複数件ある、1件ずつ処理が必要だ」と判断してそれぞれに適用（Apply to each）を自動挿入します。&lt;/p&gt;
&lt;h3 id=&quot;オブジェクトのプロパティを参照するとき&quot;&gt;オブジェクトのプロパティを参照するとき&lt;/h3&gt;
&lt;p&gt;1件だけのオブジェクトなら、それぞれに適用（Apply to each）なしでプロパティを直接参照できます。例えばSharePointの「アイテムの取得」（単数形）アクションの結果はオブジェクトなので、そのまま body/Title のように参照できます。&lt;/p&gt;
&lt;h3 id=&quot;配列からそれぞれに適用apply-to-eachが生まれる理由&quot;&gt;配列からそれぞれに適用（Apply to each）が生まれる理由&lt;/h3&gt;
&lt;p&gt;配列のデータに対してプロパティを参照しようとすると、Power Automateは「どの要素のプロパティを見ればいいかわからない」ので、1件ずつ処理するためにそれぞれに適用（Apply to each）を挿入します。これが「Apply to eachが突然出てくる」現象の正体です。&lt;/p&gt;
&lt;h2 id=&quot;それぞれに適用apply-to-eachを避けたいとき&quot;&gt;それぞれに適用（Apply to each）を避けたいとき&lt;/h2&gt;
&lt;p&gt;ループを使わずに配列から値を取り出したいケースもあります。配列の先頭1件だけが欲しいときなどがその例です。&lt;/p&gt;
&lt;h3 id=&quot;firstで先頭の1件だけ取る&quot;&gt;first()で先頭の1件だけ取る&lt;/h3&gt;
&lt;p&gt;first()関数を使うと、配列の先頭要素だけをオブジェクトとして取り出せます。それぞれに適用（Apply to each）が不要になります。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;first(outputs(&apos;アイテムの取得_複数&apos;)?[&apos;body&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;value&apos;])&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;アレイのフィルター処理filter-arrayで先に絞り込む&quot;&gt;アレイのフィルター処理（Filter array）で先に絞り込む&lt;/h3&gt;
&lt;p&gt;配列から条件に合う1件だけを取り出したい場合は、アレイのフィルター処理（Filter array）アクションで絞り込んでからfirst()を使う方法が定番です。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;アレイのフィルター処理（Filter array）で条件に合うアイテムだけに絞り込む&lt;/li&gt;
&lt;li&gt;first()で先頭1件をオブジェクトとして取り出す&lt;/li&gt;
&lt;li&gt;以降はオブジェクトのプロパティを直接参照できる&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;アレイのフィルター処理（Filter array）の使い方は別記事で詳しく説明しています。&lt;/p&gt;
&lt;p&gt;→ &lt;a href=&quot;/powerautomate-filter-array/&quot;&gt;Power Automateのアレイのフィルター処理（Filter array）——配列を条件で絞り込む方法と式の書き方&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautomate-loop-type02.CFg0gxDw_Z1uqDzT.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;json-の解析parse-jsonで配列の構造を明示する&quot;&gt;JSON の解析（Parse JSON）で配列の構造を明示する&lt;/h2&gt;
&lt;p&gt;HTTPアクションや外部APIの戻り値がJSONのとき、Power Automateはそれが配列なのかオブジェクトなのかわかりません。このままプロパティを参照しようとするとそれぞれに適用（Apply to each）が挿入されることがあります。&lt;/p&gt;
&lt;p&gt;JSON の解析（Parse JSON）アクションを使ってスキーマを定義しておくと、Power Automateがデータの型を理解でき、不要なそれぞれに適用（Apply to each）の挿入を防げます。また、スキーマ定義後はプロパティが動的コンテンツとして補完されるようになり、式を手書きする必要がなくなります。&lt;/p&gt;
&lt;h3 id=&quot;スキーマの自動生成&quot;&gt;スキーマの自動生成&lt;/h3&gt;
&lt;p&gt;JSON の解析（Parse JSON）のスキーマは「サンプルのペイロードを使用してスキーマを生成する」ボタンを使うと自動生成できます。実際のAPIレスポンスや、フロー実行履歴からコピーしたJSONを貼り付けるだけでスキーマが作れます。手書きする必要はありません。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautomate-loop-type03.BA2Nkbs4_Z1XoRbc.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;まとめapply-to-eachが出たら配列かどうかを確認する&quot;&gt;まとめ：Apply to eachが出たら「配列かどうか」を確認する&lt;/h2&gt;
&lt;p&gt;それぞれに適用（Apply to each）が自動挿入されたときのチェックポイントはシンプルです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;そのデータは配列か？（複数件の可能性があるか）&lt;/li&gt;
&lt;li&gt;1件だけ欲しいならfirst()で取り出せないか&lt;/li&gt;
&lt;li&gt;先に条件で絞り込めないか（Filter array）&lt;/li&gt;
&lt;li&gt;JSONの型が不明ならJSON の解析（Parse JSON）でスキーマを定義する&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;このチェックリストを頭に入れておくだけで、それぞれに適用（Apply to each）に振り回されることが減ります。Power Automateのフローが複雑に見えてくるのは型の扱いが原因であることが多いので、オブジェクトと配列の違いを理解しておくことが全体の理解につながります。&lt;/p&gt;
&lt;p&gt;→ &lt;a href=&quot;/powerautomate-compose/&quot;&gt;Power AutomateのComposeアクション——デバッグと式の整理に使う実践ガイド&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title>Power AutomateでJSON の解析（Parse JSON）を使ってデータを取り出す方法</title><link>https://shiminkaihatsu.com/powerautomate-parse-json/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerautomate-parse-json/</guid><description>Power AutomateでJSON の解析（Parse JSON）を使ってデータを取り出す方法</description><pubDate>Mon, 16 Mar 2026 15:46:53 GMT</pubDate><content:encoded>&lt;p&gt;Power AutomateのJSON の解析（Parse JSON）アクションは、API連携や複雑なデータ処理で必ず登場する重要なアクションです。仕組みさえ理解すれば、動的コンテンツとして各項目を取り出せるようになります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautomate-parse-json01.Bu1krB7__2ebp8b.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;json-の解析parse-jsonとは何をするアクションか&quot;&gt;JSON の解析（Parse JSON）とは何をするアクションか&lt;/h2&gt;
&lt;p&gt;JSON の解析（Parse JSON）は、JSON形式のテキストを解析して、その中に含まれる各項目を後続のアクションで使えるよう、動的コンテンツとして取り出すためのアクションです。JSON の解析（Parse JSON）を使わないと、JSONテキスト全体がひとまとまりの文字列として扱われてしまい、個別の項目を取り出すのが難しくなります。&lt;/p&gt;
&lt;p&gt;簡単にいえば、包まれた箱（JSON文字列）を開けて中身を取り出すためのアクション——というイメージです。HTTPアクションで外部APIと連携したとき、作成（Compose）アクションで中間データを整形したとき、または変数に格納したJSON文字列を使いたいときに登場します。&lt;/p&gt;
&lt;h3 id=&quot;スキーマが鍵&quot;&gt;スキーマが鍵&lt;/h3&gt;
&lt;p&gt;JSON の解析（Parse JSON）を使うには「スキーマ」を定義する必要があります。スキーマとは、JSONの構造（どんなキーがあって、型は何か）を記述したものです。これを設定しないとどの項目を取り出せばいいかをPower Automateが判断できません。&lt;/p&gt;
&lt;p&gt;スキーマは手書きする必要はなく、サンプルのJSONをそのまま貼り付けることで自動生成できます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautomate-parse-json02.BRs65QxY_1rFQa2.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;スキーマの自動生成手順&quot;&gt;スキーマの自動生成手順&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;まずフローを一度実行し、処理対象のJSONデータを確認する（実行履歴から確認できます）&lt;/li&gt;
&lt;li&gt;JSON の解析（Parse JSON）アクションを追加し、「スキーマ」欄の下にある「サンプルのペイロードを使用してスキーマを生成する」をクリック&lt;/li&gt;
&lt;li&gt;実行履歴からコピーしたJSONを貼り付け、「完了」を押す&lt;/li&gt;
&lt;li&gt;スキーマが自動入力されるので、そのまま保存する&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;実行履歴の確認方法はフロー詳細ページの「28日間の実行履歴」から任意の実行を開き、該当アクションのアウトプットを見ます。詳しいデバッグ方法は&lt;a href=&quot;/powerautomate-debug-history/&quot;&gt;フロー実行履歴の見方とデバッグのコツ&lt;/a&gt;でも解説しています。&lt;/p&gt;
&lt;h2 id=&quot;型の不一致に注意&quot;&gt;型の不一致に注意&lt;/h2&gt;
&lt;p&gt;スキーマを自動生成した場合、サンプルとして使ったデータの型がそのまま記録されます。ここで注意が必要なのは、実際のデータの型とスキーマで定義した型が一致しないとエラーになるケースがあることです。&lt;/p&gt;
&lt;p&gt;よくあるのが「数値か文字列かが状況によって変わる」パターンです。たとえば数量の値が、データによって整数（integer）だったり文字列（string）だったりする場合、どちらか一方の型に固定したスキーマを使うとエラーになります。こういったときはスキーマの該当箇所を手動で修正し、型を &lt;code&gt;&amp;quot;type&amp;quot;: [&amp;quot;integer&amp;quot;, &amp;quot;string&amp;quot;]&lt;/code&gt; のように配列で指定すると対応できます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautomate-parse-json03.DBL3jf_E_CfP8f.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;json-の解析parse-jsonを使う代表的なシーン&quot;&gt;JSON の解析（Parse JSON）を使う代表的なシーン&lt;/h2&gt;
&lt;h3 id=&quot;httpアクションでapiを叩いた後&quot;&gt;HTTPアクションでAPIを叩いた後&lt;/h3&gt;
&lt;p&gt;外部のREST APIを呼び出すとき、レスポンスはほぼ必ずJSON形式です。HTTPアクションの出力本文をJSON の解析（Parse JSON）に渡して解析することで、必要な項目だけを取り出してその後の処理に使えます。&lt;/p&gt;
&lt;h3 id=&quot;作成composeで組み立てた中間データを分解するとき&quot;&gt;作成（Compose）で組み立てた中間データを分解するとき&lt;/h3&gt;
&lt;p&gt;複数のアクションの出力を作成（Compose）でひとつのJSONオブジェクトに組み立てておき、後の処理で必要な部分だけJSON の解析（Parse JSON）で取り出すという使い方もあります。&lt;a href=&quot;/powerautomate-compose/&quot;&gt;作成（Compose）アクションの実践ガイド&lt;/a&gt;と合わせて使うと、フローの可読性が上がります。&lt;/p&gt;
&lt;h3 id=&quot;power-appsからpower-automateにデータを渡したとき&quot;&gt;Power AppsからPower Automateにデータを渡したとき&lt;/h3&gt;
&lt;p&gt;Power AppsからPower Automateを呼び出す際、データをJSON文字列で渡すことがあります。受け取った側でJSON の解析（Parse JSON）を使うことで、Power Appsから送られた各パラメータを個別に扱えます。&lt;/p&gt;
&lt;h2 id=&quot;json-の解析parse-jsonが不要なケース&quot;&gt;JSON の解析（Parse JSON）が不要なケース&lt;/h2&gt;
&lt;p&gt;SharePointの「アイテムの取得」やFormsの「応答の詳細を取得する」などのコネクタアクションは、最初から各フィールドが動的コンテンツとして使えるよう整形されています。これらはJSON の解析（Parse JSON）を使わなくても構いません。JSON の解析（Parse JSON）が必要なのは主に、整形されていない生のJSON文字列を扱うときだけです。&lt;/p&gt;
&lt;p&gt;また、&lt;a href=&quot;/powerautomate-loop-type/&quot;&gt;それぞれに適用（Apply to each）が突然出てくる記事&lt;/a&gt;でも触れましたが、JSON の解析（Parse JSON）で配列を含むJSONを解析するとき、その配列に後続のアクションでアクセスしようとするとApply to eachが自動的に挟まることがあります。これは仕様なので、予期せず出てきても慌てなくて大丈夫です。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;JSON の解析（Parse JSON）はAPIやHTTPレスポンスを扱うフローでは避けて通れないアクションです。スキーマを手書きするのは難しそうに見えますが、サンプルから自動生成する機能があるので実際のハードルは高くありません。型の不一致だけ気をつけておけば、あとはそこまで難しいアクションではありません。外部連携が必要になったとき、ぜひ試してみてください。&lt;/p&gt;</content:encoded></item><item><title>Power Automateのエラーハンドリングはスコープ（Scope）＋実行条件で解決</title><link>https://shiminkaihatsu.com/powerautomate-scope-error/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerautomate-scope-error/</guid><description>Power Automateのエラーハンドリングはスコープ（Scope）＋実行条件で解決</description><pubDate>Mon, 16 Mar 2026 15:46:52 GMT</pubDate><content:encoded>&lt;p&gt;Power Automateのエラーハンドリングは、スコープ（Scope）アクションと実行条件を組み合わせることで実現できます。エラーが出たときに何もせず止まるフローより、原因をキャッチして通知まで飛ばせるフローのほうが実運用ではずっと使いやすいです。&lt;/p&gt;
&lt;h2 id=&quot;スコープscopeアクションとは&quot;&gt;スコープ（Scope）アクションとは&lt;/h2&gt;
&lt;p&gt;Scopeアクション（スコープ）は、複数のアクションをひとつのグループにまとめるコンテナです。フォルダのようなものです。グループ内のいずれかのアクションが失敗すると、スコープ（Scope）自体も失敗扱いになります。この仕組みを使うと、このスコープが失敗したら別の処理を動かすという条件分岐が書けます。&lt;/p&gt;
&lt;p&gt;スコープを使わずに個々のアクションに実行条件を設定することもできますが、アクションが増えると管理が煩雑になります。スコープでグループ化してからエラー時の処理を設定するほうが、フロー全体が見やすくなります。&lt;/p&gt;
&lt;h2 id=&quot;runafter実行条件の設定&quot;&gt;RunAfter（実行条件）の設定&lt;/h2&gt;
&lt;p&gt;Power Automateの各アクションには実行条件（RunAfter）を設定できます。デフォルトは成功した場合に実行ですが、これを変更することでエラーハンドリングが可能になります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautomate-scope-error01.zx5l6FlD_Z1Na1AX.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;652&quot;&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;実行条件&lt;/th&gt;
&lt;th&gt;動作&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;成功した場合&lt;/td&gt;
&lt;td&gt;前のアクションが成功したときだけ実行（デフォルト）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;失敗した場合&lt;/td&gt;
&lt;td&gt;前のアクションが失敗したときだけ実行&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;スキップされた場合&lt;/td&gt;
&lt;td&gt;前のアクションがスキップされたときに実行&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;タイムアウトした場合&lt;/td&gt;
&lt;td&gt;前のアクションがタイムアウトしたときに実行&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;複数の条件を同時に選択することもできます。たとえば「失敗した場合」と「タイムアウトした場合」の両方にチェックを入れると、どちらの状態でも次のアクションが実行されます。&lt;/p&gt;
&lt;h2 id=&quot;基本的なエラーハンドリングの構成&quot;&gt;基本的なエラーハンドリングの構成&lt;/h2&gt;
&lt;p&gt;実務でよく使う構成を紹介します。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;メイン処理をスコープでまとめる（スコープ: メイン処理）&lt;/li&gt;
&lt;li&gt;エラー時の処理をスコープでまとめる（スコープ: エラー処理）&lt;/li&gt;
&lt;li&gt;エラー処理スコープの実行条件を「失敗した場合」に設定する&lt;/li&gt;
&lt;li&gt;エラー処理スコープ内にTeams通知やメール送信アクションを入れる&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;この構成だと、メイン処理のスコープが失敗したときだけエラー処理が走ります。Teams通知の本文にエラーメッセージを含めることで、何が原因で失敗したかをその場で把握できます。&lt;/p&gt;
&lt;h3 id=&quot;エラーメッセージの取り出し方&quot;&gt;エラーメッセージの取り出し方&lt;/h3&gt;
&lt;p&gt;エラー処理のスコープ内でエラーの詳細を取得するには、以下の式を使います。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;result(&apos;スコープ名&apos;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;この式でスコープの実行結果（エラーコードやメッセージを含むオブジェクト）が取得できます。作成（Compose）アクションと組み合わせて内容を確認してから、通知文に組み込むと使いやすいです。&lt;/p&gt;
&lt;h2 id=&quot;よくあるパターンエラー時に管理者へteams通知&quot;&gt;よくあるパターン：エラー時に管理者へTeams通知&lt;/h2&gt;
&lt;p&gt;個人的には、本番運用しているフローには必ずこのパターンを入れるようにしています。フローが失敗しても気づかずに放置してしまうリスクを防げます。&lt;/p&gt;
&lt;p&gt;構成はシンプルで、メイン処理のスコープ失敗時にTeamsのアダプティブカードを管理者チャネルに投稿するだけです。本文にはフロー名・実行日時・エラーメッセージを入れておくと、原因特定がかなり速くなります。実行履歴の見方については&lt;a href=&quot;/powerautomate-debug-history/&quot;&gt;デバッグのコツ&lt;/a&gt;も合わせて参考にしてください。&lt;/p&gt;
&lt;h2 id=&quot;スコープを使うときの注意点&quot;&gt;スコープを使うときの注意点&lt;/h2&gt;
&lt;h3 id=&quot;スコープのネストに注意&quot;&gt;スコープのネストに注意&lt;/h3&gt;
&lt;p&gt;スコープ内にスコープを入れることもできますが、深くなると可読性が下がります。2階層までを目安にすることをおすすめします。&lt;/p&gt;
&lt;h3 id=&quot;スキップ状態の伝播&quot;&gt;スキップ状態の伝播&lt;/h3&gt;
&lt;p&gt;条件分岐でスキップされたアクションが含まれるスコープは、スコープ全体もスキップ扱いになることがあります。RunAfterの条件にスキップも含める必要があるケースがあるので注意してください。&lt;/p&gt;
&lt;h3 id=&quot;変数はスコープの外で初期化する&quot;&gt;変数はスコープの外で初期化する&lt;/h3&gt;
&lt;p&gt;変数の初期化はスコープの外に置く必要があります。スコープ内に入れるとエラーになります。これは初心者がよく詰まる点なので、変数を使う場合はフローの冒頭で初期化してからスコープを作るようにしましょう。詳しい変数の使い方は&lt;a href=&quot;/powerautomate-variable-naming/&quot;&gt;変数命名規則の記事&lt;/a&gt;でも触れています。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;スコープ＋実行条件の組み合わせは、Power Automateのエラーハンドリングにおける基本中の基本です。最初は少し難しく感じますが、一度構成を作ってしまえばコピーして使い回せます。本番フローにはエラー時の通知を必ず入れる習慣をつけると、運用の安心感が大きく変わります。&lt;/p&gt;</content:encoded></item><item><title>Power Automateの選択（Select）アクション。配列から必要な列だけを取り出す整形術</title><link>https://shiminkaihatsu.com/powerautomate-select/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerautomate-select/</guid><description>Power Automateの選択（Select）アクション。配列から必要な列だけを取り出す整形術</description><pubDate>Mon, 16 Mar 2026 15:46:51 GMT</pubDate><content:encoded>&lt;p&gt;Power Automateの選択（Select）アクションは、配列の中から必要な列だけを取り出して整形するためのアクションです。Apply to eachを使わずに配列を変換できるので、フローをシンプルに保てます。&lt;/p&gt;
&lt;h2 id=&quot;選択selectアクションとは&quot;&gt;選択（Select）アクションとは&lt;/h2&gt;
&lt;h3 id=&quot;配列の列を絞り込むアクション&quot;&gt;配列の列を絞り込むアクション&lt;/h3&gt;
&lt;p&gt;SharePointリストから取得したアイテムやHTTPリクエストで受け取ったJSONには、不要な列が大量に含まれていることがよくあります。そのままTeamsに通知したり別のシステムに送ったりすると、必要な情報が埋もれて見づらくなります。&lt;/p&gt;
&lt;p&gt;選択（Select）アクションは、配列の各要素から必要なプロパティだけを取り出し、新しい配列に整形します。Excelの列選択に近い感覚で使えます。データ加工アクションの一覧は&lt;a href=&quot;/powerautomate-intro/&quot;&gt;Power Automate入門の全体マップ&lt;/a&gt;で整理しています。&lt;/p&gt;
&lt;h3 id=&quot;filter-arrayとの違い&quot;&gt;Filter arrayとの違い&lt;/h3&gt;
&lt;p&gt;似た名前のアクションにFilter arrayがありますが、役割は明確に異なります。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;アクション&lt;/th&gt;
&lt;th&gt;目的&lt;/th&gt;
&lt;th&gt;結果&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;選択（Select）&lt;/td&gt;
&lt;td&gt;列（プロパティ）を絞り込む&lt;/td&gt;
&lt;td&gt;全行を残して列だけ変換&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;アレイのフィルター処理（Filter Array）&lt;/td&gt;
&lt;td&gt;行（レコード）を絞り込む&lt;/td&gt;
&lt;td&gt;条件に合う行だけ残す&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;選択（Select）は行数を変えず列を変換する、アレイのフィルター処理（Filter Array）は列を変えず行を絞り込む。この使い分けを最初に押さえておくと、組み合わせて使うときに迷いません。&lt;/p&gt;
&lt;h2 id=&quot;選択selectアクションの基本的な使い方&quot;&gt;選択（Select）アクションの基本的な使い方&lt;/h2&gt;
&lt;h3 id=&quot;アクションの追加と設定&quot;&gt;アクションの追加と設定&lt;/h3&gt;
&lt;p&gt;フローに選択（Select）アクションを追加するときは、データ操作カテゴリから選びます。設定項目は2つだけです。&lt;/p&gt;
&lt;p&gt;差出人（From）：変換したい配列を入力します。SharePointのアイテムを取得した後なら、動的なコンテンツからbodyやvalueを渡します。&lt;/p&gt;
&lt;p&gt;マップ（Map）：出力したいプロパティを定義します。左側がキー名（出力後の列名）、右側が値（元の配列から取り出す式）です。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautomate-select01.BEapnNvQ_LBkB.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;670&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;具体的な設定例&quot;&gt;具体的な設定例&lt;/h3&gt;
&lt;p&gt;SharePointのタスク管理リストからタイトル・担当者・期日だけを取り出すケースで考えます。SharePointのアイテムを取得アクションで配列を取得した後、選択（Select）アクションをつなぎます。&lt;/p&gt;
&lt;p&gt;差出人には SharePointのアイテムを取得のbody/valueを指定します。マップには以下のように設定します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;キー: タイトル    値: item()?[&apos;Title&apos;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;キー: 担当者名    値: item()?[&apos;AssignedTo&apos;]?[&apos;DisplayName&apos;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;キー: 期日        値: item()?[&apos;DueDate&apos;]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;これで出力される配列は、タイトル・担当者名・期日の3列だけを持つシンプルな配列になります。元のSharePointアイテムにあったIDやバージョン情報、各種システム列はすべて除去されます。&lt;/p&gt;
&lt;h3 id=&quot;キー名の自由な定義&quot;&gt;キー名の自由な定義&lt;/h3&gt;
&lt;p&gt;マップのキー側は、出力したい列名を自由に決められます。元のプロパティ名が英語でも、日本語で出力するように変換できます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;キー: title      値: item()?[&apos;Title&apos;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;キー: 担当者      値: item()?[&apos;AssignedTo&apos;]?[&apos;DisplayName&apos;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;キー: dueDate    値: item()?[&apos;DueDate&apos;]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Teams通知用にメッセージを整形したり、別サービスのAPIが求めるフォーマットに合わせたりするときに便利です。私が現場で使う場面では、SharePointの内部列名（英語）を人が読みやすい日本語名に変換してから通知メッセージに差し込むことが多いです。&lt;/p&gt;
&lt;h2 id=&quot;apply-to-eachとの使い分け&quot;&gt;Apply to eachとの使い分け&lt;/h2&gt;
&lt;h3 id=&quot;選択selectのほうが処理が速い&quot;&gt;選択（Select）のほうが処理が速い&lt;/h3&gt;
&lt;p&gt;配列の各要素から特定のプロパティを取り出したいだけなら、Apply to eachは使わないほうがいいです。Apply to eachはループ処理なので、要素が多いと実行時間が伸びます。選択（Select）アクションは内部でバッチ処理をするため、同じ処理をApply to eachで書くより速く完了します。&lt;/p&gt;
&lt;p&gt;Apply to eachが必要なのは、各要素に対して追加のアクション（メール送信・SharePoint更新など）を実行するケースです。単に列の形を変えるだけなら選択（Select）に切り替えましょう。Apply to eachの詳細な使い方と注意点は&lt;a href=&quot;/powerautomate-apply-to-each/&quot;&gt;Apply to eachの解説&lt;/a&gt;でまとめています。&lt;/p&gt;
&lt;h3 id=&quot;式で計算した値をマップに使う&quot;&gt;式で計算した値をマップに使う&lt;/h3&gt;
&lt;p&gt;マップの値側には式を書けます。単純なプロパティの取り出しだけでなく、フォーマット変換や文字列加工も一括でできます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 日付を日本語形式にフォーマット&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;キー: 期日表示    値: formatDateTime(item()?[&apos;DueDate&apos;], &apos;yyyy年MM月dd日&apos;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 文字列の先頭に接頭辞をつける&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;キー: タスク名    値: concat(&apos;[未完了] &apos;, item()?[&apos;Title&apos;])&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ちょっとした加工なら選択（Select）のマップ内で完結させられるので、後続のApply to eachやComposeアクションを減らせます。&lt;/p&gt;
&lt;h2 id=&quot;選択selectの出力をアレイのフィルター処理filter-arrayや通知につなぐ&quot;&gt;選択（Select）の出力をアレイのフィルター処理（Filter Array）や通知につなぐ&lt;/h2&gt;
&lt;h3 id=&quot;配列を整形してから絞り込む&quot;&gt;配列を整形してから絞り込む&lt;/h3&gt;
&lt;p&gt;選択（Select）とアレイのフィルター処理（Filter Array）を組み合わせる場合、先に選択（Select）で列を絞ってからアレイのフィルター処理（Filter Array）に渡すのがおすすめです。アレイのフィルター処理（Filter Array）の条件式で参照するプロパティが整理されていると、式を書くときに迷いません。&lt;/p&gt;
&lt;p&gt;逆にアレイのフィルター処理（Filter Array）を先に使って行を絞り込んでから、選択（Select）で列を整形する順序でも問題ありません。処理するデータ量を先に減らしたいならアレイのフィルター処理（Filter Array）を先に実行するほうが効率的です。アレイのフィルター処理（Filter Array）の使い方は アレイのフィルター処理（Filter Array）で条件絞り込みの記事でまとめます。&lt;/p&gt;
&lt;h3 id=&quot;teams通知への差し込み&quot;&gt;Teams通知への差し込み&lt;/h3&gt;
&lt;p&gt;選択（Select）で整形した配列をjoin関数でつなぐと、通知メッセージとして成形しやすくなります。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// アレイのフィルター処理（Filter Array）の出力をjoinで1行ずつ改行しながら連結&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;join(body(&apos;選択&apos;), &apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;&apos;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;これだけでは各行がJSON文字列になってしまいますが、マップ側で表示したい文字列をconcatで組み立てておくと、join後にそのまま通知文として使えます。&lt;/p&gt;
&lt;h2 id=&quot;よくある失敗パターン&quot;&gt;よくある失敗パターン&lt;/h2&gt;
&lt;h3 id=&quot;itemの書き方を間違える&quot;&gt;item()の書き方を間違える&lt;/h3&gt;
&lt;p&gt;マップの値側でよく見るミスは、item()の書き方を間違えることです。テキストモードでは item()?[‘列名’] と書きます。?（オプション演算子）を省くと、プロパティが存在しない場合にフローがエラーで止まります。&lt;/p&gt;
&lt;p&gt;特にPerson型やLookup型のような複合プロパティを参照するときは、ネストを正確に書く必要があります。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// Person型の表示名を取り出す&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;item()?[&apos;AssignedTo&apos;]?[&apos;DisplayName&apos;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// Lookup型の値を取り出す&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;item()?[&apos;Category&apos;]?[&apos;Value&apos;]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;差出人に配列でないものを渡す&quot;&gt;差出人に配列でないものを渡す&lt;/h3&gt;
&lt;p&gt;差出人には配列を渡さないとエラーになります。SharePointのアイテムを取得のbodyをそのまま渡すと、配列ではなくオブジェクトが渡されてしまうことがあります。正しくはbody(‘アクション名’)?[‘value’] のvalueプロパティを指定します。&lt;/p&gt;
&lt;p&gt;実行テストでエラーが出たときは、差出人に何が入っているか作成（Compose）アクションで確認するのが早いです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautomate-select02.D-dsbGZ1_Z15EXy2.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;672&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;選択（Select）アクションは地味ですが、フローの後半で使うデータを整理しておくという意味では非常に実用的なアクションです。Apply to eachで無理に処理しようとしている部分をSelectに置き換えるだけで、フローがスリムになることがあります。&lt;/p&gt;
&lt;p&gt;まずはSharePointから取得した配列を選択（Select）で列絞り込みしてみましょう。出力がシンプルになるほど、後続のアクションの式が短く書けます。Power Automateで扱うデータが複雑に感じたときは、選択（Select）で形を整えることから始めてみてください。&lt;/p&gt;</content:encoded></item><item><title>Power AutomateのSharePointトリガーが動かないときに確認する5つのこと</title><link>https://shiminkaihatsu.com/powerautomate-sharepoint-trigger/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerautomate-sharepoint-trigger/</guid><description>Power AutomateのSharePointトリガーが動かないときに確認する5つのこと</description><pubDate>Mon, 16 Mar 2026 15:46:54 GMT</pubDate><content:encoded>&lt;p&gt;Power AutomateのSharePointトリガーは、設定は簡単なのに動かないケースが意外と多いです。原因を知っておくと、トラブルシューティングの時間が大幅に短縮できます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautomate-sharepoint-trigger01.DxpjchIB_cgrmP.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;670&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;sharepointトリガーの種類&quot;&gt;SharePointトリガーの種類&lt;/h2&gt;
&lt;p&gt;Power AutomateでSharePointを起点にするトリガーは主に3種類あります。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;トリガー名&lt;/th&gt;
&lt;th&gt;発火条件&lt;/th&gt;
&lt;th&gt;主な用途&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;アイテムが作成されたとき&lt;/td&gt;
&lt;td&gt;リストに新しいアイテムが追加された瞬間&lt;/td&gt;
&lt;td&gt;申請受付、通知送信&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;アイテムが作成または変更されたとき&lt;/td&gt;
&lt;td&gt;新規追加または既存アイテムの更新&lt;/td&gt;
&lt;td&gt;変更監視、承認フロー&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ファイルが作成または変更されたとき&lt;/td&gt;
&lt;td&gt;ドキュメントライブラリへのファイル追加・更新&lt;/td&gt;
&lt;td&gt;ファイル処理の自動化&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;「作成されたとき」と「作成または変更されたとき」は似ていますが、後者は既存アイテムを更新しても発火します。承認処理でステータスを変更したときにも動いてほしい場合は後者を選びます。誤って「作成されたとき」にしてしまうと、更新時に発火しないので注意が必要です。&lt;/p&gt;
&lt;h2 id=&quot;動かないときに確認する5つのこと&quot;&gt;動かないときに確認する5つのこと&lt;/h2&gt;
&lt;h3 id=&quot;-サイトアドレスとリスト名が正しいか&quot;&gt;① サイトアドレスとリスト名が正しいか&lt;/h3&gt;
&lt;p&gt;これが原因のことが一番多いです。サイトのURLを手打ちしていると、末尾のスラッシュの有無や大文字小文字の違いで接続できないことがあります。プルダウンから選択するのが確実です。また、SharePointサイトの名前を変更していた場合、以前のURLが使われていてつながらないケースもあります。&lt;/p&gt;
&lt;h3 id=&quot;-フロー接続のアカウントにリストへのアクセス権があるか&quot;&gt;② フロー接続のアカウントにリストへのアクセス権があるか&lt;/h3&gt;
&lt;p&gt;フローを作ったアカウントと、実際にSharePointにアクセスできるアカウントが一致しているか確認します。部署異動や退職でアカウントが変わると、接続が切れたままフローだけ残るというケースがよくあります。フロー詳細画面の「接続」セクションで確認できます。&lt;/p&gt;
&lt;h3 id=&quot;-トリガー条件フィルターが厳しすぎないか&quot;&gt;③ トリガー条件（フィルター）が厳しすぎないか&lt;/h3&gt;
&lt;p&gt;トリガーにフィルタークエリや列の値による絞り込みを設定している場合、その条件に合致するアイテムだけが発火対象になります。条件を誤って設定していると、更新しても一切発火しません。まずフィルターを外してテストし、発火するか確認するのが最短の切り分け方法です。&lt;/p&gt;
&lt;h3 id=&quot;-トリガーのポーリング間隔を確認しているか&quot;&gt;④ トリガーのポーリング間隔を確認しているか&lt;/h3&gt;
&lt;p&gt;SharePointのトリガーはリアルタイムではなく、一定間隔でSharePointを確認するポーリング方式です。デフォルトは3〜5分間隔のことが多く、すぐには発火しません。変更後5分待っても発火しない場合は別の原因を疑いますが、30秒後に確認しても当然動いていません。これを知らずに「動かない」と思い込むケースも多いです。&lt;/p&gt;
&lt;h3 id=&quot;-フローが有効になっているか&quot;&gt;⑤ フローが有効になっているか&lt;/h3&gt;
&lt;p&gt;フロー詳細画面でフローがオンになっているか確認します。テスト中にオフにしたまま忘れることがよくあります。また、エラーが連続して発生するとPower Automateが自動的にフローを無効化することがあります。実行履歴でエラーの有無もあわせて確認しましょう。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautomate-sharepoint-trigger02.CCSva5vV_Z1tKmpX.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;よくある誤解アイテム更新時に複数回発火する&quot;&gt;よくある誤解：アイテム更新時に複数回発火する&lt;/h2&gt;
&lt;p&gt;「作成または変更されたとき」のトリガーを使っていると、1回の保存で複数回フローが走ることがあります。これはSharePointが内部的に複数回の更新イベントを発生させるためで、Power Automateの不具合ではありません。たとえば添付ファイルを追加すると、アイテム本体の更新と添付ファイルの更新で2回発火することがあります。&lt;/p&gt;
&lt;p&gt;この問題への対処としてよく使われるのが、トリガー条件の設定です。特定の列の値が変わったときだけ発火させるように条件を絞ることで、意図しない多重実行を防げます。詳しい設定方法は&lt;a href=&quot;/powerautomate-trigger-condition/&quot;&gt;トリガー条件とフィルタークエリの記事&lt;/a&gt;で解説しています。&lt;/p&gt;
&lt;h2 id=&quot;デバッグのコツ&quot;&gt;デバッグのコツ&lt;/h2&gt;
&lt;p&gt;動かないトリガーのデバッグは、まず手動テストから始めるのがおすすめです。フロー編集画面からテスト→手動でトリガーを選べば、SharePointの変更なしにフロー全体の動作確認ができます。これでフロー自体は動くのにトリガーだけ発火しないと分かれば、上の5つの確認に絞って調査できます。実行履歴とエラー内容の読み方は&lt;a href=&quot;/powerautomate-debug-history/&quot;&gt;デバッグのコツの記事&lt;/a&gt;を参考にしてください。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;SharePointトリガーが動かない原因のほとんどは、接続先の誤り・権限切れ・フィルター設定のミス・フローがオフのいずれかです。まずこの4点を確認するだけで、大半のトラブルは解決できます。焦らず順番に確認することをおすすめします。&lt;/p&gt;</content:encoded></item><item><title>Power AutomateでTeamsチャットに自動通知する。基本設定から実用シーン7パターンまで</title><link>https://shiminkaihatsu.com/powerautomate-teams-notify/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerautomate-teams-notify/</guid><description>Power AutomateでTeamsチャットに自動通知する。基本設定から実用シーン7パターンまで</description><pubDate>Mon, 16 Mar 2026 15:46:54 GMT</pubDate><content:encoded>&lt;p&gt;Power AutomateでTeams通知を自動化すると、手動での連絡ミスや報告漏れがほぼなくなります。設定自体は難しくないですが、実務で使える形にするには少しコツが要ります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautomate-teams-notify01.COBHctDl_hgXuN.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;670&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;teams通知アクションの基本&quot;&gt;Teams通知アクションの基本&lt;/h2&gt;
&lt;p&gt;Power AutomateでTeamsに通知するアクションは主に2種類あります。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;アクション名&lt;/th&gt;
&lt;th&gt;投稿先&lt;/th&gt;
&lt;th&gt;主な用途&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;チャットまたはチャネルでメッセージを投稿する&lt;/td&gt;
&lt;td&gt;チャネル or チャット&lt;/td&gt;
&lt;td&gt;部署への一斉通知、定期レポート&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;チャットまたはチャネルにアダプティブカードを投稿する&lt;/td&gt;
&lt;td&gt;チャネル or チャット&lt;/td&gt;
&lt;td&gt;承認ボタン付きの通知、入力フォーム&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;通常の文字列メッセージを送るだけであれば「チャットまたはチャネルでメッセージを投稿する」で十分です。ボタン操作や入力フォームを通知に組み込みたいときはアダプティブカードを使いますが、設定の難易度は上がります。まずはシンプルなメッセージ投稿から試してみることをおすすめします。&lt;/p&gt;
&lt;h3 id=&quot;投稿者の設定はflowボットが無難&quot;&gt;投稿者の設定はFlowボットが無難&lt;/h3&gt;
&lt;p&gt;メッセージの投稿者を「ユーザー」に設定すると、フローを作成したアカウントの名前でメッセージが届きます。一見いい感じに見えますが、そのアカウントが退職や部署異動でライセンスを失うと、フローが止まります。個人的には投稿者をFlowボットにしておくほうが安定していておすすめです。チャネルへの投稿ならFlowボットを選ぶだけで設定完了です。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautomate-teams-notify02.DWCA1bP0_2oGfXT.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;実用シーン7パターン&quot;&gt;実用シーン7パターン&lt;/h2&gt;
&lt;h3 id=&quot;-sharepoint申請の受付通知&quot;&gt;① SharePoint申請の受付通知&lt;/h3&gt;
&lt;p&gt;SharePointリストにアイテムが追加されたとき、担当チャネルへ自動通知。申請内容の主要項目（申請者名・内容・日付）を動的コンテンツで埋め込むと、受け取った側が一目で内容を把握できます。&lt;/p&gt;
&lt;h3 id=&quot;-承認完了の本人通知&quot;&gt;② 承認完了の本人通知&lt;/h3&gt;
&lt;p&gt;承認フローが完了（承認または却下）したとき、申請者本人にTeamsチャットで結果を通知。メールより気づかれやすく、既読も取りやすいです。&lt;/p&gt;
&lt;h3 id=&quot;-定期レポートの自動配信&quot;&gt;③ 定期レポートの自動配信&lt;/h3&gt;
&lt;p&gt;毎朝9時にSharePointリストの前日データをまとめてチャネルへ投稿。集計はSQLやSharePointの「アイテムの取得」とフィルタを使い、本文を組み立てます。週次で30分かかっていた報告が完全に自動化できます。&lt;/p&gt;
&lt;h3 id=&quot;-期限切れアラート&quot;&gt;④ 期限切れアラート&lt;/h3&gt;
&lt;p&gt;SharePointリストの期限日列を毎日チェックし、3日以内に期限が来るアイテムを担当者にチャット通知。期限超過の防止に効果的です。&lt;/p&gt;
&lt;h3 id=&quot;-フォームへの回答通知&quot;&gt;⑤ フォームへの回答通知&lt;/h3&gt;
&lt;p&gt;Microsoft Formsに回答が届いたとき、内容をTeamsチャネルへ投稿。アンケートや社内申請フォームの運用コストを下げられます。&lt;/p&gt;
&lt;h3 id=&quot;-ファイル更新の変更通知&quot;&gt;⑥ ファイル更新の変更通知&lt;/h3&gt;
&lt;p&gt;SharePoint上の特定ファイルや共有フォルダが更新されたとき、関係者チャネルへ通知。更新したのに誰も気づいていなかったという事態を防げます。&lt;/p&gt;
&lt;h3 id=&quot;-エラーアラートの自動通知&quot;&gt;⑦ エラーアラートの自動通知&lt;/h3&gt;
&lt;p&gt;別のフローがエラーで失敗したとき、管理者チャネルへ自動でエラー内容を通知。フローの監視として使っています。エラーメッセージをそのまま貼るだけで、原因特定のスピードが上がります。&lt;/p&gt;
&lt;h2 id=&quot;メッセージ本文の組み立て方&quot;&gt;メッセージ本文の組み立て方&lt;/h2&gt;
&lt;p&gt;Teams通知で地味に大事なのが、メッセージ本文の見やすさです。動的コンテンツをそのまま並べるだけでは、受け取った側が読みにくいことがあります。いくつか工夫するだけでかなり変わります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;件名的な1行目を太字にする（HTMLタグ &amp;lt;b&amp;gt; が使えます）&lt;/li&gt;
&lt;li&gt;改行を意図的に入れて、項目ごとに行を分ける&lt;/li&gt;
&lt;li&gt;Joinアクションで複数件の名前や値を「、」でつないで1行に収める&lt;/li&gt;
&lt;li&gt;リンクを埋め込む場合は &amp;lt;a href=“URL”&amp;gt;リンクテキスト&amp;lt;/a&amp;gt; で表示名をつける&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;TeamsのチャネルへのHTMLについては、試してみないと分からない部分もあるので、テスト投稿を繰り返して確認するのが確実です。&lt;/p&gt;
&lt;h2 id=&quot;よくあるトラブルと対処法&quot;&gt;よくあるトラブルと対処法&lt;/h2&gt;
&lt;h3 id=&quot;メッセージが空になってしまう&quot;&gt;メッセージが空になってしまう&lt;/h3&gt;
&lt;p&gt;動的コンテンツの元になるデータが空だと、メッセージ内の変数部分が空白になります。事前に条件分岐でデータが存在するかチェックしてから通知を送るようにしましょう。&lt;/p&gt;
&lt;h3 id=&quot;投稿先チャネルが見つからない&quot;&gt;投稿先チャネルが見つからない&lt;/h3&gt;
&lt;p&gt;アクションの設定でチャネルを選ぶとき、プルダウンに表示されないことがあります。チームの表示名が変更されたか、アクセス権がない場合が多いです。手動でチームIDとチャネルIDを入力する方法もあります。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;Teams通知の自動化は、Power Automateの活用の中でも費用対効果が高い施策のひとつです。最初は送るだけのシンプルなフローでも、現場での気づきを増やすだけで十分な効果があります。まずは小さく始めて、使いながら育てていく——そういう地道な積み重ねが、職場の自動化を前に進めてくれます。&lt;/p&gt;</content:encoded></item><item><title>Power Automateのトリガー条件とフィルタークエリ。フローを無駄に動かさないための設定</title><link>https://shiminkaihatsu.com/powerautomate-trigger-condition/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerautomate-trigger-condition/</guid><description>Power Automateのトリガー条件とフィルタークエリ。フローを無駄に動かさないための設定</description><pubDate>Mon, 16 Mar 2026 15:46:44 GMT</pubDate><content:encoded>&lt;p&gt;Power Automateのトリガー条件を使うと、フローを無駄に動かさずに済みます。条件に合わないときは処理を開始する前にスキップされるため、実行回数を減らしてフローをシンプルに保てます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautomate-trigger-condition04.-Lceg6iP_ZfouAv.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;トリガー条件とは&quot;&gt;トリガー条件とは&lt;/h2&gt;
&lt;p&gt;通常のフローでは、トリガーが発火したら必ず処理が始まります。たとえば「アイテムが作成または変更されたとき」というSharePointトリガーを使うと、リストへのあらゆる変更で発火します。承認済みのアイテムだけを処理したい場合でも、下書き中のアイテムが変更されるたびに発火してしまいます。&lt;/p&gt;
&lt;p&gt;トリガー条件は、この発火自体を制御する設定です。「この条件を満たさない場合はフローを開始しない」というフィルターをトリガーレベルで設定できます。フローが起動してから条件分岐で弾くのと違い、トリガー条件に合わない場合は実行回数のカウントにも含まれません。&lt;/p&gt;
&lt;h3 id=&quot;フロー内の条件分岐との違い&quot;&gt;フロー内の条件分岐との違い&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;比較項目&lt;/th&gt;
&lt;th&gt;トリガー条件&lt;/th&gt;
&lt;th&gt;フロー内の条件分岐&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;処理開始&lt;/td&gt;
&lt;td&gt;条件不一致なら開始しない&lt;/td&gt;
&lt;td&gt;フローは起動してから分岐する&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;実行回数へのカウント&lt;/td&gt;
&lt;td&gt;カウントされない&lt;/td&gt;
&lt;td&gt;カウントされる&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;デバッグのしやすさ&lt;/td&gt;
&lt;td&gt;発火していないと履歴に出ない&lt;/td&gt;
&lt;td&gt;履歴に残るので追いやすい&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;向いているケース&lt;/td&gt;
&lt;td&gt;明確に弾きたい条件がある場合&lt;/td&gt;
&lt;td&gt;複数の分岐処理が必要な場合&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;実行回数が月の上限に近づいているフローや、高頻度で発火するトリガーを使っている場合には、トリガー条件を設定することで無駄な実行を大幅に減らせます。&lt;/p&gt;
&lt;h2 id=&quot;設定方法&quot;&gt;設定方法&lt;/h2&gt;
&lt;p&gt;トリガー条件はトリガーの「詳細オプション」から設定します。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;フロー編集画面でトリガーブロックをクリック&lt;/li&gt;
&lt;li&gt;「詳細オプションを表示する」をクリック&lt;/li&gt;
&lt;li&gt;「トリガーの条件」入力欄が表示される&lt;/li&gt;
&lt;li&gt;式（Expression）で条件を記述する&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;条件は式として書く必要があり、trueまたはfalseを返す式を指定します。複数の条件を設定することもできますが、その場合はすべての条件が true のときだけ発火します（AND条件）。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautomate-trigger-condition05.CJ1XKt36_Z24p0pC.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;よく使う式のパターン&quot;&gt;よく使う式のパターン&lt;/h2&gt;
&lt;h3 id=&quot;特定の列の値が一致するとき&quot;&gt;特定の列の値が一致するとき&lt;/h3&gt;
&lt;p&gt;SharePointリストの「Status」列が「承認済み」のときだけ発火させたい場合：&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;@equals(triggerOutputs()?[&apos;body&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;Status&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;Value&apos;], &apos;承認済み&apos;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;特定の列が変更されたとき&quot;&gt;特定の列が変更されたとき&lt;/h3&gt;
&lt;p&gt;「担当者」列が更新されたときだけ発火させたい場合（変更前後の値を比較）：&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;@not(equals(triggerOutputs()?[&apos;body&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;AssignedTo&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;Email&apos;], triggerOutputs()?[&apos;body&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;{Prior&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;AssignedTo&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;Email}&apos;]))&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;数値が閾値を超えたとき&quot;&gt;数値が閾値を超えたとき&lt;/h3&gt;
&lt;p&gt;「在庫数」が10以下になったときに発火させたい場合：&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;@lessOrEquals(triggerOutputs()?[&apos;body&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;StockCount&apos;], &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;式の書き方はComposeアクションで動作確認してから貼り付けると、文法ミスを減らせます。Composeでテストする方法は&lt;a href=&quot;/powerautomate-compose/&quot;&gt;Composeアクションの実践ガイド&lt;/a&gt;で解説しています。&lt;/p&gt;
&lt;h2 id=&quot;フィルタークエリとの使い分け&quot;&gt;フィルタークエリとの使い分け&lt;/h2&gt;
&lt;p&gt;SharePointトリガーには「フィルタークエリ」という設定もあります。これはSharePoint側にODataクエリを渡して、最初から条件に合うアイテムだけを取得する方法です。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;設定&lt;/th&gt;
&lt;th&gt;仕組み&lt;/th&gt;
&lt;th&gt;書き方&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;トリガー条件&lt;/td&gt;
&lt;td&gt;Power Automate側でフィルタリング&lt;/td&gt;
&lt;td&gt;式（@equals等）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;フィルタークエリ&lt;/td&gt;
&lt;td&gt;SharePoint側でフィルタリング&lt;/td&gt;
&lt;td&gt;ODataクエリ（Status eq ‘承認済み’）&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;フィルタークエリはSharePoint側で処理するため、Power Automateへの転送データ量を減らせます。一方、ODataクエリの文法が必要なため、慣れるまで書き方で詰まることがあります。単純な値の一致であればフィルタークエリ、複雑な式が必要ならトリガー条件と使い分けるのが現実的です。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautomate-trigger-condition06.Bxz4mPmE_ZGa2V3.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;デバッグ時の注意点&quot;&gt;デバッグ時の注意点&lt;/h2&gt;
&lt;p&gt;トリガー条件が true にならないとフローは起動しないため、実行履歴にも残りません。条件を設定してから「フローが動かない」と思ったら、まずトリガー条件の式が正しいか確認します。式を一時的に削除してテストし、発火するようになれば式の問題と判断できます。デバッグの基本については&lt;a href=&quot;/powerautomate-debug-history/&quot;&gt;実行履歴の見方&lt;/a&gt;も参考にしてください。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;トリガー条件はシンプルな設定ですが、正しく使うとフローの効率が大きく変わります。多重発火の防止や、無駄な実行を減らすための最初の一手として、ぜひ活用してみてください。式の書き方に慣れるまでは少し時間がかかりますが、一度覚えると手放せなくなります。&lt;/p&gt;</content:encoded></item><item><title>Power Automateのトリガーはどれを選ぶ？自動化・インスタント・スケジュールの違いを徹底解説</title><link>https://shiminkaihatsu.com/powerautomate-trigger-types/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerautomate-trigger-types/</guid><description>Power Automateのトリガーはどれを選ぶ？自動化・インスタント・スケジュールの違いを徹底解説</description><pubDate>Fri, 13 Mar 2026 12:41:00 GMT</pubDate><content:encoded>&lt;p&gt;Power Automateでフローを作るとき、最初に選ぶのがトリガーです。自動化・インスタント・スケジュールの3種類がありますが、どれを選ぶかによってフローの動き方が根本的に変わります。&lt;/p&gt;
&lt;h2 id=&quot;3種類のトリガーの違い&quot;&gt;3種類のトリガーの違い&lt;/h2&gt;
&lt;h3 id=&quot;まず何が起点になるかで選ぶ&quot;&gt;まず「何が起点になるか」で選ぶ&lt;/h3&gt;
&lt;p&gt;トリガーとは、フローが動き出すきっかけのことです。Power Automateでは新しいフローを作るとき、まずこの3つから選びます。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;種類&lt;/th&gt;
&lt;th&gt;起点&lt;/th&gt;
&lt;th&gt;代表的な使い場面&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;自動化クラウドフロー&lt;/td&gt;
&lt;td&gt;外部のイベント（メール受信、リスト更新など）&lt;/td&gt;
&lt;td&gt;SharePointに新しい行が追加されたら通知、メールが届いたら転送&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;インスタントクラウドフロー&lt;/td&gt;
&lt;td&gt;人が手動でボタンを押す&lt;/td&gt;
&lt;td&gt;Power Appsのボタン、Teams のボタン、スマホのボタン&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;スケジュールクラウドフロー&lt;/td&gt;
&lt;td&gt;指定した日時・間隔&lt;/td&gt;
&lt;td&gt;毎朝9時に日報集計、毎週月曜に週次レポート送信&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;選び方のコツはシンプルで、何かが起きたときに自動で動かしたいなら自動化、人が操作したタイミングで動かしたいならインスタント、定期的に動かしたいならスケジュールです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautomate-trigger-types01.BcFtO0P3_ZMJ1BI.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;666&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;自動化クラウドフロー&quot;&gt;自動化クラウドフロー&lt;/h2&gt;
&lt;h3 id=&quot;イベント駆動で動く&quot;&gt;イベント駆動で動く&lt;/h3&gt;
&lt;p&gt;自動化クラウドフローは、何らかのイベントが起きたときに自動で動き出します。SharePointリストに新しいアイテムが追加された、Outlookに特定の件名のメールが届いた、Formsに回答が送信された、といったイベントがトリガーになります。&lt;/p&gt;
&lt;p&gt;社内でよく使う例を挙げると、SharePointの申請リストに新しいアイテムが登録されたら承認者にTeamsで通知するフローがあります。これは完全に自動なので、申請があった瞬間に承認者に連絡が届きます。誰かが手動でメールを送る必要がなくなります。&lt;/p&gt;
&lt;h3 id=&quot;代表的なトリガー一覧&quot;&gt;代表的なトリガー一覧&lt;/h3&gt;
&lt;p&gt;自動化フローで選べる主なトリガーを以下に示します。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;SharePoint：アイテムが作成されたとき / アイテムが作成または変更されたとき&lt;/li&gt;
&lt;li&gt;Outlook：新しいメールが届いたとき / フラグが付いたメールが届いたとき&lt;/li&gt;
&lt;li&gt;Microsoft Forms：新しい回答が送信されたとき&lt;/li&gt;
&lt;li&gt;Teams：メッセージが投稿されたとき / チャネルにメッセージが届いたとき&lt;/li&gt;
&lt;li&gt;OneDrive：ファイルが作成されたとき / ファイルが変更されたとき&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;SharePointのトリガーは注意点が一つあります。アイテムが作成または変更されたときのトリガーは、アイテムを更新するたびに毎回フローが動きます。フローの中でそのアイテムを更新する処理が入っていると、更新 → トリガー発火 → また更新 → また発火という無限ループになる可能性があります。条件分岐でフローの入り口に最初の申請のときだけ動くという制御を入れておきましょう。&lt;/p&gt;
&lt;h2 id=&quot;インスタントクラウドフロー&quot;&gt;インスタントクラウドフロー&lt;/h2&gt;
&lt;h3 id=&quot;ボタンを押したときだけ動く&quot;&gt;ボタンを押したときだけ動く&lt;/h3&gt;
&lt;p&gt;インスタントクラウドフローは、人が手動でトリガーを起動します。Power Appsのボタンから呼び出す、Teamsのメッセージからフローを実行する、スマートフォンのPower Automateアプリのボタンから動かす、といった使い方が代表的です。&lt;/p&gt;
&lt;p&gt;Power Appsとの連携で一番よく使うのがこのインスタントフローです。Power AppsからPower Automateのフローを呼び出す場合は、インスタントフローでトリガーをPower Appsからにする必要があります。選択画面ではPower Appsというコネクタのトリガーを選びます。&lt;/p&gt;
&lt;h3 id=&quot;power-appsから引数を渡す&quot;&gt;Power Appsから引数を渡す&lt;/h3&gt;
&lt;p&gt;Power Appsからインスタントフローを呼び出すとき、値（引数）を渡すことができます。たとえばPower Appsで選択された申請IDをフローに渡して、そのIDに対応する処理をPower Automate側で実行するといった連携が可能です。&lt;/p&gt;
&lt;p&gt;フロー側でトリガー（Power Appsのボタンのトリガー）の直後にパラメーターを定義しておき、Power Apps側では Run() 関数でフローを呼び出す際に引数を渡します。Power AppsとPower Automateを組み合わせた設計では欠かせない仕組みです。&lt;/p&gt;
&lt;h3 id=&quot;実行者の権限で動く&quot;&gt;実行者の権限で動く&lt;/h3&gt;
&lt;p&gt;インスタントフローは、ボタンを押した人（実行者）の権限でフローが動きます。これは重要なポイントです。フローを作った人のアカウントではなく、実際に実行した人の権限が使われるため、実行者がアクセス権を持っていないリストやメールボックスへの操作はエラーになります。&lt;/p&gt;
&lt;h2 id=&quot;スケジュールクラウドフロー&quot;&gt;スケジュールクラウドフロー&lt;/h2&gt;
&lt;h3 id=&quot;時間が来たら自動で動く&quot;&gt;時間が来たら自動で動く&lt;/h3&gt;
&lt;p&gt;スケジュールクラウドフローは、指定した間隔や日時で定期的に動きます。毎日・毎週・毎月といった繰り返し設定ができ、特定の曜日や時刻を細かく指定することも可能です。&lt;/p&gt;
&lt;p&gt;業務でよく使うパターンは、毎朝8時に昨日の受注データを集計してTeamsに投稿する、毎週月曜日の朝に未承認の申請一覧をメールで送る、月末最終営業日に請求書一覧を作成してOneDriveに保存する、といったものです。定型的な集計・報告業務との相性が特に良いです。&lt;/p&gt;
&lt;h3 id=&quot;スケジュールの設定方法&quot;&gt;スケジュールの設定方法&lt;/h3&gt;
&lt;p&gt;フロー作成時にトリガーで繰り返しを選ぶと、間隔と頻度を設定できます。間隔は1以上の数値で、頻度は分・時間・日・週・月から選びます。さらに詳細設定を開くと、特定の曜日や時刻を指定できます。&lt;/p&gt;
&lt;p&gt;毎週月曜日の朝9時に動かしたい場合は、頻度を週・間隔を1にして、詳細設定で月曜日を選び、時刻に09:00を入力します。タイムゾーンの設定を忘れると日本時間と9時間ずれるので、必ず東京標準時（UTC+9）を選ぶようにしてください。最初の設定でここをミスしてフローが深夜に動いていた、という経験が私にもあります。&lt;/p&gt;
&lt;h2 id=&quot;選び方で迷ったときの判断軸&quot;&gt;選び方で迷ったときの判断軸&lt;/h2&gt;
&lt;h3 id=&quot;よくある迷いどころ&quot;&gt;よくある迷いどころ&lt;/h3&gt;
&lt;p&gt;実際に作ろうとすると、自動化とスケジュールのどちらにするか迷うことがあります。たとえば毎朝9時にSharePointリストの内容をメールで送りたい場合、これはスケジュールが適切です。リストに変更があったときだけ動かしたいなら自動化を選びます。&lt;/p&gt;
&lt;p&gt;迷ったときの判断軸は2つです。タイミングを自分でコントロールしたいかどうか、そしてイベントの発生がトリガーかどうかです。毎日定時に動かしたいならスケジュール。何かが起きたらすぐ動かしたいなら自動化。自分がボタンを押したときだけ動かしたいならインスタントです。&lt;/p&gt;
&lt;h3 id=&quot;後から変更はできない&quot;&gt;後から変更はできない&lt;/h3&gt;
&lt;p&gt;一度作成したフローのトリガー種別（自動化・インスタント・スケジュール）は後から変更できません。トリガーを選び直したい場合は、フローを作り直す必要があります。最初の選択が重要ですので、どの種別が適切かを最初にしっかり確認しておきましょう。&lt;/p&gt;
&lt;p&gt;Power Automateで変数を使った処理の組み立て方は別の記事で解説しています。また、フローの作り方の基本を学ぶには&lt;a href=&quot;/powerappstips/&quot;&gt;Power Appsで使える実用テクニック&lt;/a&gt;も参考にしてみてください。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;3種類のトリガーの選び方は、何が起点になるかで決まります。イベントが起きたとき（自動化）、人が押したとき（インスタント）、時間が来たとき（スケジュール）です。これさえ押さえておけば、フロー作成の最初の迷いはほぼなくなります。&lt;/p&gt;
&lt;p&gt;最初はシンプルなスケジュールフローや、Formsへの回答をメール通知する自動化フローから試してみるのがおすすめです。動いたときの達成感があるので、楽しみながら覚えられます。&lt;/p&gt;</content:encoded></item><item><title>Power Automateの変数命名規則。後で見てもわかる変数名のつけ方とルール設計</title><link>https://shiminkaihatsu.com/powerautomate-variable-naming/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerautomate-variable-naming/</guid><description>Power Automateの変数命名規則。後で見てもわかる変数名のつけ方とルール設計</description><pubDate>Mon, 16 Mar 2026 15:46:45 GMT</pubDate><content:encoded>&lt;p&gt;Power Automateのフローを作っていると、変数名を何となくvar1・temp・flagのようにつけてしまいがちです。動いているうちは問題ありませんが、1ヶ月後に修正しようとしたときこれ何の変数だったっけとなります。変数名の付け方をルール化しておくだけで、後のメンテナンスコストが大きく変わります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautomate-variable-naming04.B7YlSZr5_ZN3jRk.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;おすすめの命名規則プレフィックス意味のある名前&quot;&gt;おすすめの命名規則：プレフィックス＋意味のある名前&lt;/h2&gt;
&lt;p&gt;変数の種類ごとにプレフィックスをつける方法が読みやすく、一般的にも広く使われています。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;種類&lt;/th&gt;
&lt;th&gt;プレフィックス&lt;/th&gt;
&lt;th&gt;例&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;文字列（String）&lt;/td&gt;
&lt;td&gt;str&lt;/td&gt;
&lt;td&gt;strApplicantName、strMailBody&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;整数（Integer）&lt;/td&gt;
&lt;td&gt;int&lt;/td&gt;
&lt;td&gt;intRecordCount、intRetryLimit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;真偽値（Boolean）&lt;/td&gt;
&lt;td&gt;bln または is&lt;/td&gt;
&lt;td&gt;blnIsApproved、isCompleted&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;配列（Array）&lt;/td&gt;
&lt;td&gt;arr&lt;/td&gt;
&lt;td&gt;arrTaskList、arrRecipients&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;オブジェクト（Object）&lt;/td&gt;
&lt;td&gt;obj&lt;/td&gt;
&lt;td&gt;objCurrentUser、objConfig&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;日時（DateTime）&lt;/td&gt;
&lt;td&gt;dt&lt;/td&gt;
&lt;td&gt;dtTodayJST、dtDueDate&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;プレフィックスをつけることで、変数名を見ただけで型がわかります。Power Automateでは型エラーが出ることがあるので、型を意識した名前をつけておくと原因特定も早くなります。&lt;/p&gt;
&lt;h2 id=&quot;名前の付け方の3原則&quot;&gt;名前の付け方の3原則&lt;/h2&gt;
&lt;h3 id=&quot;-何が入っているかを名前にする&quot;&gt;① 何が入っているかを名前にする&lt;/h3&gt;
&lt;p&gt;変数の用途ではなく、入っている値の内容を名前にします。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;NG：strTemp、strWork、str1&lt;/li&gt;
&lt;li&gt;OK：strApplicantName、strSubjectLine、strErrorMessage&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;「何のための変数か」より「何が入っているか」を名前にする方が、後から読んだときにすぐわかります。&lt;/p&gt;
&lt;h3 id=&quot;-略語は最小限にする&quot;&gt;② 略語は最小限にする&lt;/h3&gt;
&lt;p&gt;略語を多用すると名前が暗号になります。一般的に通じる略語（ID、URL、JST、UTCなど）以外は省略しないほうが読みやすいです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;NG：strApNm、intCnt、dtDl&lt;/li&gt;
&lt;li&gt;OK：strApplicantName、intCount、dtDeadline&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;-複合語はキャメルケースで書く&quot;&gt;③ 複合語はキャメルケースで書く&lt;/h3&gt;
&lt;p&gt;複数の単語を組み合わせる場合は、単語の区切りを大文字にするキャメルケースが読みやすいです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;NG：strrecordcount、str_record_count&lt;/li&gt;
&lt;li&gt;OK：strRecordCount&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;スペースやアンダースコアは式で参照するときにエラーの原因になることがあるので、キャメルケースが無難です。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautomate-variable-naming05.CFhIADKl_yjVv0.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;フロー全体での変数管理のコツ&quot;&gt;フロー全体での変数管理のコツ&lt;/h2&gt;
&lt;h3 id=&quot;変数の初期化はフロー冒頭にまとめる&quot;&gt;変数の初期化はフロー冒頭にまとめる&lt;/h3&gt;
&lt;p&gt;Power Automateの変数はフローの途中で初期化できません（使う前に必ず初期化が必要）。フロー冒頭に変数の初期化アクションをまとめておくと、どんな変数を使っているか一目で把握できます。&lt;/p&gt;
&lt;p&gt;初期化アクションをまとめる場所が決まっていると、変数の棚卸しもしやすくなります。使われなくなった変数が残っていないかを定期的に確認する習慣もつけておくとよいです。&lt;/p&gt;
&lt;h3 id=&quot;ループ内の一時変数には-local-をつける&quot;&gt;ループ内の一時変数には local をつける&lt;/h3&gt;
&lt;p&gt;Apply to each の中だけで使う一時的な変数は、接頭辞にlocalをつけると「このスコープだけで使う変数だ」とわかりやすくなります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;localStr…、localInt… のように命名する&lt;/li&gt;
&lt;li&gt;ループを出た後は参照しないことを明示できる&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;作成composeで定数を管理する&quot;&gt;作成（Compose）で定数を管理する&lt;/h3&gt;
&lt;p&gt;フロー内で固定値として使う文字列（メール送信先、設定値、定型文など）は作成（Compose）アクションに入れておくと管理しやすくなります。変数と違い上書きされる心配がなく、「定数」として扱えます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6272A4&quot;&gt;// 作成「設定：送信先メールアドレス」&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;admin@example.com&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;作成（Compose）に意味のある名前をつけておけば、後から変更が必要なときも一か所を変えるだけで済みます。作成（Compose）アクションの活用方法は別記事でまとめています。&lt;/p&gt;
&lt;p&gt;→ &lt;a href=&quot;/powerautomate-compose/&quot;&gt;Power Automateの作成（Compose）アクション——デバッグと式の整理に使う実践ガイド&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautomate-variable-naming06.D61Ex8Bd_ZVsDw8.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;669&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;チームで運用するフローでの追加ルール&quot;&gt;チームで運用するフローでの追加ルール&lt;/h2&gt;
&lt;p&gt;自分だけが使うフローと、チームで共有するフローでは求められる丁寧さが変わります。複数人が触るフローでは、以下も意識しておくとよいです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;アクション名にも説明をつける（デフォルト名のままにしない）&lt;/li&gt;
&lt;li&gt;スコープアクションでアクションをグループ化して意図を明示する&lt;/li&gt;
&lt;li&gt;コメントアクションで処理の意図を残す&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;変数名だけでなく、アクション名も「HTTP」「作成」のままにせず「HTTP：〇〇APIを呼び出す」「作成：本文テキストを組み立てる」のように意図を書いておくと、引き継ぎのときに格段に楽になります。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;Power Automateの変数命名は、プレフィックス＋内容の英語キャメルケースで統一するのがおすすめです。何が入っているかを名前にする、略語は最小限にする、複合語はキャメルケースにする、の3原則を守るだけで後から読んでもわかるフローになります。&lt;/p&gt;
&lt;p&gt;変数名の付け方は地味ですが、フローが増えてくると効いてきます。最初から習慣にしておくほうが後から直すより楽なので、今日から取り組んでみてください。&lt;/p&gt;</content:encoded></item><item><title>Power Automateで変数を使いこなす。初期化・セット・追加の全パターン</title><link>https://shiminkaihatsu.com/powerautomate-variables/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerautomate-variables/</guid><description>Power Automateで変数を使いこなす。初期化・セット・追加の全パターン</description><pubDate>Tue, 17 Mar 2026 10:49:00 GMT</pubDate><content:encoded>&lt;p&gt;Power Automateの変数は、フローの中で値を一時的に保存しておく仕組みです。使い方のルールを知っておかないと、なぜか値が更新されない、スコープの外で使えないといった詰まりポイントにはまります。&lt;/p&gt;
&lt;h2 id=&quot;変数の基本3つのアクション&quot;&gt;変数の基本：3つのアクション&lt;/h2&gt;
&lt;h3 id=&quot;変数を初期化する変数の設定値を増やすなど&quot;&gt;変数を初期化する・変数の設定・値を増やすなど&lt;/h3&gt;
&lt;p&gt;Power Automateで変数を扱うアクションは主に3つです。それぞれ役割が明確に分かれています。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;アクション&lt;/th&gt;
&lt;th&gt;役割&lt;/th&gt;
&lt;th&gt;使うタイミング&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;変数を初期化する&lt;/td&gt;
&lt;td&gt;変数を宣言して初期値を設定する&lt;/td&gt;
&lt;td&gt;フローの最初に一度だけ&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;変数の設定&lt;/td&gt;
&lt;td&gt;変数の値を上書きする&lt;/td&gt;
&lt;td&gt;変数の値を更新したいとき&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;文字列変数に追加&lt;/td&gt;
&lt;td&gt;文字列変数に文字を追加する&lt;/td&gt;
&lt;td&gt;テキストを少しずつ積み上げるとき&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;配列変数に追加&lt;/td&gt;
&lt;td&gt;配列変数に要素を追加する&lt;/td&gt;
&lt;td&gt;ループ内でリストを組み立てるとき&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;変数の値を増やす/減らす&lt;/td&gt;
&lt;td&gt;整数変数に数値を加算/減算する&lt;/td&gt;
&lt;td&gt;カウンターを増やす/減らすとき&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;変数を初期化する は必ず先に実行する必要があります。初期化されていない変数を変数の設定で使おうとするとエラーになります。フローを作り始めたら、使う変数はすべてフローの最初にまとめて初期化しておくのが基本です。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautomate-variables01.CcVmQjbW_1cr7oh.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;768&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;変数を初期化する変数の宣言&quot;&gt;変数を初期化する：変数の宣言&lt;/h2&gt;
&lt;h3 id=&quot;型と初期値を決める&quot;&gt;型と初期値を決める&lt;/h3&gt;
&lt;p&gt;変数を初期化するでは、変数の名前・型・初期値を設定します。型は以下から選びます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;String（文字列）：テキストを保存する&lt;/li&gt;
&lt;li&gt;Integer（整数）：整数の数値を保存する&lt;/li&gt;
&lt;li&gt;Float（浮動小数点数）：小数を含む数値を保存する&lt;/li&gt;
&lt;li&gt;Boolean（真偽値）：true か false を保存する&lt;/li&gt;
&lt;li&gt;Array（配列）：複数の値のリストを保存する&lt;/li&gt;
&lt;li&gt;Object（オブジェクト）：キーと値のペアを保存する&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;初期値は空白にしておいても構いませんが、Integer や Float は初期値に 0 を入れておくと後で 変数の値を増やす/減らすや変数の設定で計算するときにエラーが出にくいです。Array 型は初期値に空の配列 [] を入れておくのが定番です。&lt;/p&gt;
&lt;h3 id=&quot;スコープの外では使えない&quot;&gt;スコープの外では使えない&lt;/h3&gt;
&lt;p&gt;変数には重要なルールがあります。変数を初期化する は、Scope（スコープ）や Apply to each、条件分岐（Condition）などのコンテナアクションの中では実行できません。必ずフローのトップレベル（一番外側）に置く必要があります。&lt;/p&gt;
&lt;p&gt;Scope の中で変数を初期化しようとするとエラーになる、という経験は多くの人がしています。私も最初にエラーメッセージを見たとき意味がわからなかったのですが、変数の初期化はフローの一番外側でしかできないという制約があるためです。&lt;/p&gt;
&lt;p&gt;一方で変数の設定は、Scope や Apply to each の中から使えます。初期化だけが外側に制限されていると覚えておきましょう。&lt;/p&gt;
&lt;h2 id=&quot;変数の設定値の上書き&quot;&gt;変数の設定：値の上書き&lt;/h2&gt;
&lt;h3 id=&quot;現在の値を新しい値に差し替える&quot;&gt;現在の値を新しい値に差し替える&lt;/h3&gt;
&lt;p&gt;変数の設定は、すでに存在する変数の値を新しい値に上書きします。計算結果を変数に保存したり、条件によって変数の内容を切り替えたりするときに使います。&lt;/p&gt;
&lt;p&gt;たとえばステータスを表す変数 varStatus を初期化しておき、後続の処理で条件によって承認済みや却下といった値に切り替えるパターンです。条件分岐の中でそれぞれ変数の設定を使えば、後続の処理では varStatus の値を見るだけで済みます。&lt;/p&gt;
&lt;h3 id=&quot;式を使った計算も入れられる&quot;&gt;式を使った計算も入れられる&lt;/h3&gt;
&lt;p&gt;変数の設定の値には式を使えます。たとえばカウンターを1増やすなら以下のように書きます。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;add(variables(&apos;varCount&apos;), &lt;/span&gt;&lt;span style=&quot;color:#BD93F9&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;varCount という整数変数に1を足した値で上書きする式です。ループのたびにこれを実行すれば、処理した件数を数えられます。整数の加算なら変数の値を増やすを使うほうがシンプルですが、掛け算や割り算など他の計算が必要なときは変数の設定+ 式の組み合わせが必要です。&lt;/p&gt;
&lt;h2 id=&quot;文字列変数に追加値の追加&quot;&gt;文字列変数に追加：値の追加&lt;/h2&gt;
&lt;h3 id=&quot;文字列をつなげる&quot;&gt;文字列をつなげる&lt;/h3&gt;
&lt;p&gt;文字列変数に追加は、文字列変数の末尾に文字を追加します。複数の処理結果をひとつの文字列に積み上げていくときに使います。&lt;/p&gt;
&lt;p&gt;たとえばメールの本文を組み立てる場合。それぞれに適用（Apply to each）でリストを1件ずつ処理しながら、各行のテキストを改行コードつきで varMailBody に追記していき、ループが終わったら varMailBody をメール送信アクションの本文に渡します。&lt;/p&gt;
&lt;pre class=&quot;astro-code dracula&quot; style=&quot;background-color:#282A36;color:#F8F8F2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;powerfx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;concat(items(&apos;Apply_to_each&apos;)?[&apos;Title&apos;], &apos;：&apos;, items(&apos;Apply_to_each&apos;)?[&apos;Status&apos;], decodeUriComponent(&apos;&lt;/span&gt;&lt;span style=&quot;color:#FF79C6&quot;&gt;%&lt;/span&gt;&lt;span style=&quot;color:#F8F8F2&quot;&gt;0A&apos;))&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;decodeUriComponent(‘%0A’) は改行コードの入れ方です。メール本文での改行はこれを使うのが確実で、私もよく使います。&lt;/p&gt;
&lt;h3 id=&quot;配列に要素を追加する&quot;&gt;配列に要素を追加する&lt;/h3&gt;
&lt;p&gt;配列変数に追加は、配列変数に新しい要素を1件追加します。条件に合ったアイテムだけを配列に集めて、後でまとめて処理するパターンでよく使います。&lt;/p&gt;
&lt;p&gt;たとえばApply to eachで全件を処理しながら、特定の条件を満たすものだけを varFiltered 配列に追加していき、ループ後に varFiltered の中身だけを対象に次の処理をするという使い方です。フィルタリングをPower Automate側でやりたいときに役立ちます。&lt;/p&gt;
&lt;h2 id=&quot;変数を使うときのよくある失敗と対処&quot;&gt;変数を使うときのよくある失敗と対処&lt;/h2&gt;
&lt;h3 id=&quot;appendが意図せずループをまたいで蓄積される&quot;&gt;Appendが意図せずループをまたいで蓄積される&lt;/h3&gt;
&lt;p&gt;フローを複数回実行したとき、前回の実行の値が残っていると思っている人がいますが、変数はフローの実行のたびに変数を初期化するから始まるので、実行をまたいで値が引き継がれることはありません。&lt;/p&gt;
&lt;p&gt;ただし同一実行内のループでは当然累積されます。Apply to eachが10回回れば Append も10回実行され、文字列や配列には10件分のデータが蓄積されます。これは意図した動作ですが、テスト時に想定より長いメール本文が生成されて驚くことがあります。&lt;/p&gt;
&lt;h3 id=&quot;変数名は日本語でも使えるが英語がおすすめ&quot;&gt;変数名は日本語でも使えるが英語がおすすめ&lt;/h3&gt;
&lt;p&gt;変数名は日本語でも設定できます。ただし、式の中で変数を参照するとき（variables(‘変数名’) の形）に日本語の変数名が入ると、後で式を見直したときに読みにくくなります。個人的には varStatus、varCount、varMailBody のように先頭に var をつけた英語名にしています。チームで使うフローなら命名規則を最初に決めておくと管理が楽になります。&lt;/p&gt;
&lt;h3 id=&quot;複雑なデータはobject型で扱う&quot;&gt;複雑なデータはObject型で扱う&lt;/h3&gt;
&lt;p&gt;複数のキーと値のセットをひとまとめに保存したい場合は Object 型の変数が使えます。JSON形式でデータを保持でき、後続のアクションで特定のキーの値だけを取り出すことができます。ただしObject型はやや扱いが難しいので、まずは String・Integer・Array の3つをしっかり使いこなすのが先決です。&lt;/p&gt;
&lt;p&gt;Power Automateのトリガーの種類と使い分けは&lt;a href=&quot;/powerautomate-trigger-types/&quot;&gt;こちらの記事&lt;/a&gt;で、Apply to eachとの組み合わせパターンは&lt;a href=&quot;/powerautomate-apply-to-each/&quot;&gt;Apply to each完全攻略&lt;/a&gt;で解説しています。変数はこれらと組み合わせて使うことが多いので、合わせて確認してみてください。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;Power Automateの変数は、変数を初期化するで宣言、変数の設定で上書き、Append で追加という3ステップで使います。初期化はフローの一番外側に置く制約さえ覚えておけば、基本的な使い方には困りません。&lt;/p&gt;
&lt;p&gt;最初はシンプルなカウンターや文字列の積み上げから試してみましょう。変数を使いこなせるようになると、フローで表現できることが一気に増えます。楽しみながら試してみてください。&lt;/p&gt;</content:encoded></item><item><title>Power Automateで使える実用テクニック</title><link>https://shiminkaihatsu.com/powerautomatetips/</link><guid isPermaLink="true">https://shiminkaihatsu.com/powerautomatetips/</guid><description>Power Automateで使える実用テクニック</description><pubDate>Wed, 16 Oct 2024 17:04:09 GMT</pubDate><content:encoded>&lt;p&gt;Power Automate操作で役立つテクニックを紹介します。&lt;/p&gt;
&lt;h2 id=&quot;フローは複製できる&quot;&gt;フローは複製できる&lt;/h2&gt;
&lt;p&gt;作成したフローは「名前をつけて保存」することで複製できます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautotips6.BTyPzT8q_Z2oqCcz.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;262&quot;&gt;&lt;/p&gt;
&lt;p&gt;バックアップや、大掛かりな変更をかける際に複製しておくと安心です。&lt;/p&gt;
&lt;h2 id=&quot;アクションはコピーできる&quot;&gt;アクションはコピーできる&lt;/h2&gt;
&lt;p&gt;アクションを丸々コピーして貼り付けて使うことができます。&lt;/p&gt;
&lt;p&gt;コピーしたいアクションを右クリックしてコピー、もしくはCtrl＋C（Macは⌘＋C）でコピーします。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautotips7-1.DDKI59hz_ZYx14.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;657&quot;&gt;&lt;/p&gt;
&lt;p&gt;貼り付けたい箇所のプラスボタンを押し、「アクションの貼り付け」をします。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautotips8.o-6FySIF_ZMO2is.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1120&quot; height=&quot;436&quot;&gt;&lt;/p&gt;
&lt;p&gt;旧デザイナーはコピーしたアクションの履歴が残るので、複数のアクションを記憶して使い回すことができて便利です。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautotips9.hjBAHvJ1_17ykgY.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;544&quot;&gt;&lt;/p&gt;
&lt;p&gt;旧デザイナーのほうが便利&lt;/p&gt;
&lt;p&gt;新しいデザイナーはこの機能が廃止されたようで、一度に保持できるアクションは1つになりました。&lt;/p&gt;
&lt;h2 id=&quot;アクションは任意の名前をつけよう&quot;&gt;アクションは任意の名前をつけよう&lt;/h2&gt;
&lt;p&gt;各アクションは名前をつけることができますので、どんなアクションかわかりやすい名付けをしましょう。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautotips1.DWBKKkpX_ZmT9tV.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;162&quot;&gt;&lt;/p&gt;
&lt;p&gt;でないと、&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;複数の項目を取得&lt;/li&gt;
&lt;li&gt;複数の項目を取得 1&lt;/li&gt;
&lt;li&gt;複数の項目を取得 2&lt;/li&gt;
&lt;li&gt;複数の項目を取得 3&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;のように、一見しても何のアクションか判断がつきません。&lt;/p&gt;
&lt;p&gt;この際、&lt;em&gt;アクションの元の名前は消さずに残したまま、その後ろにわかりやすく名前を入れることをおすすめ&lt;/em&gt;します。&lt;/p&gt;
&lt;p&gt;「あれ、これ何のアクションを使ってるんだっけ？」と後々後悔することになりがちです。&lt;/p&gt;
&lt;h2 id=&quot;メモ書きをうまく使おう&quot;&gt;メモ書きをうまく使おう&lt;/h2&gt;
&lt;p&gt;アクションにメモを残すと、後で見返した際に便利です。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautotips10.BTkgjvT6_Z4SjUj.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;326&quot;&gt;&lt;/p&gt;
&lt;p&gt;そのアクションで具体的に何をどういう処理をしているか、クエリの書き方やコツなど一言メモ書きしておくといいでしょう。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautotips12.CvjKI7Pm_Z1cMgkG.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;286&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;アクションはドラッグドロップで移動できる&quot;&gt;アクションはドラッグ＆ドロップで移動できる&lt;/h2&gt;
&lt;p&gt;挿入したアクションはドラッグ＆ドロップで任意の場所に移動できます。&lt;/p&gt;
&lt;p&gt;順番を入れ替えたい時に便利な機能です。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautotips11.BCVPgVBZ_LxSno.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;750&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;並列分岐で見やすさアップ&quot;&gt;並列分岐で見やすさアップ&lt;/h2&gt;
&lt;p&gt;アクションが連続して並ぶと、流れを追ったりアクションの数の把握が難しくなります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautotips2.nX2gVwNA_Z1O7EGI.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;811&quot; height=&quot;1200&quot;&gt;&lt;/p&gt;
&lt;p&gt;これをうまく並列分岐させることで見やすく、流れがわかりやすくなります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautotips3.DrkWD4sm_Z105n9O.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;968&quot; height=&quot;502&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautotips4.CE2PsKDu_1d3Ahs.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;495&quot;&gt;&lt;/p&gt;
&lt;p&gt;注意点として、並列処理は実行順番が保証されません。&lt;/p&gt;
&lt;p&gt;先にメールを送って、次にTeamsに飛ばすなど、明確に順序が決まっている場合は直列にしましょう。&lt;/p&gt;
&lt;h2 id=&quot;apply-to-eachの処理速度をアップする&quot;&gt;Apply to eachの処理速度をアップする&lt;/h2&gt;
&lt;p&gt;繰り返し処理の Apply to eachは、データ量に比例して処理時間が長くなります。&lt;/p&gt;
&lt;p&gt;1つの処理を終えて次の処理をし、終わったら次を処理し、と順に進めるためです。&lt;/p&gt;
&lt;p&gt;設定から Concurrency control をオンにすると、一度に複数のデータを並行して処理するため、速度がアップします。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/powerautotips5.BKCTq9k6_ZOAqit.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;731&quot;&gt;&lt;/p&gt;
&lt;p&gt;注意点として、実行順番が保証されない点と、数値を上げすぎるとうまく処理できないことがあることです。&lt;/p&gt;
&lt;p&gt;最初は低い数値（5など）から始め、問題なさそうであれば大きくして調整しましょう。&lt;/p&gt;
&lt;h2 id=&quot;随時更新します&quot;&gt;随時更新します&lt;/h2&gt;
&lt;p&gt;他にも便利なテクニックがあれば、随時更新します。&lt;/p&gt;</content:encoded></item><item><title>Outlook予定を一覧表示するアプリ【Power Apps 活用事例サンプル】</title><link>https://shiminkaihatsu.com/scheduleapps/</link><guid isPermaLink="true">https://shiminkaihatsu.com/scheduleapps/</guid><description>Outlook予定を一覧表示するアプリ【Power Apps 活用事例サンプル】</description><pubDate>Sat, 26 Oct 2024 09:08:33 GMT</pubDate><content:encoded>&lt;p&gt;私が作成したPower Apps 業務活用事例のサンプルを紹介します。&lt;/p&gt;
&lt;h2 id=&quot;outlook予定を一覧表示するアプリ&quot;&gt;Outlook予定を一覧表示するアプリ&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/scheduleapps1.DvUSLX5T_2lXVqj.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;1044&quot;&gt;&lt;/p&gt;
&lt;p&gt;名前は仮名です&lt;/p&gt;
&lt;p&gt;このアプリの主な特徴&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;任意の複数人のスケジュールを一覧表示する&lt;/li&gt;
&lt;li&gt;予定は30分ごとに最新のものに自動反映&lt;/li&gt;
&lt;li&gt;今日を含めて先6日間に対応&lt;/li&gt;
&lt;li&gt;出社人数を動的にグラフ表示&lt;/li&gt;
&lt;li&gt;部署を切り替えて表示可能&lt;/li&gt;
&lt;li&gt;予定に合わせて動的に色とテキストが変更&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;このアプリのいまいちな点&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;見せられる予定は1日1件&lt;/li&gt;
&lt;li&gt;Power Automateの設定が手間&lt;/li&gt;
&lt;li&gt;上限30人が目安&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;作った背景&quot;&gt;作った背景&lt;/h2&gt;
&lt;p&gt;コロナを機に私の会社ではテレワークが始まり、出社人数が減少しました。&lt;/p&gt;
&lt;p&gt;社内で蔓延を防止するため、部署ごとに出社人数の上限が設けられたのですが、全員のOutlookスケジュールを見て何人出社するか確認する手間があり、パッと把握しづらい状況でした。&lt;/p&gt;
&lt;p&gt;そこで、Power Apps から出社人数を視覚的に把握し、誰が出社し、誰がテレワークかわかるアプリを作ろうと思ったのがきっかけです。&lt;/p&gt;
&lt;p&gt;土日であっても、アプリを見れば誰が出社か確認しやすいという特徴もあります。&lt;/p&gt;
&lt;h2 id=&quot;言い訳&quot;&gt;言い訳&lt;/h2&gt;
&lt;p&gt;実はこのアプリ、私が Power Platform に触れ始めて2番目に作ったものです。&lt;/p&gt;
&lt;p&gt;当時は経験が浅く、いま見返すとどうしてこんな面倒な作り方をしたのか頭を悩ませるのですが、それも自身の成長の証としてそのまま紹介します。&lt;/p&gt;
&lt;h2 id=&quot;最も工夫した点&quot;&gt;最も工夫した点&lt;/h2&gt;
&lt;p&gt;関係者のスケジュールを Power Automate で自動取得する方法を工夫しました。&lt;/p&gt;
&lt;p&gt;全員のPC1台1台から Power Automate を設定し、30分間隔で最新の予定6日分をリストに投稿するようにしたのです。そうです、&lt;em&gt;力技です&lt;/em&gt;。&lt;/p&gt;
&lt;p&gt;23年10月頃まで、スマホのOutlookアプリに他人のスケジュール表を追加するだけで Power Automate で取得できる仕様でした。&lt;/p&gt;
&lt;p&gt;ですので他人の予定を自動取得するのは意外と簡単だったのですが、アップデートでこの方法が使えなくなり、このアプリの根幹を揺るがすことになります。&lt;/p&gt;
&lt;p&gt;色々と調べたところ、スケジューラーの編集権限を私に付与してもらえれば全て解決らしいのですが、例え同じ部署の人であってもそれを快くOKしてくれる人はまずいません。&lt;/p&gt;
&lt;p&gt;会社のポリシーでそれが禁止されていることもありますし。&lt;/p&gt;
&lt;p&gt;自分自身のスケジュールならPower Automateで自動取得可能です。&lt;/p&gt;
&lt;p&gt;それなら全員にPCを借りて同じフローを設定すればいけるのではないかという、保守性をガン無視した強硬策を実施しました。&lt;/p&gt;
&lt;h2 id=&quot;その他の特徴&quot;&gt;その他の特徴&lt;/h2&gt;
&lt;h3 id=&quot;出社人数のグラフ表示&quot;&gt;出社人数のグラフ表示&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/scheduleapps2.RFcSRwJv_Z2exOhh.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;494&quot;&gt;&lt;/p&gt;
&lt;h4 id=&quot;棒グラフ&quot;&gt;棒グラフ&lt;/h4&gt;
&lt;p&gt;その日、[出社]というキーワードをカウントしてグラフが動的に変化します。&lt;/p&gt;
&lt;p&gt;土・日・祝は非表示になります。&lt;/p&gt;
&lt;h4 id=&quot;最上段の出社人数&quot;&gt;最上段の出社人数&lt;/h4&gt;
&lt;p&gt;その日、[出社]というキーワードをカウントしてその数が表示されます。&lt;/p&gt;
&lt;p&gt;土・日・祝は0になります。&lt;/p&gt;
&lt;h4 id=&quot;日付と曜日&quot;&gt;日付と曜日&lt;/h4&gt;
&lt;p&gt;アプリを開いた日と曜日を起点にし、その日を含めて先6日間を表示します。&lt;/p&gt;
&lt;h4 id=&quot;赤い線&quot;&gt;赤い線&lt;/h4&gt;
&lt;p&gt;これは出社可能人数（6割）の箇所に四角形を変形して配置しています。&lt;/p&gt;
&lt;h4 id=&quot;背景のグラフ枠&quot;&gt;背景のグラフ枠&lt;/h4&gt;
&lt;p&gt;これは画像貼り付けです。&lt;/p&gt;
&lt;p&gt;Excelでシンプルなグラフ枠を作成し、それを最背面に配置し、前面にその他の要素を配置しています。&lt;/p&gt;
&lt;h3 id=&quot;スケジュール&quot;&gt;スケジュール&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/scheduleapps3.C-uRQYju_Z2iQGVa.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;780&quot;&gt;&lt;/p&gt;
&lt;h4 id=&quot;予定の表示&quot;&gt;予定の表示&lt;/h4&gt;
&lt;p&gt;Power Automate を使ってリストに個人のスケジュールを吸い上げます。&lt;/p&gt;
&lt;p&gt;それらのタイトルから判断し、[出社][TW][出張][休]を色別に表示しています。&lt;/p&gt;
&lt;p&gt;土・日・祝は強制的に[休]が表示されます。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-schedule-textcolor/&quot;&gt;https://shiminkaihatsu.com/powerapps-schedule-textcolor/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://shiminkaihatsu.com/pa_outlookschedule_listcopy/&quot;&gt;https://shiminkaihatsu.com/pa_outlookschedule_listcopy/&lt;/a&gt;&lt;/p&gt;
&lt;h4 id=&quot;氏名&quot;&gt;氏名&lt;/h4&gt;
&lt;p&gt;所属する人の名前が入っています。&lt;/p&gt;
&lt;h4 id=&quot;反省点&quot;&gt;反省点&lt;/h4&gt;
&lt;p&gt;Galleryを使えばもっとシンプルに作れたかもしれませんが、当時の私は1つずつLabelで作っています。&lt;/p&gt;
&lt;p&gt;人が増えれば増えるほどコントロールが増えてしまい、アプリが重たくなる要因の1つです。&lt;/p&gt;
&lt;h3 id=&quot;部と課のボタン&quot;&gt;部と課のボタン&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/scheduleapps4.BtQtgdFB_1sDzVK.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1098&quot; height=&quot;578&quot;&gt;&lt;/p&gt;
&lt;p&gt;関係する人数が多ければ、これらのボタンのように課でわけて表示する機能があってもいいでしょう。&lt;/p&gt;
&lt;h3 id=&quot;追記詳細なスケジュールの表示機能の追加&quot;&gt;追記：詳細なスケジュールの表示機能の追加&lt;/h3&gt;
&lt;p&gt;Labelで表示していた名前をボタンに変更し、ボタン押下で6日分の詳細なスケジュールが表示されるように機能を追加しました。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/scheduleapps3-1.Bpa-63rJ_Z1iwfiE.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;780&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/scheduleapps3-11._CZZmAAN_231qVw.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;376&quot; height=&quot;1200&quot;&gt;&lt;/p&gt;
&lt;p&gt;これでわざわざOutlookから詳細スケジュールを見ずとも、アプリから予定確認ができるようになって利便性が向上しました。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://shiminkaihatsu.com/outlook-schedulelayout/&quot;&gt;https://shiminkaihatsu.com/outlook-schedulelayout/&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;アプリを作ったことでの気付き&quot;&gt;アプリを作ったことでの気付き&lt;/h2&gt;
&lt;h3 id=&quot;繰り返し表示するものはgalleryを使う&quot;&gt;繰り返し表示するものはGalleryを使う&lt;/h3&gt;
&lt;p&gt;スケジュール表示のように、名前や予定が繰り返し表示されるような箇所にはGalleryが適していると感じます。&lt;/p&gt;
&lt;p&gt;1つ目のGallery（縦）で人の名前を表示し、そこにGallery（横）を入れ子にして予定表示させれば、もっと軽くシンプルに設計できるかもしれません。&lt;/p&gt;
&lt;h3 id=&quot;データソースが多すぎるのは問題&quot;&gt;データソースが多すぎるのは問題&lt;/h3&gt;
&lt;p&gt;私が実際に会社で使っているものは35前後のリストをデータソースに設定しています。&lt;/p&gt;
&lt;p&gt;Power Apps が推奨するデータソースの上限は30ですので、それを越えています。&lt;/p&gt;
&lt;p&gt;その影響か、Power Apps Studio（開発画面）がめちゃくちゃ重たいです。&lt;/p&gt;
&lt;h3 id=&quot;視覚に訴えるものは強い&quot;&gt;視覚に訴えるものは強い&lt;/h3&gt;
&lt;p&gt;出社人数のグラフ表示、個人の予定の色付けのように、視覚に訴えるコンテンツは視認性が良く、周りから高い評価を受けています。&lt;/p&gt;
&lt;h3 id=&quot;削ぎ落とすことも大切&quot;&gt;削ぎ落とすことも大切&lt;/h3&gt;
&lt;p&gt;予定が1件しか表示できませんが、そもそもこのアプリの目的は出社人数を把握するためのものなので、そこは割り切って正解だったと思います。&lt;/p&gt;
&lt;p&gt;あれもこれもと機能をつけたくなるのはわかりますが、まずは少ない機能でリリースし、本当に必要であれば少しずつ追加するぐらいがいいのかと。&lt;/p&gt;</content:encoded></item><item><title>Power AppsとPower Automateでの開発：シンプルなアプリから始めよう</title><link>https://shiminkaihatsu.com/simple-development/</link><guid isPermaLink="true">https://shiminkaihatsu.com/simple-development/</guid><description>Power AppsとPower Automateでの開発：シンプルなアプリから始めよう</description><pubDate>Fri, 18 Oct 2024 17:02:57 GMT</pubDate><content:encoded>&lt;p&gt;Power AppsやPower Automateを始める方は、まずシンプルなツール作りからスタートするのがおすすめです。いきなり本格的なアプリを目指すと、高い確率で行き詰まります。&lt;/p&gt;
&lt;h2 id=&quot;いきなり本格的な業務アプリを目指さない&quot;&gt;いきなり本格的な業務アプリを目指さない&lt;/h2&gt;
&lt;p&gt;会社で作るツールなんだから仕事に直結したものでないと、と考えてしまいがちですが、初心者がそれをやると行き詰まることが多いです。&lt;/p&gt;
&lt;h3 id=&quot;経験が少ないと危険&quot;&gt;経験が少ないと危険&lt;/h3&gt;
&lt;p&gt;Power Platformの開発経験が少ないうちから本腰を入れてスタートしようとすると、高い確率で進めなくなるポイントにぶち当たります。&lt;/p&gt;
&lt;p&gt;エラーが解消できず、考え込み、開発画面を見ることすら嫌になります。&lt;/p&gt;
&lt;p&gt;近くに経験者がいればまだマシですが、自分1人でやろうとするとかなりハードルが高いです。&lt;/p&gt;
&lt;h3 id=&quot;実現可否の判断が難しい&quot;&gt;実現可否の判断が難しい&lt;/h3&gt;
&lt;p&gt;作りたいツールが果たしてPower Platformで実現できることなのか、判断するには経験が必要です。&lt;/p&gt;
&lt;p&gt;単純に自分の経験値が足りないのか、技術的にパワープラットフォームでは実現できないのか、その判断が難しくなります。&lt;/p&gt;
&lt;p&gt;これもやはり近くに経験者がいればすぐわかりますが、自分1人だと難しくなります。&lt;/p&gt;
&lt;p&gt;もし周りからこんな機能をつけられるかと相談を受けたとしても、経験不足が影響して答えるのも難しいでしょう。&lt;/p&gt;
&lt;h3 id=&quot;所要時間の見積もりが難しい&quot;&gt;所要時間の見積もりが難しい&lt;/h3&gt;
&lt;p&gt;目指すツールの開発にどれだけ時間を要するか、最初の段階では検討がつきません。&lt;/p&gt;
&lt;p&gt;これも開発経験を積む中で、おおよその時間がわかるようになります。&lt;/p&gt;
&lt;h3 id=&quot;応用を効かせづらい&quot;&gt;応用を効かせづらい&lt;/h3&gt;
&lt;p&gt;UdemyやYouTubeを見ながら作ったツールの場合、それを応用して自分の業務に使うのはいきなりだと難しいです。&lt;/p&gt;
&lt;p&gt;アプリの仕組みや動きを自分が理解して初めて応用できますので、たとえハンズオンで作ったアプリであっても、それをいきなり業務転用は考えないほうがいいです。&lt;/p&gt;
&lt;h2 id=&quot;シンプルなツールから学べること&quot;&gt;シンプルなツールから学べること&lt;/h2&gt;
&lt;p&gt;はじめは機能を限定した簡単なアプリやフローを作りましょう。&lt;/p&gt;
&lt;h3 id=&quot;操作の慣れ&quot;&gt;操作の慣れ&lt;/h3&gt;
&lt;p&gt;Power Platformの開発は、ウェブ上で専用のツールにアクセスして行います。&lt;/p&gt;
&lt;p&gt;その使い方はもちろんですが、操作方法に慣れる必要があります。&lt;/p&gt;
&lt;h3 id=&quot;関数の慣れ&quot;&gt;関数の慣れ&lt;/h3&gt;
&lt;p&gt;Power PlatformではPower Fxという専用の関数を使います。Excelに似た感じですが、ここでしか使わない独特なものも多くあり、シンプルなツールを通じて慣れることができます。&lt;/p&gt;
&lt;p&gt;Power Automateも同様で、まずは1〜2ステップの簡単なフローから作り始めることをおすすめします。Power Automateの基本的な使い方は&lt;a href=&quot;https://shiminkaihatsu.com/powerautomate-intro/&quot;&gt;Power Automate入門記事&lt;/a&gt;で解説しています。&lt;/p&gt;
&lt;h3 id=&quot;エラーの慣れ&quot;&gt;エラーの慣れ&lt;/h3&gt;
&lt;p&gt;エラーに慣れることができます。&lt;/p&gt;
&lt;p&gt;解決方法をネットで調べたり、AIを駆使して行くわけですが、最初は相当苦労することでしょう。&lt;/p&gt;
&lt;p&gt;それも数をこなして慣れていく必要があります。&lt;/p&gt;
&lt;p&gt;エラーを解消するほどスキルが自然に磨かれて、開発スピードが上がります。&lt;/p&gt;
&lt;h3 id=&quot;情報の取り方の慣れ&quot;&gt;情報の取り方の慣れ&lt;/h3&gt;
&lt;p&gt;わからないことを調べるうち、どこからどんな情報を取るべきかわかってきます。&lt;/p&gt;
&lt;p&gt;解決策は基本的にネット上にありますので、いかにそこに効率的かつ素早く到達できるかが鍵です。&lt;/p&gt;
&lt;p&gt;シンプルなツールの作成を通じて慣れていきましょう。&lt;/p&gt;
&lt;h3 id=&quot;新しいアイディアの発想&quot;&gt;新しいアイディアの発想&lt;/h3&gt;
&lt;p&gt;作成の数をこなしていくうち、新しいツールの発想に繋がることがあります。&lt;/p&gt;
&lt;p&gt;機能を使いまわしたり、より効率的な中身に差し替えたり、これらも経験を重ねる中で身につけることができます。&lt;/p&gt;
&lt;h3 id=&quot;小さな成功体験に繋がる&quot;&gt;小さな成功体験に繋がる&lt;/h3&gt;
&lt;p&gt;作成したツールが動くと単純に嬉しいです。&lt;/p&gt;
&lt;p&gt;ユーザーから感想をもらえればやる気に繋がりますし、さらに作りたくなるでしょう。&lt;/p&gt;
&lt;h2 id=&quot;シンプルなツールの例&quot;&gt;シンプルなツールの例&lt;/h2&gt;
&lt;p&gt;作成に慣れるためのシンプルツールの例を紹介します。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;アプリ名&lt;/th&gt;
&lt;th&gt;概要&lt;/th&gt;
&lt;th&gt;学べる機能&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;くじびきアプリ&lt;/td&gt;
&lt;td&gt;ボタンを押すとランダムに結果が表示されるアプリ&lt;/td&gt;
&lt;td&gt;ランダム関数、条件分岐、ボタンクリックのイベント&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;デジタルサイコロアプリ&lt;/td&gt;
&lt;td&gt;ボタンを押すとランダムにサイコロの目が表示されるアプリ&lt;/td&gt;
&lt;td&gt;乱数生成、UIコンポーネント、データ表示&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;フラッシュカードアプリ&lt;/td&gt;
&lt;td&gt;単語やフレーズを表示して記憶を助けるアプリ&lt;/td&gt;
&lt;td&gt;データの表示、ランダム化、暗記用ツール&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;単語帳アプリ&lt;/td&gt;
&lt;td&gt;単語とその意味を保存して学習するアプリ&lt;/td&gt;
&lt;td&gt;データ保存、検索機能、暗記支援&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;メモ帳アプリ&lt;/td&gt;
&lt;td&gt;簡単なメモを保存、編集、削除するアプリ&lt;/td&gt;
&lt;td&gt;データ保存、編集機能、ユーザー入力の処理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;シンプルな計算機&lt;/td&gt;
&lt;td&gt;数字と演算子を入力して計算結果を表示するアプリ&lt;/td&gt;
&lt;td&gt;計算ロジック、数式処理、リアルタイムデータ表示&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TODOリストアプリ&lt;/td&gt;
&lt;td&gt;タスクを追加、削除、完了状態にするアプリ&lt;/td&gt;
&lt;td&gt;データのCRUD操作、リスト表示、状態管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;カウントダウンタイマー&lt;/td&gt;
&lt;td&gt;指定した時間からカウントダウンするタイマーアプリ&lt;/td&gt;
&lt;td&gt;タイマー機能、時間の管理、ユーザーインタラクション&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;クイズアプリ&lt;/td&gt;
&lt;td&gt;クイズ形式で質問と回答を行うアプリ&lt;/td&gt;
&lt;td&gt;条件分岐、データ管理、インタラクティブなUI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;天気予報アプリ&lt;/td&gt;
&lt;td&gt;指定した地域の天気予報を表示するアプリ&lt;/td&gt;
&lt;td&gt;APIの使用、データ取得、外部データの表示&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;カレンダーアプリ&lt;/td&gt;
&lt;td&gt;イベントや予定をカレンダーに表示するアプリ&lt;/td&gt;
&lt;td&gt;日付操作、イベント管理、データの視覚化&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;買い物リストアプリ&lt;/td&gt;
&lt;td&gt;買い物リストを作成し、完了した項目をチェックするアプリ&lt;/td&gt;
&lt;td&gt;リスト操作、状態管理、CRUD操作&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;フィットネス追跡アプリ&lt;/td&gt;
&lt;td&gt;毎日の運動や活動を記録するアプリ&lt;/td&gt;
&lt;td&gt;データ入力、データ可視化、日次の記録管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;音楽プレイリストアプリ&lt;/td&gt;
&lt;td&gt;お気に入りの曲やプレイリストを管理するアプリ&lt;/td&gt;
&lt;td&gt;データ管理、リスト表示、CRUD操作&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;旅行計画アプリ&lt;/td&gt;
&lt;td&gt;旅行の計画や行程を管理するアプリ&lt;/td&gt;
&lt;td&gt;日付操作、イベント管理、データの視覚化&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;映画レビューアプリ&lt;/td&gt;
&lt;td&gt;映画のレビューや評価を記録するアプリ&lt;/td&gt;
&lt;td&gt;フォーム入力、評価システム、データ表示&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;アンケートアプリ&lt;/td&gt;
&lt;td&gt;質問と回答を入力して集計するアプリ&lt;/td&gt;
&lt;td&gt;フォームの作成、データ集計、ユーザーインタラクション&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;レシピ管理アプリ&lt;/td&gt;
&lt;td&gt;レシピを追加、閲覧、検索するアプリ&lt;/td&gt;
&lt;td&gt;データベースの利用、検索機能、フィルタリング&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;図書館管理アプリ&lt;/td&gt;
&lt;td&gt;借りた本や返却日を管理するアプリ&lt;/td&gt;
&lt;td&gt;データ管理、日付操作、通知機能&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;画像ギャラリー&lt;/td&gt;
&lt;td&gt;画像をアップロードしてギャラリーに表示するアプリ&lt;/td&gt;
&lt;td&gt;ファイルアップロード、データ表示、画像処理&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;興味があるものから作ってみることをおすすめします。&lt;/p&gt;
&lt;p&gt;少し手を出して、難しそうであれば違うアプリに挑戦します。&lt;/p&gt;
&lt;p&gt;はじめのうちは、とにかく手を動かして作成に慣れることが大事ですので、数をこなすようにしましょう。&lt;/p&gt;
&lt;h2 id=&quot;power-appsとpower-automateを組み合わせる&quot;&gt;Power AppsとPower Automateを組み合わせる&lt;/h2&gt;
&lt;p&gt;Power Appsでアプリに慣れてきたら、次のステップはPower Automateとの連携です。アプリのボタンを押したらTeamsに通知を送る、データを保存したらメールを送る、といった連携が実現できます。&lt;/p&gt;
&lt;p&gt;Power AppsからPower Automateのフローを呼び出す方法については、&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-powerautomate/&quot;&gt;Power AppsからPower Automateを呼び出す記事&lt;/a&gt;で詳しく解説しています。シンプルなアプリを作った後の次のステップとして、ぜひ試してみてください。&lt;/p&gt;
&lt;h2 id=&quot;小さな成功で経験を積む&quot;&gt;小さな成功で経験を積む&lt;/h2&gt;
&lt;p&gt;1度でもアプリを作ることができれば、後の開発で必ず役に立つ時が来ます。&lt;/p&gt;
&lt;p&gt;たとえ今は業務に関係ないものに見えたとしても、あの時やっておいてよかったなと思える時が来るでしょう。&lt;/p&gt;
&lt;p&gt;開発に慣れてくると、初期に開発した自分のアプリのレベルの低さに驚くことがあります。&lt;/p&gt;
&lt;p&gt;それも自分が成長している証拠ですので、良いように捉えて、楽しみながら開発を進めましょう。&lt;/p&gt;
&lt;p&gt;Power Apps開発全体の学習ロードマップについては、Power Apps開発の全体マップ記事で整理しています。シンプルなアプリからスタートして、少しずつステップアップしていきましょう。&lt;/p&gt;</content:encoded></item><item><title>SharePointリストとMicrosoft Lists。市民開発ならSharePointリストがおすすめ</title><link>https://shiminkaihatsu.com/splist_mslist/</link><guid isPermaLink="true">https://shiminkaihatsu.com/splist_mslist/</guid><description>SharePointリストとMicrosoft Lists。市民開発ならSharePointリストがおすすめ</description><pubDate>Sat, 03 Aug 2024 09:21:55 GMT</pubDate><content:encoded>&lt;p&gt;Power AppsやPower Automateのデータソースとして使う、SharePointリストとMicrosoft Listsの違いを整理します。&lt;/p&gt;
&lt;p&gt;どちらを使うか迷った場合は、個人的にはSharePointリストがおすすめです。その理由をこの記事で解説します。&lt;/p&gt;
&lt;h2 id=&quot;機能に根本的な違いはない&quot;&gt;機能に根本的な違いはない&lt;/h2&gt;
&lt;p&gt;SharePointリストとMicrosoft Listsに、機能的な大きな違いはありません。どちらもデータソースとして使えますし、見た目の違いもほとんどありません。&lt;/p&gt;
&lt;p&gt;では何が違いなのかといえば、アクセス権の管理の方法です。&lt;/p&gt;
&lt;h2 id=&quot;アクセス権の違い&quot;&gt;アクセス権の違い&lt;/h2&gt;
&lt;p&gt;まずSharePointリストは、特定のSharePointサイトの中に作成されます。サイトにアクセス権のあるメンバーであれば、基本的に誰でも編集権限を持っています。&lt;/p&gt;
&lt;p&gt;一方のMicrosoft Listsは、作成者のOneDrive (for Business)の中に作成されます。アクセス権は基本的に作成者にしかなく、明示的に共有しない限り他人がアクセスすることはできず、URLを知られる心配もありません。&lt;/p&gt;
&lt;p&gt;SharePointリストを使って開発する人の多くは、この誰でも編集権限がある状態を嫌います。これはSharePointサイトとリストの構造上、そういうものだと割り切るしかありません。（もし組織のポリシー上でサイトのアクセス権限を自由に変更できるのであれば対応策は存在します）&lt;/p&gt;
&lt;p&gt;ですので、アクセス権を自由に設定できるMicrosoft Listsをデータベースとすれば、Listsごとにアクセス権を設定し、データの改変を防ぐことができるわけです。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;SharePointリスト&lt;/th&gt;
&lt;th&gt;Microsoft Lists&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;機能の違い&lt;/td&gt;
&lt;td&gt;なし&lt;/td&gt;
&lt;td&gt;なし&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;見た目の違い&lt;/td&gt;
&lt;td&gt;なし&lt;/td&gt;
&lt;td&gt;なし&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;編集権限&lt;/td&gt;
&lt;td&gt;サイトメンバー全員あり&lt;/td&gt;
&lt;td&gt;自分のみ&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;格納場所&lt;/td&gt;
&lt;td&gt;SharePointサイト&lt;/td&gt;
&lt;td&gt;OneDrive(for Business)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;しかしMicrosoft Listsは、後々ユーザー管理の煩雑さがネックになってくると思われます。&lt;/p&gt;
&lt;h2 id=&quot;microsoft-listsは数が増えると管理が大変&quot;&gt;Microsoft Listsは数が増えると管理が大変&lt;/h2&gt;
&lt;p&gt;市民開発が進み、アプリもユーザーも増えてくると、ユーザー増減時のMicrosoft Listsのアクセス権管理が大変です。&lt;/p&gt;
&lt;p&gt;Microsoft Listsが1つ2つならまだいいですが、アプリが増えていくにつれてListsも増えていきます。新しいメンバーが増えるたびに、すべてのListsにアクセス権を付与しなければならず、メンバーが抜けるたびに全部のListsから権限を削除する必要があります。&lt;/p&gt;
&lt;p&gt;個人的には、このユーザー管理の手間を考えるとSharePointリストのほうが長期的な運用に向いていると感じています。SharePointサイトのメンバー管理だけで一括管理できるからです。&lt;/p&gt;
&lt;h2 id=&quot;リストのアクセス権を変更するには&quot;&gt;リストのアクセス権を変更するには&lt;/h2&gt;
&lt;p&gt;どうしてもSharePointリストのアクセス権を変更したい場合、以下の手順で対応できます。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;STEP1&lt;/p&gt;
&lt;p&gt;アクセス許可の管理を開く&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/sharepoint-rec01-1.CuAXG0Vz_Z2rHxox.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;630&quot;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;STEP2&lt;/p&gt;
&lt;p&gt;ユーザー、またはグループどちらかでアクセス権を変更する&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;STEP3&lt;/p&gt;
&lt;p&gt;アクセス権の変更完了&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;この順番でやればリストごとのアクセス権を変更できます。&lt;/p&gt;
&lt;p&gt;このやり方のデメリットは大きく2つあります。&lt;/p&gt;
&lt;h3 id=&quot;1-アプリからも編集できなくなってしまう&quot;&gt;1. アプリからも編集できなくなってしまう&lt;/h3&gt;
&lt;p&gt;編集権限を制限すれば、当然アプリやPower Automateのデータソースとして使うことができなくなります。閲覧のみ可能とすれば、ツールの用途によってはそれで事足りるかもしれません。&lt;/p&gt;
&lt;p&gt;しかし閲覧するにしても、リストの保存場所を知られていると直接リストにアクセスされ、中身全部を閲覧されてしまいます（編集はできませんが）。&lt;/p&gt;
&lt;h3 id=&quot;2-アクセス権の管理が大変&quot;&gt;2. アクセス権の管理が大変&lt;/h3&gt;
&lt;p&gt;サイト内のリストが増えると、アクセス権の管理が煩雑になってしまいます。Microsoft Listsの管理よりかは幾分ラクかもしれませんが、人が変われば面倒に感じてくるかもしれません。&lt;/p&gt;
&lt;p&gt;以上の2つの理由から、リストのアクセス権を変更するのは個人的にあまりおすすめしません。企業によっては、リストのアクセス権を変更してはならないと決められている可能性もあります（私が所属する会社はそうです）。&lt;/p&gt;
&lt;h2 id=&quot;開発専用のsharepointサイトを使う&quot;&gt;開発専用のSharePointサイトを使う&lt;/h2&gt;
&lt;p&gt;アクセス権の問題を解消するおすすめの方法は、開発専用SharePointサイトを使うことです。アプリ開発に使うリストを専用サイトに集約し、そのサイトへのアクセス権を持つメンバーのみがデータを扱える環境を作ります。&lt;/p&gt;
&lt;p&gt;この方法であれば、サイトメンバーの増減管理だけで対応できます。委任問題や5,000件の上限については別途考慮が必要ですが、アクセス権管理の煩雑さからは解放されます。&lt;/p&gt;
&lt;p&gt;ただし1つ注意点があります。Teamsを使うと、チャネル-ファイル-三点リーダーから辿ることでSharePointサイトにアクセスできてしまいます。&lt;/p&gt;
&lt;p&gt;&lt;img src alt/&gt;&lt;/p&gt;
&lt;p&gt;この方法でサイトの所在を知られてしまう&lt;/p&gt;
&lt;p&gt;このTeamsの問題を解消するには、もう1つ別にSharePointサイトを作成し、そちらにも開発サイトと同じメンバーを登録し、そこでTeamsを使います。メンバー増減時の手間は増えますが、こうすれば開発サイトとコミュニケーションサイトを分離し、データソースへのアクセスを限りなく隠したまま進められるでしょう。&lt;/p&gt;
&lt;p&gt;SharePoint ListsとPower Appsを使ったデータの読み書き（追加・更新・削除）の具体的な実装方法については、&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-sharepoint-crud/&quot;&gt;Power AppsでSharePointリストのデータを読み書きする記事&lt;/a&gt;で詳しく解説しています。あわせて参考にしてください。&lt;/p&gt;
&lt;p&gt;また、フォームコントロールを使ったデータ入力・編集については、&lt;a href=&quot;https://shiminkaihatsu.com/powerapps-form-basics/&quot;&gt;Power AppsのEditForm・NewForm・DisplayFormの記事&lt;/a&gt;も参考になります。&lt;/p&gt;
&lt;h2 id=&quot;dataverseを使う&quot;&gt;Dataverseを使う&lt;/h2&gt;
&lt;p&gt;Dataverseであればデータソースへのアクセス管理を細かく設定できます。SharePointリストのように頭を悩ませる必要はありませんし、Dataverseを利用できる環境であれば迷わず使用することをおすすめします。&lt;/p&gt;
&lt;p&gt;ただし、Dataverseはプレミアムライセンスが必要で追加費用がかかります。また委任問題がないなどの利点はある一方、使いこなすための学習コストも高いです。まずはSharePoint Listsから始め、要件に応じてDataverseへの移行を検討するというのが現実的なステップだと思っています。&lt;/p&gt;
&lt;p&gt;Power Apps全体のデータソース選びや開発の全体マップについては、Power Apps開発の全体マップ記事でまとめて解説しています。あわせて参考にしてください。&lt;/p&gt;</content:encoded></item></channel></rss>