Excel内で単一セルを指定して、文字列置換を行いたい
初めて質問させて頂きます。よろしくお願いします。
プチライブラリ【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側のスクリプトをどう直せばよいか、ご指導頂けませんでしょうか。よろしくお願い致します。