Lấy số lượng dòng sau khi lọc

Liên hệ QC

haonlh

Thành viên tích cực
Tham gia
2/12/07
Bài viết
1,177
Được thích
587
Trong Macro, tôi có mã lệnh sau để lọc dữ liệu theo cột thứ 7 với điều kiện viết sau Criteria1:
Selection.AutoFilter Field:=7, Criteria1:=Range("KH!C" & nhang)
Chương trình hoạt động tốt. Khi nhìn lại bảng tính, tôi thấy góc dưới trái có con số 72 of 17340:
goc-trai-duoi.JPG
Nay tôi muốn lấy con số đó trong Macro thì làm thế nào.
Ý nghĩa của quá trình lọc là lấy ra các sinh viên trong 1 lớp. Sau khi lọc ra 1 lớp, cuối bảng có số lượng sinh viên. Tôi muốn lấy luôn con số đó để ghi vào cuối bảng, không phải viết mã để đếm các hàng có trong bảng
Xin cảm ơn.
 
Lần chỉnh sửa cuối:
Lượm trên mạng giúp bạn

| Animal | In Stock | Price |
|Dog |1| 1|
|Cat |2| 2|
|Dog |3| 3|
|Cat |4| 4|
|Bird |5| 5|

PHP:
Sub Filter_Return()
 Dim RowCount As Long, MatchedCriteria, CheckRow As Long
    Sheets("s3").Select:                  Range("a1").CurrentRegion.Select
    RowCount = Selection.Rows.Count - 1     ' Count the rows and'
                                             ' subtract the header.'
    ' The following three lines run an AutoFilter using "Cat" as the'
    ' criteria for the first column and greater than 1 as the'
    ' criteria for the second column.'
    Selection.AutoFilter
    Selection.AutoFilter Field:=1, Criteria1:="Cat"
    Selection.AutoFilter Field:=2, Criteria1:=">=2"
    ' Set variable to zero:'
    MatchedCriteria = 0:         CheckRow = 0
    ' Check to see if row height is zero:'
    While Not IsEmpty(ActiveCell)
        ActiveCell.Offset(1, 0).Select
        If ActiveCell.RowHeight = 0 Then
            CheckRow = CheckRow + 1
        Else
            MatchedCriteria = MatchedCriteria + 1
        End If
    Wend
    If RowCount = CheckRow Then      ' If these are equal, nothing was returned'
        MsgBox "no matching data"
    Else
        MsgBox MatchedCriteria - 1   ' Display the number of records returned'
    End If
End Sub
 
Upvote 0
Cảm ơn bạn SA...
Như vậy là phải viết mã. Mình cho rằng khi đã in ra góc trái,- dưới của Sheet thì con số đó sẽ nằm ở 1 thuộc tính nào đó của Autofilter.
Hy vọng có ai giúp tiếp. Như vậy không cần viết mã.

Nhưng đoạn mã trên chắc là của "ngoại", mà ngoại nó đã phải "sờ" từng dòng dữ liệu thì có lẽ không có chăng.

Hiện mình đã viết công thức sau vào 1 ô của Sheet
SUBTOTAL(102,B21:B17360) (B21 là ô tiêu đề Số Thứ tự). Tất nhiên không phải trên mã lệnh, nhưng từ mã lệnh, lấy giá trị của ô này cũng được.

Hỏi thêm anh SA...: làm sao để có kẻ ô như trả lời của anh.
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn à, mình dùng chức năng của diễn đàn thôi mà!

Đó là [Table ]. . . [/Table] ở cuối nhất của các tùy chọn B I U. . . . đó mà!

--=0 )(&&@@ --=0
 
Upvote 0
Trong Macro, tôi có mã lệnh sau để lọc dữ liệu theo cột thứ 7 với điều kiện viết sau Criteria1:
Selection.AutoFilter Field:=7, Criteria1:=Range("KH!C" & nhang)
Chương trình hoạt động tốt. Khi nhìn lại bảng tính, tôi thấy góc dưới trái có con số 72 of 17340:
View attachment 47540
Nay tôi muốn lấy con số đó trong Macro thì làm thế nào.
Ý nghĩa của quá trình lọc là lấy ra các sinh viên trong 1 lớp. Sau khi lọc ra 1 lớp, cuối bảng có số lượng sinh viên. Tôi muốn lấy luôn con số đó để ghi vào cuối bảng, không phải viết mã để đếm các hàng có trong bảng
Xin cảm ơn.
Rất đơn giản... Nguyên tắc như sau:
- Xác định vùng AutoFilter
- Resize vùng này thành 1 cột
- Dùng thuộc tính COUNT để đếm
Ví dụ:
PHP:
Sub Test()
  Dim Rng As Range
  Set Rng = ActiveSheet.AutoFilter.Range
  Set Rng = Intersect(Rng, Rng.Offset(1))
  MsgBox Rng.Resize(, 1).SpecialCells(12).Count
End Sub
Code viết vậy là để bạn tiện theo dõi, chứ nếu tôi dùng thì tôi viết khác:
PHP:
Sub Test()
  With ActiveSheet.AutoFilter.Range
    With Intersect(.Cells, .Offset(1))
      MsgBox .Resize(, 1).SpecialCells(12).Count
    End With
  End With
End Sub
Khỏi cần khai báo biến luôn
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT
Back
Top Bottom