Lập VBA in theo điều kiện.

Liên hệ QC

Chian91

Thành viên chính thức
Tham gia
19/9/15
Bài viết
57
Được thích
3
Em có bài toán này mong cả nhà giải quyết giúp bằng VBA. Yêu cầu đề bài trong file đính kèm mong cả nhà giúp đỡ, Em xin cám ơn nhiều ạ.
 

File đính kèm

Tóm lại như thế này ạ: Em muốn các dòng trong vùng B9:B23 có số thứ tự trong khoảng I6:J6 thì hiện, số thứ tự ngoài vùng I6:J6 thì ẩn ạ
Chắc là vầy:
Mã:
Sub InTHBH()
    Dim Rng As Range, sRng As Range, Cll As Range
Set sRng = Range("B9:B23")
sRng.EntireRow.Hidden = False
For Each Cll In sRng
    If Cll.Value < Range("I6").Value Or Cll.Value > Range("J6").Value Then
        If Rng Is Nothing Then
            Set Rng = Cll
        Else
            Set Rng = Union(Rng, Cll)
        End If
    End If
Next
Rng.EntireRow.Hidden = True
Sheet1.PrintPreview
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Chắc là vầy:
Mã:
Sub InTHBH()
    Dim Rng As Range, sRng As Range, Cll As Range
Set sRng = Range("B9:B23")
sRng.EntireRow.Hidden = False
For Each Cll In sRng
    If Cll.Value < Range("I6").Value Or Cll.Value > Range("J6").Value Then
        If Rng Is Nothing Then
            Set Rng = Cll
        Else
            Set Rng = Union(Rng, Cll)
        End If
    End If
Next
Rng.EntireRow.Hidden = True
Sheet1.PrintPreview
End Sub
Em cám ơn, đúng ý rồi ạ. Những vẫn bị lỗi. Khi em chọn khoảng hiện từ 3-6 thì stt từ 1-2 vẫn hiện lên ạ
 
Upvote 0
Upvote 0
Uổi. Quên chưa bẫy lỗi :p:p:p
Mã:
Sub InTHBH()
    Dim Rng As Range, sRng As Range, Cll As Range
Set sRng = Range("B9:B23")
sRng.EntireRow.Hidden = False
For Each Cll In sRng
    If Cll.Value < Range("I6").Value Or Cll.Value > Range("J6").Value Then
        If Rng Is Nothing Then
            Set Rng = Cll
        Else
            Set Rng = Union(Rng, Cll)
        End If
    End If
Next
  If Not Rng Is Nothing Then Rng.EntireRow.Hidden = True
Sheet1.PrintPreview
End Sub
 
Upvote 0
Cod trên thì ok rồi ạ, nhưng khi em thay đổi chút thì không tự động chạy đc. Bây giờ vùng điều kiện I6:J6 e lấy ở Sheet khác thì không tự động chạy đc như file e đính kèm, Mong cả nhà giúp đỡ e. EM cảm ơn nhiều ạ.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Cod trên thì ok rồi ạ, nhưng khi em thay đổi chút thì không tự động chạy đc. Bây giờ vùng điều kiện I6:J6 e lấy ở Sheet khác thì không tự động chạy đc như file e đính kèm, Mong cả nhà giúp đỡ e. EM cảm ơn nhiều ạ.
Bạn sửa dòng If Cll.Value < Range("I6").Value Or Cll.Value > Range("J6").Value Then thành If Cll.Value < Sheets("Tên sheet").Range("I6").Value Or Cll.Value > Sheets("Tên sheet").Range("J6").Value Then
Bạn thay cái "Tên sheet" bằng tên Sheet chứa I6, J6 trong File của Bạn
 
Upvote 0
Bạn sửa dòng If Cll.Value < Range("I6").Value Or Cll.Value > Range("J6").Value Then thành If Cll.Value < Sheets("Tên sheet").Range("I6").Value Or Cll.Value > Sheets("Tên sheet").Range("J6").Value Then
Bạn thay cái "Tên sheet" bằng tên Sheet chứa I6, J6 trong File của Bạn

