VBA Ẩn cột theo điều kiện (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

MeThuongNho

Thành viên thường trực
Tham gia
30/10/09
Bài viết
368
Được thích
77
Nghề nghiệp
Sale - Planning
Dear Anh/Chị,
Giúp em cái code VBA ẩn cột giúp em.
1 code chung hoặc 2 code riêng cũng được.
Mục đích : muốn khi chạy code:
1. Sẽ ẩn các cột từ C: BM với đk các cell từ C4:BM4 mà =0 sẽ ẩn.
2. Sẽ hiện ra lại các cột từ C:BM (tất cả các cột)
Cám ơn mợi người giúp đỡ.
 

File đính kèm

Em thấy cứ ngồi bấm nút nó cho nó ẩn, hiện cũng vui vui ... :D:D:D
PHP:
Sub An_hiencot()
    Dim Rng As Range, Rng1 As Range
Set Rng = Range("C4:BM4")
For Each Cll In Rng
    If Cll = Empty Then
        If Rng1 Is Nothing Then
            Set Rng1 = Cll
        Else
            Set Rng1 = Union(Rng1, Cll)
        End If
    End If
Next
Rng1.EntireColumn.Hidden = Not Rng1.EntireColumn.Hidden
End Sub
 
Upvote 0
Nếu giải quyết bài này mà không dùng vòng lập thì sao?
 
Upvote 0
Upvote 0
Chính xác là cái này nhưng giờ "nâng cấp độ khó" là: vùng chọn có chứa công thức, tức số 0 mà ta nhìn thấy là giá trị do công thức trả về
Vậy phải mần... răng?
Mình không đưa về 0 mà đưa về 1 cái cụ thể "k" nào cũng được anh ndu96081631, sẽ khỏi vất vả cái code về rỗng or 0.
File của befaint em mà đk như này : OK rồi anh.
Mã:
1. Sẽ ẩn các cột từ C: BM với đk các cell từ C4:BM4 mà =0 sẽ ẩn.
-- 1. Nếu h em làm điều kiện =K thì code sao anh.
--2. Ngược lại nếu em muốn ẩn cột >0 thì code sửa lại như thế nào ah.
Trân trọng!
 
Upvote 0
Mình không đưa về 0 mà đưa về 1 cái cụ thể "k" nào cũng được anh ndu96081631, sẽ khỏi vất vả cái code về rỗng or 0.
File của befaint em mà đk như này : OK rồi anh.
Mã:
1. Sẽ ẩn các cột từ C: BM với đk các cell từ C4:BM4 mà =0 sẽ ẩn.
-- 1. Nếu h em làm điều kiện =K thì code sao anh.
--2. Ngược lại nếu em muốn ẩn cột >0 thì code sửa lại như thế nào ah.
Trân trọng!
Code bạn có rồi, chỉ sửa lại điều kiện trong phát biểu IF thôi mà
 
Upvote 0
Em thấy cứ ngồi bấm nút nó cho nó ẩn, hiện cũng vui vui ... :D:D:D
PHP:
Sub An_hiencot()
    Dim Rng As Range, Rng1 As Range
Set Rng = Range("C4:BM4")
For Each Cll In Rng
    If Cll = Empty Then
        If Rng1 Is Nothing Then
            Set Rng1 = Cll
        Else
            Set Rng1 = Union(Rng1, Cll)
        End If
    End If
Next
Rng1.EntireColumn.Hidden = Not Rng1.EntireColumn.Hidden
End Sub
Code chạy Ok ,Trong trường hợp Chen nó vào CommandButton thì phải sửa lại như thế nào,để nút CommandButton hiện nên chữ AN và HIEN....?
 
Upvote 0
em có 1 file mà không biết cách tạo code ẩn cột có khoảng trắng nhờ các bác hướng dẫn hay tạo hộ em cái code ẩn cột rỗng . em gửi file lên nhờ các bác xem dùm. em xin cảm ơn
 

File đính kèm

Upvote 0
em có 1 file mà không biết cách tạo code ẩn cột có khoảng trắng nhờ các bác hướng dẫn hay tạo hộ em cái code ẩn cột rỗng . em gửi file lên nhờ các bác xem dùm. em xin cảm ơn
Sử dụng code bài #.6 được mà bạn.
File mình không ẩn cột A(thấy fill đỏ nên mình để lại), bạn xem file nha.
:-)
 

