Как выделить вычисляемые поля в электронной таблице Excel?

У меня есть функция, позволяющая получать только имена тех файлов, которые мне нужны, на основе их расширений.

def get_files(extensions):
    all_files = []
    for ext in extensions:
        all_files.extend(Path('/Users/mrh/Python/calls').glob(ext))

for file in get_files(('*.wav', '*.xml')):
    print (file.name)

Теперь мне нужно выяснить, как проверить каждый файл «file.name» для строки даты в его имени файла. то есть теперь мне нужно выполнить что-то вроде

if name.startswith('eerasedd_'):
    fileDate = datetime.strptime(name[9:17], DATEFMT).date()
else:
    fileDate = datetime.strptime(name[0:8], DATEFMT).date()

для «file.name», чтобы увидеть, не старше ли файлы 180 дней.

10
задан shruti1810 28 May 2015 в 08:01
поделиться

7 ответов

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

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

12
ответ дан 3 December 2019 в 16:31
поделиться

Excel имеет созданный в функции "Зависимых Трассировки" (который показывает стрелки, чтобы показать Вам расчетные ячейки),

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

3
ответ дан 3 December 2019 в 16:31
поделиться

Я собираюсь предположить, что Вы только говорите о формулах ячейки, а не вычислениях 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
4
ответ дан 3 December 2019 в 16:31
поделиться

Код ниже должен циклически повториться через каждый лист, выделяя каждый ячейки, который запускается с '=' и окрашивает его требуемым цветом (в настоящее время окрашивают 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")

Конец Sub

Это также остановится после 40 последовательных пустых ячеек (чтобы не обрабатывать весь главным образом пустой лист).

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

2
ответ дан 3 December 2019 в 16:31
поделиться

Простое решение: Ctrl - '(ключ чуть выше Вкладки)

1
ответ дан 3 December 2019 в 16:31
поделиться

Можно использовать Внутреннюю часть. Свойство ColorIndex для изменения цвета фона активной ячейки:

ActiveCell.Interior.ColorIndex = 36

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

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

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

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

0
ответ дан 3 December 2019 в 16:31
поделиться

Мне здесь понравился код Крейга, потому что он сохраняет макет существующего рабочего листа и в то же время показывает, что вычисляется, а что нет "с первого взгляда", но я его немного переработал, так что он лучше справляется с проработкой активной области листов, и я добавил подпрограмму "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
ответ дан 3 December 2019 в 16:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: