Фрагментація умовного форматування Excel


19

Часто я створюю аркуш з умовним форматуванням і встановлюю діапазони стільників так, щоб правила умовного форматування застосовувалися лише один раз до діапазону клітин, наприклад,

Make $A$1:$A$30 red and
Make $B$1:$B$30 blue.

Після вставки / видалення ряду рядків і / або стовпців набір правил умовного форматування стає дуже фрагментованим, з тими ж самими правилами, які повторюються для різних діапазонів. напр.

Make $A$1:$A$2 red 
Make $A$3:$A$4 red 
Make $A$5:$A$9 red
Make $A$10:$A$20 red 
Make $A$21:$A$30 red
...
Make $B$1:$B$2 blue 
Make $B$3:$B$4 blue
Make $B$5:$B$9 blue
Make $B$10:$B$20 blue 
Make $B$21:$B$30 blue
....

Чи існує хороша практика запобігання цього, або я приречена на очищення наборів правил вручну, коли вони стають надто брудними?

Відповіді:


12

Вставлення та видалення рядків не призводить до фрагментації умовного форматування.

Причиною є копіювання / вставлення між клітинами або рядками за допомогою стандартного копіювання / вставки. Виправлення завжди використовується для вставки або вставки. У правому клавіші призначення і в розділі Параметри вставки буде запропоновано 123 (значення) і f (формули). Не копіюйте / вставляйте форматування, оскільки це призводить до того, що умови будуть скопійовані / вставлені, а іноді вони будуть фрагментовані.

Коли ви робите стандартну копію / вставку, вона також копіює умовні формули комірки. Припустимо, у вас є два правила:
1) Зробіть $ A $ 1: $ A $ 30 червоним
2) Зробіть $ B $ 1: $ B $ 30 синього кольору
Тепер виберіть A10: B10 і скопіюйте / вставте його до A20: B20. Що Excel буде робити, це видалення умовного форматування для A20: B20 з правил, які застосовуються до цих осередків і додавання нових правил, які мають форматування для A20: B20. Ви закінчуєте чотирма правилами.
1) Зробіть = $ A $ 20 червоним
2) Зробіть = $ B $ 20 синього кольору
3) Зробити = $ A $ 1: $ A $ 19, $ A $ 21: $ A $ 30 червоний
4) Зробіть = $ B $ 1: $ B $ 19, $ B $ 21: $ B $ 30 синій
Якби ви копіювали / вставляли тільки A10 до A20, Excel помітив би те ж саме правило, що застосовується як до джерела, так і до пункту призначення, і не фрагментує правила. Excel не є достатньо розумним, щоб зрозуміти, як уникнути фрагментації, коли копія / вставлення впливає на два або більше умовних форматів.

Вставлення та видалення рядків не призводить до фрагментації, оскільки Excel просто розширює або зменшує правила (и) умов, які охоплюють область, де ви вставили або видалили рядок.

Хтось запропонував використовувати $ Q: $ Q, а не $ Q $ 1: $ Q $ 30. Це не допоможе, і ви все одно отримаєте фрагментацію, коли ви копіюєте / вставляєте форматування комірки, як зазначено вище.


Також зверніть увагу, що Cut & lt; kbd & gt; ctrl-x & lt; kbd & gt; видалятиме умовне форматування з вирізаної комірки (тепер клітинка не має форматування) і вставляє форматування в нову клітинку. Я впевнений хтось там знає, як запобігти цьому?
user5389726598465

@ user135711 Це залежить від того, що ви намагаєтеся зробити. За замовчуванням, копіювати і вирізати обидві підібрані формули, форматування і посилання вихідної комірки з вирізом також видаляючи їх з вихідної комірки. Якщо метою є видалення формули / значення з джерела, але щоб зберегти форматування, я скопіювати / вставити матеріал до місця призначення, а потім видалити джерело. Видалити (клавіша Del) очищає тільки формулу або значення. Він залишає форматування та посилання на місці.
user3347790

1
Функція INDIRECT (), підвищена як відповідь в іншій версії цього питання, не працює, тому що вона оцінюється клітинкам, коли використовується в полі apply to, так само, як якщо б ви ввели клітинки вручну.
user5389726598465

superuser.com/a/1113566/79488 має хороше рішення для очищення фрагментованих правил, якщо ви використовували копію / пасі
Fabian Schmied

