PowerAutomateDesktop

PADでCSVファイル2つのキー列の付き合わせ処理。あるいは検索マッチング処理

投稿日:

2つのCSVファイルのキー列を比較して、一致したらその行の別の列に更新等の処理をするケースは、多いと思う。

けども、ネットにあまり情報が無かったので、載せておこうと思う。

方法1:ループを二つ使った処理

まず、シンプルにループを使って、付き合わせ処理を作ってみた。よく情報処理の試験で出てくるようなやつ。


だが、作って実際に動作させると、外側のループのキーと内側ループのキーを一件一件見ていくので、遅くて使い物にならない。
そもそもPADのフローは遅いので、このやり方だと、自分の業務に使えない。

方法2:ループと検索を組み合わせた処理。

次に、外側ループはそのままで、内側で検索を使うことにした。


ただ、検索結果が返る変数のDataTableMatchesの使い方がわからなくて。
見つかったキーをテーブルで返してくるのと、その中の数字が数値ではなく文字であることが、なかなか気が付かなくて。

しばらく難儀したけど、できた。


結果、すごく早くなった。
2つのファイルそれぞれ30件あるテキストファイルを処理するのにかかった時間は以下。

方法1:360秒
方法2:30秒

12倍。
ExcelVBAだと一瞬で結果が出るのだが、PADだとやはり遅いので、やり方を工夫しないといけないシーンがちらほら出てくる。
もし方法1をどうしても使わなければいけなくなったら、お互いのファイルのキー列をソートして、見つかったら次の処理での調査範囲を狭めるなど作るのに手間がかかる。ヤダなあ。。

参考:方法1のコード

LOOP LoopIndex1 FROM 1 TO CSVTable1.RowsCount - 1 STEP 1
    LOOP LoopIndex2 FROM 1 TO CSVTable2.RowsCount - 1 STEP 1
        IF CSVTable1[LoopIndex1][0] = CSVTable2[LoopIndex2][0] THEN
            IF CSVTable1[LoopIndex1][1] <> CSVTable2[LoopIndex2][1] THEN
                Display.ShowMessageDialog.ShowMessageWithTimeout Message: CSVTable2[LoopIndex2][1] Icon: Display.Icon.None Buttons: Display.Buttons.OK DefaultButton: Display.DefaultButton.Button1 IsTopMost: True Timeout: 3 ButtonPressed=> ButtonPressed
                EXIT LOOP
            END
        END
    END
    SET LoopIndex2 TO 1
END

参考:方法2のコード

LOOP LoopIndex1 FROM 1 TO CSVTable1.RowsCount - 1 STEP 1
    Variables.FindOrReplaceInDataTable.FindItemInDataTableEverywhere DataTable: CSVTable2 AllMatches: True ValueToFind: CSVTable1[LoopIndex1][0] MatchCase: False MatchEntireCellContents: False DataTableMatches=> DataTableMatches
    Text.ToNumber Text: DataTableMatches[0][0] Number=> CSV2Row
    IF CSVTable1[LoopIndex1][1] <> CSVTable2[CSV2Row][1] THEN
        Display.ShowMessageDialog.ShowMessageWithTimeout Message: $'''%CSVTable2[CSV2Row][0]%
%CSVTable2[CSV2Row][1]%
''' Icon: Display.Icon.None Buttons: Display.Buttons.OK DefaultButton: Display.DefaultButton.Button1 IsTopMost: True Timeout: 3 ButtonPressed=> ButtonPressed
    END
END

コードは、PADに貼り付けて使えます。

-PowerAutomateDesktop

執筆者:

関連記事

Power Automate Desktop でWebのテキストをExcelに貼り付ける

思ったより手間取ったのでメモを残す。 やりたかった事Webのテキストを加工してExcelに貼り付け。・Webのテキストのスペースを含む空の改行が消えないように・Excelの一つのセルに貼り付けるのでは …

PowerAutomateDesktopでCSVのテキスト置換・重複除去・リストで保存

やりたかったこと WebからダウンロードしたCSVから、受注番号が入力されている1列目のみ取り出し、前後の不要な数字や記号部分を除き、さらに重複を除き、CSVに保存。 PADでつくってみて苦労したこと …

PADでGoogleスプレッドシートにキー送信したら日本語変換が誤動作するのでクリップボード経由にした

PADで数式をGoogleスプレッドシートのセルに直接入力したい。やりたいことはそれだけなのだが、新規のブラウザで開くGoogleスプレッドシートが、なぜかデフォルトで日本語入力がオンになっていること …

PowerAutomateDesktopでGmailを受信するサンプル

ポイントは3点。 1.IMAPサーバーを利用 2.パスワードは「アプリ パスワード」を利用。これまで使ったことが無ければ、この機に作成する。 アプリ パスワードでログインする – Goog …

Power Automate DesktopでCSVTableから重複行を削除する方法2つ

簡単なほう 1.最初の行から最終行まで「正順」にファイルを読んでいく2.直前と直後の行の、1列目のセルに相違があれば別ファイルに書き出す。3.重複を除いたファイルが「別名」でできる。・・・ってやりかた …