|
ひらごく7 さん、こんばんわ。
>1ブック内に複数シート(4シート:A〜D)が存在したとします。
>2シート(C,D)内に置換対象文字列が複数存在(1セル内に複数及び、
>複数行において)している場合の置換対象方法はどのようにすれば
>よいでしょうか?
>また、置換後の文字列については、太字、16ポイント、赤色で
>置換させたいです。
とりあえず単一のシートを指定して動作します。
同じセルに何度か繰り返して出る可能性があるようなので、Replaceメソッドは使っていません。
Sub test()
Dim ws As Worksheet, s1 As String, s2 As String, s3 As String
Dim r1 As Range, II As Integer, p1 As Long, p2 As Long, p3(1 To 100) As Long
Dim Jmax As Integer, JJ As Integer
'対象
Set ws = ThisWorkbook.Worksheets("Sheet1") 'シート名:Sheet1の例
'
For II = 1 To 2
Select Case II
Case 1: s1 = "あああ": s2 = "いいい"
Case 2: s1 = "ううう": s2 = "えええ"
End Select
Do
Set r1 = ws.Cells.Find(What:=s1)
If r1 Is Nothing Then Exit Do
'
s3 = r1.Value
Jmax = 0
p2 = 1 'チェック開始位置
Do
p1 = InStr(p2, s3, s1)
If p1 = 0 Then Exit Do
Jmax = Jmax + 1
p3(Jmax) = p1
p2 = p1 + Len(s1)
s3 = Left(s3, p1 - 1) & s2 & Mid(s3, p2, Len(s3)) '置換
Loop
'置換後文字列
r1.Value = s3
'フォントカラー等セット
For JJ = 1 To Jmax
With r1.Characters(Start:=p3(JJ), Length:=Len(s2)).Font
.FontStyle = "太字"
.Size = 16
.ColorIndex = 3
End With
Next
Loop
Next
Set ws = Nothing:Erase p3
End Sub
置換に関しては、こんな感じです。
配列の宣言上、置換したい文字列が一つのセル内で100回以上出るとエラーになるので、もしもその可能性があるのなら、p3の宣言範囲を広げてください。
複数のシートを処理したい場合は、For eachなどでシートをループしてオブジェクト変数wsにセットしていけば良いです。
|
|