次の方法で共有


クラウド フローの式クックブック

この記事では、Power Automate クラウド フローの一般的なシナリオに対して、すぐに使用できる 30 個の式パターンについて説明します。 これらのパターンは、フロー内でコピー、調整、使用できます。

これらの式は、すべてのPower Automateクラウド フロー ライセンスレベルで機能します。 ワークフロー式関数の完全な関数参照を見つけます。

テキスト操作

1. 大文字または小文字に変換する

シナリオ: 比較またはストレージの前にユーザー入力を正規化します。

: toUpper(variables('input')) または toLower(variables('input'))

: toLower('John.Smith@Contoso.COM') 戻り値 john.smith@contoso.com

Important

toUpper() は、比較で使用する場合は大文字と小文字が区別されます。 toUpper(A) = Bを使用する場合は、必ず両側に適用してください。 toUpper(A) = B B が大文字と小文字が混在している場合は失敗します。

2. 部分文字列 (左、右、中間) を抽出する

シナリオ: テキスト値から特定の部分をプルします。 最初の N 文字、最後の N 文字、または中央から範囲を取得します。

:

  • 左: substring(variables('text'), 0, 5)
  • 正: substring(variables('text'), sub(length(variables('text')), 5), 5)
  • 半ば: substring(variables('text'), 3, 4)

: substring('Invoice-2026-0042', 8, 4) 戻り値 2026

ヒント

2 番目のパラメーターは開始インデックス (0 から始まる) で、3 番目のパラメーターは終了インデックスではなく 長さです。 substring('ABCDE', 1, 3)は、BCDではなくBCを返します。

3. テキストを置き換える

シナリオ: テキスト値をクリーンアップまたは変換します。 文字の削除、区切り記号の入れ替え、書式設定の修正。

: replace(variables('input'), 'old', 'new')

: replace('2026/03/18', '/', '-') 戻り値 2026-03-18

replace() では、大文字と小文字が区別されます。 replace('Hello', 'hello', 'Hi') は、変更されていない Hello を返します。 必要に応じて、最初に一般的なケースに変換します。

4. 文字列を配列に分割する

シナリオ: 区切り値 (CSV、セミコロンで区切られた電子メール) を個別の項目に分割してループします。

: split(variables('input'), ',')

: split('alice@contoso.com,bob@contoso.com,carol@contoso.com', ',') 戻り値 ["alice@contoso.com","bob@contoso.com","carol@contoso.com"]

ヒント

区切り記号の後のスペースは保持されます。 split('a, b, c', ',') は、先頭にスペースを含む ["a"," b"," c"] を返します。 後で Select アクションの各項目に対して trim() を使用します。

5. 改行と連結する (メールの場合)

シナリオ: 電子メールまたは Teams 通知用の複数行のメッセージ本文を作成します。

: concat('Line 1', decodeUriComponent('%0A'), 'Line 2')

Example: 改行には decodeUriComponent('%0A')、Windows スタイルの改行には decodeUriComponent('%0D%0A') を使用します。

Important

式で \n を直接使用しても、改行は生成されません。 \nリテラル文字を出力します。 常に decodeUriComponent アプローチを使用するか、出力が HTML の場合は <br> を使用します。

6. 文字列にテキストが含まれているかどうかを確認する

シナリオ: 件名行、電子メール本文、またはフィールドにキーワードが含まれているかどうかに基づいてフローをルーティングします。

: contains(toLower(triggerBody()?['subject']), 'urgent')

Example: contains('Project Alpha Review', 'Alpha')true を返します

contains() では、大文字と小文字が区別されます。 常にヘイスタックと針の両方を toLower() でラップして、大文字と小文字を区別しない照合を行います: contains(toLower(value), toLower(search))

日付と時刻

7. 特定の形式で現在の日付/時刻を取得する

シナリオ: ファイル名、ログ エントリ、または電子メールに現在の日付と時刻をスタンプします。

: formatDateTime(utcNow(), 'yyyy-MM-dd HH:mm')

: 2026-03-18 14:30 (UTC) を返します。 ローカル時刻には convertTimeZone() を使用します。

ヒント

utcNow() は常に UTC です。 現地時刻の場合は、 convertTimeZone(utcNow(), 'UTC', 'Eastern Standard Time', 'yyyy-MM-dd HH:mm')でチェーンします。

8. 日付から日を加算または減算する

シナリオ: 今日に対する期限、有効期限、またはアラームの日付を計算します。

: addDays(utcNow(), 7) または addDays(utcNow(), -30)

