Power Automate for Desktop の%%表記内での文字列演算

%表記法

Power Autoamte for Desktopには、%を使った表記法があります。%と%の間に式を指定すると、その式が評価(実行)されます。VBAの evaluate メソッドのようなものです。

もっとも単純な使用方法は、%UserVariable%のように、指定した変数の値を参照する(評価する)ことです。

%%の間では、文字列や数値リテラル、変数名、算術演算、論理演算、比較演算、()を使用することができます。

基本的な使い方は次のページで説明されています。

Use variables and the % notation

今回は、文字列についての引数の指定の順番が良くわからなかったので、自分のためにも書いておこうと思いました。


Contains

引数1に引数2が含まれているかどうかを判定します。いわゆる部分一致です。

引数3は大文字小文字を無視するかどうかで、省略も可能でした。省略すると無視するになります。

%Contains('abcdef', 'BCD', True)%

次のように評価の結果をTRUEと比較します。

上の場合は、%%の評価結果はTRUEになるのでIfアクションの結果もTRUEになります。


StartsWith

引数1が、引数2で始まっているかどうかを判定します。いわゆる前方一致の検索です。

引数3はContains同様、大文字小文字を無視するかどうかです。

%StartsWith('abcdef', 'abc', TRUE)%

上のIfアクションの結果はTRUEです。

後方一致のEndWithについてもStartsWithと同様なので、説明は不要かと思います。


IsEmpty

引数1が一つも文字を含まなければTRUE

%IsEmpty('')% の場合はTRUEです。

%IsEmpty('abc')% の場合はFALSE です。

実際のフローでは、上のように予め内容がわかっている定数を指定するのは無意味なので、変数を指定することになります。

%IsEmpty(UserInput)% のように。

UserInputは事前にメッセージボックス等で定義しておきます。


文字列の演算にはアクションが必要

Power Automate for Desktopの場合、文字列の演算は、基本的にテキストグループのアクションを使う事になり、煩雑です。

例えば、UserInputの値が"abc"で始まっているかを調べたければ、「テキストの分割」アクションを使って、UserInputの頭から3文字を取り出し、それをIfアクションで比較するという事になると思います。

StartsWithを使うと、それをIfアクションのみでテストできるので便利です。

忘れずにうまく使っていきたいところです。


それにしても、substrや、toUpperのような文字列関数なども用意してほしいです。

2022/9/7 追記: と、書きましたが、なんとありました。


サブストリング

サブストリングは、文字列に対して[]演算子を使用するとできるようです。次のサイトで詳しく解説されています。

テキスト値のスライス Qiita

文字列を配列とみなして、それに対して、インデックスを指定して抽出する感じだと思います。

上のページの例にあるように ABCDEFGが含まれる変数NewVarに対して、%NewVar[2]%とすれば、Cを取り出すことができ、%NewVar[2]%[2:4]とすれば、CDを取り出すことができます。(:4 は4の手前、つまり3までの意味になります)

指定する数値が0から始まっていますが、これは番号ではなくオフセットと考えると理解しやすいかと思います。

ある場所より前、以降を取り出すには [:4] や [4:]などのように指定するようです。

これで、VBでいうところのLEFT, MID, RIGHTを実現できそうです。


Power Automate には Slice という関数が存在しているようです。なるほど。

Power Automate 「slice」関数 誰でもできる業務改善講座


toLower 

メソッドも使えました。次の構文だと、 cd が返ってきます。

%NewVar[2:4].toLower%


リテラルには使えない

残念ながら、文字列リテラルに対して直接 %'ABCDEFG'[2:4].toLower% とするとエラーになってしまいます。(残念ながらと書いているけれど、リテラルに対してメソッドを使う必要がないことにあとから気が付きました)

それでも、アクションを使わずに文字列演算できることが分かったのは大きいです。


エスケープはバックスラッシュ

%'folder' + '\' + 'file'% のようにして、パスを合成しようとしたところ、構文エラーが発生してしまいました。

調べたところ、どうやらシングルクォーテーション内で¥を扱うには、¥でエスケープしてやる必要がありました。具体的には次のように指定します。

%'folder' + '\\' + 'file'%

このように指定すると、保存したアクションは次のように表示されます。

コードをコピーすると、次の通りでした。

Display.ShowMessageDialog.ShowMessage Message: 'folder' + '\\' + 'file'


上のアクションは、単純に次のように指定することも可能です。

folder\file

この場合、コードは次のようになります。

Display.ShowMessageDialog.ShowMessage Message: $'''folder\\file'''

自動的にエスケープされているのがわかります。






コメント

アクセス数の多い投稿

セキュリティ対策ソフトのノートンが詐欺ソフトまがいになってしまってショック

ZIPファイルを開こうとすると、展開を完了できません、と言われる

Excel 2019 クエリが原因で日本語入力の一文字目が勝手に確定する

オカムラ家具のOAチェアー、コンテッサを分解清掃

突然滅茶苦茶遅くなったPCがWindows Updateのキャッシュクリアで復活

Excelのテーブルに行や列を挿入する際のエラー

ChatGPTが日本語からVBAのコードを生成できてたまげる

Windows セキュリティーのビックリマークが消えない

Power Automate Desktopでブラウザでダウンロードしたファイルを処理する

Excel VBAからODBCを使ってデータを簡単に取得する