如何在Excel电子表格中突出显示计算字段?

时间:2009-03-23 05:21:40

标签: excel

有没有一种简单的方法可以通过宏或其他方式来做到这一点?通过计算字段,我指的是从其他字段计算的字段与原始输入值。突出显示我的意思是不同颜色。我需要这个来更好地理解客户端的大型电子表格。

8 个答案:

答案 0 :(得分:11)

要手动执行此操作,请按F5键以显示GoTo对话框。单击特殊单元格按钮。在下一个屏幕上,选择公式(它是右侧的选项)。

Excel将选择匹配的所有单元格。现在只需要应用格式化。

答案 1 :(得分:4)

我假设你只是在讨论单元格公式而不是VBA计算,因为你可以在VBA程序中设置单元格颜色,如果你这样做的话。

执行此操作的方法是在完成后检查单元格中的公式,并在此时更改其颜色。此处的相关事件是Change,单元格的HasFormula属性将告诉您单元格是文字值,还是根据公式计算:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.HasFormula Then
        Target.Interior.Color = vbRed
    Else
        ' remove background colour entirely (i.e. No Fill)
        Target.Interior.ColorIndex = xlColorIndexNone
    End If
End Sub

答案 2 :(得分:3)

Excel具有“Trace Dependents”的内置功能(显示箭头以显示计算的单元格)

选择包含数据的范围 Excel 2007 - >公式 - >跟踪家属

答案 3 :(得分:3)

TLDR;

对公式使用条件格式以突出显示包含公式的所有单元格。

详细

在MS Office 365版本:5.0.4667.1002中,以下工作

  1. 选择一系列单元格。
    • 案例1 :使用Ctrl + A选择所有单元格
    • 案例2 :选择特定范围
  2. 转到“主页”标签,“样式”部分,然后选择“条件格式设置”>新规则。
  3. 将打开“新格式规则”对话框。
  4. 选择“使用公式确定要格式化的单元格”
  5. 在文本框中,添加以下规则:=IsFormula(A1)
    • 案例1 :如果您选择了所有单元格,请使用A1,因为它是第一个单元格。
    • 案例2 :如果您选择了特定范围,请将A1替换为您所在范围内的第一个单元格。
  6. 点击格式化...
  7. 将打开“格式化单元格”对话框。
  8. 选择您要应用的格式。例如。黄色背景。
  9. 单击“确定”。
  10. 具有公式的所有单元格现在都将具有黄色背景。
  11. 截图

    You've created a new formatting rule!

答案 4 :(得分:2)

下面的代码应循环显示每张纸,突出显示以'='开头的每个单元格,并将其着色为所需的颜色(当前颜色为浅黄色)。

Sub HighLightFormulas()
Dim objSheet As Worksheet
Dim strOriginalSheet As String
Dim intMaxBlankCells As Integer
Dim intBlankColumns As Integer
Dim intBlankRows As Integer
Dim intCurrentColumn As Integer
Dim intCurrentRow As Long

intMaxBlankCells = 40
strOriginalSheet = ActiveSheet.Name

For Each objSheet In Worksheets
    intBlankRows = 0
    intCurrentRow = 1
    intCurrentColumn = 1

    Do While intCurrentRow <= 65536 And intBlankRows <= intMaxBlankCells
        intBlankColumns = 0
        intCurrentColumn = 1

        Do While intCurrentColumn <= 256 And intBlankColumns <= intMaxBlankCells
          If Left(objSheet.Cells(intCurrentRow, intCurrentColumn).Formula, 1) = '=' Then
            objSheet.Cells(intCurrentRow, intCurrentColumn).Interior.ColorIndex = 36
          End If
          intCurrentColumn = intCurrentColumn + 1
        Loop

        If intCurrentColumn = intBlankColumns Then
            intBlankRows = intBlankRows + 1
        Else
            intBlankRows = 0
        End If
        intCurrentRow = intCurrentRow + 1
    Loop
Next objSheet
Worksheets(strOriginalSheet).Activate

Call MsgBox("The Highlighting process has completed", vbOKOnly, "Process Complete")

End Sub

它也将在连续40个空白单元格后停止(以避免处理所有大部分空白单元格)。

希望这有帮助。

答案 5 :(得分:1)

简单的解决方案: Ctrl - `(Tab上方的键)

答案 6 :(得分:0)

您可以使用Interior.ColorIndex属性更改活动单元格的背景颜色:

ActiveCell.Interior.ColorIndex = 36

您也可以将它应用于范围:

Range("A1:A5").Interior.Color = RGB(200,160,35)

这适用于Excel 2003,我没有使用过最新版本,但我怀疑这已经改变了。

您通常可以录制一个宏,然后查看生成的代码,看看是如何完成的。

答案 7 :(得分:0)

我在这里喜欢Craig的代码,因为它保留了现有工作表的布局,但却显示了计算内容和“一目了然”的内容,但我对其进行了重新设计,以便更好地完成工作工作表的活动区域,我添加了一个'UnhighlightFormulas'子程序,因此可以轻松撤消格式化(例如在打印之前)。它已经在Excel 2007中进行了测试。请注意,在运行此文件时,您将丢失任何其他单元格背景颜色。

Option Explicit
Public Sub HighlightFormulas()
ColorFormulas (36) '36 is yellow
End Sub

Public Sub UnhighlightFormulas()
ColorFormulas (-4142) '-4142 is default
End Sub

Private Sub ColorFormulas(intColor As Integer)
Dim wshSheet As Worksheet
Dim rngRange As Range
Dim rngCell As Range
For Each wshSheet In Worksheets
  Set rngRange = RangeInUse(wshSheet)
  If Not rngRange Is Nothing Then
    For Each rngCell In rngRange
      If Left(rngCell.Formula, 1) = "=" Then
        If rngCell.Interior.ColorIndex <> intColor Then rngCell.Interior.ColorIndex = intColor
      Else
        If rngCell.Interior.ColorIndex <> -4142 Then rngCell.Interior.ColorIndex = -4142 '-4142 is default
      End If
    Next
  End If
Next
End Sub

Private Function RangeInUse(ws As Worksheet) As Range
  Dim LastRow&, LastCol%
' adapted from http://www.beyondtechnology.com/geeks012.shtml
' Error-handling in case there is no data in worksheet
  On Error Resume Next
  With ws
    LastRow& = .Cells.Find(What:="*", SearchDirection:=xlPrevious, SearchOrder:=xlByRows).Row
    LastCol% = .Cells.Find(What:="*", SearchDirection:=xlPrevious, SearchOrder:=xlByColumns).Column
  End With
  Set RangeInUse = ws.Range("A1", Cells(LastRow&, LastCol%))
End Function