: 今日が 2026-03-18の場合、 addDays(utcNow(), 7) は戻ります 2026-03-25T...Z

addDays() 小数部の値も受け取りますが、 addHours() または addMinutes() は、日未満のオフセットの方が明確です。 addDays(utcNow(), 0.5)を意味する場合は、addHours(utcNow(), 12)を使用しないでください。

9. 文字列を日付に変換する (解析)

シナリオ: テキスト フィールドには 03/18/2026 などの日付が含まれており、日付関数で使用する必要があります。

: parseDateTime(variables('dateString'), 'en-US')

: parseDateTime('03/18/2026', 'en-US') は適切な datetime 値を返します。

Important

ロケール パラメーターがない場合、解析はフローの地域設定に依存し、月/日をスワップできます。 03/04/2026が 4 月 3 日と 3 月 4 日と解釈されないように、必ず明示的にロケールを指定してください。

10. 曜日を取得する

シナリオ: 平日と週末に異なるロジックを実行するか、"月曜日のレポート" を生成します。

: dayOfWeek(utcNow())

: 日曜日の0、月曜日、...、土曜日の16を返します。

ヒント

日曜日は0ではなく7です。 週末のチェックには or(equals(dayOfWeek(...), 0), equals(dayOfWeek(...), 6)) を使用します。 dayOfWeek(utcNow()) > 5のような条件は土曜日をキャッチしますが、日曜日を逃します。

11. 2 つの日付の差を計算する

シナリオ: 要求日と完了日の間に経過した日数を決定します。

: div(sub(ticks(variables('endDate')), ticks(variables('startDate'))), 864000000000)

: start が 2026-03-01 で end が 2026-03-18場合、 17を返します。

組み込みの dateDiff() 関数はありません。 ティック アプローチを使用する必要があります。 除数 864000000000 はティックを日に変換します。 時間の場合は、 36000000000を使用します。分の場合は、 600000000を使用します。

12. 表示の日付を書式設定する

シナリオ: 電子メールまたはレポートの datetime 値を人間が判読できる形式に変換します。

: formatDateTime(variables('myDate'), 'MMMM dd, yyyy') または formatDateTime(variables('myDate'), 'MM/dd/yyyy')

: formatDateTime('2026-03-18T14:30:00Z', 'MMMM dd, yyyy') 戻り値 March 18, 2026

Important

MM は月、 mm は分です。 formatDateTime(value, 'mm/DD/yyyy')は、30/18/2026ではなく03/18/2026 (分と日) を生成します。 月の日には dd (小文字) を使用します。

配列とコレクション

13. 条件で配列をフィルター処理する

シナリオ: 特定の条件に一致する項目のみを配列から取得します。

: 配列フィルター アクションを使用します。 @item()?['Status'] は次のようになります。 'Active'

: 入力 [{Name:'A', Status:'Active'}, {Name:'B', Status:'Closed'}] 戻り値 [{Name:'A', Status:'Active'}]

where スタイルのフィルター式をインラインで使用することはできません。 フィルター配列アクションを使用します (式ではありません)。 式ベースのフィルター処理では、フィルター配列の詳細モードで @equals(item()?['Status'], 'Active') を使用します。

14. 配列から最初または最後の項目を取得する

シナリオ: リストから最新のレコードまたは最初の一致を取得します。

: first(variables('myArray')) または last(variables('myArray'))

Example: first(body('Get_items')?['value']) は、SharePoint クエリから最初の項目を返します。

ヒント

first() 空の配列では、エラーではなく nullが返されます。 常に null チェックに従ってください: if(empty(variables('myArray')), null, first(variables('myArray')))

15. 配列内の項目をカウントする

シナリオ: クエリが返した結果の数を確認するか、リストに十分な項目があることを検証します。

: length(variables('myArray'))

Example: length(body('Get_items')?['value']) は、SharePoint list クエリの項目数を返します。

length() は、配列と文字列の両方で機能します。 length('hello')5 (文字数) を返します。 配列のように見える文字列ではなく、配列を渡していることを確認します。

16. 配列からコンマ区切り文字列を作成する (結合)

シナリオ: 名前、電子メール、または ID のリストを、表示または API 呼び出し用の単一の区切り文字列に変換します。

: join(variables('myArray'), ', ')

: join(createArray('Alice', 'Bob', 'Carol'), '; ') 戻り値 Alice; Bob; Carol

ヒント

join() は文字列の配列に対して機能します。 配列にオブジェクトが含まれている場合は、最初に Select アクションを使用して目的のフィールドを抽出してから、結果を結合します。

17. 配列に値が含まれているかどうかを確認する