5

Мали таку ж проблему при застосуванні умовного формату до стовпця таблиці. При додаванні рядків, я виявив, що найкраще застосовувати правило до всього стовпця $A:$Aабо в залежності від стовпця.

enter image description here


2

Копіювання / вставлення / врізання / вставлення клітин вручну викликає проблему, і її важко уникнути.

Проблема вирішена за допомогою макросу VBA.

Замість того, щоб копіювати / вставляти / різати / вставляти клітини вручну, я роблю це за допомогою макросу Excel, який зберігає діапазони комірок (активується за допомогою кнопки).

Sub addAndBtnClick()
    Set Button = ActiveSheet.Buttons(Application.Caller)
    With Button.TopLeftCell
        ColumnIndex = .Column
        RowIndex = Button.TopLeftCell.Row
    End With
    currentRowIndex = RowIndex
    Set Table = ActiveSheet.ListObjects("Table name")
    Table.ListRows.Add (currentRowIndex)
    Set currentCell = Table.DataBodyRange.Cells(currentRowIndex, Table.ListColumns("Column name").Index)
    currentCell.Value = "Cell value"
    Call setCreateButtons
End Sub

Sub removeAndBtnClick()
    Set Button = ActiveSheet.Buttons(Application.Caller)
    With Button.TopLeftCell
        ColumnIndex = .Column
        RowIndex = Button.TopLeftCell.Row
    End With
    currentRowIndex = RowIndex
    Set Table = ActiveSheet.ListObjects("Table name")
    Table.ListRows(currentRowIndex - 1).Delete
End Sub

Sub setCreateButtons()
    Set Table = ActiveSheet.ListObjects("Table name")
    ActiveSheet.Buttons.Delete
    For x = 1 To Table.Range.Rows.Count
        For y = 1 To Table.Range.Columns.Count

            If y = Table.ListColumns("Column name").Index Then
                Set cell = Table.Range.Cells(x, y)
                If cell.Text = "Some condition" Then
                    Set btn = ActiveSheet.Buttons.Add(cell.Left + cell.Width - 2 * cell.Height, cell.Top, cell.Height, cell.Height)
                    btn.Text = "-"
                    btn.OnAction = "removeAndBtnClick"
                    Set btn = ActiveSheet.Buttons.Add(cell.Left + cell.Width - cell.Height, cell.Top, cell.Height, cell.Height)
                    btn.Text = "+"
                    btn.OnAction = "addAndBtnClick"
                End If
            End If
        Next
    Next
End Sub

Щоб скинути форматування (не потрібне):

Sub setCondFormat()
    Set Table = ActiveSheet.ListObjects("Table name")
    Table.Range.FormatConditions.Delete
    With Table.ListColumns("Column name").DataBodyRange.FormatConditions _
        .Add(xlExpression, xlEqual, "=ISTLEER(A2)") 'Rule goes here
        With .Interior
            .ColorIndex = 3 'Formatting goes here
        End With
    End With
    ...
End Sub

2
Будь ласка, не публікуйте одну і ту ж відповідь на кілька запитань. Якщо одна й та сама інформація дійсно відповідає на обидва питання, то одне питання (як правило, нове) має бути закрите як дублікат іншого. Ви можете вказати це шляхом голосування, щоб закрити його як дублікат або, якщо у вас недостатньо репутації, підняти прапор , щоб вказати, що це дублікат. В іншому випадку налаштуйте свою відповідь на це запитання і не просто вставляйте відповідь у декілька місць.
DavidPostill

1

(Це обхідний шлях, тому я збирався поставити його як коментар, але я не маю достатньої репутації.)

На жаль, здається, що ви приречені на очищення наборів правил, коли вони стають брудними.

Найпростішим способом цього є створення робочого листа, що містить потрібне форматування, але відсутні дані. Це може бути у тій самій робочій книзі, що й оригінальний лист, або в іншій робочій книзі, яку ви зберігаєте як шаблон.

Коли потрібно очистити, перейдіть на цей аркуш, клацніть правою кнопкою миші Вибрати все натисніть кнопку Художник формату , потім натисніть кнопку Вибрати все на оригінальному аркуші. Формати перезаписуються незаплямованою версією.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.