Visual Basic や JavaScript などの別のプログラミング ツールを使用している場合は、 変数はどこにありますか? Power Apps の動作は異なり、別のアプローチが必要です。 キャンバス アプリをビルドする際に、変数の説明に進む代わりに、Excel で何をしようとしているか? を考えます。
他のツールでは、計算を明示的に実行し、結果を変数に格納できます。 ただし、Power Apps と Excel では、入力データの変更に応じて数式が自動的に再計算されるため、通常は変数を作成または更新する必要はありません。 この方法を使用すると、アプリをより簡単に作成、理解、管理できます。
場合によっては、Power Apps で変数を使用する必要があります。これにより、 動作式を追加することで Excel のモデルが拡張されます。 これらの計算式が実行されるのは、ユーザーがボタンを選択したときなどです。 動作式内では、多くの場合、他の数式で使用する変数を設定すると便利です。
一般的には、変数の使用を避けてください。 ただし、必要なエクスペリエンスを作成できるのは変数だけです。 変数は、値を設定する関数に表示されるとき、暗黙的に作成および型指定されます。
Excel を Power Apps に変換する
Excel
それでは、Excel のしくみを確認しましょう。 セルには、数値や文字列などの値、または他のセルの値に基づく数式を含めることができます。 セルに別の値を入力すると、新しい値に依存する数式が自動的に再計算されます。 この動作を有効にするためにプログラミングを行う必要はありません。
次の例では、セル A3 で数式 A1+A2 が使用されています。 A1 または A2 が変更されると、A3 は自動的に再計算され、変更が表示されます。 この動作では、数式自体の外部でコーディングする必要はありません。
Excel には変数がありません。 数式を含むセルの値は入力に基づいて変化しますが、数式の結果を記憶してセルやその他の場所に格納する方法はありません。 セルの値を変更すると、スプレッドシート全体が変更される可能性があり、以前に計算された値はすべて失われます。 セルをコピーして貼り付けることもできますが、手動で数式を使用することはできません。
Power Apps
Power Apps で作成するアプリは、Excel とよく似ています。 セルを更新する代わりに、画面上の任意の場所にコントロールを追加し、数式で使用する名前を付けます。
たとえば、Label1 という名前のラベル コントロールと TextInput1 と TextInput2 という名前の 2 つのテキスト入力コントロールを追加することで、アプリで Excel の動作をコピーできます。 Label1 の Text プロパティを TextInput1 + TextInput2 に設定すると、TextInput1 と TextInput2 の数値の合計が常に自動的に表示されます。
ラベル1 コントロールが選択されていて、テキスト 式が画面上部の数式バーに表示されていることに注意してください。 数式 TextInput1 + TextInput2 は、Excel ブック内のセル間の依存関係と同様に、これらのコントロール間の依存関係を作成します。 TextInput1 の値を変更してみましょう。
Label1 の数式は自動的に再計算され、新しい値が表示されます。
Power Apps では、数式を使用して、コントロールのメイン値だけでなく、書式設定などのプロパティも設定します。 次の例では、ラベルの Color プロパティの数式に負の値が赤で自動的に表示されます。 If 関数は Excel で使い慣れているように見えます。
If( Value(Label1.Text) < 0, Red, Black )
数式は多くのシナリオで使用します。
- デバイスの GPS がオンの場合、マップ コントロールには 、Location.Latitude と Location.Longitude を使用する数式で現在 の場所が表示されます。 移動すると、マップによって位置が自動的に追跡されます。
- 他のユーザーが データ ソースを更新します。 たとえば、チームの他のメンバーがリスト内の項目を更新する場合があります。 データ ソースを更新すると、依存する数式が自動的に再計算され、更新されたデータが表示されます。 たとえば、ギャラリーの Items プロパティを数式 Filter( SharePointList) に設定すると、新しくフィルター処理された レコードのセットが自動的に表示されます。
給付金
計算式を使用するアプリの作成には多くの利点があります。
- Excel を知っていれば Power Apps もわかります。 モデルと計算式の言語は同じです。
- 他のプログラミング ツールを使用したことがある場合は、これらの例を実行する必要があるコードの量を検討してください。 Visual Basic では、各テキスト入力コントロールに変更イベントのイベント ハンドラーを記述します。 それぞれの計算を行うコードは冗長であり、同期が失われる可能性があります。または、共通のサブルーチンを記述する必要があります。 Power Apps では、すべての操作を 1 行の数式で行います。
- Label1 のテキストの取得元を確認するには、Text プロパティの数式を正確に確認できます。 このコントロールのテキストを変更する他の方法はありません。 従来のプログラミング ツールでは、イベント ハンドラーまたはサブルーチンは、プログラム内のどこからでもラベルの値を変更できます。 これにより、変数がいつどこで変更されたかを追跡するのが困難になります。
- スライダー コントロールを変更し、考えを変える場合は、スライダーを元の値に戻すことができます。 何も変わっていないかのように、アプリは以前と同じコントロール値を表示します。 Excel と同様に、実験や "what if" の質問に影響はありません。
一般に、数式を使用して何かを行うことができる場合、その方が望ましいです。 Power Apps の計算式エンジンをうまく利用しましょう。
変数を使用するタイミングを把握する
単純な加算器を、累積合計を持つ昔ながらの加算機のように動くように変更しましょう。 [ 追加 ] ボタンを選択すると、実行中の合計に数値が追加されます。 [クリア] ボタンを選択すると、実行中の合計が 0 にリセットされます。
表示 | 説明 |
---|---|
![]() |
アプリが起動すると、累計は 0 になります。 赤い点は、ユーザーが 77 を入力したテキスト入力ボックス内のユーザーの指を表します。 |
![]() |
ユーザーは追加ボタンを選択します。 |
![]() |
累計に 77 が追加されます。 ユーザーは追加ボタンを選択します。 |
![]() |
77 が累計に再び追加され、結果は154 になります。 ユーザーはクリア ボタンを選択します。 |
![]() |
累計は 0 にリセットされます。 |
ここで作成する計算機では、Excel に存在しない機能であるボタンを使用しています。 このアプリでは、値はユーザーが行う一連の操作によって異なるので、計算式だけを使用して累計を計算することはできません。 代わりに、実行中の合計を手動で記録して更新します。 ほとんどのプログラミング ツールでは、この情報を変数に格納します。
アプリの動作に必要な変数が必要な場合もありますが、この方法には注意が必要です。
- 実行中の合計を手動で更新します。 自動再計算では十分ではありません。
- 実行中の合計は、他のコントロールの値に基づいて計算されません。 これは、ユーザーが [ 追加 ] ボタンを選択した回数と、毎回テキスト入力コントロールに含まれる値によって異なります。 ユーザーは「77」と入力し、[ 追加] を 2 回選択したか、追加ごとに 24 と 130 と入力しましたか? 合計が 154 に達した後に違いを見分けることはできません。
- 合計に対する変更は、さまざまなアクションから行うことができます。 この例では、[ 追加 ] ボタンと [クリア ] ボタンの両方で合計が更新されます。 アプリが期待どおりに動作しない場合、問題の原因となるボタンはどれですか?
グローバル変数を使用する
追加マシンを作成するには、実行中の合計を保持する変数が必要です。 Power Apps で使用する最も簡単な変数は グローバル変数です。
グローバル変数は次のように機能します。
- Set 関数を使用してグローバル変数の値を 設定 します。 Set( MyVar, 1 ) では、グローバル変数 MyVar の値を 1 に設定します。
- Set 関数で使用される名前を参照して、グローバル変数を使用します。 この場合、 MyVar は 1 を返します。
- グローバル変数は、文字列、数値、レコード、テーブル など、すべての値を保持できます。
グローバル変数を使用して、追加するマシンを再構築します。
TextInput1 という名前のテキスト入力コントロールと、Button1 と Button2 という名前の 2 つのボタンを追加します。
ボタン1 の Text プロパティを「Add」に設定し、ボタン2 の Text プロパティをClearに設定します。
ユーザーが [追加 ] ボタンを選択したときに実行合計を更新するには、 OnSelect プロパティを次の数式に設定します。
Set( RunningTotal, RunningTotal + TextInput1 )
この数式は、演算子のために数値を保持するグローバル変数として + を作成します。 アプリ内の任意の場所で RunningTotal を参照します。 ユーザーがアプリを開くと、 RunningTotal の初期値は 空白になります。
ユーザーが初めて [追加 ] ボタンを選択して 実行を設定 すると、 RunningTotal は RunningTotal + TextInput1 の値に設定されます。
ユーザーが [クリア] ボタンを選択したときに実行合計を 0 に設定するには、OnSelect プロパティを次の式に設定します。
Set( RunningTotal, 0 )
ラベル コントロールを追加し、Text プロパティを RunningTotal に設定します。
この数式は自動的に再計算され、ユーザーが選択したボタンに基づいて変化する RunningTotal の値がユーザーに表示されます。
アプリをプレビューします。 テキスト ボックスに数値を入力し、[ 追加 ] ボタンを数回選択します。 準備ができたら、 Esc キーを使用して作成エクスペリエンスに戻ります。
グローバル変数の値を表示するには、アプリ作成メニューの 変数 を選択します。
変数がどこで定義され使用されているかを表示するには、グローバル変数の下で、その変数を選択します。
変数の種類
Power Apps には 3 種類の変数があります。
変数型 | Scope | 説明 | 確立する関数 |
---|---|---|---|
グローバル変数 | アプリ | グローバル変数を使用して、アプリ内の任意の場所で参照する数値、テキスト文字列、ブール値、レコード、テーブル、またはその他の値を保持します。 | 設定 |
コンテキスト変数 | 画面 | コンテキスト変数を使用して、他の言語のパラメーターのように画面に値を渡します。 1 つの画面からのみ参照できます。 |
UpdateContext Navigate |
コレクション | アプリ | コレクションを使用して、アプリ内の任意の場所で参照するテーブルを保持します。 テーブルの内容を変更し、後で使用できるようにローカル デバイスに保存できます。 |
Collect ClearCollect |
変数の作成と削除
変数は、 Set、 UpdateContext、 Navigate、 Collect、または ClearCollect 関数に表示されるときに暗黙的に作成されます。 変数とその型を宣言するには、アプリ内の任意の場所にあるこれらの関数のいずれかに変数を含めます。 これらの関数は変数を作成しません。変数には値のみが入力されます。 別のプログラミング ツールのように変数を明示的に宣言することは決してなく、すべての型指定は使用法から暗黙的に行われます。
たとえば OnSelect 式が Set( X, 1 ) と等しいボタン コントロールがあるとします。 この計算式は、数値型の変数として X を確立します。 数式では X を数値として使用します。アプリを開いた後、ボタンを選択する前に、その変数の値は 空白 になります。 ボタンを選択すると、X の値は 1 になります。
別のボタンを追加し、その OnSelect プロパティを Set( X, "Hello" ) に設定すると、型 (テキスト文字列) が前の Set (数値) の型と一致しないため、エラーが発生します。 変数のすべての暗黙的な定義は、型に同意する必要があります。 ここでも、これらの数式のいずれかが実際に実行されるのではなく、数式で X を言及しているために発生します。
変数を暗黙的に確立するすべての Set、 UpdateContext、 Navigate、 Collect、 ClearCollect 関数を削除して、変数を削除します。 これらの関数がない場合、変数は存在しません。 また、エラーが発生するため、変数への参照も削除します。
変数の有効期間と初期値
アプリの実行中、変数はメモリ内に残ります。 アプリが閉じると、変数の値は失われます。
Patch 関数または Collect 関数を使用して、変数の内容をデータ ソースに格納します。 SaveData 関数を使用して、ローカル デバイスのコレクションに値を格納します。
ユーザーがアプリを開くと、すべての変数は初期値が空白で始 まります。
変数の読み取り
変数の名前を使用して値を読み取ります。 たとえば、次の数式を使用して変数を定義します。
Set( Radius, 12 )
次に、数値を使用する任意の場所で Radius を使用し、 12 に置き換えます。
Pi() * Power( Radius, 2 )
コンテキスト変数にグローバル変数またはコレクションと同じ名前を付けると、コンテキスト変数が優先されます。 グローバル変数またはコレクションは、あいまいさを解消する演算子[@Radius] を使用して参照できます。
予約済み変数名
次の変数名は使用しないでください。 これらの名前はアプリのプロパティであり、それらを使用すると変数名の競合が発生し、予期しないアプリの動作が発生する可能性があります。
- ActiveScreen
- DesignHeight
- DesignWidth
- Height
- MinScreenHeight
- MinScreenWidth
- SizeBreakpoints
- StudioVersion
- TestCaseId
- Testing
- TestSuiteId
- Theme
- Width
コンテキスト変数を使用する
グローバル変数ではなくコンテキスト変数を使用して、追加マシンを作成する方法を見てみましょう。
コンテキスト変数のしくみ
- コンテキスト変数を暗黙的に確立および設定するには、UpdateContext 関数または Navigate 関数を使用します。 アプリが起動すると、各コンテキスト変数の初期値は 空白になります。
- コンテキスト変数は、レコードを使用して更新します。 他のプログラミング ツールでは、通常、"x = 1" のように割り当てに "=" を使用します。 コンテキスト変数の場合は、代わりに { x: 1 } を使用します。 コンテキスト変数を使用する場合は、レコード構文なしで直接その名前を使用します。
- Navigate 関数を使用して画面を表示する場合は、コンテキスト変数を設定することもできます。 画面をプロシージャやサブルーチンの一種と考える場合、このアプローチは他のプログラミング ツールでパラメーターを渡すようなものです。
- Navigate を除き、コンテキスト変数は、名前を取得する場所である単一の画面のコンテキストに制限されます。 このコンテキストの外部で使用または設定することはできません。
- コンテキスト変数では、文字列、数値、レコード、テーブル など、任意の値を保持できます。
コンテキスト変数を使用して、追加するマシンを再構築します。
TextInput1 という名前のテキスト入力コントロールと、Button1 および Button2 という名前の 2 つのボタンを追加します。
ボタン1 の Text プロパティを「Add」に設定し、ボタン2 の Text プロパティをClearに設定します。
ユーザーが追加ボタンを選択して累計を更新するために、OnSelect プロパティを次の計算式に設定します。
UpdateContext( { RunningTotal: RunningTotal + TextInput1 } )
この数式は、演算子のために数値を保持するコンテキスト変数として + を確立します。 この画面の任意の場所で RunningTotal を参照します。 ユーザーがアプリを開くと、 RunningTotal の初期値は 空白になります。
ユーザーが初めて [追加 ] ボタンを選択して UpdateContext を実行すると、 RunningTotal は RunningTotal + TextInput1 の値に設定されます。
ユーザーがクリア ボタンを選択して累計を 0 に設定するために、OnSelect プロパティを次の計算式に設定します。
UpdateContext( { RunningTotal: 0 } )
ここでも、UpdateContext( { RunningTotal: 0 } ) という数式で UpdateContext を使用します。
ラベル コントロールを追加し、Text プロパティを RunningTotal に設定します。
この計算式は自動的に再計算され、ユーザーが選択したボタンに基づいて変更される RunningTotal の値が表示されます。
アプリをプレビューします。 テキスト ボックスに数値を入力し、[ 追加 ] ボタンを数回選択します。 準備ができたら、 Esc キーを使用して作成エクスペリエンスに戻ります。
画面に移動するときにコンテキスト変数の値を設定して、ある画面から別の画面に "context" または "parameters" を渡します。 このテクニックを説明するには、画面を挿入し、ボタンを挿入して、OnSelect プロパティをこの計算式に設定します。
Navigate( Screen1, None, { RunningTotal: -1000 } )
Alt キーを押しながらこのボタンを選択すると、Screen1 が表示され、コンテキスト変数 RunningTotal が -1000 に設定されます。
コンテキスト変数の値を表示するには、次のいずれかの操作を実行します。
プレビュー バージョンの Power Apps Studio を使用している場合、アプリの作成メニューの変数を選択します。
クラシック バージョンの Power Apps Studio を使用している場合は、[ ファイル ] メニューを選択し、左側のウィンドウで [変数 ] を選択します。
コンテキスト変数が定義され使用される場所を表示するには、コンテキスト変数の下で、その変数を選択します。
コレクションの使用
コレクションを使用して、追加するマシンを作成してみましょう。 コレクションには簡単に変更できるテーブルが含まれているため、この追加マシンでは、入力時に各値の "紙テープ" が保持されます。
コレクションのしくみ
- コレクションを作成および設定するには、ClearCollect 関数を使用します。 代わりに Collect 関数を使用できますが、古い変数を置き換える代わりに別の変数が必要です。
- コレクションは、データ ソースとテーブルの一種です。 コレクション内の 1 つの値を取得するには、 First 関数を使用し、結果のレコードから 1 つのフィールドを取得します。
ClearCollect で 1 つの値を使用する場合は、次の例のように [値] フィールドになります。
First(VariableName).Value
コレクションを使用して追加マシンを作成します。
TextInput1 という名前のテキスト入力 コントロールと、ボタン1 および ボタン2 という名前の 2 つのボタンを追加します。
ボタン1 の Text プロパティを「Add」に設定し、ボタン2 の Text プロパティをClearに設定します。
ユーザーが追加ボタンを選択して累計を更新するために、OnSelect プロパティを次の計算式に設定します。
Collect( PaperTape, TextInput1.Text )
この計算式が単に存在する場合、 PaperTape をテキスト文字列の単一列テーブルを保持するコレクションとして確立します。 PaperTape をこのアプリの任意の場所で参照できます。 ユーザーがこのアプリを開くたびに、PaperTape は空のテーブルになります。
この計算式を実行すると、コレクションの末尾に新しい値が追加されます。 1 つの値を追加しているため、Collect によってその値は単一列テーブルに自動的に配置され、 列の名前は Value になります。この値は後で使用します。
ユーザーが クリア ボタンを選択したときに紙テープを消去するには、OnSelect プロパティを次の計算式に設定します。
Clear( PaperTape )

