はじめに
Power Appsは、社内での申請業務やデータ登録など、さまざまな業務運用を目的として利用されます。
業務アプリを作成する際に、「特定の時間内のみ操作可能にし、期間外は操作不可にしたい」といった機能が必要になることがあります。
そこで本記事では、操作可能時間帯(7:00〜17:00)を条件にボタンやテキストの制御を自動で切り替える実装方法を紹介します。
本記事の内容は2026年3月20日時点の情報です。UIや仕様は今後変更される可能性があります。
1.実装内容の概要
Power Appsで現在の時刻を条件として、以下の制御機能を実施する方法を紹介します。
・操作可能時間帯(7:00〜17:00)以外は、ボタンを無効化する
・操作可能時間帯以外の時間は、操作が制限されている旨のメッセージを表示する
今回の実装における処理の全体像と最終的な完成イメージは以下になります。
<処理の全体像>
1. 操作可能時間帯(開始/終了時刻)を定義する
2. 現在時刻をリアルタイムで取得する
3. 操作可能時間帯の期間内かを判定し、コントロールの制御を切り替える
<操作可能時間帯(7:00〜17:00)の場合>

<操作可能時間帯外の場合>

2.事前準備
まず事前準備として、新規作成等の「ボタン」や操作可能時間帯に関する「テキスト」のコントロールを時間制御の対象とするため、あらかじめ該当するコントロールを配置しておきます。

3.設定手順 : 操作可能時間帯(開始/終了時刻)を定義する
最初に、操作可能時間帯(開始/終了時刻)を定義します。
時間帯はアプリ全体で共通にするため、アプリの「Onstart」プロパティに以下の式を設定します。

Set(OperationStartTime, Time(7, 0, 0));
Set(OperationEndTime, Time(17, 0, 0));
これで、以下のように開始時刻と終了時刻を定義する変数の設定が完了しました。
OperationStartTime:7時00分00秒
OperationEndTime:17時00分00秒
4.設定手順 : 現在時刻をリアルタイムで取得する
次に、Power Apps上で現在時刻を取得する設定を行います。
まず画面上にリアルタイムで時間を表示するための「テキストコントロール」と「タイマーコントロール」を配置します。

Power Appsでは、Now関数を利用して現在の時間を取得できますが、
取得できるのは「画面を開いた時点の時間」のみであり、時間の経過に応じて自動的に更新されることはありません。
そのため、タイマーコントロールを利用して、リアルタイムで現在の時間を更新できるようにします。
タイマーコントロールは、一定の時間が経過した後のアプリの動作を制御できるコントロールです。
ここでは1秒ごとに現在の時刻を取得するよう設定を行います。
まずは、本設定で使用する主要なプロパティについて説明します。
| プロパティ | 説明 |
|---|---|
| Duration | タイマーの実行期間を設定します (ミリ秒単位)。
例えば1秒ごとに処理を実行したい場合は「1000」と設定します。 既定値:60000(60秒)。 |
| Repeat | タイマーの実行完了後、タイマーが自動的に再起動するかどうかを設定します。 |
| AutoStart | ユーザーがタイマーコントロールを含む画面に移動したときに、
タイマーコントロールの再生が自動的に開始されるかどうかを設定します。 |
| OnTimerEnd | タイマーの実行が完了したときに実行する処理を設定します。 |
・Duration:1000
・Repeat:True
・AutoStart:True
・OnTimerEnd:以下の式を設定。
Set(CurrentTime,Now());
OnTimerEndに設定した処理は、指定した期間が経過する度に実行されるため、
本設定では、1秒経過ごとに現在の時間を取得し、変数CurrentTimeに代入します。
また、画面の初期表示時にも現在の時間を表示する必要があるため、画面の「OnVisible」にも同じ式Set(CurrentTime,Now());を設定しておきます。
これで、現在時刻を取得する機能が実装できました。
実際の運用を想定し、アプリの利用ユーザーに時間を表示させるため、
先ほど用意したテキストコントロールの「Text」プロパティに以下の式を設定します。
Text(CurrentTime, "hh:mm:ss")
また、タイマーコントロールは、あくまで内部処理用に配置したため、
「Visible」プロパティをFalseに設定し、非表示にします。

