Em xin nhờ sự giúp đỡ về ẩn và hiện đồng loạt tất cả các cột (chỉ xét sheet có nội dung tương tự)

Liên hệ QC

Bùi Thúy Thúy

Thành viên thường trực
Tham gia
2/7/18
Bài viết
289
Được thích
38
Em muốn xin code để ẩn và hiện đồng loạt tất cả các cột trong các sheet với điều kiện sau:
  1. Các Sheet được xét đến để ẩn và hiện cột đều có nội dung tương tự (tức là các cột tiêu đề giống nhau ) còn các sheet khác không có nội dung tương tự vậy sẽ không tác động đến, ví dụ: chỉ xét đên các sheet (Nha o, san nha, Vuon ao), các sheet (Tong vat tu, quan trong) còn lại do không có nội dung tương tự nhau nên không tính đến,
  2. Tạo nút maccro (kiểu khi ấn vào nút điều khiển sẽ chạy code để ẩn các cột, và khi nhấn nút điều khiển lần nữa sẽ hiện các cột được ẩn)
Các cột được xét đến để ẩn/hiện trong các sheet có nội dung tương tự là: “E, F, K, L, N, O” và từ “cột U đến cột Y”
Em xin cám ơn!
tinh co.jpg
 

File đính kèm

Lần chỉnh sửa cuối:
Em muốn xin code để ẩn và hiện đồng loạt tất cả các cột trong các sheet với điều kiện sau:
  1. Các Sheet được xét đến để ẩn và hiện cột đều có nội dung tương tự (tức là các cột tiêu đề giống nhau ) còn các sheet khác không có nội dung tương tự vậy sẽ không tác động đến, ví dụ: chỉ xét đên các sheet (Nha o, san nha, Vuon ao), các sheet (Tong vat tu, quan trong) còn lại do không có nội dung tương tự nhau nên không tính đến,
  2. Tạo nút maccro (kiểu khi ấn vào nút điều khiển sẽ chạy code để ẩn các cột, và khi nhấn nút điều khiển lần nữa sẽ hiện các cột được ẩn)
Các cột được xét đến để ẩn/hiện trong các sheet có nội dung tương tự là: “E, F, K, L, N, O” và từ “cột U đến cột Y”
Em xin cám ơn!
View attachment 202731
File thực tế của bạn có bao nhiêu sheet, và có bao nhiêu sheet cần thực hiện việc ẩn/hiện cột này, các sheet này luôn nằm ở phía trước trong danh sách các sheet hay là nằm xen kẽ với các sheet không có cấu trúc giống vậy?
 
Upvote 0
File thực tế của bạn có bao nhiêu sheet, và có bao nhiêu sheet cần thực hiện việc ẩn/hiện cột này, các sheet này luôn nằm ở phía trước trong danh sách các sheet hay là nằm xen kẽ với các sheet không có cấu trúc giống vậy?
Dạ! vì tính chất công việc của em các sheet có nội dung tương tự nhau không cố định Thầy ạ! (tầm 5 đến 10 sheet) và 02 sheet có nội dung tách biệt như em đã đính kèm file ở bài #1
Thầy cho ý kiến em đính chính lại như sau: trong file ví dụ em đã nêu:
- 02 sheet (màu tím) nằm ở vị 02 vị trí đầu tiên, 02 sheet( "Tong vat tu" và Sheet"Quan trong") này có cấu trúc cũng không giống nhau và có cấu trúc không tương tự các sheet còn lại.
- 03 sheet(màu đỏ) nằm ở 3 vị trí cuối cùng, có cấu trúc khác với 2 sheet đầu tiên và 03 sheet này có cấu trúc giống nhau (tiêu đề các cột giống nhau, nhưng số dòng có sheet nhiều dòng, sheet ít dòng hơn) là "Nha o, san nha, Vuon ao"
các sheet có vị trí sắp xếp như ở bài #1.
Em xin ý tưởng của Thầy và nhờ Thầy giúp em theo hướng có thể ứng dụng linh hoạt nếu số sheet có nội dung tương tự thay đổi!
Em cám ơn Thầy!
 
