powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Замена условного-отформатированных ячеек их цветом
7 сообщений из 7, страница 1 из 1
Замена условного-отформатированных ячеек их цветом
    #34416760
exelm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите пожалуйста код для снятия в выделенном диапазоне условных форматов у ячеек, но при этом сохраняя их цвет, каким он был до замены (по аналогии: специальная вставка - значения)
...
Рейтинг: 0 / 0
Замена условного-отформатированных ячеек их цветом
    #34416877
lena_####
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exelm

Вот мой вариант. Но тестила его мало

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
Sub s()
  Dim v_Cell As Range
  Dim v_Operator( 1  To  8 ) As String
  Dim v_Condition As Long, i As Long
  
  v_Operator(xlBetween) = ">="
  v_Operator(xlNotBetween) = "<"
  v_Operator(xlEqual) = "="
  v_Operator(xlNotEqual) = "<>"
  v_Operator(xlGreater) = ">"
  v_Operator(xlLess) = "<"
  v_Operator(xlGreaterEqual) = ">="
  v_Operator(xlLessEqual) = "<="

  Application.ScreenUpdating = False
  For Each v_Cell In Selection.Cells
    'если в ячейке есть условные форматы (коллекция FormatConditions не пуста)
    If v_Cell.FormatConditions.Count >  0  Then
      'для каждого условия проверяем, выполняется ли оно, и если да - "запоминаем" номер этого условия
      For i =  1  To v_Cell.FormatConditions.Count
        v_Condition =  0 
        With v_Cell.FormatConditions(i)
          Select Case .Type
          Case xlExpression 'условный формат - "формула"
            If Evaluate(.Formula1) Then
              v_Condition = i
              Exit For
            End If
          Case xlCellValue  'условный формат - "значение"
            Select Case .Operator
            Case xlBetween  'использован оператор "между"
              If Evaluate(v_Cell.Value & v_Operator(.Operator) & .Formula1) _
              And Evaluate(.Formula2 & v_Operator(.Operator) & v_Cell.Value) Then
                v_Condition = i
                Exit For
              End If
            Case xlNotBetween  'использован оператор "вне"
              If Evaluate(v_Cell.Value & v_Operator(.Operator) & .Formula1) _
              Or Evaluate(.Formula2 & v_Operator(.Operator) & v_Cell.Value) Then
                v_Condition = i
                Exit For
              End If
            Case Else  'использован другой оператор
              If Evaluate(v_Cell.Value & v_Operator(.Operator) & .Formula1) Then
                v_Condition = i
                Exit For
              End If
            End Select
          End Select
        End With
      Next i
      If v_Condition >  0  Then 'если условный формат "активен" то используем его
        'здесь код только для цвета ячейки, но также можно перенести из условного формата
        'формат шрифта, границы, узора
        v_Cell.Interior.Color = v_Cell.FormatConditions(v_Condition).Interior.Color
      End If
      v_Cell.FormatConditions.Delete
    End If
  Next v_Cell
  Application.ScreenUpdating = False
End Sub
...
Рейтинг: 0 / 0
Замена условного-отформатированных ячеек их цветом
    #34416909
lena_####
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exelm

Мдя. Поторопилась. Виновата. Код глючит, где - пока не знаю
...
Рейтинг: 0 / 0
Замена условного-отформатированных ячеек их цветом
    #34416927
exelm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
lena_####

Да, выскакивает run-time error 13 в строке:
Код: plaintext
If Evaluate(.Formula1) Then

--
Нашел что-то в тему, может поможет?..
...
Рейтинг: 0 / 0
Замена условного-отформатированных ячеек их цветом
    #34416997
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exelm Нашел что-то в тему, может поможет?.. скорее вот это: http://www.cpearson.com/excel/CFColors.htm

KL
[MVP - Microsoft Excel]
...
Рейтинг: 0 / 0
Замена условного-отформатированных ячеек их цветом
    #34417082
lena_####
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот очередной вариант.

В процессе столкнулась с парой проблем (Win XP SP2, Office 2002):
1. Необъяснимое для меня явление такого свойства.
Пробегаю коллекцию ячеек в выделении:
Код: plaintext
1.
2.
  For Each v_Cell In Selection.Cells
    ...
  Next v_Cell
Для каждой ячейки получаю свойство:
Код: plaintext
  v_Cell.FormatConditions(i).Formula1
Картина такая. В ячейка выделения содержится условный формат, в котором использована формула вида: “=$A41=1” (ячейки столбца “N” в примере, начиная с 41-й).
Код
Код: plaintext
1.
2.
3.
4.
5.
6.
Sub s()
  For Each v_Cell In Selection.Cells
    If v_Cell.FormatConditions.Count >  0  Then
      Debug.Print v_Cell.Address; Tab; v_Cell.FormatConditions( 1 ).Formula1
    End If
  Next v_Cell
End Sub
выводит в окно отладки следующее:
Код: plaintext
1.
2.
3.
$N$ 41          =$A51= 1 
$N$ 42          =$A51= 1 
$N$ 43          =$A51= 1 
$N$ 44          =$A51= 1 
Т.е. при попытке получить адрес ячейки, результат корректный, а при попытке получить свойство v_Cell.FormatConditions(1).Formula1 для той же ячейки – получаю везде свойство активной ячейки.
Это совершенно поставило меня в тупик.
Добавила строку v_Cell.Activate и все прошло:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Sub s()
  For Each v_Cell In Selection.Cells
    v_Cell.Activate
    If v_Cell.FormatConditions.Count >  0  Then
      Debug.Print v_Cell.Address; Tab; v_Cell.FormatConditions( 1 ).Formula1
    End If
  Next v_Cell
End Sub
выводит в окно отладки то, что и ожидалось получить:
Код: plaintext
1.
2.
3.
$N$ 41          =$A41= 1 
$N$ 42          =$A42= 1 
$N$ 43          =$A43= 1 
$N$ 44          =$A44= 1 

Для меня подобной поведение оказалось неожиданным.

2. У меня Office русский. Все тоже свойство v_Cell.FormatConditions(1).Formula1 возвращает формулы, используемые в условных форматах в русской локали, например, “ =И($A41=3;$B41=1)”. При этом метод Evaluate() с подобными формулами у меня не работает. Но прекрасно работает с аналогичными формулами в англицкой локали. Решение по переводу формул придумалось кривое : у некоей ячейки пустого листа меняю св-во FormulaLocal и затем получаю св-во Formula:

Код: plaintext
1.
  Worksheets("Лист1").Range("A1").FormulaLocal = v_Formula
  f_Evaluate = Evaluate(Worksheets("Лист1").Range("A1").Formula)

Вариант кривой, буду очень признательна за объяснения, как сделать это иначе.

Короче говоря, с теми условными форматами, которые встретились в прикрепленном файле код работает, но я не исключаю проблемы, связанные с вычислением формул для других вариантов условных форматов. Если они будут возникать, нужно в функции Function f_Evaluate(...) смотреть, какой аргумент передан в функцию, и какой передается методу Evaluate(). Для “уборки” лишнего нужно воспользоваться функцией Function f_DeleteSomeOne(...) просто добавив в функцию Function f_Evaluate(...) очередную строку вида:
Код: plaintext
  v_Formula = f_DeleteSomeOne(v_Formula, "что_нужно_найти", "на_что_найденное_поменять")
...
Рейтинг: 0 / 0
Замена условного-отформатированных ячеек их цветом
    #34419802
exelm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KL (XL)
Что-то не могу разобратся, как изменить те VBA-функции под мой случай?
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Замена условного-отформатированных ячеек их цветом
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]