Форматировать ячейки, содержащие формулу или твёрдое число - PullRequest
0 голосов
/ 03 марта 2019

Я новичок в VBA, и мне нужна помощь, пожалуйста.

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

Screenshot

Ответы [ 3 ]

0 голосов
/ 06 марта 2019

Вы ищете метод Range.SpecialCells .

  • .SpecialCells(xlCellTypeConstant, xlNumbers) дает вам все постоянные числа
    например, 500
  • .SpecialCells(xlCellTypeFormulas, xlNumbers) дает вам все формулы с числами как результат
    например SUM(C8:C13) или SUM(C8:C13)+522

Обратите внимание, что SpecialCells выдает ошибку, если указанный тип ячейки не найден.Поэтому вы должны проверить это, например.подавляя ошибку и проверяя установленную переменную для Nothing:

Dim MyConstantNumbers As Range
On Error Resume Next
Set MyConstantNumbers = Range("A1:A10").SpecialCells(xlCellTypeConstant, xlNumbers)
On Error Goto 0
If Not MyConstantNumbers Is Nothing Then
    'color your cells here
End If
0 голосов
/ 06 марта 2019

Вы можете выбрать определенные типы ячеек в диапазоне с помощью метода SpecialCells.Ячейки с формулой имеют значение xlCellTypeFormulas, а ячейки с «жестко запрограммированным» значением имеют значение xlCellTypeConstants

Sub ColorCellsByType(Target As Range, FormulaColour As Long, ConstantColour As Long)
    On Error GoTo NoFormula 'Skip line if there is a "no cells" error
    Target.SpecialCells(xlCellTypeFormulas).Interior.Color = FormulaColour
NoFormula:
    On Error GoTo NoComments 'Skip line if there is a "no cells" error
    Target.SpecialCells(xlCellTypeConstants, xlNumbers).Interior.Color = ConstantColour 'Does not include Text values
NoComments:
    On Error GoTo 0 'Show error messages, so you can fix them
End Sub

Ваша «часть 3» не имеет смысла, поскольку =SUM(C8:C13)+552 - это обычная формула- Вы имели в виду функцию с добавленной к ней константой?

0 голосов
/ 03 марта 2019

Существует тест HasFormula, который вы можете запустить.

Вам нужно будет выбрать диапазон, затем запустить макрос или изменить For each cel in Selection на For each cel in [A1:B25] (измените [A1:B25] на любой диапазон, который выхочу)

Sub CheckFormulas()
   Dim cel as Range 
   For each cel in Selection 
     If cel.HasFormula then
       ’Whatever you want to do the formula cell here
     Else
       ’Whatever you want to do to the non formula cell here 
      End if 
    Next cel
End sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...