删除值大于特定单元格值的任何单元格

时间:2014-04-22 16:20:40

标签: excel vba excel-vba

我想为以下内容创建一个宏:

对于每一行,如果C3:ACP3范围内的单元格值>=ACU3,我想将该单元格值替换为空白。我想为每一行执行此操作,并且每次宏都应引用该行的ACU列中的值。

4 个答案:

答案 0 :(得分:0)

试试这个:

Sub makeBlank()

Dim r As Range
Set r = Excel.ThisWorkbook.Sheets("Sheet1").Range("C3:ACP3")

Dim v As Double
v = Excel.ThisWorkbook.Sheets("Sheet1").Range("ACU3").Value

Dim c
For Each c In r
    If c.Value >= v Then
        c.Value = ""
    End If
Next c

End Sub

修改

我怀疑使用数组会更快:

Sub makeBlank2()

Dim v
v = Excel.ThisWorkbook.Sheets("Sheet1").Range("ACU3").Value

Dim Arr() As Variant
Arr = Sheet1.Range("C3:ACP3")

Dim R, C As Long
For R = 1 To UBound(Arr, 1)
    For C = 1 To UBound(Arr, 2)
        If Arr(R, C) > v Then
            Arr(R, C) = ""
        End If
    Next C
Next R

Sheet1.Range("C3:ACP3") = Arr

End Sub

答案 1 :(得分:0)

试试这个:

Sub FindDelete()

Dim ACU_Val As Double
Dim cl As Range
Dim rw As Long

    For rw = 1 To Rows.Count
        If Range("ACU" & rw).Value = "" Then Exit For

        ACU_Val = Range("ACU" & rw).Value

        For Each cl In Range("C" & rw & ":ACP" & rw)
            If cl.Value >= ACU_Val Then cl.Value = ""
        Next cl
    Next

End Sub

答案 2 :(得分:0)

简单:

Dim myCell As Range
numberOfRows = 1000

For i = 0 To numberOfRows 
    Dim myRow As Range

    Set myRow = [C3:ACP3].Offset(i, 0)
    bound = Intersect([acu3].EntireColumn, myRow.EntireRow) 

    For Each myCell In myRow
        If myCell >= bound Then myCell = ""
    Next
Next

答案 3 :(得分:0)

您需要迭代所需的单元格区域,并且对于每个单元格,其内容高于同一行的ACU列中的阈值,只需清除其内容。

For Each c In Range("C3:ACP3")
  If c.Value >= Cells(c.Row, "ACU") Then
    c.clearContents
  End If
Next c