形式張らない Power Fx を有効化したデスクトップフローの紹介
はじめに
本記事では 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}
のように PropertyName
と PropertyValue
を :
で区切って記述します。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