VBA / Excel – 仅当单元格不包含公式时才replace值

我试图使用replace函数来改变一些值,但是我现在正在做的方式会改变重要公式中的值。

我怎样才能使replace函数只在没有公式的单元格内工作? 我试过If Not Columns(“I”)。HasFormula然后,如果find一个公式,可以防止整个列的replace工作。

Columns("I").Replace What:="10", _ Replacement:="Five", _ LookAt:=xlPart, _ SearchOrder:=xlByRows, _ MatchCase:=False, _ SearchFormat:=False, _ ReplaceFormat:=False Columns("I").Replace What:="9", _ Replacement:="Four", _ LookAt:=xlPart, _ SearchOrder:=xlByRows, _ MatchCase:=False, _ SearchFormat:=False, _ ReplaceFormat:=False Columns("I").Replace What:="8", _ Replacement:="Three", _ LookAt:=xlPart, _ SearchOrder:=xlByRows, _ MatchCase:=False, _ SearchFormat:=False, _ ReplaceFormat:=False Columns("I").Replace What:="7", _ Replacement:="Three", _ LookAt:=xlPart, _ SearchOrder:=xlByRows, _ MatchCase:=False, _ SearchFormat:=False, _ ReplaceFormat:=False Columns("I").Replace What:="6", _ Replacement:="Two", _ LookAt:=xlPart, _ SearchOrder:=xlByRows, _ MatchCase:=False, _ SearchFormat:=False, _ ReplaceFormat:=False Columns("I").Replace What:="5", _ Replacement:="Two", _ LookAt:=xlPart, _ SearchOrder:=xlByRows, _ MatchCase:=False, _ SearchFormat:=False, _ ReplaceFormat:=False Columns("I").Replace What:="4", _ Replacement:="One", _ LookAt:=xlPart, _ SearchOrder:=xlByRows, _ MatchCase:=False, _ SearchFormat:=False, _ ReplaceFormat:=False Columns("I").Replace What:="3", _ Replacement:="One", _ LookAt:=xlPart, _ SearchOrder:=xlByRows, _ MatchCase:=False, _ SearchFormat:=False, _ ReplaceFormat:=False Columns("I").Replace What:="2", _ Replacement:="One", _ LookAt:=xlPart, _ SearchOrder:=xlByRows, _ MatchCase:=False, _ SearchFormat:=False, _ ReplaceFormat:=False Columns("I").Replace What:="1", _ Replacement:="One", _ LookAt:=xlPart, _ SearchOrder:=xlByRows, _ MatchCase:=False, _ SearchFormat:=False, _ ReplaceFormat:=False End If 

那这个呢:

 Sub replaceFormulas() Dim rng As Range Set rng = Range("I:I") With rng.SpecialCells(xlCellTypeConstants) .Replace What:="9", Replacement:="Four", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False ' etc etc End With End Sub 

如果可行的话,接下来我build议只使用可用范围,因为我怀疑你的每一个单元格都填满了。也许得到最后一行, Set rng = Range("I1:I" & lastRow)来节省一点时间。

注意:这工作,如果我有单元格9="9" 。 它只是取代了9并保留了我的="9"

不是最快的macros,但你可以像这样遍历每个单元格:

 Sub fixCol_I() Dim cell As Range Dim iMatch As Integer Dim strWhat As Variant Dim strReplc As Variant strWhat = Array("10", "9", "8", "7", "6", "5", "4", "3", "2", "1") strReplc = Array("Five", "Four", "Three", "Three", "Two", "Two", "One", "One", "One", "One") For Each cell In Columns("I").rows If Not cell.HasFormula And cell <> "" Then For iMatch = 0 To UBound(strWhat) cell.Replace What:=strWhat(iMatch), _ Replacement:=strReplc(iMatch), _ LookAt:=xlPart, _ SearchOrder:=xlByRows, _ MatchCase:=False, _ SearchFormat:=False, _ ReplaceFormat:=False Next iMatch End If Next cell 

结束小组