5.設定手順 : 操作可能時間帯の期間内かを判定し、コントロールの制御を切り替える
最後に、取得した現在時刻が、定義した操作可能時間帯の期間内かを判定し、各コントロールの制御を切り替える設定を行います。
「新規作成・編集・削除」のボタンを期間外で無効化する設定にしたいので、
各ボタンの「DisplayMode」プロパティに以下の式を設定します。
If(
TimeValue(CurrentTime) >= OperationStartTime
&& TimeValue(CurrentTime) <= OperationEndTime,
DisplayMode.Edit,
DisplayMode.Disabled
)
次に、操作が制限されている旨を表示する「テキスト」は、指定した時間で表示・非表示を切り替えたいので、「Visible」プロパティに以下の式を設定します。
If(
TimeValue(CurrentTime) >= OperationStartTime
&& TimeValue(CurrentTime) <= OperationEndTime,
false,
true
)
これで、期間外では、「ボタン」が無効化され、テキストが表示されるよう設定できました。
6.動作確認
これでPower Appsの設定は完了しましたので、実際に動作確認を行います。
ここでは、時間ごとで制御の切り替えが正しく反映されているかを確認します。
本設定では、時刻が7:00~17:00の場合は、「ボタンが有効化・テキストは非表示」になります。
<6:00の場合>

<7:00の場合>

<12:00の場合>

<17:00の場合>

<18:00の場合>

7.Appendix : 時間帯制御を一時的に無効化する例外設定
今回は、操作可能時間帯を条件に、ボタンやテキストの状態を自動的に切り替える実装方法を紹介しました。
しかし、業務によっては、時間帯制御を一時的に無効化したい場合があります。
補足として、Power Apps上のボタン操作で時間帯制御を有効/無効に切り替えられる方法を簡単に紹介します。
実装方法としては、これまでの設定をベースにして、追加で制御無効化用のフラグを追加し、ボタン押下でフラグを切り替えます。
本設定を追加する場合は、運用ルールに影響するため、例えば切替ボタンを管理者等の限定ユーザーのみに表示/操作を許可するなどで制御をかけることを推奨します。
まずは、「OnStart」プロパティに以下のように、制御無効化フラグ(OperationFlag)の式を追加し、アプリ起動時のフラグは「OFF」に設定しておきます。
Set(OperationFlag,0);
Set(OperationStartTime,Time(7,0,0));
Set(OperationEndTime,Time(17,00,0));
※OperationFlag は0 を通常モード(時間帯制御あり)、1 を例外モード(時間帯制御なし)として扱っています。
次に、フラグを切り替えるためのボタンを配置し、「OnSelect」プロパティに以下の式を設定します。
これにより、ボタン押下でモードを切り替えることができます。
Set(OperationFlag, If(OperationFlag = 1, 0, 1));
最後に、制御対象のボタンの「DisplayMode」プロパティを以下のように変更します。
これで、「例外モード」か「時間帯内」のとき、ボタンが有効化されます。
If(
OperationFlag = 1
||(TimeValue(CurrentTime) >= OperationStartTime
&& TimeValue(CurrentTime) <= OperationEndTime),
DisplayMode.Edit,
DisplayMode.Disabled
)
実際の画面は以下のようになります。
※分かりやすいように「編集ボタン」のみ上記の式に変更しました。
<通常モード(時間帯制御あり)>

<例外モード(時間帯制御なし)>

このように、例外モードの時だけ、「編集ボタン」が有効化されていることが確認できます。
まとめ
今回はPower Appsで操作可能時間帯を条件に、ボタンやテキストの状態を自動で切り替える機能の実装方法を紹介しました。
この機能は、受付時間外の申請停止や締切後の登録防止などの業務ルールに反映したい場面で活用できます。
また、本機能実装のためにタイマーコントロールを使って現在時刻を定期的に更新し、時間条件をリアルタイムで反映できるようにしました。
タイマーコントロールの詳細を確認したい場合は、以下公式ドキュメントをご確認ください。
最後に
テンダでは、「こんなプロジェクトに挑戦したい」「こんなチームで働きたい」「理想のチームを創りたい」と願う仲間を求めています。
カジュアル面談も随時受付中です。ぜひ一度お話ししましょう!🔆