Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


10934 / 13644 ツリー ←次へ | 前へ→

【19094】Replaceでの文字列置換後の書式について kissanhnta 04/10/21(木) 14:59 質問[未読]
【19099】Re:Replaceでの文字列置換後の書式について Kein 04/10/21(木) 15:47 回答[未読]
【19102】Re:Replaceでの文字列置換後の書式について kissanhnta 04/10/21(木) 16:45 お礼[未読]

【19094】Replaceでの文字列置換後の書式について
質問  kissanhnta  - 04/10/21(木) 14:59 -

引用なし
パスワード
   一部文字列にフォント色を指定しているセルを対象に、Replaceを使って文字列置換をすると、指定した色がクリアされて全部黒くなってしまいます。

例えば、
・セル「今日は晴れです」
に対して以下のマクロを実行すると、
・セル「明日は晴れです」
となり、「晴れ」が黒くなってしまいます。

Sub Check()
  ActiveCell.Replace What:="今日", Replacement:="明日", _
  LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False
End Sub

何か解決方法があれば教えてください。

【19099】Re:Replaceでの文字列置換後の書式につい...
回答  Kein  - 04/10/21(木) 15:47 -

引用なし
パスワード
   こんな感じで、どうでしょーか ?

Sub Check()
  Dim x As Integer
   
  With ActiveCell
    x = InStr(1, .Value, "今日")
    If x > 0 Then .Characters(x, 2).Text = "明日"
  End With
End Sub

【19102】Re:Replaceでの文字列置換後の書式につい...
お礼  kissanhnta  - 04/10/21(木) 16:45 -

引用なし
パスワード
   さっそく回答いただきありがとうございます。
InStrを使う手があったのですね。
勉強になりました!

一度に複数のセルを対象に置換すること、
対象文字列は2文字とは限らないこと、
セル内に複数の対象文字列が含まれることを
考慮し、以下のようにして解決しました。

ありがとうございました!

前:昨日は晴れでした。今日も晴れです。
後:昨日は雨でした。今日も雨です。

Sub Replace()
  Dim checkStr As String
  Dim replaceStr As String
  Dim strPos As Integer

  checkStr = "晴れ"
  replaceStr = "雨"

  For i = 1 To Selection.Cells.Count
    strPos = 1
    Do While strPos <> 0
      strPos = InStr(1, Selection.Cells(i).Characters.Text, _
      checkStr)
      If strPos > 0 Then
        With Selection.Cells(i)
          .Characters(strPos, Len(checkStr)).Text = replaceStr
        End With
      End If
    Loop
  Next
End Sub

10934 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free