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

Blue Softs Liên hệ QC

tangoctuan

Thành viên hoạt động
Tham gia
22/4/08
Bài viết
147
Được thích
17
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!
 

buiquangthuan

Thành viên tiêu biểu
Tham gia
17/12/10
Bài viết
716
Được thích
388
Giới tính
Nam
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

tangoctuan

Thành viên hoạt động
Tham gia
22/4/08
Bài viết
147
Được thích
17
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

tangoctuan

Thành viên hoạt động
Tham gia
22/4/08
Bài viết
147
Được thích
17
Đâ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: 5
Upvote 0

SA_DQ

/(hông là gì!
Thành viên danh dự
Tham gia
8/6/06
Bài viết
12,586
Được thích
19,192
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

concogia

Gội rồi mới Cạo
Tham gia
17/9/09
Bài viết
3,396
Được thích
6,813
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

SA_DQ

/(hông là gì!
Thành viên danh dự
Tham gia
8/6/06
Bài viết
12,586
Được thích
19,192
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

concogia

Gội rồi mới Cạo
Tham gia
17/9/09
Bài viết
3,396
Được thích
6,813
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

SA_DQ

/(hông là gì!
Thành viên danh dự
Tham gia
8/6/06
Bài viết
12,586
Được thích
19,192
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

tangoctuan

Thành viên hoạt động
Tham gia
22/4/08
Bài viết
147
Được thích
17
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

SA_DQ

/(hông là gì!
Thành viên danh dự
Tham gia
8/6/06
Bài viết
12,586
Được thích
19,192
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
Top Bottom