Как выделить вычисляемые поля в электронной таблице Excel? - PullRequest
9 голосов
/ 23 марта 2009

Есть ли простой способ сделать это, с помощью макроса или иным образом? Под вычисляемым полем я подразумеваю поле, которое вычисляется из других полей по сравнению с необработанными введенными значениями. Под выделением я подразумеваю окрашенный по-разному. Мне нужно это, чтобы лучше понять большую электронную таблицу от клиента.

Ответы [ 8 ]

11 голосов
/ 28 марта 2009

Чтобы сделать это вручную, нажмите клавишу F5, чтобы вызвать диалог GoTo. Нажмите кнопку «Специальные ячейки». На следующем экране выберите Формулы (это опция справа).

Excel выберет все ячейки, которые соответствуют. Теперь это просто вопрос применения форматирования.

4 голосов
/ 23 марта 2009

Я предполагаю, что вы говорите здесь только о формулах ячеек, а не о вычислениях VBA, поскольку вы можете установить цвет ячейки в своей процедуре VBA, если вы делаете это таким образом.

Способ сделать это - проверить ячейку на формулу после того, как вы поработаете с ней, и изменить ее цвет в этой точке. Соответствующее событие здесь - Изменить, и свойство ячейки 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
3 голосов
/ 05 декабря 2014

TLDR;

Используйте условное форматирование с формулой, чтобы выделить все ячейки, содержащие формулу.

Подробнее

В версии MS Office 365: 5.0.4667.1002, работает следующее

  1. Выберите диапазон ячеек.
    • Case1 : используйте Ctrl + A для выбора всех ячеек .
    • Case2 : выберите определенный диапазон .
  2. Перейдите на вкладку "Главная" в разделе "Стили" и выберите "Условное форматирование> Новое правило".
  3. Откроется диалоговое окно «Новое правило форматирования».
  4. Выберите «Использовать формулу, чтобы определить, какие ячейки форматировать»
  5. В текстовое поле добавить следующее правило: =IsFormula(A1)
    • Case1 : Если вы выбрали все ячейки, используйте A1, потому что это первая ячейка.
    • Case2 : Если вы выбрали определенный диапазон, замените A1 на первую ячейку в вашем диапазоне.
  6. Нажмите Формат ...
  7. Откроется диалоговое окно «Формат ячеек».
  8. Выберите формат, который вы хотите применить. Например. желтый фон.
  9. Нажмите ОК.
  10. Все ячейки с формулами теперь будут иметь, например, желтый фон.

Скриншот

You've created a new formatting rule!

3 голосов
/ 23 марта 2009

Excel имеет встроенную функцию «Trace Dependents» (которая показывает стрелки, чтобы показать вам вычисленные ячейки)

Выберите диапазон, содержащий ваши данные.
Excel 2007 -> Формулы -> Трассировка зависимостей

2 голосов
/ 23 марта 2009

Код ниже должен циклически проходить по каждому листу, выделяя все ячейки, которые начинаются с '=', и окрашивает его в нужный цвет (в настоящее время это цвет 36, который является светло-желтым).

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 последовательных пустых ячеек (чтобы избежать обработки всего в основном пустого листа).

Надеюсь, это поможет.

1 голос
/ 23 марта 2009

Простое решение: Ctrl - `(клавиша чуть выше Tab)

0 голосов
/ 23 декабря 2009

Мне понравился код Крейга, потому что он сохраняет макет существующего рабочего листа и показывает, что рассчитывается, а что нет «с первого взгляда», но я немного переработал его, чтобы он работал лучше активной области листов, и я добавил подпрограмму «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
0 голосов
/ 23 марта 2009

Вы можете использовать свойство Interior.ColorIndex, чтобы изменить цвет фона активной ячейки:

ActiveCell.Interior.ColorIndex = 36

Вы также можете применить его к диапазону:

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

Это относится к Excel 2003, я не использовал последнюю версию, но сомневаюсь, что это изменилось.

Обычно вы можете записать макрос, а затем посмотреть на сгенерированный код, чтобы увидеть, как что-то делается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...