0

初めて質問させて頂きます。よろしくお願いします。

プチライブラリ【Excelファイルで指定した範囲内を置換する】を参考に、
掲題の処理を実装しようと以下のスクリプト(一部抜粋)を記述しました。

===================
range = !セル(列)! & !セル(行)!

keyword = !検索する文字列(年度)! & !検索する文字列(単位)! & !検索する文字列(月)! & !検索する文字列(単位とステータス)!
If keyword = "" Then
    Err.Raise 1, "", "検索する文字列を指定して下さい。"
    WScript.Quit()
End If

replStr = !置換後の文字列(年度)! & !置換後の文字列(単位)! & !置換後の文字列(月)! & !置換後の文字列(単位とステータス)!

On Error Resume Next
    cnt = worksheet.range(range).COUNT
On Error Goto 0
'指定された範囲が有効か確認
If cnt = "" Then
    Err.Raise 1, "", "指定された範囲が無効です。"
End If

' Find関数の実行結果が「≠Noting」であると別ノードで担保済みとして、ここでは実行しない

' XlLookAt=2 (部分一致) で置換します。
worksheet.range(range).Replace keyword,replStr,2
===================

このスクリプトでは、シート内の一括置換がなされてしまい、指定した範囲外も置換されてしまいます。
解決法をご教授頂けませんでしょうか。

以下に4点、補足します。

① 操作対象のExcelファイルには

  「2021年5月完了
   2021年6月予定
   2021年7月予定」

  などの"改行コードを含む文字列"が、複数列、複数行に記述されています。このうち「2021年6月予定」を「2021年6月完了」にしたいです。
  以降、例えとしてR38セル、T38セル、R40セル、R51セル、T51セル、U51セルにこの3行の値が記述されているものと仮定します。

② 本ノードの前には標準ライブラリ【Excel操作(検索一致)】を配置して、行番号を取得したり
  別途列番号を取得しています。なのでrange に「R38」など正しそうな値がセットされることはMsgBox にて確認済みです。

③「開始セルと終了セルで同じセルは指定できません。」のエラーメッセージが出なくなるように
  UCase(scell) = UCase(ecell)  のIf文は削除しています。

④ WinActor側で繰り返し処理を設けており、それが"正常終了した場合にだけ"1セルずつ「予定」を「完了」に置換したいです。

自分なりにデバックしてみたのですが、どうにも上記スクリプトでは
R38セルも、T38セルも、R40セル、R51セル、T51セル、U51セルも全てが一度に「2021年6月完了」へ置換されてしまって困っています。
VBAのマクロでは

===================
Sub Macro1()
    Range("R38").Replace "2021年6月予定", "2021年6月完了", 2
End Sub
===================

と記述することで"R38セルだけ"の置換に成功するのですが…

WinActor側のスクリプトをどう直せばよいか、ご指導頂けませんでしょうか。よろしくお願い致します。

ちまき 質問の編集
回答とコメントは、会員登録(無料)で閲覧できるようになります。