Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA如何替换包含大于零的数字的每个单元格_Excel_Vba - Fatal编程技术网

Excel VBA如何替换包含大于零的数字的每个单元格

Excel VBA如何替换包含大于零的数字的每个单元格,excel,vba,Excel,Vba,如何替换范围内大于零的数字 我可以替换给定范围内的一个特定单词或数字: Sheet1.Columns("N").Replace What:="1", Replacement:="Good", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=False 现在,如果我想替换所有包含大于零的数字,比如1-1000000,如果我使用循环语句,这将使宏运行缓慢,该怎么办 我希望会有这样的代码: Sheet1.Columns("N").Repla

如何替换范围内大于零的数字

我可以替换给定范围内的一个特定单词或数字:

Sheet1.Columns("N").Replace What:="1", Replacement:="Good", LookAt:=xlWhole, 
  SearchOrder:=xlByRows, MatchCase:=False
现在,如果我想替换所有包含大于零的数字,比如
1-1000000
,如果我使用循环语句,这将使宏运行缓慢,该怎么办

我希望会有这样的代码:

Sheet1.Columns("N").Replace What:=">0", Replacement:="Good", LookAt:=xlWhole,
  SearchOrder:=xlByRows, MatchCase:=False`

您可以使用=EVALUATE(),但以下速度不应太慢:

Sub qwerty()
    Dim r As Range, rFix As Range, rr As Range
    Set r = Intersect(ActiveSheet.UsedRange, Range("N:N"))
    Set rFix = Nothing
    For Each rr In r
        If IsNumeric(rr.Value) Then
            If rr.Value > 0 Then
                If rFix Is Nothing Then
                    Set rFix = rr
                Else
                    Set rFix = Union(rr, rFix)
                End If
            End If
        End If
    Next
    rFix.Value = "Good"
End Sub

您可以使用过滤器:

Sub tgr()

    On Error Resume Next    'Prevents error if there are no cells with value >0
    With Intersect(Sheet1.UsedRange, Sheet1.Columns("N"))
        .AutoFilter 1, ">0"
        .Offset(1).Resize(.Rows.Count - 1).SpecialCells(xlCellTypeVisible).Value = "Good"
        .AutoFilter
    End With
    On Error GoTo 0         'Remove the On Error Resume Next condition

End Sub
尝试:


End Sub

对不起,Gary,这可能不是我要找的。如果这是一个像这样的长代码,我可能会做另一列,并根据主列在上面添加一个公式,因为它会运行得更快。(如果我的代码太慢,请使用tigeravatar的宏+1来使用
.Autofilter
:)对不起,马克,我可以做循环,但我不想尽可能多地使用循环,因为它们每行都要检查,我们每天将有数千条记录。难道没有像Sheet1.Columns(“N”).Replace这样的选项吗?它是一个行线并替换列中所有限定的单元格值?我希望会有。
Sub PositiveIsGood()
For x = 1 To ActiveSheet.UsedRange.Rows.Count
    If Cells(x, "N") > 0 Then
        Cells(x, "N") = "Good"
    End If
Next x