Lần chỉnh sửa cuối:
Upvote 0
Dạ! vì tính chất công việc của em các sheet có nội dung tương tự nhau không cố định Thầy ạ! (tầm 5 đến 10 sheet) và 02 sheet có nội dung tách biệt như em đã đính kèm file ở bài #1
Thầy cho ý kiến em đính chính lại như sau: trong file ví dụ em đã nêu:
- 02 sheet (màu tím) có nội dung không tương tự các sheet còn lại là sheet "Tong vat tu" và Sheet"Quan trong"
- 03 sheet(màu đỏ) có cấu trúc giống nhau (tiêu đề các cột giống nhau, nhưng số dòng có sheet nhiều dòng, sheet ít dòng hơn) là "Nha o, san nha, Vuon ao"
các sheet có vị trí sắp xếp như ở bài #1.
Em xin ý tưởng của Thầy và nhờ Thầy giúp em theo hướng có thể ứng dụng linh hoạt nếu số sheet có nội dung tương tự thay đổi!
Em cám ơn Thầy!
Bạn thử code sau xem:
Mã:
Sub Hide_Unhide()
    Dim Ws As Worksheet, Flag As Boolean
    Flag = Not (Sheets("Nha o").Range("E:F").EntireColumn.Hidden)
    For Each Ws In ThisWorkbook.Worksheets
        If InStr(".Tong vat tu.quan trong.", Ws.Name) = 0 Then
            Ws.Range("E:F,K:L,N:O,U:Y").EntireColumn.Hidden = Flag
        End If
    Next
End Sub
Nên gán cho nó một phím tắt (Ctrl+Shift+A chẳng hạn), mỗi lần cần dùng thì nhấn cái bụp là nó chạy.
 
Upvote 0
Bạn thử code sau xem:
Mã:
Sub Hide_Unhide()
    Dim Ws As Worksheet, Flag As Boolean
    Flag = Not (Sheets("Nha o").Range("E:F").EntireColumn.Hidden)
    For Each Ws In ThisWorkbook.Worksheets
        If InStr(".Tong vat tu.quan trong.", Ws.Name) = 0 Then
            Ws.Range("E:F,K:L,N:O,U:Y").EntireColumn.Hidden = Flag
        End If
    Next
End Sub
Nên gán cho nó một phím tắt (Ctrl+Shift+A chẳng hạn), mỗi lần cần dùng thì nhấn cái bụp là nó chạy.
Dạ code chạy ổn rồi ạ! Thầy cho em hỏi thêm chút nữa em muốn tạo kiểu hộp điều khiển
Tích vào thì Ẩn cột còn bỏ dấu tích thì hiện cột, Thầy giúp em ạ!54435.jpg
 
Upvote 0
Dạ code chạy ổn rồi ạ! Thầy cho em hỏi thêm chút nữa em muốn tạo kiểu hộp điều khiển
Tích vào thì Ẩn cột còn bỏ dấu tích thì hiện cột, Thầy giúp em ạ!View attachment 202738
Bạn nhấp đúp vào cái Checkbox này và sử dụng code sau:
Mã:
Private Sub CheckBox1_Click()
    Dim Ws As Worksheet
    For Each Ws In ThisWorkbook.Worksheets
        If InStr(".Tong vat tu.quan trong.", Ws.Name) = 0 Then
            Ws.Range("E:F,K:L,N:O,U:Y").EntireColumn.Hidden = Not CheckBox1
        End If
    Next
End Sub
 
Upvote 0
Bạn nhấp đúp vào cái Checkbox này và sử dụng code sau:
Mã:
Private Sub CheckBox1_Click()
    Dim Ws As Worksheet
    For Each Ws In ThisWorkbook.Worksheets
        If InStr(".Tong vat tu.quan trong.", Ws.Name) = 0 Then
            Ws.Range("E:F,K:L,N:O,U:Y").EntireColumn.Hidden = Not CheckBox1
        End If
    Next
End Sub
Anh ơi Còn thiếu chữ "Ẩn/Hiện" nữa ạ
 
Upvote 0
Upvote 0
Anh ơi Còn thiếu chữ "Ẩn/Hiện" nữa ạ
Bạn nhấp đúp vào cái Checkbox này và sử dụng code sau:
Mã:
Private Sub CheckBox1_Click()
    Dim Ws As Worksheet
    For Each Ws In ThisWorkbook.Worksheets
        If InStr(".Tong vat tu.quan trong.", Ws.Name) = 0 Then
            Ws.Range("E:F,K:L,N:O,U:Y").EntireColumn.Hidden = Not CheckBox1
        End If
    Next
