Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.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中编写自定义项以过滤一系列单元格?_Vba_Excel - Fatal编程技术网

如何在Excel VBA中编写自定义项以过滤一系列单元格?

如何在Excel VBA中编写自定义项以过滤一系列单元格?,vba,excel,Vba,Excel,我已经养成了通过改变单元格样式来标记外围数据的习惯。我想在excel中编写一个UDF,将单元格的范围作为输入,并返回该范围中未标记为异常值的子集 这就是我尝试过的: Function ValidCells(rCells As Range) As Range Dim c As Range For Each c In rCells If c.Style <> "Bad" Then Set ValidCells = Range(c,

我已经养成了通过改变单元格样式来标记外围数据的习惯。我想在excel中编写一个UDF,将单元格的
范围
作为输入,并返回该范围中未标记为异常值的子集

这就是我尝试过的:

Function ValidCells(rCells As Range) As Range
    Dim c As Range
    For Each c In rCells
        If c.Style <> "Bad" Then
            Set ValidCells = Range(c, ValidCells)
        End If
    Next
End Function
功能有效单元(RCELL作为范围)作为范围
调光范围
对于RCELL中的每个c
如果c.风格“不好”,那么
设置有效单元格=范围(c,有效单元格)
如果结束
下一个
端函数
我的目的是能够执行
=Sum(ValidCells(A1:D1))
,并且只对非样式化数据进行求和


但是,
ValidCells
似乎每次都返回一个空范围。我做错了什么?

您确定它返回的是空范围吗?当我尝试运行此命令时,VBA会在“设置”行上引发一个错误。如果从工作表中将例程作为UDF调用,则不会看到VBA错误,但UDF应停止执行并返回#VALUE

在任何情况下,你都可以做你想做的事,但有一个很大的警告。首先,守则:

Function ValidCells(rCells As Range) As Range
    Dim valid As Range

    Dim c As Range
    For Each c In rCells
        If c.Style <> "Bad" Then
            If valid Is Nothing Then
                Set valid = c
            Else
                Set valid = Union(valid, c)
            End If
        End If
    Next

    Set ValidCells = valid
End Function

您的UDF,它将在工作簿的每一次更改中重新引用。然而,就波动性而言,更改单元格样式似乎不符合“更改”的条件。所以,你们可以从UDF中得到你们想要的,但似乎并没有真正的方法让它像一个“正常”的一样重新计算,即使你们把它标记为易变的。如果您使用它,您必须保持意识。

您确定它返回的是空范围吗?当我尝试运行此命令时,VBA会在“设置”行上引发一个错误。如果从工作表中将例程作为UDF调用,则不会看到VBA错误,但UDF应停止执行并返回#VALUE

在任何情况下,你都可以做你想做的事,但有一个很大的警告。首先,守则:

Function ValidCells(rCells As Range) As Range
    Dim valid As Range

    Dim c As Range
    For Each c In rCells
        If c.Style <> "Bad" Then
            If valid Is Nothing Then
                Set valid = c
            Else
                Set valid = Union(valid, c)
            End If
        End If
    Next

    Set ValidCells = valid
End Function

您的UDF,它将在工作簿的每一次更改中重新引用。然而,就波动性而言,更改单元格样式似乎不符合“更改”的条件。所以,你们可以从UDF中得到你们想要的,但似乎并没有真正的方法让它像一个“正常”的一样重新计算,即使你们把它标记为易变的。如果你使用它,你必须保持警惕。

是的,我在尝试其他方法时也发现了重新计算的问题。谢谢你给我的工会小费!是的,我在尝试其他方法时也发现了重新计算的问题。谢谢你给我的工会小费!