Excel VBA:通过突出显示颜色重新计算UDF总和
Posted
技术标签:
【中文标题】Excel VBA:通过突出显示颜色重新计算UDF总和【英文标题】:Excel VBA: recalculate in UDF sum by highlight color 【发布时间】:2021-08-21 05:02:35 【问题描述】:我搜索并发现了几个类似的问题,但未能成功找到解决方案。我希望我可以使用数组公式按颜色求和,但这不可能出现。相反,我正在冒险使用这个 vba 解决方案,但它不起作用。
我编写并实现了以下内容:
Option Explicit
Function SumColor(MatchColor As Range, sumRange As Range) As Double
Dim cell As Range
Dim myColor As Long
myColor = MatchColor.Cells(1, 1).Interior.Color
For Each cell In sumRange
If cell.Interior.Color = myColor Then
SumColor = SumColor + cell.Formula
End If
Next cell
End Function
我也用 cell.Value 这样尝试过:
Option Explicit
Function SumColor(MatchColor As Range, sumRange As Range) As Double
Dim cell As Range
Dim myColor As Long
myColor = MatchColor.Cells(1, 1).Interior.Color
For Each cell In sumRange
If cell.Interior.Color = myColor Then
SumColor = SumColor + cell.Value
End If
Next cell
End Function
应用: 老板(低级 excel 用户)使用颜色来突出显示不同人的工作。这些作业是使用分钟分配的。
例如,分配给 Jonny 的工作以绿色突出显示,而分配给 Katie 的工作以蓝色突出显示。
他希望分配作业 A、B 和 C,在作业时间单元格 100、120 和 180 中以分钟表示。为此,他将每个单元格突出显示为绿色。他希望将 400 分钟的工作时间分配给 green = Jonny。
现实世界,发生了什么:
有时boss会删除单元格中的值,但不删除突出显示,导致单元格突出显示为空。解决方案是输入 0 但他忘记了或只是不想要这个。他忘记了。 :/ 有时他会更改单元格突出显示颜色,在本例中,从蓝色变为绿色,以分配给不同的员工。例如,他可以从作业 A 中移除蓝色突出显示(现在没有颜色),并将作业 B 中的突出显示更改为绿色。在这种情况下,他想要一个结果:Jonny 180(只有工作 C 仍然是绿色的); Katie 120(只有工作 B 是蓝色的)。具体求助:
-
当他输入新值或更改颜色时,UDF 不会重新计算。如果我在包含 UDF 的单元格上按 Enter 键,它确实有效。实施的这些 sumcolor 总数太多,无法在每个总数上手动输入。我知道我需要编写一个触发器来重新计算 UDF。链接的其他答案中引用的解决方案将不起作用,因为我在许多工作表的许多单元格中调用 UDF。我需要在工作簿的 11 张纸上触发重新计算此 UDF 的每个实例。我希望 UDF 在输入任何工作簿单元格时重新计算,或者在更改单元格时更好。这是一个非常简单的工作簿。我认为每次进行批发重新计算的成本并不高。
分开,也是一个问题: 3) 如果单元格为空或有文本条目,但也突出显示 myColor,他会收到 #VALUE 错误。我需要忽略 UDF 中的 null 和文本输入。
根据这个主题的问题数量,微软应该添加一个功能
=sumcolor(cellcolormatch,sumrange) 公式……但我跑题了……
【问题讨论】:
欢迎来到 SO。检查calculation mode 并查看Application.Volatile method 是否有帮助.. 供参考docs.microsoft.com/en-us/office/vba/excel/concepts/… 请编辑您的帖子并删除未使用的详细信息和文本以简化您的问题,并注意关注您的主要问题并详细解释它以帮助其他人回答您的问题。 【参考方案1】:试试这个:
' regular module
Option Explicit
Function SumColor(MatchColor As Range, sumRange As Range) As Double
Application.Volatile 'recalculates with any recalculation
Dim cell As Range, myColor As Long
myColor = MatchColor(1).Interior.Color
For Each cell In sumRange
'summarize only numbers (not errors or strings) with a specified color
If VarType(cell) = vbDouble And cell.Interior.Color = myColor Then
SumColor = SumColor + cell
End If
Next cell
End Function
您可以使用 F9 手动重新计算整个工作簿,也可以使用 SelectionChange 事件自动重新计算
' this workbook class code module
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Sh.Calculate
End Sub
【讨论】:
以上是关于Excel VBA:通过突出显示颜色重新计算UDF总和的主要内容,如果未能解决你的问题,请参考以下文章