File đính kèm

Upvote 0
xin bạn hướng dẫn làm với các sheet khác
Sheet đang làm: Khu vực hiển thị là sheet 3: code
2 Code trong Modules như sau:
Mã:
Sub HideColumns()
    Dim Rng As Range, Cll As Range, i As Long
    For Each Cll In Sheet3.Range("B3:HG3")
        If Cll.Value = 0 Or Len(Cll.Value) = 0 Then
            i = i + 1
            If i = 1 Then
                Set Rng = Cll
            Else
                Set Rng = Union(Rng, Cll)
            End If
        End If
    Next Cll
Rng.EntireColumn.Hidden = True
End Sub

Sub ShowColumns()
    Sheet3.Range("B3:HG3").EntireColumn.Hidden = False
End Sub
Rồi trong sheet 3 đó bạn gán cán code này cho CommandButton , Code sau:
Mã:
Private Sub CommandButton1_Click()
    Application.ScreenUpdating = False
    If CommandButton1.Caption = "Show" Then
        Call ShowColumns
        CommandButton1.Caption = "Hide"
    Else
        Call HideColumns
        CommandButton1.Caption = "Show"
    End If
    Application.ScreenUpdating = True
End Sub
Làm tương tự cho sheet bạn muốn làm nha.
Thân!
 
Upvote 0
Sheet đang làm: Khu vực hiển thị là sheet 3: code
2 Code trong Modules như sau:
Mã:
Sub HideColumns()
    Dim Rng As Range, Cll As Range, i As Long
    For Each Cll In Sheet3.Range("B3:HG3")
        If Cll.Value = 0 Or Len(Cll.Value) = 0 Then
            i = i + 1
            If i = 1 Then
                Set Rng = Cll
            Else
                Set Rng = Union(Rng, Cll)
            End If
        End If
    Next Cll
Rng.EntireColumn.Hidden = True
End Sub

Sub ShowColumns()
    Sheet3.Range("B3:HG3").EntireColumn.Hidden = False
End Sub
Rồi trong sheet 3 đó bạn gán cán code này cho CommandButton , Code sau:
Mã:
Private Sub CommandButton1_Click()
    Application.ScreenUpdating = False
    If CommandButton1.Caption = "Show" Then
        Call ShowColumns
        CommandButton1.Caption = "Hide"
    Else
        Call HideColumns
        CommandButton1.Caption = "Show"
    End If
    Application.ScreenUpdating = True
End Sub
Làm tương tự cho sheet bạn muốn làm nha.
Thân!
xin bạn hướng dẫn tạo lút lệnh
 
Upvote 0
Vào tab : Developer ( nếu không thấy tab này : searh google và mở ra: key: " mở thẻ Developer" chẳng hạn)
--> chọn Insert --> Chọn Commnand Button. ( đó là nút lệnh bạn cần).
:)
mình làm được rồi nhưng không thể gán 2 show và hide cùng 1 lúc vào lút lệnh được mong bạn hướng dẫn. xin cảm ơn
 
Upvote 0
Bạn gán cái code này vào Command Button đã tạo đó:
Mã:
Private Sub CommandButton1_Click()
    Application.ScreenUpdating = False
    If CommandButton1.Caption = "Show" Then
        Call ShowColumns
        CommandButton1.Caption = "Hide"
    Else
        Call HideColumns
        CommandButton1.Caption = "Show"
    End If
    Application.ScreenUpdating = True
End Sub
 
Upvote 0

File đính kèm

Upvote 0
Upvote 0
Tự google đi bạn, cái này dễ mà. google

https://caprovn.wordpress.com/2015/03/02/tao-lenh-in-bang-macro-trong-excel/

Mình lại khuyên dùng shape thay nút bấm do áp dụng trên nhiều sheet ( nhưng phải code lại)
bạn ơi code kế tiếp của code này là gì vậy:
Sub HideFour()
Dim Rng As Range, Cll As Range, i As Long
For Each Cll In Sheet9.Range("B3:HG3")
If Cll.Value = 0 Or Len(Cll.Value) = 0 Then
i = i + 1
If i = 1 Then
Set Rng = Cll
Else
Set Rng = Union(Rng, Cll)
End If
End If
Next Cll
Rng.EntireColumn.Hidden = True
End Sub
Sub ShowFour()
Sheet9.Range("B3:HG3").EntireColumn.Hidden = False
End Sub
làm sao phải thay các chữ màu xanh chỉ cho mình với. xin cảm ơn bạn
 
