【问题标题】:Excel Macro to Sum by Font ColourExcel 宏按字体颜色求和
【发布时间】:2017-11-28 09:03:52
【问题描述】:

我正在尝试在 Excel 中编写一个宏来按字体颜色求和。一位同事建议我使用这篇文章寻求帮助:ExtendOffice

但是,它总是给出语法错误,我不知道为什么。

代码为:

Public Function SumByColor(pRange1 As Range, pRange2 As Range) As Double

    Application.Volatile
    Dim rng As Range
    Dim xTotal As Double

    xTotal = 0
    For Each rng In pRange1
        If rng.Font.Color = pRange2.Font.Color Then
            xTotal = xTotal + rng.Value
        End If
    Next
    SumByColor = xTotal

End Function

【问题讨论】:

  • 这段代码对我来说很好用,你如何使用它?你是从Sub 调用它吗?或来自工作表中的单元格(作为 UDF)?
  • 请记住使用颜色作为数据的固有缺陷 - 更改字体颜色不会触发重新计算,因此您无法保证此函数在任何给定时间实际上都是正确的,除非您强制重新计算。

标签: excel user-defined-functions vba


【解决方案1】:

您可能会收到错误的唯一原因是pRange1 中的一个单元格是否具有String 或其他一些非数字值。 您可以通过添加If IsNumeric(rng.Value) Then来修改您的代码。

修改后的代码

Public Function SumByColor(pRange1 As Range, pRange2 As Range) As Double

Application.Volatile
Dim rng As Range
Dim xTotal As Double

xTotal = 0
For Each rng In pRange1
    If rng.Font.Color = pRange2.Font.Color Then
        If IsNumeric(rng.Value) Then ' <-- the only thing which might give you an error, if you have a String inside one of the cells
            xTotal = xTotal + rng.Value
        End If
    End If
Next rng
SumByColor = xTotal

End Function

如何从工作表的单元格中调用它:

注意:如果您更改了其中一个单元格的字体颜色,则需要再次使用公式在单元格上按{Enter} 来刷新单元格中的值。

【讨论】:

    【解决方案2】:

    这对我很有用。也许您只是以错误的方式调用它。

    例如,如果我在“D”列中有包含一些字体的数据,则此代码适用于我:

    Public Function SumByColor(pRange1 As Range, pRange2 As Range) As Double
        Application.Volatile
        Dim rng As Range
        Dim xTotal As Double
        xTotal = 0
        For Each rng In pRange1
            If rng.Font.Color = pRange2.Font.Color Then
                xTotal = xTotal + rng.Value
            End If
        Next
        SumByColor = xTotal
        MsgBox (SumByColor)
    End Function
    
    Sub count_colors()
        Call SumByColor(Range("D2", "D" & ActiveSheet.UsedRange.Rows.Count), Range("D2"))
    End Sub
    

    (我忽略了 D1,因为它对我来说是一个标题。你可以改变任何你喜欢的东西)

    不过,我必须同意 Rory 的观点,即使用字体作为数据分隔符并不是一个好主意

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-19
      • 2011-05-16
      • 1970-01-01
      • 2019-12-29
      • 1970-01-01
      相关资源
      最近更新 更多