首页 > 解决方案 > 工作表计算 - 字体颜色随单元格值变化而变化

问题描述

我一直在寻找几个小时,但努力寻找答案。

我有一本包含各种 vlookup 的工作簿。我已将一张纸限制为手动计算,我试图找到一个宏,然后手动运行计算并更改已更改单元格的字体颜色。

我目前正在使用worksheet_calculate()函数,但我不知道如何让它在计算后挑选出单个单元格的更改并更改字体颜色。

提前致谢!

标签: excelvba

解决方案


您需要在计算之前将所有值读入数组,以便将其与计算的值进行比较:

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>

在此处输入图像描述

请注意,如果您在大数据上运行,比较将花费大量时间。因此,不要在整个工作表上运行它,而只能在您想要的数据范围上运行。


推荐阅读