如何在Excel VBA中编写自定义项以过滤一系列单元格?
我已经养成了通过改变单元格样式来标记外围数据的习惯。我想在excel中编写一个UDF,将单元格的如何在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,
范围
作为输入,并返回该范围中未标记为异常值的子集
这就是我尝试过的:
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中得到你们想要的,但似乎并没有真正的方法让它像一个“正常”的一样重新计算,即使你们把它标记为易变的。如果你使用它,你必须保持警惕。是的,我在尝试其他方法时也发现了重新计算的问题。谢谢你给我的工会小费!是的,我在尝试其他方法时也发现了重新计算的问题。谢谢你给我的工会小费!