シナリオ: 続行する前に、リストに特定の項目が存在するかどうかを判断します。

: contains(variables('myArray'), 'searchValue')

: contains(createArray('North', 'South', 'East', 'West'), 'East') 戻り値 true

オブジェクトの配列の場合、 contains() はプロパティ値ではなく、オブジェクト全体をチェックします。 オブジェクトに一致するプロパティがあるかどうかを確認するには、[配列のフィルター] アクションを使用し、結果の length() を確認します。

JSON とオブジェクト

18. JSON 文字列を解析する

シナリオ: HTTP アクションまたはカスタム コネクタは、構造化データとして操作する必要がある JSON 文字列を返します。

: json(body('HTTP'))

: json('{"name":"Alice","age":30}') は、 ?['name']でアクセスできるオブジェクトを返します。

Important

二重解析しないでください。 アクションが既に解析された JSON を返す場合 (ほとんどのコネクタ アクションで実行されます)、 json() でラップするとエラーが発生します。 json()は、既にオブジェクトであるアクション出力ではなく、生の文字列応答でのみ使用します。

19. JSON から入れ子になったプロパティを取得する

シナリオ: JSON 応答の深い値 (たとえば、 response.data.items[0].name) にアクセスします。

: body('HTTP')?['data']?['items']?[0]?['name']

: {"data":{"items":[{"name":"Widget"}]}}の場合、 Widgetを返します。

Important

? (安全なナビゲーション) を忘れないでください。 body('HTTP')['data']['items'] は、いずれかのレベルが null の場合にエラーをスローします。 ?['key']を使用して安全に走査します。親が存在しない場合、各?は失敗するのではなく null を返します。

20. 値から JSON オブジェクトを作成する

シナリオ: フロー変数と動的コンテンツから HTTP アクションの要求本文を作成します。

: json(concat('{"name":"', variables('name'), '","status":"', variables('status'), '"}'))

: name=Alice と status=Active を指定すると、 {"name":"Alice","status":"Active"}が返されます。

ヒント

いずれかの変数に引用符または特殊文字が含まれている場合、JSON の形式が正しくありません。 堅牢な構築を行うには、createObject('name', variables('name'), 'status', variables('status')) アクションを使用するか、Compose アクションで直接作成します。

21. オブジェクトを文字列に変換する

シナリオ: JSON オブジェクトをテキスト フィールドにログに記録するか、構造化データを文字列パラメーターとして渡します。

: string(variables('myObject'))

: string(json('{"a":1}')) は文字列として {"a":1} を返します。

string() 配列またはオブジェクトでは、コンパクトな JSON が生成されます (かなり印刷されません)。 組み込みの prettyPrint()はありません。 コンパクトな JSON を受け入れるか、書式設定されたテキストを手動で作成します。

22. null または空の値を安全に処理する

シナリオ: フィールドが null、空、または完全に欠落している可能性がある場合のエラーを防ぎます。

: coalesce(triggerBody()?['optionalField'], 'default value')

: optionalField が null の場合、 'default value'を返します。 値がある場合は、その値を返します。

Important

coalesce() は、空の文字列ではなく、 nullのみを処理します。 空の文字列の場合は、条件 if(empty(triggerBody()?['field']), 'default', triggerBody()?['field']) と組み合わせます。 empty()関数は、null 文字列と空の文字列''の両方に対して true を返します。

数値と数学

23. 数値を丸めます

シナリオ: 小数点以下の桁数を固定したパーセンテージまたは通貨値を表示します。

: formatNumber(variables('value'), 'N2') (表示用) または div(mul(variables('value'), 100), 100) (切り捨て用)

: formatNumber(3.14159, 'N2') は文字列として 3.14 を返します。

formatNumber() は、数値ではなく文字列を返します。 丸められた値をさらに計算する必要がある場合は、それを解析して戻します: float(formatNumber(variables('value'), 'N2'))

24. 文字列を数値 (および戻る) に変換する

シナリオ: フォームまたは電子メールで数値がテキストとして提供されるため、数値を使用して数値を計算する必要があります。

: int(variables('textNumber')) または float(variables('textNumber'))string(variables('numericValue'))

: int('42')42を返します。 float('3.14') は、3.14 を返します。 string(42) は、'42' を返します。

Important

int() 10 進文字列の場合、エラーがスローされます。切り捨てられません。 変数に 10 進数が含まれている可能性がある場合は、最初に float()int(float(variables('input')))使用します。 int('3.14')などの定数値では、実行時ではなく、保存時にエラーがキャッチされます (InvalidTemplate)。