計算機を実行するために、F5 キーを押してプレビューを開き、テキスト入力コントロールに数値を入力して、ボタンを選択します。
既定のワークスペースに戻すには、[Esc] を選択 します。
紙テープを表示するには、 データ テーブル コントロールを挿入し、**[Items](controls/properties1) を設定します。 コレクションの値を確認するには、次のいずれかの操作を実行します。
Power Apps Studio のプレビュー バージョンを使用している場合は、アプリの作成メニューで [変数 ] を選択し、[ コレクション] を選択します。
クラシック バージョンの Power Apps Studio を使用している場合は、[ファイル] メニューの [コレクション] を選択します。 コレクションの値を確認するには、次のいずれかの操作を実行します。
プレビュー バージョンの Power Apps Studio を使用している場合、アプリの作成メニューの変数を選択し、コレクションを選択します。
クラシック バージョンの Power Apps Studio を使用している場合、ファイル メニューのコレクションを選択します。
コレクションを保存して取得するには、さらに 2 つのボタン コントロールを追加し、その Text プロパティを [読み込みと保存] に設定します。 読み込みボタンの OnSelect プロパティを次の計算式に設定します。
Clear( PaperTape );LoadData( PaperTape, "StoredPaperTape", true )
LoadData によって格納された値はコレクションの末尾に追加されるため、最初にコレクションをクリアする必要があります。
保存ボタンの OnSelect プロパティを次の計算式に設定します。
SaveData( ペーパーテープ, "記録されたペーパーテープ" )
F5 キーを押してもう一度プレビューし、テキスト入力コントロールに数値を入力し、ボタンを選択します。 保存ボタンを選択します。 アプリを閉じて再読み込みし、読み込みボタンを選択してコレクションを再読み込みします。
注意
SaveData 機能と LoadData 機能は Power Apps Mobile で機能するが、Power Apps Studio または Power Apps のためのウェブプレーヤーでは機能しません。