End Sub
Dạ, em cảm ơn Thầy ạ!
Em xin ý kiến Thầy chút nữa!
Có cách nào mà khi em thêm sheet có cấu trúc tương tự với sheet còn lại (như bài #1 em đã nêu) mà không phải chỉnh tên sheet trong đoạn mã code không ạ!
 
Upvote 0
Dạ, em cảm ơn Thầy ạ!
Em xin ý kiến Thầy chút nữa!
Có cách nào mà khi em thêm sheet có cấu trúc tương tự với sheet còn lại (như bài #1 em đã nêu) mà không phải chỉnh tên sheet trong đoạn mã code không ạ!
Nếu không muốn chỉnh trong code thì có lẽ là sẽ lấy 1 sheet làm chuẩn (sheet "Nha o" chẳng hạn), lấy tiêu đề các cột của sheet này đưa vào một mảng Tmp. Khi duyệt qua mỗi sheet Ws thì so sánh tiêu đề của sheet này với các phần tử của mảng Tmp, nếu phát hiện có tiêu đề không trùng khớp thì bỏ qua sheet Ws mà không thực hiện ẩn/hiện cột.
 
Upvote 0
Nếu không muốn chỉnh trong code thì có lẽ là sẽ lấy 1 sheet làm chuẩn (sheet "Nha o" chẳng hạn), lấy tiêu đề các cột của sheet này đưa vào một mảng Tmp. Khi duyệt qua mỗi sheet Ws thì so sánh tiêu đề của sheet này với các phần tử của mảng Tmp, nếu phát hiện có tiêu đề không trùng khớp thì bỏ qua sheet Ws mà không thực hiện ẩn/hiện cột.
Vâng ạ! Em hỏi Thầy vậy bởi vì tính chất công việc em làm thay đổi tên sheet và số Sheet liên tục.
Thầy làm ơn giúp em như cách Thầy vừa nêu ở bài số #11 được không ạ!
Em gà quá ^^^^ nên Thầy cho ý tưởng cũng chưa thể thực hiện được.
Mong nhận được sự hồi âm của Thầy.
 
Upvote 0
Vâng ạ! Em hỏi Thầy vậy bởi vì tính chất công việc em làm thay đổi tên sheet và số Sheet liên tục.
Thầy làm ơn giúp em như cách Thầy vừa nêu ở bài số #11 được không ạ!
Em gà quá ^^^^ nên Thầy cho ý tưởng cũng chưa thể thực hiện được.
Mong nhận được sự hồi âm của Thầy.
Thế này chẳng hạn này:
Mã:
Sub Hide_Unhide()
    Dim Ws As Worksheet, Flag As Boolean, i As Long, Tmp
    Tmp = Sheets(1).Range("A1:Y1").Value
    Flag = Not (Sheets(1).Range("E:F").EntireColumn.Hidden)
    For Each Ws In ThisWorkbook.Worksheets
        For i = 1 To UBound(Tmp,2)
            If Ws.Cells(1, i) <> Tmp(1, i) Then Exit For
        Next
        If i > UBound(Tmp,2) Then
            Ws.Range("E:F,K:L,N:O,U:Y").EntireColumn.Hidden = Flag
        End If
    Next
End Sub
Điều kiện để code chạy đúng là cái sheet mà bạn "lấy làm chuẩn" phải được đưa lên đầu tiên giống như sheet "Nha o" trong file ở bài 1, vì tiêu đề và thuộc tính ẩn/hiện sẽ dựa vào sheet này.
 
Lần chỉnh sửa cuối:
Upvote 0
Thế này chẳng hạn này:
Mã:
Sub Hide_Unhide()
    Dim Ws As Worksheet, Flag As Boolean, i As Long, Tmp
    Tmp = Sheets(1).Range("A1:Y1").Value
    Flag = Not (Sheets(1).Range("E:F").EntireColumn.Hidden)
    For Each Ws In ThisWorkbook.Worksheets
        For i = 1 To UBound(Tmp)
            If Ws.Cells(1, i) <> Tmp(1, i) Then Exit For
        Next
        If i > UBound(Tmp) Then
            Ws.Range("E:F,K:L,N:O,U:Y").EntireColumn.Hidden = Flag
        End If
    Next
End Sub
Điều kiện để code chạy đúng là cái sheet mà bạn "lấy làm chuẩn" phải được đưa lên đầu tiên giống như sheet "Nha o" trong file ở bài 1, vì tiêu đề và thuộc tính ẩn/hiện sẽ dựa vào sheet này.
Em cám ơn Thầy ạ!
Chúc Thầy sức khỏe và nhiều niềm vui!
 
Upvote 0
Tôi mới sửa một chút, chỗ Ubound(Tmp) sửa thành Ubound(Tmp,2) mới chính xác.
Thầy ơi, em có tham khảo bài viết của Thầy Ba Tê có đoạn code ẩn và hiện cột, em muốn chỉnh lại code đó để ẩn và hiện cột như em muốn :
Cột cần ẩn và hiện là những cột thuộc sheet (Nha de xe, San be tong, Ranh nuoc, Nha hieu bo, Cot co) Các cột cần ẩn, cần hiện (em tô màu xanh) trong sheet nêu trên là cột “E, F, K, L, N, O, P” và các cột từ “U đến Y”
Nhưng khi nhìn đoạn code (code ẩn/hiện cột) Thầy Ba Tê viết giúp em, em không biết chỉnh ở phần nào để có thể ẩn như mình muốn.
Thầy giúp em mới ạ!
hoan thien.jpg
 

File đính kèm

Upvote 0
Thầy ơi, em có tham khảo bài viết của Thầy @Ba Tê có đoạn code ẩn và hiện cột, em muốn chỉnh lại code đó để ẩn và hiện cột như em muốn :
Cột cần ẩn và hiện là những cột thuộc sheet (Nha de xe, San be tong, Ranh nuoc, Nha hieu bo, Cot co) Các cột cần ẩn, cần hiện (em tô màu xanh) trong sheet nêu trên là cột “E, F, K, L, N, O, P” và các cột từ “U đến Y”
Nhưng khi nhìn đoạn code (code ẩn/hiện cột) Thầy @Ba Tê viết giúp em, em không biết chỉnh ở phần nào để có thể ẩn như mình muốn.
Nick này và @dangky47h có liên quan gì không?
https://www.giaiphapexcel.com/diend...thứ-tự-stt-sau-khi-ẩn-dòng.137042/post-877484
PHP:
Public Sub AnCot()
Dim Wf As Object, Ws As Worksheet, Arr, J As Long
Set Wf = Application.WorksheetFunction
Arr = Array(5, 6, 11, 12, 14, 15, 16, 21, 22, 23, 24, 25)
For Each Ws In ThisWorkbook.Worksheets
    If Ws.Name <> "May thi cong" Then
        With Ws
            For J = LBound(Arr) To UBound(Arr)
                If Wf.CountA(.Range(.Cells(2, Arr(J)), .Cells(1000, Arr(J)))) = 0 Then
                    .Cells(2, Arr(J)).EntireColumn.Hidden = True
                End If
            Next J
        End With
    End If
Next Ws
Set Wf = Nothing
MsgBox "Xong!", , "GPE"
End Sub
 
Upvote 0
Nick này và @dangky47h có liên quan gì không?
https://www.giaiphapexcel.com/diendan/threads/em-xin-được-sự-giúp-đỡ-Ẩn-dòng-và-tự-động-đánh-lại-số-thứ-tự-stt-sau-khi-ẩn-dòng.137042/post-877484
PHP:
Public Sub AnCot()
Dim Wf As Object, Ws As Worksheet, Arr, J As Long
Set Wf = Application.WorksheetFunction
Arr = Array(5, 6, 11, 12, 14, 15, 16, 21, 22, 23, 24, 25)
For Each Ws In ThisWorkbook.Worksheets
    If Ws.Name <> "May thi cong" Then
        With Ws
            For J = LBound(Arr) To UBound(Arr)
                If Wf.CountA(.Range(.Cells(2, Arr(J)), .Cells(1000, Arr(J)))) = 0 Then
                    .Cells(2, Arr(J)).EntireColumn.Hidden = True
                End If
            Next J
        End With
    End If
Next Ws
Set Wf = Nothing
MsgBox "Xong!", , "GPE"
End Sub
Có đôi chút à, cùng chiến hào thưa Thầy, đội tuyển lắp ghép, gom nhặt kiến thức trên GPE và là đồng nghiệp. Bạn ấy là Chị em Thầy ạ! Thầy giúp chị ấy nhé! cũng là giúp em.
 
Upvote 0
Nick này và @dangky47h có liên quan gì không?
https://www.giaiphapexcel.com/diendan/threads/em-xin-được-sự-giúp-đỡ-Ẩn-dòng-và-tự-động-đánh-lại-số-thứ-tự-stt-sau-khi-ẩn-dòng.137042/post-877484
PHP:
Public Sub AnCot()
Dim Wf As Object, Ws As Worksheet, Arr, J As Long
Set Wf = Application.WorksheetFunction
Arr = Array(5, 6, 11, 12, 14, 15, 16, 21, 22, 23, 24, 25)
For Each Ws In ThisWorkbook.Worksheets
    If Ws.Name <> "May thi cong" Then
        With Ws
            For J = LBound(Arr) To UBound(Arr)
                If Wf.CountA(.Range(.Cells(2, Arr(J)), .Cells(1000, Arr(J)))) = 0 Then
                    .Cells(2, Arr(J)).EntireColumn.Hidden = True
                End If
            Next J
        End With
    End If
Next Ws
Set Wf = Nothing
MsgBox "Xong!", , "GPE"
End Sub
Chắc là chị em sinh đôi đó bác, chỉ nhìn cái file đính kèm là có câu trả lời rồi.
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom