Excel format pemformatan bersyarat

22

Seringkali, saya membuat lembar dengan pemformatan bersyarat, dan mengatur rentang sel sehingga aturan pemformatan bersyarat hanya diterapkan satu kali untuk rentang sel, misalnya

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

Setelah memasukkan / menghapus sejumlah baris dan / atau kolom aturan pemformatan bersyarat menjadi sangat terfragmentasi, dengan aturan yang sama diulang untuk rentang yang berbeda. misalnya

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

Apakah ada cara praktik yang baik untuk mencegah hal ini, atau apakah saya ditakdirkan untuk membersihkan set aturan secara manual ketika mereka menjadi terlalu berantakan?

Rhys Gibson
sumber

Jawaban:

13

Memasukkan dan menghapus baris tidak menyebabkan pemformatan bersyarat menjadi terfragmentasi.

Penyebabnya adalah salin / tempel antar sel atau baris menggunakan salin / tempel standar. Cara mengatasinya adalah selalu menggunakan nilai tempel atau rumus tempel. Di tujuan klik kanan dan bagian Opsi Tempel akan menawarkan 123 (nilai) dan f (rumus). Jangan menyalin / menempelkan pemformatan karena itu menyebabkan kondisi untuk mendapatkan salinan / tempel dan kadang-kadang mereka akan terfragmentasi.

Saat Anda melakukan salin / tempel standar, salin juga menyalin rumus bersyarat sel. Katakanlah Anda memiliki dua aturan:
1) Dapatkan $ A $ 1: $ A $ 30 red
2) Dapatkan $ B $ 1: $ B $ 30 biru
Sekarang pilih A10: B10 dan salin / tempel ke A20: B20. Apa yang akan dilakukan Excel adalah menghapus pemformatan bersyarat untuk A20: B20 dari aturan yang diterapkan ke sel-sel itu dan menambahkan aturan baru yang memiliki pemformatan untuk A20: B20. Anda berakhir dengan empat aturan.
1) Menghasilkan = $ A $ 20 merah
2) Menghasilkan = $ B $ 20 biru
3) Menghasilkan = $ A $ 1: $ A $ 19, $ A $ 21: $ A $ 30 merah
4) Make = $ B $ 1: $ B $ 19, $ B $ 21: $ B $ 30 biru
Seandainya Anda menyalin / menempel hanya A10 ke A20 Excel akan memperhatikan aturan yang sama diterapkan untuk sumber dan tujuan dan tidak memecah aturan. Excel tidak cukup pintar untuk mengetahui bagaimana menghindari fragmentasi ketika copy / paste Anda berdampak pada dua atau lebih format bersyarat.

Memasukkan dan menghapus baris tidak menyebabkan fragmentasi karena Excel hanya memperluas atau mengecilkan aturan kondisi yang mencakup area tempat Anda melakukan penyisipan atau penghapusan baris.

Seseorang menyarankan menggunakan $ Q: $ Q daripada $ Q $ 1: $ Q $ 30. Itu tidak membantu dan Anda masih akan mendapatkan fragmentasi ketika Anda menyalin / menempel pemformatan sel seperti disebutkan di atas.

pengguna3347790
sumber
Perhatikan juga bahwa Cut <kbd> ctrl-x <kbd> akan menghapus pemformatan bersyarat dari pemotongan sel (sekarang sel tidak memformat), dan menempelkan pemformatan ke dalam sel baru. Saya berani bertaruh seseorang di luar sana yang tahu bagaimana mencegah ini?
user5389726598465
@ user135711 Tergantung pada apa yang Anda coba lakukan. Secara default, salin dan potong keduanya mengambil rumus, format, dan tautan sel sumber dengan potongan juga menghapus yang sama dari sel sumber. Jika tujuannya adalah untuk menghapus rumus / nilai dari sumber tetapi untuk menjaga format saya akan menyalin / menempelkan barang-barang ke tujuan dan kemudian menghapus sumbernya. Hapus (tombol Del) hanya menghapus rumus atau nilai. Itu meninggalkan pemformatan dan tautan di tempat.
user3347790
1
Fungsi INDIRECT () yang dipilih sebagai jawaban di versi lain dari pertanyaan ini tidak berfungsi karena dievaluasi ke sel saat digunakan dalam bidang yang berlaku sama seperti jika Anda memasukkan sel secara manual.
user5389726598465
superuser.com/a/1113566/79488 memiliki solusi yang baik untuk membersihkan aturan yang terpecah-pecah jika Anda menggunakan salinan / pase
Fabian Schmied
5

Punya masalah yang sama ketika menerapkan format bersyarat ke kolom tabel. Saat menambahkan baris, saya menemukan ini berfungsi terbaik untuk menerapkan aturan ke seluruh kolom menggunakan $A:$A, atau kolom mana saja.

masukkan deskripsi gambar di sini

CharlieRB
sumber
Dalam pengalaman saya, ketika lembar kerja menjadi sedikit lebih besar, melakukan ini akan menyebabkan format bersyarat menjadi membengkak dan perhitungan dapat dikurangi menjadi perayapan.
rohrl77
3

(Ini adalah solusi, jadi saya akan meletakkannya sebagai komentar, tetapi saya tidak memiliki reputasi yang cukup.)

Sayangnya sepertinya Anda ditakdirkan untuk membersihkan set aturan ketika mereka berantakan.

Cara mudah untuk melakukan ini adalah membuat lembar kerja yang berisi pemformatan yang Anda butuhkan, tetapi tidak ada data. Ini bisa di buku kerja yang sama dengan lembar kerja asli Anda, atau di buku kerja lain yang Anda simpan sebagai templat.

Saat Anda perlu membersihkan, buka lembar kerja ini, klik kanan tombol Pilih Semua , pilih Format Painter , lalu klik tombol Pilih Semua pada lembar kerja asli Anda. Formatnya ditimpa dengan versi yang tidak ternoda.


sumber
2

Menyalin / menempel / memotong / memasukkan sel secara manual menyebabkan masalah dan sulit untuk menghindarinya.

Masalah dipecahkan melalui VBA makro.

Alih-alih menyalin / menempel / memotong / menyisipkan sel secara manual, saya melakukannya melalui makro Excel, yang mempertahankan rentang sel (diaktifkan melalui tombol).

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

Untuk mengatur ulang pemformatan (tidak benar-benar diperlukan):

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
sumber
3
Tolong jangan memposting jawaban yang sama untuk beberapa pertanyaan. Jika informasi yang sama benar-benar menjawab kedua pertanyaan, maka satu pertanyaan (biasanya yang baru) harus ditutup sebagai duplikat dari yang lain. Anda dapat menunjukkan ini dengan memilih untuk menutupnya sebagai duplikat atau, jika Anda tidak memiliki reputasi yang cukup untuk itu, angkat bendera untuk menunjukkan bahwa itu adalah duplikat. Kalau tidak, sesuaikan jawaban Anda untuk pertanyaan ini dan jangan hanya menempelkan jawaban yang sama di banyak tempat.
DavidPostill