Excel-bedingte Formatierungsfragmentierung

22

Oft erstelle ich ein Blatt mit bedingter Formatierung und setze die Zellbereiche so, dass die bedingten Formatierungsregeln nur einmal auf einen Zellbereich angewendet werden, z

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

Nach dem Einfügen / Löschen einer Reihe von Zeilen und / oder Spalten wird der Regelsatz für die bedingte Formatierung sehr fragmentiert, wobei dieselben Regeln für verschiedene Bereiche wiederholt werden. z.B

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
....

Gibt es eine bewährte Methode, um dies zu verhindern, oder bin ich dazu verdammt, die Regelsätze manuell zu bereinigen, wenn sie zu unordentlich werden?

Rhys Gibson
quelle

Antworten:

13

Das Einfügen und Löschen von Zeilen führt nicht dazu, dass die bedingte Formatierung fragmentiert wird.

Die Ursache ist das Kopieren / Einfügen zwischen Zellen oder Zeilen mit dem Standard-Kopieren / Einfügen. Der Fix besteht darin, immer einen Einfüge-Wert oder eine Einfüge-Formel zu verwenden. Klicken Sie mit der rechten Maustaste auf das Ziel, und im Abschnitt Einfügeoptionen werden 123 (Werte) und f (Formeln) angezeigt. Kopieren / Einfügen Sie keine Formatierungen, da dadurch die Bedingungen kopiert / eingefügt werden und manchmal fragmentiert werden.

Beim Kopieren / Einfügen werden auch die bedingten Formeln der Zelle kopiert. Nehmen wir an, Sie haben zwei Regeln:
1) Machen Sie $ A $ 1: $ A $ 30 rot
2) Machen Sie $ B $ 1: $ B $ 30 blau
Wählen Sie nun A10: B10 und kopieren Sie diese in A20: B20. Excel löscht die bedingte Formatierung für A20: B20 aus den Regeln, die für diese Zellen gelten, und fügt neue Regeln mit der Formatierung für A20: B20 hinzu. Am Ende haben Sie vier Regeln.
1) Make = $ A $ 20 rot
2) Make = $ B $ 20 blau
3) Make = $ A $ 1: $ A $ 19, $ A $ 21: $ A $ 30 rot
4) Make = $ B $ 1: $ B $ 19, $ B $ 21: $ B $ 30 blau
Wenn Sie nur A10 nach A20 kopiert / eingefügt hätten, wäre Excel aufgefallen, dass auf die Quelle und das Ziel die gleiche Regel angewendet wurde, und die Regeln werden nicht fragmentiert. Excel ist nicht klug genug, um herauszufinden, wie Fragmentierung vermieden werden kann, wenn sich das Kopieren / Einfügen auf zwei oder mehr bedingte Formate auswirkt.

Das Einfügen und Löschen von Zeilen führt nicht zu einer Fragmentierung, da Excel die Bedingungsregel (n), die den Bereich abdecken, in dem Sie die Zeile eingefügt oder gelöscht haben, einfach erweitert oder verkleinert.

Jemand schlug vor, $ Q: $ Q anstelle von $ Q $ 1: $ Q $ 30 zu verwenden. Das hilft nicht und Sie werden trotzdem eine Fragmentierung bekommen, wenn Sie die Zellformatierung wie oben beschrieben kopieren / einfügen.

user3347790
quelle
Beachten Sie auch, dass durch Ausschneiden von <kbd> Strg-x <kbd> die bedingte Formatierung aus der ausgeschnittenen Zelle gelöscht wird (jetzt hat die Zelle keine Formatierung mehr) und die Formatierung in die neue Zelle eingefügt wird. Ich wette , da draußen weiß jemand , wie man das verhindert.
user5389726598465
@ user135711 Das hängt davon ab, was Sie versuchen. Standardmäßig übernehmen Kopieren und Ausschneiden die Formeln, Formatierungen und Verknüpfungen der Quellzelle, wobei Ausschneiden diese auch aus der Quellzelle entfernt. Wenn die Absicht besteht, die Formel / den Wert aus der Quelle zu entfernen, aber die Formatierung beizubehalten, kopiere / füge ich das Material in das Ziel ein und lösche dann die Quelle. Löschen (die Entf-Taste) löscht nur die Formel oder den Wert. Die Formatierung und Links bleiben erhalten.
user3347790
1
Die Funktion INDIRECT (), die in einer anderen Version dieser Frage als Antwort hochgestuft wurde, funktioniert nicht, da sie in den Zellen ausgewertet wird, wenn sie im Feld "Anwenden auf" verwendet wird, als ob Sie Zellen manuell eingegeben hätten.
user5389726598465
superuser.com/a/1113566/79488 hat einen guten Workaround zum Aufräumen der fragmentierten Regeln, wenn Sie copy / pase verwendet haben
Fabian Schmied
5

Hatte das gleiche Problem beim Anwenden des bedingten Formats auf eine Tabellenspalte. Beim Hinzufügen von Zeilen stellte ich fest, dass es am besten ist, die Regel auf die gesamte Spalte mit $A:$Aoder mit welcher Spalte auch immer anzuwenden .

Bildbeschreibung hier eingeben

CharlieRB
quelle
3

(Dies ist eine Problemumgehung, daher wollte ich es als Kommentar formulieren, aber ich habe nicht genug Ruf.)

Leider scheint es, dass Sie dazu verdammt sind, Regelsätze zu bereinigen, wenn sie unordentlich werden.

Eine einfache Möglichkeit, dies zu tun, besteht darin, ein Arbeitsblatt zu erstellen, das die von Ihnen gewünschte Formatierung enthält, jedoch keine Daten. Dies kann sich in derselben Arbeitsmappe wie Ihr ursprüngliches Arbeitsblatt oder in einer anderen Arbeitsmappe befinden, die Sie als Vorlage verwenden.

Wechseln Sie zum Bereinigen zu diesem Arbeitsblatt, klicken Sie mit der rechten Maustaste auf die Schaltfläche Alle auswählen, wählen Sie den Format Painter aus und klicken Sie dann auf die Schaltfläche Alle auswählen in Ihrem ursprünglichen Arbeitsblatt. Die Formate werden mit der unbefleckten Version überschrieben.


quelle
2

Das manuelle Kopieren / Einfügen / Ausschneiden / Einfügen von Zellen verursacht das Problem und ist schwer zu vermeiden.

Problem durch VBA-Makro gelöst.

Anstatt Zellen manuell zu kopieren, einzufügen, auszuschneiden oder einzufügen, verwende ich ein Excel-Makro, das die Zellbereiche beibehält (über eine Schaltfläche aktiviert).

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

So setzen Sie die Formatierung zurück (nicht wirklich erforderlich):

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
Peter Gerhat
quelle
3
Bitte posten Sie nicht die gleiche Antwort auf mehrere Fragen. Wenn dieselben Informationen tatsächlich beide Fragen beantworten, sollte eine Frage (normalerweise die neuere) als Duplikat der anderen geschlossen werden. Sie können dies anzeigen, indem Sie abstimmen, um es als Duplikat zu schließen, oder, wenn Sie nicht genug Reputation dafür haben , ein Flag setzen, um anzuzeigen, dass es sich um ein Duplikat handelt. Passen Sie andernfalls Ihre Antwort auf diese Frage an und fügen Sie dieselbe Antwort nicht an mehreren Stellen ein.
DavidPostill