Xin hỗ trợ code hide các cột có theo điều kiện (tích x)

Liên hệ QC

tangoctuan

Thành viên hoạt động
Tham gia
22/4/08
Bài viết
153
Được thích
19
Em muốn hỏi làm cách nào để hide các cột theo rule như sau: Hàng đầu tiên (số 1), có một số cột được tích x, cứ cột nào có tích x ở hàng này thì sẽ hide cột đó. Vì số lượng cột tương đối nhiều nên làm bằng tay mất thời gian quá, nhờ cả nhà hỗ trợ một code nào để xử lý được cái này. Cảm ơn mọi người!
 
Em muốn hỏi làm cách nào để hide các cột theo rule như sau: Hàng đầu tiên (số 1), có một số cột được tích x, cứ cột nào có tích x ở hàng này thì sẽ hide cột đó. Vì số lượng cột tương đối nhiều nên làm bằng tay mất thời gian quá, nhờ cả nhà hỗ trợ một code nào để xử lý được cái này. Cảm ơn mọi người!
bạn làm ơn đưa file dữ liệu lên. chứ biết giúp thế nào
 
Upvote 0
bạn làm ơn đưa file dữ liệu lên. chứ biết giúp thế nào
Vì nó chỉ có mỗi một ý như vậy thôi bạn à, từ dòng 2 là file dữ liệu, cũng không có gì mà không gửi được cả, nhưng ý của mình chỉ là dòng đầu tiên là dòng để tạo rule cho hide cột, cứ ở cell nào hàng 1 có tích x thì khi chạy code sẽ hide cột đó.
 
Upvote 0
Đây như file mình gửi này bạn. Hàng đầu tiên để mình tích x vào các cột cần hide. Các cột này sẽ thay đổi tùy theo điều kiện ở các hàng phía dưới.
 

File đính kèm

  • Quyet toan chi phi.xlsb
    27 KB · Đọc: 6
Upvote 0
Thêm 1 macro để dành cho file có số cột là nhiều
:
PHP:
Sub AnCacCot()
 Dim Col As Integer
 Dim Rng As Range, sRng As Range
 Dim MyAdd As String
 Set Rng = [B2].CurrentRegion
 Col = Rng.Columns.Count
 Set Rng = [A1].Resize(, Col)
 Set sRng = Rng.Find("x", , xlFormulas, xlWhole)
 If Not sRng Is Nothing Then
    Application.ScreenUpdating = False
    MyAdd = sRng.Address
    Do
        Cells(1, sRng.Column).EntireColumn.Hidden = True
        Set sRng = Rng.FindNext(sRng)
    Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
    Application.ScreenUpdating = True
 End If
End Sub
 
Upvote 0
Thêm 1 macro để dành cho file có số cột là nhiều
:
PHP:
Sub AnCacCot()
 Dim Col As Integer
 Dim Rng As Range, sRng As Range
 Dim MyAdd As String
 Set Rng = [B2].CurrentRegion
 Col = Rng.Columns.Count
 Set Rng = [A1].Resize(, Col)
 Set sRng = Rng.Find("x", , xlFormulas, xlWhole)
 If Not sRng Is Nothing Then
    Application.ScreenUpdating = False
    MyAdd = sRng.Address
    Do
        Cells(1, sRng.Column).EntireColumn.Hidden = True
        Set sRng = Rng.FindNext(sRng)
    Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
    Application.ScreenUpdating = True
 End If
End Sub
Đố bác Sa giải bài này mà không cần vòng lặp. Hihi. Giải được thì khi hết dịch đãi bác 5 ve
 
