Power Automate for Desktop で複数行のテキスト列を連結する

Power Automate for Desktop(PAD)で、Excelの次のような複数行の文字列を持つセル同士を横に連結しようとしたところ、そう簡単ではありませんでした。


UNIXならpaste

UNIXならそんなことは簡単にできたという記憶があったため、検索してみたところ、pasteでした。

pasteコマンドについて詳しくまとめました 【Linuxコマンド集】


PowerShellにはないらしい

UNIXにできるのなら、PowerShellにもできるだろうと、検索したけれど見つかりませんでした…

(PowerShellはPADから実行可能です)


Pythonにはあるらしいけど、PADでは使えない

それならPython(PADから実行可能)にはあるだろうと思ったら、Pandasというライブラリーを使えばできそうでした。

しかし、それには Python 3が必要で、PADに搭載されているのはPython 2でした。

PADも外部モジュールを使えばできるのかもしれませんが、それだと各PCにいちいちPythonのインストールが必要そうで面倒です。(共有フォルダーからロードできるのでしょうか?)


7-1. pandasライブラリ

それに、Pandasを使ったからと言って、簡単にできるとかいうと、そうではなさそうでした。(DataFrameというデータ構造を理解する必要があり、単純なリスト構造より複雑そうでした)


結局PADで実装

結局、仕方がないのでPADで実装することにしました。

全体のフローは次の通りです。クリックで拡大できます。

2, 3

「Excelワークシートから読み込み」アクションを使って、A1とB1セルを読み込みます。

4, 5

読み込んだセルを、「テキストの分割」アクションを使ってリストに変換します。

Power Automate DesktopでExcelのセル内改行(LF)を処理する

6

1から、リストの数までLoopします。

7

リストのインデックスは0から始まっているため、LoopIndexから1引きます。

8

IndexLoopが1の場合、つまり初回の場合。

9

リストのインデックスを使ってリストから値を取り出し、Resul変数に代入します。

今回は半角スペースで区切っています。必要に応じてカンマやタブを使うとよいでしょう。

10, 11

初回でなければ、「テキストに行を追加」アクションを使って、行を追加していきます。

コード

上記のコードは次の通りです。PADにコピペできると思います。

Excel.LaunchExcel.LaunchAndOpenUnderExistingProcess Path: $'''C:\\NKTemp\\PADSample.xlsx''' Visible: True ReadOnly: True Instance=> ExcelInstance

Excel.ReadFromExcel.ReadCell Instance: ExcelInstance StartColumn: $'''A''' StartRow: 1 ReadAsText: False CellValue=> uCellA

Excel.ReadFromExcel.ReadCell Instance: ExcelInstance StartColumn: $'''B''' StartRow: 1 ReadAsText: False CellValue=> uCellB

Text.SplitText.SplitWithDelimiter Text: uCellA CustomDelimiter: $'''\\n''' IsRegEx: True Result=> uListA

Text.SplitText.SplitWithDelimiter Text: uCellB CustomDelimiter: $'''\\n''' IsRegEx: True Result=> uListB

LOOP LoopIndex FROM 1 TO uListA.Count STEP 1

    SET uListIndex TO LoopIndex - 1

    IF LoopIndex = 1 THEN

        SET Result TO uListA[uListIndex] + ' ' + uListB[uListIndex]

    ELSE

        Text.AppendLine Text: Result LineToAppend: uListA[uListIndex] + ' ' + uListB[uListIndex] Result=> Result

    END

END

Excel.CloseExcel.Close Instance: ExcelInstance


というわけで、PowerShellやPythonを使えばサクッと数行で実装できるのかと思いましたが、私の調べた限りでは見つかりませんでした。

長くなるのなら、メンテナンス性(他の人が保守すること)を考えるとPADで実装した方が良さそうです。

パフォーマンスを考えるとまた別かもしれませんが。


コメント

アクセス数の多い投稿

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

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

Teamsで日本語入力すると左上に変換ウィンドウが出る

Amazon Prime Videoで4K UHD映画を検索する方法

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

iPhone 12 Proと iPhone 8 Plusのサイズを比較

Microsoft Flight Simulator (2020)のPS4コントローラー設定

次期主力Wi-Fiルーター NEC Aterm WX5400HP

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

NEC Aterm WX5400HP をセットアップ