Upvote 0
Cái chỗ màu xanh đó tên j cũng đc: nhưng k dc thiếu chữ Sub và dấu () sau tên code:
- Sau khi sửa tên tùy ý: ví dụ : Sub HideTVG() và ShowTVG()
thì trong code sau cũng phải sửa theo
Mã:
Private Sub CommandButton1_Click()
    Application.ScreenUpdating = False
    If CommandButton1.Caption = "Show" Then
        Call ShowTVG
        CommandButton1.Caption = "Hide"
    Else
        Call HideTVG
        CommandButton1.Caption = "Show"
    End If
    Application.ScreenUpdating = True
End Sub
 
Upvote 0
Cái chỗ màu xanh đó tên j cũng đc: nhưng k dc thiếu chữ Sub và dấu () sau tên code:
- Sau khi sửa tên tùy ý: ví dụ : Sub HideTVG() và ShowTVG()
thì trong code sau cũng phải sửa theo
Mã:
Private Sub CommandButton1_Click()
    Application.ScreenUpdating = False
    If CommandButton1.Caption = "Show" Then
        Call ShowTVG
        CommandButton1.Caption = "Hide"
    Else
        Call HideTVG
        CommandButton1.Caption = "Show"
    End If
    Application.ScreenUpdating = True
End Sub
Sao mình thay như vậy để áp dụng với các sheet khác lại không được nhỉ bạn. xin hướng dẫn mình với
 
Upvote 0
Cái chỗ màu xanh đó tên j cũng đc: nhưng k dc thiếu chữ Sub và dấu () sau tên code:
- Sau khi sửa tên tùy ý: ví dụ : Sub HideTVG() và ShowTVG()
thì trong code sau cũng phải sửa theo
Mã:
Private Sub CommandButton1_Click()
    Application.ScreenUpdating = False
    If CommandButton1.Caption = "Show" Then
        Call ShowTVG
        CommandButton1.Caption = "Hide"
    Else
        Call HideTVG
        CommandButton1.Caption = "Show"
    End If
    Application.ScreenUpdating = True
End Sub
cho mình hỏi muốn dùng code cho các sheet khác chỉ càn thay đổi Sub Hide......() và Show......() là được đúng không bạn
 
Upvote 0
cho mình hỏi muốn dùng code cho các sheet khác chỉ càn thay đổi Sub Hide......() và Show......() là được đúng không bạn
Mã:
- Sau khi sửa tên tùy ý: ví dụ : Sub HideTVG() và ShowTVG()
thì trong code sau cũng phải sửa theo
Code:
Private Sub CommandButton1_Click()
   Application.ScreenUpdating = False
   If CommandButton1.Caption = "Show" Then
       Call ShowTVG
       CommandButton1.Caption = "Hide"
   Else
       Call HideTVG
       CommandButton1.Caption = "Show"
   End If
   Application.ScreenUpdating = True
End Sub
 
Upvote 0
-- 1 sheet cần 2 code Module đó là Show và Hide
-- và trong sheet đó cần code này: mình đã lặp lại mấy lần rồi.
Mã:
Private Sub CommandButton1_Click()
   Application.ScreenUpdating = False
   If CommandButton1.Caption = "Show" Then
       Call ShowTVG
       CommandButton1.Caption = "Hide"
   Else
       Call HideTVG
       CommandButton1.Caption = "Show"
   End If
   Application.ScreenUpdating = True
End Sub
Code này chỉnh sửa tên theo 2 cái tên mình tùy đặt, mình đã ví dụ ak.
 
Upvote 0
Mã:
- Sau khi sửa tên tùy ý: ví dụ : Sub HideTVG() và ShowTVG()
thì trong code sau cũng phải sửa theo
Code:
Private Sub CommandButton1_Click()
   Application.ScreenUpdating = False
   If CommandButton1.Caption = "Show" Then
       Call ShowTVG
       CommandButton1.Caption = "Hide"
   Else
       Call HideTVG
       CommandButton1.Caption = "Show"
   End If
   Application.ScreenUpdating = True
End Sub
sao mình làm như bạn hương dẫn sao vẫn báo sai là sao hả bạn. xin bạn chỉ dẫn
 

