Ẩn cột có điều kiện

Liên hệ QC

duong22000

Thành viên thường trực
Tham gia
8/5/13
Bài viết
322
Được thích
23
Ẩn cột có điều kiện ở sheet khác, cụ thể:
Ở sheet ("dk"): Khi ô C4: C12 không có dữ liệu thì sang sheet ("an_cot") sẽ ẩn các cột tương ứng. Ngược lại, nếu ô C4: C12 có dữ liệu, thì cột hiện lại.
Em có gửi mẫu ví dụ và mong mọi người giúp đỡ viết code ạ. Em xin cảm ơn mọi người trên GPE!
 

File đính kèm

  • vidu.xlsx
    12.2 KB · Đọc: 12
Bài này nên đăng vào box lập trình nha!
Hướng dẫn :
1.tại sheets dk thì nên thêm một cột nữa.là địa chỉ các cột muốn ẩn bên sheets an_cot (để khi muốn thay đổi cột muốn ẩn cũng dễ dàng hơn là sửa trong code
2.dùng sự kiện Worksheet_SelectionChange ,khi giá trị một ô trong vùng đó thay đổi thì sẽ ẩn cột tương ứng ( theo cái cột vừa thêm)
 
Bài này nên đăng vào box lập trình nha!
Hướng dẫn :
1.tại sheets dk thì nên thêm một cột nữa.là địa chỉ các cột muốn ẩn bên sheets an_cot (để khi muốn thay đổi cột muốn ẩn cũng dễ dàng hơn là sửa trong code
2.dùng sự kiện Worksheet_SelectionChange ,khi giá trị một ô trong vùng đó thay đổi thì sẽ ẩn cột tương ứng ( theo cái cột vừa thêm)
Em cảm ơn bác đã quan tâm, nhưng em vẫn chưa thực hiện được. Mong bác tiếp tục giúp em viết code vào file vidu trên để em có thể áp dụng code của bác !
 
Ẩn cột có điều kiện ở sheet khác, cụ thể:
Ở sheet ("dk"): Khi ô C4: C12 không có dữ liệu thì sang sheet ("an_cot") sẽ ẩn các cột tương ứng. Ngược lại, nếu ô C4: C12 có dữ liệu, thì cột hiện lại.
Em có gửi mẫu ví dụ và mong mọi người giúp đỡ viết code ạ. Em xin cảm ơn mọi người trên GPE!
Chắc có lẽ có vài cách. Bạn test 1 cách dưới đây.
Chuột phải vào sheet "ancot" -> view code -> dán đoạn code bên dưới -> thay đổi sheet dk -> xem kết quả
Mã:
Option Explicit

Private Sub Worksheet_Activate()
Dim dk, j
dk = Sheet1.Range("B4").CurrentRegion
UsedRange.Columns.Hidden = 0
For j = 3 To 10
    If dk(j - 2, 2) = "" Then Range("A1").Offset(, j - 1).ColumnWidth = 0
Next j
End Sub
 
Ẩn cột có điều kiện ở sheet khác, cụ thể:
Ở sheet ("dk"): Khi ô C4: C12 không có dữ liệu thì sang sheet ("an_cot") sẽ ẩn các cột tương ứng. Ngược lại, nếu ô C4: C12 có dữ liệu, thì cột hiện lại.
Em có gửi mẫu ví dụ và mong mọi người giúp đỡ viết code ạ. Em xin cảm ơn mọi người trên GPE!
Bạn thử code này xem (chú ý dán vào sheet dk):
Mã:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Lr As Long, Rng As Range, Dk(), RngCol As Range, uRng As Range, fRng As Range, I As Long
Application.ScreenUpdating = False
Lr = Cells(Rows.Count, "B").End(xlUp).Row
Set Rng = Range("B4:C" & Lr): Dk = Rng.Value
Set RngCol = Sheets("an_cot").Range("C4", Sheets("an_cot").Cells(4, Columns.Count).End(xlToLeft))
RngCol.EntireColumn.Hidden = False
    If Not Intersect(Target, Rng) Is Nothing Then
        For I = 1 To UBound(Dk)
            If Dk(I, 2) = "" Then
                Set fRng = RngCol.Find(Dk(I, 1), , xlValues, xlWhole)
                If Not fRng Is Nothing Then
                    If uRng Is Nothing Then
                        Set uRng = fRng
                    Else
                        Set uRng = Union(uRng, fRng)
                    End If
                End If
            End If
        Next
        If Not uRng Is Nothing Then uRng.EntireColumn.Hidden = True
    End If
Application.ScreenUpdating = True
End Sub
 
Chắc có lẽ có vài cách. Bạn test 1 cách dưới đây.
Chuột phải vào sheet "ancot" -> view code -> dán đoạn code bên dưới -> thay đổi sheet dk -> xem kết quả
Mã:
Option Explicit

Private Sub Worksheet_Activate()
Dim dk, j
dk = Sheet1.Range("B4").CurrentRegion
UsedRange.Columns.Hidden = 0
For j = 3 To 10
    If dk(j - 2, 2) = "" Then Range("A1").Offset(, j - 1).ColumnWidth = 0
Next j
End Sub
Mình cảm ơn bạn, để mình chạy thử code.
Bài đã được tự động gộp:

Bạn thử code này xem (chú ý dán vào sheet dk):
Mã:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Lr As Long, Rng As Range, Dk(), RngCol As Range, uRng As Range, fRng As Range, I As Long
Application.ScreenUpdating = False
Lr = Cells(Rows.Count, "B").End(xlUp).Row
Set Rng = Range("B4:C" & Lr): Dk = Rng.Value
Set RngCol = Sheets("an_cot").Range("C4", Sheets("an_cot").Cells(4, Columns.Count).End(xlToLeft))
RngCol.EntireColumn.Hidden = False
    If Not Intersect(Target, Rng) Is Nothing Then
        For I = 1 To UBound(Dk)
            If Dk(I, 2) = "" Then
                Set fRng = RngCol.Find(Dk(I, 1), , xlValues, xlWhole)
                If Not fRng Is Nothing Then
                    If uRng Is Nothing Then
                        Set uRng = fRng
                    Else
                        Set uRng = Union(uRng, fRng)
                    End If
                End If
            End If
        Next
        If Not uRng Is Nothing Then uRng.EntireColumn.Hidden = True
    End If
Application.ScreenUpdating = True
End Sub
Mình cảm ơn bạn, để mình chạy thử code.
 
Web KT
Back
Top Bottom