- ベストアンサー
セルの置換に関する質問
- Cells.Replace関数を使用してセルの置換を行いたいが、一部の文字列に対してのみ置換が行われてしまう問題が発生している。
- 具体的には、「*2345」を「*2345?」に置換したいが、「a12345」が「*2345?」になってしまう。
- 「5」と「?」を連続している箇所以外での置換は考慮していないため、解決策を探している。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
すいません、一箇所訂正。 処理には直接関係ないのですが、 × vbNewLine & i & "件 置換完了" ↓ 〇 vbNewLine & i - 1 & "件 置換完了" にしてやってください。
その他の回答 (2)
- tsubu-yuki
- ベストアンサー率46% (179/386)
> Cells.replace (略) とありますが、置換対象は本当に「全セル」でしょうか。 本当に「全セルを舐める」にはそこそこの時間がかかります。 当然、パソコンのスペックにもよりますが、 For Each Targ In Cells ' 何も処理しない Next を走らせても数分~数時間かかるでしょうから、実用的とは言えません。 チェックする範囲を列単位などに絞れるなら、 In 対象範囲 でもなんとかなるかもしれません。 なんとなく、無駄に考えてみました。 Sub Sample() Dim myTime, myCell On Error GoTo ErrEnd Application.ScreenUpdating = False myTime = Time For i = 1 To 10000 ' 置換する最大の回数をここで調節 myCell = Cells.Find(What:="*2345", _ After:=Range("A1"), _ LookAt:=xlWhole).Address Range(myCell) = Range(myCell) & "?" Next ErrEnd: Range("A1").Select MsgBox Minute(Time - myTime) & "分" & _ Second(Time - myTime) & "秒" & _ vbNewLine & i & "件 置換完了" Application.ScreenUpdating = True Exit Sub End Sub まぁつまり、 A1セルを起点に検索して見つかったら「?」をつけ、 もう一回A1セルから検索をやり直して・・・を繰り返して、 見つからなかったら(=エラーが起きたら)強制終了。 という単純な内容です。 私のロースペックPCで、置換対象として3500セルを用意して ※つまり3500回繰り返し 10回ほど走らせた結果、平均処理時間は25秒くらいでした。 それでもまだ、実用的とは言いづらいかもしれませんね。
お礼
ご回答ありがとうございました。
- mt2015
- ベストアンサー率49% (258/524)
お礼
ご回答ありがとうございました。