🟰

形式張らない Power Fx を有効化したデスクトップフローの紹介

2024/12/19に公開

はじめに

本記事では Power Fx を有効化していない従来のデスクトップフローを作成できる方々に向けて、Power Fx を有効化したデスクトップフロー について、形式張らずに紹介していきます。


Power Fx が有効

コンテキスト

  • Power Fx を有効化したデスクトップフロー

対象読者(前提知識)

  • Power Fx を有効化していない従来のデスクトップフローを作成できる方

⚠️注意

本記事の公開にあたっては正確な記述につめましたが、著者は記事の内容に関していかなる保証をするものではありません。
また、本記事の内容は 2024年12月時点の情報であり、本記事公開後の情報とは異なる場合があります。

コメント

Power Fx を有効化したデスクトップフローでは、「コメント」アクションの他に、アクションのパラメーターにもコメントを記述できるようになりました。

単一行コメントは // で始めます。// の後ろから行末までがコメントになります。


単一行コメント


単一行コメントを複数行記述する

複数行コメントは /* で始まり */ で終わります。/**/ で囲まれた範囲がコメントになります。


複数行コメント

コメントは無視されますので、変数 NewVar の値は abc になります。


変数 NewVar

変数

変数の記述方法

Power Fx を有効化したデスクトップフローで変数を記述するためには、先頭にイコール (=) をつける必要があります。従来のデスクトップフローで変数を記述するためには、パーセント (%) で囲む必要がありました。

<従来のデスクトップフローで変数を記述する>

%NewVar%

<Power Fx を有効化したデスクトップフローで変数を記述する>

=NewVar

変数名

Power Fx を有効化したデスクトップフローで変数名をアルファベットで記述する際、大文字小文字が区別されるようになりました。具体的には、従来のデスクトップフローでは NewVar, newvar, NEWVAR はすべて同じ変数を参照しますが、Power Fx を有効化したデスクトップフローでは、NewVar, newvar, NEWVAR はすべて異なる変数になります。

データ型

テキスト値