25. パーセンテージを計算する

シナリオ: ある値が別の値の比率 (完了率、使用率など) であることを示します。

: mul(div(float(variables('part')), float(variables('total'))), 100)

: part=75 と total=200 では、 37.5を返します。

Important

整数除算は切り捨てられます。 div(75, 200) は両方とも整数であるため、 0 を返します。 常に最初に float に変換します。 div(float(75), float(200))0.375を返します。

条件とロジック

26. 式の if/then/else

シナリオ: 条件アクションをフローに追加せずに、条件に基づいて異なる値を返します。

: if(equals(variables('status'), 'Approved'), 'Proceed', 'Wait')

: 状態が Approvedの場合は、 Proceedを返します。 それ以外の場合は、Wait を返します。

if()関数は、><演算子を直接サポートしていません。 ヘルパー関数を使用する: if(greater(variables('count'), 10), 'Over', 'Under')。 使用可能な比較: equals()greater()less()greaterOrEquals()lessOrEquals()

27. 合体 (最初の null 以外の値)

シナリオ: 複数のフィールドを試し、優先名、表示名、電子メールなどの値を持つ最初のフィールドを使用します。

: coalesce(triggerBody()?['preferredName'], triggerBody()?['displayName'], triggerBody()?['email'], 'Unknown')

: preferredName が null で displayName が 'Alice'場合、 Aliceを返します。

ヒント

coalesce()null をスキップしますが、空の文字列 ''はスキップしません。 空の文字列は有効な null 以外の値です。 空の文字列もスキップする必要がある場合は、ヘルパーと組み合わせる: coalesce(if(empty(A), null, A), if(empty(B), null, B), 'default')

28. 値が null または空かどうかを確認する

シナリオ: 処理する前に、必須フィールドに使用可能な値があることを検証します。

: empty(variables('input'))

: empty('')trueを返します。 empty(null) は、true を返します。 empty('hello') は、false を返します。

Important

empty() は数値では機能しません。 empty(0) はエラーをスローします。 数値の場合は、 equals(variables('num'), null) を使用するか、最初に型を確認します。

29. 日付を比較する (日付 A は日付 B の後ですか?

シナリオ: 期限が過ぎたかどうか、またはあるイベントが別のイベントの前に発生したかどうかを確認します。

: greater(ticks(variables('dateA')), ticks(variables('dateB')))

: greater(ticks('2026-03-18'), ticks('2026-03-15'))true を返します (3 月 18 日は 3 月 15 日以降)。

Important

日付文字列と greater('2026-03-18', '2026-03-15') を直接比較すると、構文的に並べ替えられるため、ISO 形式 (YYYY-MM-DD) で動作します。 ただし、他の形式では失敗します。 greater('03/18/2026', '12/01/2025') false 0 <のため、1が返されます。 信頼性の高い日付比較には、常に ticks() を使用してください。

30. ブール論理 (条件の AND/OR)

シナリオ: 1 つの式で複数の条件を組み合わせる (たとえば、承認された AND 量 > 1000)。

: and(equals(variables('status'), 'Approved'), greater(variables('amount'), 1000))

: 状態が true で金額が 1000 を超える場合にのみ、Approvedを返します。

and / or構文で&&/||を連結することはできません。 常に関数フォームを使用します。 複雑なロジックの場合は、 or(and(A, B), and(C, D))を入れ子にしてください。 読みやすさは、深い入れ子によって低下します。 代わりに、複数の行で条件アクションを使用することを検討してください。

クイック リファレンス カード

Task Expression
大文字 toUpper(value)
小文字 toLower(value)
サブストリング substring(value, start, length)
置き換える replace(value, old, new)
Split split(value, delimiter)
Contains (text) contains(toLower(value), toLower(search))
現在 (書式設定済み) formatDateTime(utcNow(), 'yyyy-MM-dd')
日数を追加する addDays(date, count)
曜日 dayOfWeek(date) (0=Sun)
次の日数 div(sub(ticks(end), ticks(start)), 864000000000)
最初の項目 first(array)
最後の項目 last(array)
数える length(array)
参加する join(array, delimiter)
JSON の解析 json(stringValue)
安全なプロパティ object?['key']
Null フォールバック coalesce(value, default)
空です empty(value)
If/else if(condition, trueVal, falseVal)
日付の比較 greater(ticks(dateA), ticks(dateB))
文字列からの Int int(stringValue)
文字列からの Float float(stringValue)
AND and(condA, condB)
OR or(condA, condB)

: 作成者は、AI の支援を受け、この記事を作成しました。 詳細情報