Excel VBA替换/替代模块

时间:2013-08-16 15:18:09

标签: excel vba excel-vba replace substitution

我正在使用一个名为ColorFunction的自定义函数,我在互联网上找到了如果背景颜色与另一个单元格相同则对一系列单元格中的值求和。

这是单元格中显示总数的内容。

=ColorFunction($AE$3,$B$3:$W$3,TRUE)

ColorFunction如下所示。

Function ColorFunction(rColor As Range, rRange As Range, Optional SUM As Boolean)
Dim rCell As Range
Dim lCol As Long
Dim vResult
lCol = rColor.Interior.ColorIndex
If SUM = True Then
    For Each rCell In rRange
        If rCell.Interior.ColorIndex = lCol Then
            vResult = WorksheetFunction.SUM(rCell, vResult)
        End If
    Next rCell
Else
    For Each rCell In rRange
        If rCell.Interior.ColorIndex = lCol Then
            vResult = 1 + vResult
        End If
    Next rCell
End If
ColorFunction = vResult
End Function

一切正常。但是我在那里使用的一些值在数字值之后是*。对于我总结这些值的其他单元格,我使用以下内容。

=SUMPRODUCT(VALUE(0&SUBSTITUTE(B3:W3,"*","")))

使用ColorFunction有什么方法可以忽略单元格中的*,当用它们中的颜色求和单元格时。

提前致谢。

2 个答案:

答案 0 :(得分:2)

vResult = vResult + Val(0 & Replace(rCell.Text, "*", vbNullString))

或者,如果单元格的第一部分是数字,则可以使用Val

vResult = vResult + Val(rCell.Text)

答案 1 :(得分:0)

您可以通过添加REPLACE函数(vba.Replace(rCell, "*", "")

)来修改以下代码
Function ColorFunction(rColor As Range, rRange As Range, Optional SUM As Boolean)
Dim rCell As Range
Dim lCol As Long
Dim vResult
lCol = rColor.Interior.ColorIndex
If SUM = True Then
    For Each rCell In rRange
        If rCell.Interior.ColorIndex = lCol Then
            vResult = WorksheetFunction.SUM(replace(rCell,"*",""), vResult)
        End If
    Next rCell
Else
    For Each rCell In rRange
        If rCell.Interior.ColorIndex = lCol Then
            vResult = 1 + vResult
        End If
    Next rCell
End If
ColorFunction = vResult
End Function