Upvote 0
Thôi, hết dịch đến nhà mình Cò G sẽ được 5 ve luôn!
(Xin mời các bạn đã tham gia trong bài đăng này luôn nha!)
PHP:
Sub AnCacCotDaDanhDau()
 Dim Rng As Range:                   Dim Col As Integer
 
 Set Rng = [B2].CurrentRegion
 Col = Rng.Columns.Count
 Set Rng = Cells(1, 1).Resize(, Col).SpecialCells(xlCellTypeConstants, 2)
 MsgBox Rng.Cells.Count
 If Rng.Cells.Count>0 then Rng.EntireColumn.Hidden = True
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Thôi, hết dịch đến nhà mình Cò G sẽ được 5 ve luôn!
(Xin mời các bạn đã tham gia trong bài đăng này luôn nha!)
PHP:
Sub AnCacCotDaDanhDau()
 Dim Rng As Range:                   Dim Col As Integer
 
 Set Rng = [B2].CurrentRegion
 Col = Rng.Columns.Count
 Set Rng = Cells(1, 1).Resize(, Col).SpecialCells(xlCellTypeConstants, 2)
 MsgBox Rng.Cells.Count
 If Rng.Cells.Count>0 then Rng.EntireColumn.Hidden = True
End Sub
Hihi, phải khích vậy mới chịu làm cái dễ, mà quên, đố kiểu này là gợi ý mất tiêu rồi, dại quá
Em thiếu bác 5 ve
Thân
 
Upvote 0
Chuyện zì cũng có hai mặt của nó, ví như chuyện này (làm theo cách này theo í Cò Già) tiềm ẩn nguy cơ:

/(hi trong vùng khảo sát có khi có ký tự khác vô tình rơi vô!

[Xin nhắc lại mọi người có bài đăng trong mục này: Xin mời mọi người đến tệ za sau kì dịch & khi đi nhớ mang theo chứng nhận tiêm ngừa!]
 
Upvote 0
Thêm 1 macro để dành cho file có số cột là nhiều
:
PHP:
Sub AnCacCot()
 Dim Col As Integer
 Dim Rng As Range, sRng As Range
 Dim MyAdd As String
 Set Rng = [B2].CurrentRegion
 Col = Rng.Columns.Count
 Set Rng = [A1].Resize(, Col)
 Set sRng = Rng.Find("x", , xlFormulas, xlWhole)
 If Not sRng Is Nothing Then
    Application.ScreenUpdating = False
    MyAdd = sRng.Address
    Do
        Cells(1, sRng.Column).EntireColumn.Hidden = True
        Set sRng = Rng.FindNext(sRng)
    Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
    Application.ScreenUpdating = True
 End If
End Sub
Cảm ơn bác. Nhưng sao
Thêm 1 macro để dành cho file có số cột là nhiều
:
PHP:
Sub AnCacCot()
 Dim Col As Integer
 Dim Rng As Range, sRng As Range
 Dim MyAdd As String
 Set Rng = [B2].CurrentRegion
 Col = Rng.Columns.Count
 Set Rng = [A1].Resize(, Col)
 Set sRng = Rng.Find("x", , xlFormulas, xlWhole)
 If Not sRng Is Nothing Then
    Application.ScreenUpdating = False
    MyAdd = sRng.Address
    Do
        Cells(1, sRng.Column).EntireColumn.Hidden = True
        Set sRng = Rng.FindNext(sRng)
    Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
    Application.ScreenUpdating = True
 End If
End Sub
Cảm ơn bác. Nhưng cho em hỏi sao khi em tích x bình thường thì code chạy được, mà để hàm ở dòng 1 (trả về giá trị x khi dòng 3 có number > 0) thì code lại không chạy nhỉ, như em đang đoán chắc code đang chỉ nhận giá trị text trực tiếp trong ô chứ không nhận giá trị thông qua hàm trả về. Em dùng hàm IF.
Bài đã được tự động gộp:

Cảm ơn bác nhiều!
 
Upvote 0
Cảm ơn bác. Nhưng cho em hỏi sao khi em tích x bình thường thì code chạy được, mà để hàm ở dòng 1 (trả về giá trị x khi dòng 3 có number > 0) thì code lại không chạy nhỉ, như em đang đoán chắc code đang chỉ nhận giá trị text trực tiếp trong ô chứ không nhận giá trị thông qua hàm trả về. Em dùng hàm IF.
Chắc do dòng lệnh này
Set sRng = Rng.Find("x", , xlFormulas, xlWhole)

Đổi lại tham số xlValues xem sao (?)
 
Upvote 0
Web KT
Back
Top Bottom