それ、メッセージ花火でわざわざ伝えること?

Excel VBA 全てのセルの一部に特定の語句があれば置換したい。
Excel VBA初心者です。
Excelの全てのセルに対して、特定の語句があれば別の特定語句で置換したいのですが、どうしたら良いかわかりません。
全角と半角が混在していますので、これは無視したいですし、変換したい文字列の位置は不定です。Excel 2007です。
取り敢えず、細かなな条件は無視して書いたコードは

Dim myCell As Range
Sub rep()

For Each myCell In Selection
myCell.Value = Replace(myCell.Value, "OLD", "NEW")
Next myCell

End Sub

カーソルのある所は置換されますが、それで終わりです。
ご教授下さい。

A 回答 (3件)

Cells.Replace What:="OLD", Replacement:="NEW", LookAt:=xlPart


で全部を一発で変換できると思いますが、For Nextで回しているということは何か他の条件があるからですね?

ならば、一例です。
tom29911954さんご提示のコードは選択した範囲のセルをFor Nextで順に見ていってますが、下記のは選択の有無にかかわらず、文字列が入力されたセルだけを順に見に行ってます。
また、Dim myCell As Rangeの変数宣言は、何か別の目的があってしているならともかく、そうでないならプロシージャの中で宣言します。

Sub rep()
  Dim myCell As Range
  For Each myCell In Cells.SpecialCells(xlCellTypeConstants, xlTextValues)
    myCell.Value = Replace(myCell.Value, "OLD", "NEW")
  Next myCell
End Sub
    • good
    • 3
この回答へのお礼

ありがとうございました。
良くわかりました。
初心者と言えども、もう少し勉強しないとだめですね。
急ぎで、取り敢えずって感じで進めている事情もあり、大変助かりました。

お礼日時:2010/10/11 20:37

こんばんは!


置換したいセルをすべて選択してマクロを実行してもダメですか?

余計なお世話かもしれませんが・・・
セルを選択せずにそのSheetすべてで置換する方法として
一例ですが、↓のようなコードでもできると思います。

Sub test1()
Dim i, j As Long
For i = 1 To ActiveSheet.UsedRange.Rows.Count
For j = 1 To ActiveSheet.UsedRange.Columns.Count
If Cells(i, j) Like "*OLD*" Then
Cells(i, j) = Replace(Cells(i, j), "OLD", "NEW")
End If
Next j
Next i
End Sub

どうも失礼しました。m(__)m
    • good
    • 1

For Each myCell In Selection



Selectionですから選択された範囲です
置換したいセルをすべて選択しましたか?
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!