excel - 工作表计算 - 字体颜色随单元格值变化而变化
问题描述
我一直在寻找几个小时,但努力寻找答案。
我有一本包含各种 vlookup 的工作簿。我已将一张纸限制为手动计算,我试图找到一个宏,然后手动运行计算并更改已更改单元格的字体颜色。
我目前正在使用worksheet_calculate()
函数,但我不知道如何让它在计算后挑选出单个单元格的更改并更改字体颜色。
提前致谢!
解决方案
您需要在计算之前将所有值读入数组,以便将其与计算后的值进行比较:
Option Explicit
Sub ColorChangedCellsAfterCalculation()
Dim RangeToCheck As Range 'define which range we want to check
Set RangeToCheck = Worksheets("Sheet1").Range("A1:C5")
'read values BEFORE calculation into array
Dim PreCalcValues As Variant
PreCalcValues = RangeToCheck.Value
'calculate
Application.Calculate
'read values AFTER calculation into array
Dim PostCalcValues As Variant
PostCalcValues = RangeToCheck.Value
Dim ChangedData As Range 'we collect all changed cells in this variable
'Loop through array and check which row/column values changed
Dim iRow As Long, iCol As Long
For iRow = 1 To RangeToCheck.Rows.Count
For iCol = 1 To RangeToCheck.Columns.Count
If PreCalcValues(iRow, iCol) <> PostCalcValues(iRow, iCol) Then
If ChangedData Is Nothing Then 'collect all changed data
Set ChangedData = RangeToCheck(iRow, iCol) 'first changed cell
Else
Set ChangedData = Union(ChangedData, RangeToCheck(iRow, iCol)) 'add all other changed cells
End If
End If
Next iCol
Next iRow
If Not ChangedData Is Nothing Then ChangedData.Interior.Color = vbRed 'mark all changed data red
End Sub
想象一下以下数据……</p>
它会变成……</p>
请注意,如果您在大数据上运行,比较将花费大量时间。因此,不要在整个工作表上运行它,而只能在您想要的数据范围上运行。
推荐阅读
- mysql - 为什么第二次插入给我的表不存在
- python - 它告诉我“预期有缩进块”有人可以帮助我吗?
- reactjs - Docker:绑定挂载没有像我预期的那样工作
- javascript - 使用javascript从数据库中删除
- java - 如何在java中的函数内声明参数以接收像python self这样的图像?
- laravel - Laravel Pivot 分配给 NULL 结果多对多
- javascript - 在 Javascript 构造函数中处理项目
- amazon-web-services - 将 S3 存储桶网站仅限于某些 AWS 账户
- node.js - face-api.js 从磁盘加载图像文件
- javascript - Firefox:以编程方式触发自动滚动