Em cảm ơn ạ, nhưng ô điều kiện của e lại lấy dữ liệu từ ô khác, chỉ khi nào mình enter hay tác động vào 1 ô ở sheet 1 thì nó mới tự chạy thôi ạ, e xin hỏi như thế thì xử lý sao ạ?
 
Upvote 0

File đính kèm

Upvote 0
Vẫn chưa đc chị xinh ơi, Bây giờ bài toán của e là: Điều kiện giá trị giữ dòng là Sheet1(I6:J6), vùng này sẽ lấy điều kiện từ sheet2. Khi mình nhập giá trị vào sheet 2 thì sheet1 sẽ tự động ẩn các dòng ngoài vùng giá trị các giá trị, k cần Print nữa ạ . Mong chị giúp đỡ
 

File đính kèm

Upvote 0
Vẫn chưa đc chị xinh ơi, Bây giờ bài toán của e là: Điều kiện giá trị giữ dòng là Sheet1(I6:J6), vùng này sẽ lấy điều kiện từ sheet2. Khi mình nhập giá trị vào sheet 2 thì sheet1 sẽ tự động ẩn các dòng ngoài vùng giá trị các giá trị, k cần Print nữa ạ . Mong chị giúp đỡ
Thế thì Bạn xóa dòng Sheet1.PrintPreview đi là xong
 
Upvote 0
Nhưng khi e nhập điều kiện vào ô trong Sheet 2 thì Sheet 1 không tự nhảy, mà phải tác động vào Sheet 1 nó mới tự nhảy ạ
Bạn phải cho cái sự kiện Worksheet_Change nằm trong Sheet2 nó mới chạy được chứ
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Change As Range, Rng As Range, sRng As Range, Cll As Range, fNumb As Long, eNumb As Long
Set Change = Intersect(Target, Sheet2.Range("D4:E4"))
Set sRng = Sheet1.Range("B9:B23")
fNumb = Sheet2.Range("D4").Value:  eNumb = Sheet2.Range("E4").Value
If Not Change Is Nothing Then
    sRng.EntireRow.Hidden = False
    For Each Cll In sRng
        If Cll.Value < fNumb Or Cll.Value > eNumb Then
            If Rng Is Nothing Then
                Set Rng = Cll
            Else
                Set Rng = Union(Rng, Cll)
            End If
        End If
    Next
    If Not Rng Is Nothing Then Rng.EntireRow.Hidden = True
End If
End Sub
 

File đính kèm

Upvote 0
Bạn phải cho cái sự kiện Worksheet_Change nằm trong Sheet2 nó mới chạy được chứ
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Change As Range, Rng As Range, sRng As Range, Cll As Range, fNumb As Long, eNumb As Long
Set Change = Intersect(Target, Sheet2.Range("D4:E4"))
Set sRng = Sheet1.Range("B9:B23")
fNumb = Sheet2.Range("D4").Value:  eNumb = Sheet2.Range("E4").Value
If Not Change Is Nothing Then
    sRng.EntireRow.Hidden = False
    For Each Cll In sRng
        If Cll.Value < fNumb Or Cll.Value > eNumb Then
            If Rng Is Nothing Then
                Set Rng = Cll
            Else
                Set Rng = Union(Rng, Cll)
            End If
        End If
    Next
    If Not Rng Is Nothing Then Rng.EntireRow.Hidden = True
End If
End Sub

Nhưng ý e là vùng Điều kiện là cố định theo địa chỉ Sheet1(J6:J6), vùng điều kiện này lấy giá trị trong sheet2. Khi mình nhập giá trị vào Sheet2 thì Sheet1 tự hoạt động ạ
 
Upvote 0
Web KT

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

Back
Top Bottom