用于清除(大量)值> 1的单元格的宏?

时间:2014-05-31 11:22:58

标签: excel excel-vba excel-formula excel-2011 vba

是否可以根据值清除大量单元格,即>1?我正在使用Excel for Mac 2011。

我想将数千个值>1转换为大型数据集(600行x 450K)中的空单元格。这些值的范围应为0到1,但是在条目>1(1000-10000)的整个区域内都存在错误,并且无法准确地对行进行平均。

顺便说一句:我尝试过以前发布的宏来清除基于颜色的细胞"突出显示值为>1的所有单元格后,但此操作失败。我猜是因为RGB查找表说明与我的excel版本不匹配? (Clear cell contents based on color?

2 个答案:

答案 0 :(得分:1)

选择您要处理的区域并尝试一下:

Sub ClearSome()
    Dim r As Range, rr As Range, rClear As Range
    Set rr = Intersect(Selection, ActiveSheet.UsedRange)
    Set rClear = Nothing
    For Each r In rr
        If IsNumeric(r) Then
            If r.Value > 1 Then
                If rClear Is Nothing Then
                    Set rClear = r
                Else
                    Set rClear = Union(rClear, r)
                End If
            End If
        End If
    Next r

    If Not rClear Is Nothing Then
        rClear.Clear
    End If
End Sub

答案 1 :(得分:1)

考虑到数据的大小,读取数组并循环遍历数组然后将数组写回工作表可能更有效。

试试这个:

Sub RemoveValues()
    Dim values(), arrayWidth As Integer, arrayHeight As Integer, i As Integer, j As Integer

    values = Range("A1:C5") // update as per your set up
    arrayWidth = UBound(values, 2)
    arrayHeight = UBound(values, 1)

    For j = 1 To arrayHeight
        For i = 1 To arrayWidth
            If values(j, i) > 1 Then
                values(j, i) = vbNullString
            End If
        Next i
    Next j

    Range("A1").Resize(arrayHeight, arrayWidth) = values
End Sub