2015-09-28 16 views
5

Tôi có một tấm với khoảng một triệu hàng. Trong một cột cụ thể, tôi có các số khác nhau từ 0 đến 50,000.đếm có điều kiện trong phạm vi lọc

Tôi đang cố gắng xác định, trong phạm vi được lọc, số lượng ô trong phạm vi được lọc nằm trong một giá trị nhất định.

tôi có thể dễ dàng làm một =COUNTIF(L:L, "<5000") để xem có bao nhiêu hàng ít hơn 5.000, hoặc =COUNTIFS(L:L,">500",L:L,"<5000") để xem các số trong phạm vi TỔNG đó nằm giữa hai con số, nhưng tôi không thể tìm ra cách để làm một trong những trong một dải ô được lọc.

Thông thường với dữ liệu đã lọc, tôi sử dụng chức năng =SUBTOTAL, nhưng tôi không thể thấy cách thực hiện bất kỳ chức năng nào được thiết lập trong ví dụ này là =SUBTOTAL.

Bất kỳ ý tưởng nào?

+0

Bạn đang tìm kiếm một công thức hoặc một đoạn mã VBA? –

+0

công thức ngay bây giờ - cuối cùng tôi sẽ đặt nó vào VBA. - ồ, tệ hại của tôi - Tôi không nhận ra mình đã gắn thẻ cái này là VBA ... Hoặc là một cái sẽ ổn thôi .... Nó cuối cùng sẽ kết thúc trong một macro khi tôi làm việc tất cả ra ... –

+0

Hàng có thuộc tính '.hidden' (ex 'rows (3) .hidden') mà bạn có thể sử dụng để xác định xem một bộ lọc có ẩn một hàng hay không. Tôi sẽ chỉ đi qua mỗi hàng, đếm nếu nó đáp ứng các tiêu chí của bạn và nếu nó không phải là ẩn. Điều này là dành cho VBA, nếu bạn định sử dụng nó. Không chắc chắn về một công thức excel. – user3476534

Trả lời

4

dưới đây là một giải pháp VBA. Tôi đã nhận xét mã, do đó bạn không nên có bất kỳ vấn đề hiểu nó, nhưng nếu bạn làm sau đó chỉ đơn giản là đăng lại.

Sub Sample() 
    Dim ws As Worksheet 
    Dim lRow As Long, n As Long 
    Dim rng As Range, rngArea As Range 

    '~~> Change this as applicable 
    Set ws = ThisWorkbook.Sheets("Sheet1") 

    With ws 
     '~~> Finding last row in Col L 
     lRow = .Range("L" & .Rows.Count).End(xlUp).Row - 1 

     'Debug.Print Intersect(_ 
           .Range("L2:L" & lRow), _ 
           .Range("L1").Offset(1, 0).SpecialCells(xlCellTypeVisible) _ 
          ).Address 

     '~~> This is your range of all visible cells till the last row in column L 
     '~~> except the header: 
     Set rng = Intersect(_ 
           .Range("L2:L" & lRow), _ 
           .Range("L1").Offset(1, 0).SpecialCells(xlCellTypeVisible) _ 
          ) 

     '~~> Since the area could be non contiguous we use Countif per area and add up 
     For Each rngArea In rng 
      n = n + Application.Evaluate("=COUNTIFS(" & rngArea.Address & _ 
             ","">500""," & rngArea.Address & ",""<5000"")") 
     Next 

     Debug.Print n 
    End With 
End Sub 
+0

Điều này thực sự tốt đẹp - Tôi thích cách bạn giải quyết vấn đề này. Cảm ơn bạn rất nhiều vì những nỗ lực! Tôi hoàn toàn ăn cắp ưa thích của bạn ''~~>' cho ý kiến ​​quá .... đẹp hơn nhiều so với bình luận VBA tiêu chuẩn :) –

+2

' Tôi hoàn toàn ăn cắp ưa thích của bạn '~~>' cho ý kiến ​​quá .... 'NOOOO: D Bạn có thể sử dụng' '-> 'mặc dù;) –

1

Tôi chắc chắn điều này đã xảy ra với tất cả mọi người, nhưng sau khi đọc bài viết về chủ đề này cho như 30 phút và không tìm thấy bất cứ điều gì, tôi được đăng trên SO, chỉ để tìm một giải pháp như 4 phút sau ...... .

giải pháp này là dành cho dữ liệu đó là trong cột L, nơi mà các tiêu chí mà tôi đang tìm kiếm là "dưới 5000"

=SUMPRODUCT(SUBTOTAL(2,OFFSET(L7,ROW(L7:L999999)-ROW(L7),,1)),--(L7:L999999 < 5000)) 
Các vấn đề liên quan