File đính kèm

  • 55.png
    55.png
    20 KB · Đọc: 13
Upvote 0
Bạn gửi file lên coi, mình xem lại bạn đang gán code vào đâu
 
Upvote 0
Bạn gửi file lên coi, mình xem lại bạn đang gán code vào đâu
xin cảm ơn bạn mình đã làm được rồi. nhưng có điều xin hỏi bạn cái lút lệnh của bạn lúc in ra lại không có. nhưng lút lệnh mình tạo in ra lại có. bạn làm cách nào vậy xin chỉ dẫn
 
Upvote 0
Click chuột phải cái Command button đó
Chọn tiếp Format Control
Qua tab: Properties: bỏ chọn: "Print Object" đi.
Chúc thành công.
 
Upvote 0
hii. Mình đang tập viết VBA mọi người chỉ mình cái này với. chỉ ẩn được hàn mà không hiện được hàng trong exel.
code:
Private Sub CommandButton1_Click()
Dim Check As Boolean
Check = (CommandButton1.Caption = "AN HANG")
CommandButton1.Caption = IIf(Check, "HIEN HANG", "AN HANG")
Dim ws As Worksheet
Set ws = ActiveSheet
For i = 2 To 25
If ws.Cells(i, 1).Value = "0" Then
ws.Rows(i & ":" & i).EntireRow.Hidden = True
Else
ws.Rows(i & ":" & i).EntireRow.Hidden = False
End If
Next
End Sub
 
Upvote 0
@huyensim19 có hàm ẩn dòng tự động được không bạn?

 
Upvote 0
Đầu tiên là sửa từ viết tắt trước. Tiếp theo là gửi file lên và nêu kết quả mong muốn.
Sub An_hiencot()
Dim Rng As Range, Rng1 As Range
Set Rng = Range("C4:BM4")
For Each Cll In Rng
If Cll = Empty Then
If Rng1 Is Nothing Then
Set Rng1 = Cll
Else
Set Rng1 = Union(Rng1, Cll)
End If
End If
Next
Rng1.EntireColumn.Hidden = Not Rng1.EntireColumn.Hidden
End Sub


Em cần ẩn cột B như file này ạ
Em thử code này sẽ ẩn luôn cột A ạ
Nhờ các anh giúp dùm
Em cám ơn!
 

File đính kèm

Upvote 0
Chẳng biết có đúng ý không.
Chẳng biết có đúng ý không.
Code này chạy đúng ý em rồi ạ

Chẳng biết có đúng ý không.
Code này đúng rồi ạ Em cám ơn nhiều
Mà mình có thể để ẩn, hiện file chung 1 nút shapes được không ạ
 
Lần chỉnh sửa cuối:
Upvote 0
Chung một nút được, nhưng bạn sửa mấy từ viết tắt đi đã. Mà sao lại ẩn hiện file là thế nào nhỉ.
File mình làm có nhiều cột nên muốn cột nào không có dữ liệu ẩn cho gọn để gởi hình báo cáo qua zalo á
Làm giúp cái này nữa nha
Cám ơn nhiều ạ
 
Upvote 0

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
mà tình hình là nếu mình thêm hoặc bớt dòng là code không chạy
Biết ngay là file đầu không giống file thật mà, để xem xem thế nào rồi điều chỉnh.
Dòng tổng cộng cuối tại cột AJ thì nên dùng SUMIF chứ không nên đi cộng từng ô một như vậy.
Bạn chạy thử xem thế nào.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Biết ngay là file đầu không giống file thật mà, để xem xem thế nào rồi điều chỉnh.
Dòng tổng cộng cuối tại cột AJ thì nên dùng SUMIF chứ không nên đi cộng từng ô một như vậy.
Bạn chạy thử xem thế nào.
Code chạy được rồi ạ
Cám ơn bạn nhiều giúp nhiệt tình quá
 
Upvote 0
Phần cột TOTAL cũng nên cho tự động nốt thì đỡ phải cộng thủ công từng đoạn mấy dòng một như hiện tại.
Phần total mình có sum mà tự động là sao bạn
Còn cái G.Total thấy file này đơn giản mà khi chèn hoặc bớt dòng không thấy ảnh hưởng nên thôi
 
Upvote 0

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

Back
Top Bottom