Frammentazione della formattazione condizionale di Excel


22

Spesso, creo un foglio con formattazione condizionale e imposto gli intervalli di celle in modo che le regole di formattazione condizionale vengano applicate una sola volta a un intervallo di celle, ad es.

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

Dopo aver inserito / eliminato un numero di righe e / o colonne, il set di regole di formattazione condizionale diventa molto frammentato, con le stesse regole ripetute per intervalli diversi. per esempio

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

Esiste un metodo di buona pratica per impedirlo o sono condannato a ripulire manualmente i set di regole quando diventano troppo disordinati?

Risposte:


13

L'inserimento e l'eliminazione di righe non comporta la frammentazione della formattazione condizionale.

La causa è la copia / incolla tra celle o righe utilizzando la copia / incolla standard. La correzione consiste nell'utilizzare sempre paste-value o paste-formula. Fare clic con il tasto destro del mouse sulla destinazione e la sezione Opzioni Incolla offrirà 123 (valori) ef (formule). Non copiare / incollare la formattazione in quanto ciò causa la copia / incolla delle condizioni e talvolta saranno frammentate.

Quando si esegue una copia / incolla standard, vengono copiate anche le formule condizionali della cella. Supponiamo che tu abbia due regole:
1) Rendi $ A $ 1: $ A $ 30 rosso
2) Rendi $ B $ 1: $ B $ 30 blu
Ora seleziona A10: B10 e copia / incolla quello in A20: B20. Quello che Excel farà sarà eliminare la formattazione condizionale per A20: B20 dalle regole applicate a quelle celle e aggiungere nuove regole che hanno la formattazione per A20: B20. Finisci con quattro regole.
1) Make = $ A $ 20 rosso
2) Make = $ B $ 20 blu
3) Make = $ A $ 1: $ A $ 19, $ A $ 21: $ A $ 30 rosso
4) Make = $ B $ 1: $ B $ 19, $ B $ 21: $ B $ 30 blu
Se avessi copiato / incollato solo A10 in A20 Excel avrebbe notato la stessa regola applicata sia all'origine che alla destinazione e non frammentava le regole. Excel non è abbastanza intelligente da capire come evitare la frammentazione quando la copia / incolla ha un impatto su due o più formati condizionali.

L'inserimento e l'eliminazione di righe non causa la frammentazione poiché Excel semplicemente espande o riduce le regole della condizione che coprono l'area in cui è stata inserita o eliminata la riga.

Qualcuno ha suggerito di usare $ Q: $ Q anziché $ Q $ 1: $ Q $ 30. Ciò non aiuta e otterrai comunque la frammentazione quando copi / incolli la formattazione delle celle come indicato sopra.


Si noti inoltre che Taglia <kbd> ctrl-x <kbd> eliminerà la formattazione condizionale dal taglio cella (ora la cella non ha formattazione) e incollerà la formattazione nella nuova cella. Scommetto che qualcuno là fuori sa come evitarlo?
user5389726598465

@ user135711 Dipende da cosa stai cercando di fare. Per impostazione predefinita, copia e taglia sia prendi le formule, la formattazione e i collegamenti della cella di origine con taglia rimuovendo anche la stessa dalla cella di origine. Se l'intento è quello di rimuovere la formula / valore dalla fonte ma per mantenere la formattazione copierò / incollerò il materiale nella destinazione e quindi cancellerò la fonte. Elimina (tasto Canc) cancella solo la formula o il valore. Lascia la formattazione e i collegamenti in atto.
user3347790,

1
La funzione INDIRETTO () votata come risposta in un'altra versione di questa domanda non funziona perché viene valutata per le celle quando utilizzata nel campo si applica proprio come se si immettessero manualmente le celle.
user5389726598465,

superuser.com/a/1113566/79488 ha una buona soluzione per ripulire le regole frammentate se hai usato copy / pase
Fabian Schmied il

5

Ha avuto lo stesso problema durante l'applicazione del formato condizionale a una colonna della tabella. Quando ho aggiunto le righe, ho trovato che funziona meglio applicare la regola all'intera colonna usando $A:$A, o qualunque colonna.

inserisci qui la descrizione dell'immagine


Nella mia esperienza, quando il foglio di lavoro diventa un po 'più grande, farlo causerà un aumento dei formati condizionali e i calcoli possono essere ridotti a una scansione.
rohrl77,

3

(Questa è una soluzione alternativa, quindi stavo per metterlo come commento, ma non ho abbastanza reputazione.)

Sfortunatamente sembra che tu sia condannato a chiarire i set di regole quando diventano disordinati.

Un modo semplice per farlo è quello di creare un foglio di lavoro contenente la formattazione richiesta, ma senza dati. Questo può trovarsi nella stessa cartella di lavoro del foglio di lavoro originale o in un'altra cartella di lavoro da conservare come modello.

Quando devi ripulire, vai a questo foglio di lavoro, fai clic con il tasto destro del mouse su Seleziona tutto , scegli Copia formato , quindi fai clic sul pulsante Seleziona tutto sul foglio di lavoro originale. I formati vengono sovrascritti con la versione non verniciata.


2

Copiare / incollare / tagliare / inserire le celle manualmente causa il problema ed è difficile evitarlo.

Problema risolto tramite macro VBA.

Invece di copiare / incollare / tagliare / inserire le celle manualmente, lo faccio attraverso una macro di Excel, che conserva gli intervalli di celle (attivati ​​tramite un pulsante).

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

Per ripristinare la formattazione (non proprio necessario):

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

3
Si prega di non pubblicare la stessa risposta a più domande. Se le stesse informazioni rispondono davvero ad entrambe le domande, allora una domanda (di solito la più recente) dovrebbe essere chiusa come duplicata dell'altra. Puoi indicarlo votando per chiuderlo come duplicato o, se non hai abbastanza reputazione per quello, alza un flag per indicare che è un duplicato. Altrimenti personalizza la tua risposta a questa domanda e non incollare la stessa risposta in più punti.
DavidPostill
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.