Excel koşullu biçimlendirme parçalanması


22

Genellikle, koşullu biçimlendirmeye sahip bir sayfa oluştururum ve hücre aralıklarını, koşullu biçimlendirme kurallarının bir hücre aralığına yalnızca bir kez uygulanacağı şekilde ayarlarım;

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

Birkaç satır ve / veya sütun eklendikten / sildikten sonra, koşullu biçimlendirme kural kümesi çok parçalı hale gelir ve aynı kurallar farklı aralıklar için tekrarlanır. Örneğin

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

Bunu önlemenin iyi bir uygulama yolu var mı, yoksa çok karışık olduklarında kural kümelerini manuel olarak temizlemeye mahkum muyum?

Yanıtlar:


13

Satır eklemek ve silmek, koşullu biçimlendirmenin parçalanmasına neden olmaz.

Nedeni, standart kopyala / yapıştır kullanarak hücreler veya satırlar arasında kopyalama / yapıştırmadır. Düzeltme her zaman macun değeri veya macun formülü kullanmaktır. Hedefte sağ tıkladığınızda Yapıştır Seçenekleri bölümü 123 (değerler) ve f (formüller) sunar. Biçimlendirmeyi kopyalamayın / yapıştırmayın; bu, koşulların kopyalanmasına / yapıştırılmasına neden olur ve bazen parçalanır.

Standart bir kopyala / yapıştır yaptığınızda, hücrenin koşullu formüllerini de kopyalar. Diyelim ki iki kuralınız var:
1) $ A $ 1: $ A $ 30 kırmızı yapın
2) $ B $ 1: $ B $ 30 mavi yapın
Şimdi A10: B10'u seçin ve A20: B20'ye kopyalayın / yapıştırın. Excel'in yapacağı şey, A20: B20 için koşullu biçimlendirmeyi bu hücrelere uygulanan kurallardan silmek ve A20: B20 için biçimlendirmeye sahip yeni kurallar eklemektir. Sonunda dört kural var.
1) Yap = 20 $ A kırmızı
2) Yap = 20 $ B $ mavi
3) Yap = $ A $ 1: $ A $ 19, $ A $ 21: $ A $ 30 kırmızı
4) Yap = = B $ 1: $ B $ 19, $ B 21 $: 30 $ B mavi
Sadece A10'u A20'ye kopyalayıp yapıştırsaydınız, Excel hem kaynak hem de hedefe uygulanan aynı kuralı fark ederdi ve kuralları parçalamaz. Excel, kopyala / yapıştır yönteminiz iki veya daha fazla koşullu biçimi etkilediğinde parçalanmayı nasıl önleyeceğinizi anlayacak kadar akıllı değildir.

Excel'in satır ekleme veya silme işlemini yaptığınız alanı kapsayan koşul kurallarını genişletmesi veya daraltması nedeniyle satır eklemek ve silmek parçalanmaya neden olmaz.

Birisi $ Q $ 1: $ Q $ 30 yerine $ Q: $ Q kullanılmasını önerdi. Bu yardımcı olmaz ve yukarıda belirtildiği gibi hücre biçimlendirmesini kopyaladığınızda / yapıştırdığınızda yine de parçalanırsınız.


Ayrıca Cut <kbd> ctrl-x <kbd> öğesinin koşullu biçimlendirmeyi hücre kesiminden sileceğini unutmayın (şimdi hücrenin biçimlendirmesi yoktur) ve biçimlendirmeyi yeni hücreye yapıştırın. Bahse girerim birisi bunu nasıl önleyeceğini biliyor mu?
user5389726598465

@ user135711 Ne yapmaya çalıştığınıza bağlıdır. Varsayılan olarak, hem kopyalayın hem de kesin, kaynak hücrenin formülleri, biçimlendirmesini ve bağlantılarını kesim ile birleştirerek de kaynak hücreden çıkarın. Amaç formülden / değeri kaynaktan kaldırmak ancak biçimlendirmeyi korumaksa, öğeleri kopyalayıp hedefe yapıştıracağım ve ardından kaynağı sileceğim. Sil (Del tuşu) yalnızca formülü veya değeri siler. Biçimlendirme ve bağlantıları yerinde bırakır.
user3347790

1
Bu sorunun başka bir sürümünde yanıt olarak gösterilen INDIRECT () işlevi, hücreleri manuel olarak girmiş gibi uygulandığı alanda kullanıldığında hücreler için değerlendirildiği için çalışmaz.
user5389726598465

superuser.com/a/1113566/79488 , kopya / pase kullandıysanız parçalanmış kuralları temizlemek için iyi bir geçici çözüme sahiptir
Fabian Schmied

5

Tablonun bir sütununa koşullu biçim uygulanırken aynı sorun vardı. Satır eklerken, kuralı tüm sütuna $A:$Aveya hangi sütunu kullanarak uygulamak en iyi sonucu buldum .

resim açıklamasını buraya girin


Deneyimlerime göre, çalışma sayfası biraz büyüdüğünde, bunu yapmak koşullu formatların şişirilmesine ve hesapların taranmasına neden olabilir.
rohrl77

3

(Bu bir çözümdür, bu yüzden bir yorum olarak koyacağım, ancak yeterli itibarım yok.)

Ne yazık ki, dağınık olduklarında kural kümelerini temizlemeye mahkum olduğunuz anlaşılıyor.

Bunu yapmanın kolay bir yolu, istediğiniz biçimlendirmeyi içeren ancak veri içermeyen bir çalışma sayfası oluşturmaktır. Bu, orijinal çalışma sayfanızla aynı çalışma kitabında veya şablon olarak sakladığınız başka bir çalışma kitabında olabilir.

Temizlemeniz gerektiğinde, bu çalışma sayfasına gidin, Tümünü Seç düğmesini sağ tıklayın , Biçim Boyacısı'nı seçin , ardından orijinal çalışma sayfanızdaki Tümünü Seç düğmesini tıklayın. Biçimlerin üzerine yazılmamış sürüm yazılır.


2

Hücrelerin elle kopyalanması / yapıştırılması / kesilmesi / yerleştirilmesi soruna neden olur ve bundan kaçınmak zordur.

VBA makrosu ile sorun çözüldü.

Hücreleri manuel olarak kopyalamak / yapıştırmak / kesmek / eklemek yerine, hücre aralıklarını koruyan (bir düğme ile etkinleştirilen) bir Excel makrosu aracılığıyla yaparım.

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

Biçimlendirmeyi sıfırlamak için (gerçekten gerekli değildir):

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
Lütfen aynı cevabı birden fazla soruya göndermeyin. Aynı bilgi gerçekten her iki soruyu da cevaplıyorsa, bir soru (genellikle daha yeni olan) diğerinin kopyası olarak kapatılmalıdır. Bunu bir kopya olarak kapatmak için oy vererek veya bunun için yeterli bir itibara sahip değilseniz , bunun bir kopya olduğunu belirtmek için bir bayrak kaldırın . Aksi takdirde yanıtınızı bu soruya uyarlayın ve aynı yanıtı birden fazla yere yapıştırmayın.
DavidPostill
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.