- ベストアンサー
置換のVBA
エクセルのあるシート内の「abc」という文字列を「abc20」に置換するには以下で可能ですが、 Sub chikan() Cells.Replace What:="abc", Replacement:="abc" & "20", _ LookAt:=xlPart,SearchOrder:=xlByRows, MatchCase:=False End Sub 「abc」という文字列を連番で「abc20」「abc21」「abc22」・・・・・というふうに置換するにはどうすればいいでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんな感じで作ってみました。こんなもので如何でしようか。 「部分一致」と「完全一致」の両方準備しましたので、切り替えてください。 Sub chikan() Dim Rng As Range Dim Fst As String Dim N As Integer Set Rng = Cells.Find("abc") If Not Rng Is Nothing Then Fst = Rng.Address N = 20 Do '---------------------------------------------------------部分一致 Rng.Value = Replace(Rng.Value, "abc", "abc" & N) N = N + 1 '---------------------------------------------------------完全一致 ' If Rng.Value = "abc" Then ' Rng.Value = "abc" & N ' N = N + 1 ' End If '--------------------------------------------------------- Set Rng = Cells.FindNext(Rng) Loop Until Rng Is Nothing Or Rng.Address = Fst End If Set Rng = Nothing End Sub
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
Sub test01() Dim a As Range Cells.Find(What:="abc", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _ xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False) _ .Activate p01: p = InStr(ActiveCell, "abc") l = Len(ActiveCell) ActiveCell = Mid(ActiveCell, 1, p + 2) & Trim(Str(20 + i)) _ & Mid(ActiveCell, p + 3, l - (p + 2)) Set a = Cells.FindNext(After:=ActiveCell) ' MsgBox a.Address If a.Address < m Then Exit Sub i = i + 1 m = a.Address a.Activate GoTo p01 End Sub
お礼
ありがとうございました。
- HELL_MET
- ベストアンサー率47% (16/34)
下記URLで私がお答えしているものをちょっと改造したものです。 やはり件数が多いと処理が重くなります。 もう少し効率のいいやり方があると思いますが、とりあえず。 OS:Windows95 CPU:MMX200 MEMORY:96MB のマシンで3000件処理をすると20~25秒ほどかかりました。 Sub Macro1() Dim ActCell As Range Dim ActObj As Range Dim ActADR As String Dim cnt As Integer Set ActCell = Selection.SpecialCells(xlCellTypeConstants) Range("A1").Select cnt = 20 For Each ActObj In ActCell On Error GoTo ER ActADR = ActObj.Address Range(ActADR).Activate If Range(ActADR) = "abc" Then Range(ActADR).Value = Range(ActADR).Value & cnt cnt = cnt + 1 End If Next ER: Range("A1").Select End Sub
お礼
ありがとうございました。 早速実行してみました。 「abc」が単独の場合のみ可能でした。 「 abc」、「cdc abc」、「abcde」等は置換されないみたいです。
お礼
ありがとうございました。 部分一致の方を求めていました! (A1が一番最後に処理されますが、それほど大きな問題ではないです)