この記事では、カスタム関数の紹介とカスタム関数を使用してa<x<bのような範囲内に数値が存在するかどうかを判別する関数を作成します。
カスタム関数とは
Power Appsには、カスタム関数という機能があります。(2021/3/18時点ではプレビュー機能)
これは、VBAのFunctionプロシージャと同様のユーザー定義関数です。
Functionプロシージャとは
Excel上に存在しない関数をVBAのマクロで作成することの出来るものです。
関数をポンプなどの機械だとすると、カスタム関数はその機械を組み合わせた工場のようなものです。
・ポンプ(関数)
常圧の水(入力)→ポンプで昇圧(関数で変換)→高圧の水(出力)
・工場(カスタム関数)
原料(入力)→さまざまな機械によって加工(カスタム関数で変換)→製品(出力)
のようなイメージです。
カスタム関数を使用することで以下のようなメリットがあります。
- Power Appsにはないが、Excelにはあるような関数を作成
- 他の人が作成したカスタム関数をマネできる
- 同じ動作をしている関数のまとまりをコピペしないでよくなる
- 関数や変数が整理されてコードが美しくなる
ただし、現時点ではあくまで試験的機能ですのでバグが発生する可能性があります。
カスタム関数を利用するための準備
カスタム関数は現時点で試験的機能のため、アプリの設定で有効化する必要があります。
アプリの画面から、左上のファイルをクリック→設定をクリックして以下の画面に遷移します。
拡張コンポーネントのプロパティをオンにします。これで準備完了です。
カスタム関数を作成してみる
実際にカスタム関数を作成してみます。数値や日付の処理をするときに面倒なある数値が2つの数値の範囲内にあるかどうかを判断する関数を作成します。
外側(要求する入力、説明)を設定する
ツリービューのコンポーネントを選択し、新しいコンポーネントをクリックします。通常のアプリ作成画面ではない画面に遷移します。
すると、Component1が追加されます。
Component1をクリックした状態で、右側のプロパティの最下段のカスタムプロパティ内新しいカスタムプロパティを選択します。
以下の様に左側の欄を埋めていくことでカスタム関数を作成します。
表示名 | カスタム関数の表示名 | Between |
名前 | カスタム関数の名前 | Between |
説明 | カスタム関数の使用者にカスタム関数の説明をするための欄 | SmallとBigの間にValueが存在するかどうかを判別します。 |
プロパティの型 | 入力はアプリの作成者が値を設定するプロパティ(.Textなど)、出力はアプリの使用者が値を設定するプロパティ(TextInput.Text)です。動作はSetなどの動作系関数で使用されるプロパティ(OnSelect)です。 | 出力 |
データ型 | その関数で出力されるデータの型を設定します。 | ブール値 |
そのまま下に下がってパラメーター(カスタム関数で入力として要求するもの)を入力します。新しいパラメーターをクリックしてください。
このような画面に遷移しますので、以下の表の通りに入力します。
パラメーター名 | 説明 | データ型 |
Small | 低い方の値 | 数値 |
Value | 判別対象の値 | 数値 |
Big | 小さい方の値 | 数値 |
このようになっていればカスタム関数の外側は完成です。
保存をクリックして保存してください。
中身(式)を設定する
カスタム関数の中身には、今まで適宜入力してきた関数を入力します。
例えばa<x<bであれば、以下のような形で入力していました。
And(a<x,x<b)
変数名が長いと式が煩雑になっていました。また、同様のものをよく利用するのでコードも見づらくなっていました。
この式を以下の様に入力します。
これで、カスタム関数の完成です。
カスタム関数を使ってみる
コンポーネントの画面にラベルを1つ追加し、そのTextに以下の様に入力します。
Component1.Between(1,2,3)
これでラベルにtrueと表示されていれば成功です。
今回の入力の型は数値型ですので、日付もDateValue関数で数値型に変換すればこのカスタム関数を利用可能です。
もう少し汎用性の高い関数にする
このままでも十分使用できますが、SmallとBigではなくValue1とValue2を利用して単純に2つの値の間に値が存在するかを判別します。また、Value1とValue2の値を含むかどうかも指定できるようにします。
カスタム関数のプロパティのパラメーターを以下の表の様に再設定します。
パラメーター名 | 説明 | データ型 | 必須 |
(Small→)Value1 | 数値の範囲を指定する1つ目の値 | 数値 | はい |
Include1 | Value1を含むかどうか | ブール値 | いいえ |
Value | 判別対象の値 | 数値 | はい |
(Big→)Value2 | 数値の範囲を指定する2つ目の値 | 数値 | はい |
Include2 | Value2を含むかどうか | ブール値 | いいえ |
これで保存します。
式に以下の様に入力します。
If(Include1,Or(And(Value1<=Value,Value<Value2),And(Value1>=Value,Value>Value2)),
Include2,Or(And(Value1<Value,Value<=Value2),And(Value1>Value,Value>=Value2)),
And(Include1,Include2),Or(And(Value1<=Value,Value<=Value2),And(Value1>=Value,Value>=Value2)),
Or(And(Value1<Value,Value<Value2),And(Value1>Value,Value>Value2)))
これで完成です。
きちんと判別して出力されています。デフォルトではしきい値を含むようになっています。
逆にしたいときは式の中のInclude1,Include2を!Include1,!Include2(このようにするとInclude1とInclude2を入力しないとエラーになります。)としてください。
1つのコンポーネントに複数のカスタム関数を作成できますが、その関数の性質ごとにコンポーネントを分けておくと使いやすいです。
アプリで使用する
作成したコンポーネントを他のアプリで使用するには、挿入→カスタム→コンポーネントのインポートからインポートします。
コンポーネントを作成したアプリを選択し、インポートします。
インポート出来たら、画面に移動して再度カスタムをクリックするとインポートしたコンポーネントが表示されます。
インポートすると画面にコンポーネントのコピーが出現しますので、こちらを利用します。
きちんと使用できていますね。カスタム関数のみしか使用しない場合はVisibleをfalseにしておきましょう。
最後に
カスタム関数を利用することでさらにPower Appsの自由度が高くなります。
メリットだらけなのでぜひオリジナルの関数を作成してみて下さい!
Hiroさんのこちらの動画が大変勉強になります。
コメント
[…] カスタム関数とは→【早い・美しい・易しい】カスタム関数について […]
[…] カスタム関数とは→【早い・美しい・易しい】カスタム関数について […]
[…] カスタム関数とは→【早い・美しい・易しい】カスタム関数について […]