yoshi0718
@yoshi0718

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

PADでExcelのセル範囲の文字を置換したい

解決したいこと

PowerAutomateDesktopのフローを作成しています。
Excelでセルの範囲(特定の列)を選択し、1という文字列は2へ置換をしたいのですがどのアクションを組み合わせればいいかわかりません。
全セルを対象とすると他の列まで干渉してしまうため、検索して置換のアクションは利用できませんでした。

下記のアクションから続きのアクション、もしくは別のアクションで作成いただけると嬉しいです。

該当するソースコード

Excel.SelectCellsFromExcel.SelectCells Instance: ExcelInstance StartColumn: $'''T''' StartRow: 2 EndColumn: $'''T''' EndRow: FirstFreeRowOnColumn - 1

0

2Answer

2点、確認させてください。

  1. 対象のExcelファイルは1つだけでしょうか?
    複数のブックが対象でしょうか?
     

  2. 対象のExcelファイルの所在はOneDrive上でしょうか?
    ローカルPC上でしょうか?
    (Excel for Webでは無いですよね)

1Like

Comments

  1. @yoshi0718

    Questioner

    ありがとうございます。
    対象のExcelファイルは1つです。
    Excelファイルはローカル上です。
    よろしくお願いいたします。

  2. 対象のExcelファイルは1つです。
    Excelファイルはローカル上です。

    そうであれば、置換処理をExcelマクロ(VBA)で書いて、
    Power Automate Desktopで、
    ①マクロを書いたExcelファイルを開く
    ②置換処理のマクロを呼び出す
    のフローを定義するのが確実だと思います。

    もちろん、該当ファイル内に直接マクロを書いても構いません。

  3. @yoshi0718

    Questioner

    できるだけPAD側のアクション内だけで完結したく(マクロを動かすのもアクションではあるのですが)
    一度VBScriptを実行するでも試してみましたが知識不足で上手くいきませんでした。

  4. 一度VBScriptを実行するでも試してみましたが知識不足で上手くいきませんでした。

    ここを具体的に質問していただければお答えできると思います。
    (書いたVBScriptのコードを貼っていただいて)

  5. @yoshi0718

    Questioner

    ありがとうございます。
    PADの前フローで該当Excelは開いた状態になっています。
    下記スクリプトを実行後、Excelを保存して閉じるのアクションを置いています。
    Excel内データが置換されることは確認ができたのですが、閉じられたファイルには反映がされませんでした。
    ―――
    Option Explicit

    Dim excelApp, excelWorkbook, excelSheet

    ' Excelアプリケーションを既存のインスタンスで取得
    Set excelApp = GetObject(, "Excel.Application")

    ' Excelワークブックを開く(読み取り専用モードで開かれていないことを確認)
    Set excelWorkbook = excelApp.Workbooks.Open("C:\Users\○○\Desktop\PAフロー\メール一括送信用リスト.xlsx", , False) ' 読み取り専用モードではないことを示すために False を指定

    ' ワークシートを選択
    Set excelSheet = excelWorkbook.Sheets("メール送信リスト")

    ' 選択された範囲内のセルの値を1を2に置換する
    excelSheet.UsedRange.Replace "1", "2"

    ' Excelファイルを保存(上書きの確認を省略)
    excelWorkbook.SaveAs "C:\Users\○○\Desktop\PAフロー\メール一括送信用リスト.xlsx", , , , , False ' 上書きの確認を省略するために最後の False を指定

    ' Excelファイルを閉じる
    excelWorkbook.Close False ' 保存せずに閉じる

    ' オブジェクトを解放
    Set excelSheet = Nothing
    Set excelWorkbook = Nothing
    Set excelApp = Nothing
    ―――

  6. Excel内データが置換されることは確認ができたのですが、閉じられたファイルには反映がされませんでした

    自分の環境だと、SaveAsが失敗して上書きできませんでした。

    同ファイルへの上書きであるので、SaveAsではなくSaveにて保存できます。

    excelSheet.UsedRange.Replace "1", "2"
    ' excelWorkbook.SaveAs "C:\Users\○○\Desktop\PAフロー\メール一括送信用リスト.xlsx", , , , , False
    excelWorkbook.Save
    excelWorkbook.Close False
    

    もしくは、Close Trueでもいいと思います。

    excelSheet.UsedRange.Replace "1", "2"
    ' excelWorkbook.SaveAs "C:\Users\○○\Desktop\PAフロー\メール一括送信用リスト.xlsx", , , , , False
    ' excelWorkbook.Close False
    excelWorkbook.Close True
    

    excelSheet.UsedRange.Replace "1", "2"
    

    これだと、シート内の全てのセルが置換対象ですが、そもそも、それでいいのでしょうか?

  7. @yoshi0718

    Questioner

    お礼が遅れてしまい申し訳ありません。
    コードまでのご教示ありがとうございました。

Comments

  1. @yoshi0718

    Questioner

    主旨違い失礼いたしました。
    リンク先参考にさせていただきます。

Your answer might help someone💌