Hỏi: Định dạng ô theo điều kiện

Liên hệ QC

tranthuy28190

Thành viên mới
Tham gia
13/10/22
Bài viết
26
Được thích
7
Hóng các cao nhân chỉ dạy giúp em ạ:
Em muốn định dạng những ô trống là gạch chéo. Tuy nhiên khi chọn Conditional Formating/Text that contains thì phần format chọn gạch chéo ô không hiển thị, làm thế nào để format theo yêu cầu được ạ?
 

File đính kèm

  • Format theo điều kiện.PNG
    Format theo điều kiện.PNG
    8.9 KB · Đọc: 12
Conditional Formating không hỗ trợ cho Gạch chéo ô, mà phải dùng VBA
Nếu đồng ý thì bạn post file mẫu lên, để xem các ô chứa text là nhập tay vào hay có công thức bên trong?
 
Conditional Formating không hỗ trợ cho Gạch chéo ô, mà phải dùng VBA
Nếu đồng ý thì bạn post file mẫu lên, để xem các ô chứa text là nhập tay vào hay có công thức bên trong?
Dạ, e cảm ơn bác nhiều.

Bác xem file đính kèm giúp em ạ. Có rất nhiều file dạng như file đính kèm, làm thế nào để áp dụng cho tất cả các file bác nhỉ? Em đính kèm tạm ở đây 1 file thôi ạ

Chỗ em cần format là đoạn này ạ, cũng có chứa công thức: chỗ này để trống thì sẽ format gạch chéo đi.
1665722230498.png
 

File đính kèm

  • E05397.xls
    304 KB · Đọc: 4
Về cơ bản, trên mỗi sheet, mình sẽ duyệt qua từng ô trong vùng P-Z: Nếu ô nào mà công thức trả về kết quả là ô trống thì sẽ tạo 1 shape line chéo dán vô.
Khi kết quả thay đổi thì khi activate sheet (chọn lại sheet) sẽ tự động cập nhật.
Nếu các ô này là giá trị nhập tay thì ngay khi thay đổi giá trị, đường chéo sẽ biến mất hoặc hiện ra tự động (dùng worksheet_change).
Tuy nhiên vì là công thức nên mình để trong workbook_sheetactivate và chỉ cập nhật được khi chọn lại sheet.
Nếu có sheet nào mà không muốn kẻ đường chéo, thì bạn liệt kê vào biến "exclu". Khi chọn các sheet này sẽ không có gì xảy ra.

Cách tạo: Alt-F11 mở cửa sổ VBA, chọn ThisWorkbook dán code này vào. Lặp lại cho các file khác có liên quan.

PHP:
Option Explicit
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim co As Object
Dim lr&, i&, j&, exclu As String
exclu = "-Sheet1-Sheet2-Sheet3-Sheetn-" ' chuoi ten cua cac sheet khong muon tao duong ke
lr = Sh.Range("B47").End(xlUp).Row
If InStr(1, exclu, Sh.Name) Then Exit Sub
For Each co In Sh.Shapes
    If co.Name Like "*Connector*" Then co.Delete
Next
Sh.Shapes.AddConnector msoConnectorStraight, Sh.Range("B47").Left, Sh.Range("B47").Top, _
                Sh.Range("AB" & lr + 1).Left, Sh.Range("AB" & lr + 1).Top
For i = 40 To lr
    For j = 16 To 27 Step 2
        If Sh.Cells(i, j) = "" Then
            Sh.Shapes.AddConnector msoConnectorStraight, Sh.Cells(i + 1, j).Left, Sh.Cells(i + 1, j).Top, _
                        Sh.Cells(i, j + 2).Left, Sh.Cells(i, j + 2).Top
        End If
    Next
Next
End Sub
 

File đính kèm

  • E05397.xlsm
    270.2 KB · Đọc: 9
Về cơ bản, trên mỗi sheet, mình sẽ duyệt qua từng ô trong vùng P-Z: Nếu ô nào mà công thức trả về kết quả là ô trống thì sẽ tạo 1 shape line chéo dán vô.
Khi kết quả thay đổi thì khi activate sheet (chọn lại sheet) sẽ tự động cập nhật.
Nếu các ô này là giá trị nhập tay thì ngay khi thay đổi giá trị, đường chéo sẽ biến mất hoặc hiện ra tự động (dùng worksheet_change).
Tuy nhiên vì là công thức nên mình để trong workbook_sheetactivate và chỉ cập nhật được khi chọn lại sheet.
Nếu có sheet nào mà không muốn kẻ đường chéo, thì bạn liệt kê vào biến "exclu". Khi chọn các sheet này sẽ không có gì xảy ra.

Cách tạo: Alt-F11 mở cửa sổ VBA, chọn ThisWorkbook dán code này vào. Lặp lại cho các file khác có liên quan.

PHP:
Option Explicit
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim co As Object
Dim lr&, i&, j&, exclu As String
exclu = "-Sheet1-Sheet2-Sheet3-Sheetn-" ' chuoi ten cua cac sheet khong muon tao duong ke
lr = Sh.Range("B47").End(xlUp).Row
If InStr(1, exclu, Sh.Name) Then Exit Sub
For Each co In Sh.Shapes
    If co.Name Like "*Connector*" Then co.Delete
Next
Sh.Shapes.AddConnector msoConnectorStraight, Sh.Range("B47").Left, Sh.Range("B47").Top, _
                Sh.Range("AB" & lr + 1).Left, Sh.Range("AB" & lr + 1).Top
For i = 40 To lr
    For j = 16 To 27 Step 2
        If Sh.Cells(i, j) = "" Then
            Sh.Shapes.AddConnector msoConnectorStraight, Sh.Cells(i + 1, j).Left, Sh.Cells(i + 1, j).Top, _
                        Sh.Cells(i, j + 2).Left, Sh.Cells(i, j + 2).Top
        End If
    Next
Next
End Sub
Em cảm ơn bác nhiều nhé. em thử lại nhưng những ô có ký tự vẫn đang bị gạch. Bác fix lại giúp em được không ạ.

1665739200065.png
 
Bạn gửi lại file có lỗi này mình xem sao
 
Bạn chọn sheet khác rồi chọn lại nó là OK
 
Web KT
Back
Top Bottom