Phân mảnh định dạng có điều kiện Excel


22

Thông thường, tôi tạo một trang tính với định dạng có điều kiện và đặt phạm vi ô sao cho quy tắc định dạng có điều kiện chỉ được áp dụng một lần cho một phạm vi ô, ví dụ:

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

Sau khi chèn / xóa một số hàng và / hoặc cột, bộ quy tắc định dạng có điều kiện trở nên rất rời rạc, với cùng một quy tắc được lặp lại cho một phạm vi khác nhau. ví dụ

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

Có một cách thực hành tốt để ngăn chặn điều này, hay tôi sẽ cam chịu dọn dẹp các bộ quy tắc một cách thủ công khi chúng trở nên quá lộn xộn?

Câu trả lời:


13

Chèn và xóa các hàng không khiến định dạng có điều kiện bị phân mảnh.

Nguyên nhân là sao chép / dán giữa các ô hoặc hàng bằng cách sử dụng bản sao / dán tiêu chuẩn. Cách khắc phục là luôn luôn sử dụng giá trị dán hoặc công thức dán. Trên đích đến, nhấp chuột phải và phần Tùy chọn dán sẽ cung cấp 123 (giá trị) và f (công thức). Không sao chép / dán định dạng vì điều đó khiến các điều kiện bị sao chép / dán và đôi khi chúng sẽ bị phân mảnh.

Khi bạn thực hiện sao chép / dán tiêu chuẩn, nó cũng sao chép các công thức có điều kiện của ô. Giả sử bạn có hai quy tắc:
1) Kiếm $ A $ 1: $ A $ 30 đỏ
2) Kiếm $ B $ 1: $ B $ 30 màu xanh lam
Bây giờ chọn A10: B10 và sao chép / dán vào A20: B20. Những gì Excel sẽ làm là xóa định dạng có điều kiện cho A20: B20 khỏi các quy tắc được áp dụng cho các ô đó và thêm các quy tắc mới có định dạng cho A20: B20. Bạn kết thúc với bốn quy tắc.
1) Kiếm = $ A $ 20 đỏ
2) Kiếm = $ B $ 20 xanh
3) Kiếm = $ A $ 1: $ A $ 19, $ A $ 21: $ A $ 30 đỏ
4) Kiếm = $ B $ 1: $ B $ 19, $ B $ 21: $ B $ 30 màu xanh
Nếu bạn sao chép / dán chỉ A10 đến A20 Excel sẽ nhận thấy quy tắc tương tự được áp dụng cho cả nguồn và đích và không phân chia quy tắc. Excel không đủ thông minh để tìm ra cách tránh phân mảnh khi bản sao / dán của bạn tác động đến hai hoặc nhiều định dạng có điều kiện.

Chèn và xóa các hàng không gây ra sự phân mảnh vì Excel chỉ đơn giản mở rộng hoặc thu hẹp (các) quy tắc điều kiện bao trùm khu vực mà bạn đã chèn hoặc xóa hàng.

Có người đề nghị sử dụng $ Q: $ Q thay vì $ Q $ 1: $ Q $ 30. Điều đó không giúp ích gì và bạn vẫn sẽ bị phân mảnh khi sao chép / dán định dạng ô như đã lưu ý ở trên.


Cũng lưu ý rằng Cut <kbd> ctrl-x <kbd> sẽ xóa định dạng có điều kiện khỏi ô cắt (hiện tại ô không có định dạng) và dán định dạng vào ô mới. Tôi sẽ đặt cược ai đó ngoài kia biết làm thế nào để ngăn chặn điều này?
dùng5389726598465

@ user135711 Nó phụ thuộc vào những gì bạn đang cố gắng làm. Theo mặc định, sao chép và cắt cả hai chọn công thức, định dạng và liên kết của ô nguồn có cắt cũng loại bỏ tương tự khỏi ô nguồn. Nếu mục đích là xóa công thức / giá trị khỏi nguồn nhưng để giữ định dạng, tôi sẽ sao chép / dán nội dung vào đích và sau đó xóa nguồn. Xóa (phím Del) chỉ xóa công thức hoặc giá trị. Nó để lại định dạng và liên kết tại chỗ.
dùng3347790

1
Hàm INDIRECT () được nâng cấp dưới dạng câu trả lời trong phiên bản khác của câu hỏi này không hoạt động vì nó được đánh giá cho các ô khi được sử dụng trong trường áp dụng cho trường giống như khi bạn nhập các ô theo cách thủ công.
dùng5389726598465

superuser.com/a/1113566/79488 có một cách giải quyết tốt để làm sạch các quy tắc phân mảnh nếu bạn sử dụng bản sao / pase
Fabian Schmied

5

Có cùng một vấn đề khi áp dụng định dạng có điều kiện cho một cột của bảng. Khi thêm hàng, tôi thấy nó hoạt động tốt nhất để áp dụng quy tắc cho toàn bộ cột bằng cách sử dụng $A:$Ahoặc cột nào.

nhập mô tả hình ảnh ở đây


Theo kinh nghiệm của tôi, khi bảng tính lớn hơn một chút, làm điều này sẽ khiến các định dạng có điều kiện trở nên cồng kềnh và các phép tính có thể được giảm xuống để thu thập dữ liệu.
rohrl77

3

(Đây là một cách giải quyết, vì vậy tôi sẽ đặt nó dưới dạng một nhận xét, nhưng tôi không có đủ danh tiếng.)

Thật không may, có vẻ như bạn đã cam chịu dọn dẹp các bộ quy tắc khi chúng trở nên lộn xộn.

Một cách dễ dàng để làm điều này là tạo một bảng tính chứa định dạng bạn yêu cầu, nhưng không có dữ liệu. Điều này có thể nằm trong cùng một sổ làm việc với bảng tính ban đầu của bạn hoặc trong một sổ làm việc khác mà bạn giữ làm mẫu.

Khi bạn cần dọn dẹp, hãy chuyển đến bảng tính này, nhấp chuột phải vào nút Chọn Tất cả , chọn Trình định dạng Họa sĩ , sau đó nhấp vào nút Chọn Tất cả trên bảng tính ban đầu của bạn. Các định dạng được ghi đè bằng phiên bản chưa được sơn.


2

Sao chép / dán / cắt / chèn các ô theo cách thủ công gây ra sự cố và thật khó để tránh nó.

Vấn đề được giải quyết thông qua macro VBA.

Thay vì sao chép / dán / cắt / chèn các ô theo cách thủ công, tôi thực hiện thông qua macro Excel, bảo tồn phạm vi ô (được kích hoạt thông qua một nút).

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

Để đặt lại định dạng (không thực sự cần thiết):

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
Xin vui lòng không gửi cùng một câu trả lời cho nhiều câu hỏi. Nếu cùng một thông tin thực sự trả lời cả hai câu hỏi, thì một câu hỏi (thường là câu hỏi mới hơn) nên được đóng lại như một bản sao của câu hỏi khác. Bạn có thể chỉ ra điều này bằng cách bỏ phiếu để đóng nó dưới dạng trùng lặp hoặc, nếu bạn không đủ danh tiếng cho điều đó, hãy giơ cờ để cho biết đó là bản sao. Mặt khác, điều chỉnh câu trả lời của bạn cho câu hỏi này và không chỉ dán cùng một câu trả lời ở nhiều nơi.
DavidPostill
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.