Power Fx を有効化したデスクトップフローでテキスト値を記述する方法は二つあります。ひとつはテキストをそのまま記述する方法、もうひとつは先頭をイコール (=) で始めて、その後ろにテキストをダブルクォーテーション (") で囲んで記述する方法です。

従来のデスクトップフローでもテキスト値を記述する方法は二つありました。ひとつはテキストをそのまま記述する方法、もうひとつは全体をパーセント (%) で囲み、その中にテキストをシングルクォーテーション (') で囲んで記述する方法でした。

<従来のデスクトップフローでテキスト値を記述する>

Text
%'Text'%

<Power Fx を有効化したデスクトップフローでテキスト値を記述する>

Text
="Text"

ダブルクォーテーションをテキストに含めたいときは、ダブルクォーテーションを 2 つ続けて記述します。

="テキストはダブルクォーテーション ("") で囲んで記述します。(例)=""Text"""


ダブルクォーテーションをテキストに含める

テキストは改行を含めることができます。

="1行目のテキスト
2行目のテキスト
3行目のテキスト"


テキストに改行を含める

Power Fx を有効化したデスクトップフローでは、アンパサンド (&) 演算子でテキストを連結できます。従来のデスクトップフローでは、プラス (+) 演算子で連結できました。

<従来のデスクトップフローでテキストを連結する>

%'Text1' + 'Text2'%

<Power Fx を有効化したデスクトップフローでテキストを連結する>

="Text1" & "Text2"


テキストを連結する

Power Fx を有効化したデスクトップフローでテキストの中に変数を埋め込む方法については「Power Fx を有効化したデスクトップフローでテキストに変数を埋め込む方法」をご覧ください。

Power Fx を有効化したデスクトップフローでは、テキスト値にプロパティがありません。従来のデスクトップフローのテキスト値のプロパティと同じ値を取得するためには、関数 を使用する必要があります。詳しくは「Power Fx を有効化したデスクトップフローで、従来のデスクトップフローのテキスト値のプロパティと同じ値を取得する方法」をご覧ください。

テキストの処理については、アクションに加えて 関数 も使用できるようになりました。
例えば、Mid 関数を使用すれば、「サブテキストの取得」アクションのように、開始位置と文字数を指定してサブテキストを取得することができます。


サブテキストの取得アクション

=Mid("2024/12/19", 6, 2)


Mid 関数を使用してサブテキストを取得する

数値

Power Fx を有効化したデスクトップフローにおいて、数値は先頭にイコールをつけて、その後ろに半角数字で記述します。

従来のデスクトップフローでは数値を記述する方法は二つありました。ひとつは半角数字をそのまま記述する方法、もうひとつは全体をパーセント (%) で囲み、その中に半角数字を記述する方法でした。

<従来のデスクトップフローで数値を記述する>

123
%123%

<Power Fx を有効化したデスクトップフローで数値を記述する>

=123

Power Fx を有効化したデスクトップフローでは、数値演算子に累乗と百分率が加わりました。

数値演算 従来のデスクトップフロー Power Fx を有効化したデスクトップフロー
演算の優先順位を変更する () ()
加算 + +
減算 - -
乗算 * *
除算 / /
累乗 なし ^
百分率 なし %

従来のデスクトップフローでテキスト値を数値に変換するためには、「テキストを数値に変換」アクションを使用しました。


テキストを数値に変換アクション

Power Fx を有効化したデスクトップフローでは、「テキストを数値に変換」アクションに加えて、Value 関数でもテキスト値を数値に変換することができます。

=Value("123")


テキスト値を数値に変換する

数値の処理にも 関数 が使用できるようになりました。例えば Excel でもおなじみの Sum 関数を使用して数値の合計を求めることができます。

=Sum(10, 20, 30, 40, 50 ,60, 70, 80, 90)


Sum 関数で数値の合計を求める

ブール値

Power Fx を有効化したデスクトップフローにおいて、ブール値は先頭にイコール (=) つけて記述します。

=true
=false

従来のデスクトップフローでは、ブール値はパーセント (%) で囲んで記述しました。

%True%
%False%

Power Fx を有効化したしたデスクトップフローでは、論理演算子の記述方法が 3 つ用意されています。

論理演算 関数表記 Visual Basic 演算子表記 JavaScript 演算子表記
論理積 =And(x, y) =x And y =x && y
論理和 =Or(x, y) =x Or y =x || y
否定 =Not(x) =Not x =!x

Power Fx を有効化したデスクトップフローでは、Boolean 関数を使用して、ブール値以外の値をブール値に変換することができます。例えば数値からブール値への変換規則は次の通りです。

数値 Boolean(数値)
0 false
0 以外 true
=Boolean(0)


Boolean(0)

=Boolean(1)


Boolean(1)

Datetime

Power Fx を有効化したデスクトップフローでは、Datetime 値を DateTime 関数または Date 関数で生成できます。

=DateTime(2024, 12, 19, 7, 30, 0)


Datetime 関数で Datetime 値を生成する

=Date(2024, 12, 19)


Date 関数で Datetime 値を生成する

従来のデスクトップフローでは、%D"yyyy-MM-dd HH:mm:ss"% という書き方で Datetime 値を生成できました。

%D"2024-12-19 07:30:00"%

Power Fx を有効化したデスクトップフローでは、Datetime にプロパティがありません。従来のデスクトップフローの Datetime のプロパティと同じ値を取得するためには、関数 を使用する必要があります。詳しくは「Power Fx を有効化したデスクトップフローで、従来のデスクトップフローの Datetime 値のプロパティと同じ値を取得する方法」をご覧ください。

従来のデスクトップフローでは、Datetime 値としての日時を、テキスト値としての日時に変換するためには、「datetime をテキストに変換」アクションを使用しました。


datetime をテキストに変換アクション

Power Fx を有効化したデスクトップフローでは、「datetime をテキストに変換」アクションに加えて、Text 関数でも Datetime 値としての日時をテキスト値としての日時に変換することができます。

=Text(DateTime(2024, 12, 19, 7, 30, 0), "yyyy-MM-dd HH:mm:ss")


Text 関数を使用して日付の書式を設定する

Datetime 値の処理については、アクションに加えて 関数 も使用できるようになりました。
詳しくは「日時アクションを Power Fx 関数で再現する」をご覧ください。

リスト

従来のデスクトップフローにおいて、新しいリストを作成する方法は 2 つありました。ひとつは「新しいリストの作成」アクションを使用する方法です。


新しいリストの作成アクション

もうひとつは、[] で囲まれた中に , 区切りでリストに含める要素を列挙する方法です。

%['P', 'o', 'w', 'e', 'r']%


リスト

Power Fx を有効化したデスクトップフローで新しいリストを作成する方法は「新しいリストの作成」アクションしかありません。[] で囲まれた中に要素を列挙する方法では、リストではなく テーブル(単一列テーブル) が生成されます。

=["P", "o", "w", "e", "r"]


単一列テーブル

Power Fx を有効化したデスクトップフローでは、リストのインデックスは 1 から始まります。そして、リストの要素を参照するためには Index 関数を使用します。従来のデスクトップフローで使用できた List[index] という書き方はできません。
例えば、次のようなリストの w を参照するためには、以下のように記述します。


リスト

=Index(List, 3)


Index 関数を使用してリストの要素を参照する

リストの操作については、ほとんど従来のデスクトップフローと同じようにアクションを使用して行うことができます。


リストを操作するアクション

一点、リストの要素の更新が従来のデスクトップフローと同じ方法ではできません。従来のデスクトップフローでリストの要素を更新するためには、「変数の設定」アクションを次のように設定しました。


リストの要素を更新する

Power Fx を有効化したデスクトップフローでは、「Power FX 式を実行する」アクションに次のように記述することでリストの要素を更新することができます。


リストの要素を更新する


更新したリスト

データテーブル/Datarow(データ行)

従来のデスクトップフローにおいて、新しいデータテーブルを作成する方法は 2 つありました。ひとつは「新しいデータテーブルを作成する」アクションを使用する方法です。


新しいデータテーブルを作成するアクション

もうひとつは、次のように記述する方法です。

%{^['ProductName', 'Price'], ['ProductA', 100], ['ProductB', 200]}%


データテーブル

Power Fx を有効化したデスクトップフローで新しいデータテーブルを作成する方法は「新しいデータテーブルを作成する」アクションしかありません。{} で囲んで記述する方法は使用できなくなりました。

Power Fx を有効化したデスクトップフローでは、データテーブルのインデックスはリストと同様に 1 から始まります。そして、データテーブルの中の特定の Datarow(データ行)を参照するためには Index 関数を使用します。従来のデスクトップフローで使用できた DataTable[index] という書き方は使用できません。
そして、Datarow(データ行)の中の特定の要素を参照するためには、Index 関数または ReadCell 関数を使用します。従来のデスクトップフローのように、DataTable[index][ColumnName]Datarow[ColumnName] と記述することはできません。

例えば、次のデータテーブルの ProductB を参照するためには以下のように記述します。


DataTable

=Index(Index(DataTable, 2), 1)
=ReadCell(Index(DataTable, 2), 1)
=ReadCell(DataTable, 2, 1)


データテーブルの要素

データテーブルの操作については、従来のデスクトップフローと同じようにアクションを使用して行うことができます。


データテーブルを操作するアクション

テーブル/レコード

Power Fx には テーブル というデータ型があります。そして、テーブルにおける一行のデータのことを レコード といいます。現在のところ、テーブルとデータテーブル、レコードと Datarow(データ行)は別物のようです。

テーブルは Table 関数の引数にレコードを渡して生成します。レコードは {Column1: Field1, Column2: Field2} のように記述します。

=Table({ProductName: "ProductA", Price: 100}, {ProductName: "ProductB", Price: 200})


テーブル

テーブルを操作するためには、関数 を使用します。

先にも言いましたが、テーブルは Table 関数で生成できます。


テーブル の生成


生成されたテーブル

テーブルにレコードを追加するためには、Collect 関数を使用します。


テーブルにレコードを追加


追加後のテーブル

テーブルのレコードを参照するためには Index 関数を使用します。インデックスは 1 から始まります。


レコードを参照する


レコード

レコードの中の特定のフィールドを参照するためには、Record.FieldName のように記述します。


フィールドを参照する


フィールド

テーブルのレコードを更新するためには、Patch 関数を使用します。


レコードを更新する


更新後のテーブル

テーブルのレコードを削除するためには、Remove 関数を使用します。


レコードを削除する


削除後のテーブル

この他にも、テーブルをフィルターする (Filter 関数)・テーブルに列を追加する (AddColumns 関数)・テーブルをクリアする (Clear 関数) 等を行うことができます。

カスタムオブジェクト

カスタムオブジェクトは {PropertyName: PropertyValue} のように PropertyNamePropertyValue: で区切って記述します。PropertyName' で囲っても囲まなくてもどちらでもかまいません。PropertyName: PropertyValue の組が複数ある場合は、それらを , で区切って列挙します。

={ProductName: "ProductA", Price: 100}
={'ProductName': "ProductA", 'Price': 100}

カスタムオブジェクトは「JSON をカスタムオブジェクトに変換」アクションでも生成することができます。


JSON をカスタムオブジェクトに変換アクション

「テーブル/レコード」の節でも述べた通り、Power Fx を有効化したデスクトップフローにおいて、カスタムオブジェクトは Power Fx の レコード という側面も持ち合わせています。

カスタムオブジェクトの PropertyValue を参照するためには、 CustomObject.PropertyName のように、対応する PropertyName を指定します。

=CustomObject.ProductName


PropertyValue

カスタムオブジェクトの PropertyValue を更新するためには、Set 関数を用いて次のように記述します。


カスタムオブジェクトを更新


更新したカスタムオブジェクト

UI 要素

UI 要素のセレクターに変数や関数を使用するためには、それらを ${} で囲んで記述します。


セレクターに変数を使用する

それ以外に UI 要素に関して大きな変更はありません。

If アクション

If アクションには大きな変更がありました。従来のデスクトップフローでは「最初のオペランド」・「演算子」・「2 番目のオペランド(無い場合もある)」に分かれていましたが、


従来のデスクトップフローにおける If アクション

Power Fx を有効化したデスクトップフローでは、単一の条件式 を記述する必要があります。


Power Fx を有効化したデスクトップフローにおける If アクション

従来のデスクトップフローにおける If アクションの演算子に対応する関数または演算子は次の通りです。

If アクションの演算子 関数または演算子
と等しい (=) a=b
と等しくない (<>) a<>b
より大きい (>) a>b
以上である (>=) a>=b
より小さい (<) a<b
以下である (<=) a<=b
含む b in a, b exaction a
含まない Not(b in a), Not(b exaction a)
で始まる StartsWith(a, b)
で始まらない Not(StartsWith(a, b))
で終わる EndsWith(a, b)
で終わらない Not(EndsWith(a, b))

「空である、空でない」・「空白である、空白ではない」についてはこれまでとは少し異なります。Power Fx を有効化したデスクトップフローでは、空白または空テキスト ("") であるかどうかを判定するときは IsBalnk 関数、テーブルにレコードが存在するかどうかを判定するときは IsEmpty 関数を使用します。

Power Fx を有効化したデスクトップフローと従来のデスクトップフローの連携

「Desktop フローを実行」アクションを使用すれば、デスクトップフローから別のデスクトップフローを実行することができます。


Desktop フロー実行アクション

実は、Power Fx を有効化したデスクトップフローから、有効化していない従来のデスクトップフローを実行することができ、逆に従来のデスクトップフローから、Power Fx を有効化したデスクトップフローを実行することができます。


Power Fx を有効化したデスクトップフローから従来のデスクトップフローを実行する


従来のデスクトップフローからPower Fx を有効化したデスクトップフローを実行する

したがって、従来のデスクトップフローでは出来ない難しい処理を Power Fx を有効化したデスクトップフローを実行して処理してもらうという使い方もできるわけです。

おわりに

従来のデスクトップフローを作成できる方が、Power Fx を有効化したデスクトップフローを作成する際に困りそうな箇所を中心にいくつかご紹介しました。
この記事が Power Fx を有効化したデスクトップフローを作成する際の参考になれば幸いです。

参考文献

Discussion