2012-01-04 52 views
7

Tôi cần đếm số ô trong cột chứa giá trị cụ thể. Tôi hiện đang sử dụng đoạn mã sau:Countif Với nhiều OR Tiêu chí

iVal = Application.WorksheetFunction.COUNTIF(Range("A:A"), "SAL")

Tuy nhiên, bây giờ tôi cần phải đếm có bao nhiêu tế bào chứa hoặc

  • SAL, hay
  • PRE
+0

tại sao không phải là dòng thứ hai đơn giản 'iVal2 = Application.WorksheetFunction.COUNTIF (Phạm vi (" A: A ")," PRE ")' và sau đó thêm (hoặc báo cáo cả hai) dưới dạng tổng? – brettdj

+0

Bởi vì tôi sẽ bổ sung thêm khoảng 20 biến và làm điều này cho khoảng 30 cột khác nhau, do đó, sẽ cắt giảm rất nhiều công việc nếu tôi có thể nhận được tất cả thành một dòng! – BradStevenson

+1

Làm thế nào để đọc các giá trị của cột vào một mảng? Sau đó, bạn có thể lặp lại, thêm điều kiện và như vậy? – JimmyPena

Trả lời

7

Cách nhanh nhất chỉ là thực hiện 2 COUNTIF:

iVal = Application.WorksheetFunction.CountIf(Range("A:A"), "SAL") + Application.WorksheetFunction.CountIf(Range("A:A"), "PRE") 
+0

+1, đây là cách tiếp cận tốt nhất của bạn vì CountIf chỉ có thể chấp nhận một tham số. –

+1

Điều này làm việc tuyệt vời nhưng về lâu dài tôi sẽ kết thúc với rất nhiều biến vì vậy cố gắng tìm một phương pháp hiệu quả hơn, phương pháp trung gian tuyệt vời mặc dù! – BradStevenson

+0

@MattDonnan thực sự có thể cho COUNTIF nhiều hơn một thử nghiệm, xem ở trên. – brettdj

18

Bạn có thể sử dụng số VBA tương đương với công thức COUNTIF chuẩn (có thể thực hiện nhiều đối số). Điều này có thể được mở rộng theo yêu cầu

Chuẩn Formula
=SUM(COUNTIF(A:A, {"SAL","PRE"}))

VBA tương đương
MsgBox Evaluate("Sum(COUNTIF(A:A,{""PRE"",""SAL""}))")

+1

+1 Viễn và đi xa câu trả lời tốt nhất cho đến nay! Có thể trả tiền để thêm tùy chọn VBA để chuyển một chuỗi các chuỗi 'MsgBox Đánh giá ("Tổng (COUNTIF (A: A, {" "" & Tham gia (v, "" "," "") & "" "})))") ' –

+0

@chrisneilsen thx - và gợi ý tuyệt vời về mảng chuỗi. – brettdj

2

Tại sao không bạn sử dụng chức năng CountIfs?

Ví dụ:

Application.CountIfs(CR1_range, V_1, CR2_range, V_2, CR3_range, V_3, CR4_range, V_4) 

đâu CR1_range rõ ràng là phạm vi của bạn và V_1 là biến của bạn

Chỉnh sửa: Rất tiếc! Chỉ cần nhìn thấy rằng nó phải là một tuyên bố OR, câu trả lời của tôi sẽ chỉ làm việc cho câu lệnh AND (không xóa để tham khảo trong trường hợp có ai quan tâm)

0

Sau đây làm việc tốt cho tôi: -

Dim val1 as string, val2 as string 

val1 = "value1" 
val2 = "value2"  

count = Application.WorksheetFunction.CountIfs(ThisWorkbook.Names("firstname").RefersToRange, val1 , ThisWorkbook.Names("secondname").RefersToRange, val2) 

này webpage giúp về Phạm vi có tên trong Excel.

Các vấn đề liên quan