Làm cách nào tôi có thể tham khảo hai cột khác nhau trong hàm COUNTIF?


11

Tôi sẽ cố gắng hết sức để giải thích. Giả sử tôi có một tờ giống như thế này (trong ví dụ giả định này, giả sử tôi đang gửi email tiếp thị cho nhiều người khác nhau, tôi biết tuổi và mã zip của họ và tôi muốn theo dõi tỷ lệ nhấp trong các email đó):

        A   |    B        |    C  
  1     Age |    zip code |  click?  
  2     26  |    11111    |  true  
  3     27  |    11112    |  true  
  4     28  |    11111    |  false  
  5     27  |    22222    |  false  
  6     28  |    11112    |  false  
  7     26  |    22222    |  true  

Bây giờ tôi muốn theo dõi các số liệu thống kê khác nhau. Trong trường hợp này, tôi muốn theo dõi tỷ lệ nhấp theo độ tuổi và theo mã zip. Vì vậy, tôi đã có một bảng như thế này:

      E         F          G 
 1   Age  |  # sent  | # clicked
 2   26   |
 3   26   |
 4   27   |
 5   28   |

Vì vậy, về cơ bản trong cột "# sent", tôi có thể đặt (ví dụ F2):

=COUNTIF(A:A, E2)

Và điều này sẽ dẫn đến kết quả là 2 trong ô F2, vì có hai lần xuất hiện của "26" trong cột A.

Nhưng bây giờ nếu tôi muốn biết có bao nhiêu lần nhấp thì sao? Tôi muốn nói một cái gì đó như:

=COUNTIF(A:A == E2  AND  C:C == True, for the same row where A:A matched E2)

Tôi biết tôi có thể thêm một cột D khác với công thức như

=IF(C2, A2, "")

Mà sẽ chỉ nhưng tuổi trong cột D nếu cột C là đúng. Nhưng tôi có thể có nhiều tiêu chí và dường như tôi không cần phải thêm một cột "giả" khác cho mỗi cột tiêu chí tôi có.

Có cách nào để làm việc này không? Nếu không có trong Google Docs, trong Excel?


Lưu ý: câu trả lời cho mới Sheets Google là ở dưới đó .

Câu trả lời:


11

Sử dụng kết hợp các hoạt động ARRAYFORMULA, SUM và số học

Đây là chức năng đếm tất cả các lần nhấp của một người 26 tuổi:

=ARRAYFORMULA(sum((A:A=26) * (C:C="true")))

Có 3 phần cho hoạt động này.

  • Các ARRAYFORMULA sẽ chăm sóc của Looping trên phạm vi nhất định
  • Các SUM quản lý đếm tất cả các kết quả đúng

Về cơ bản, true đang được chuyển đổi thành 1 và false đang được chuyển đổi thành 0. Logic Boolean được thực hiện bằng cách sử dụng các phép toán số học.

Một hoạt động AND sử dụng phép nhân:

  • (1 * 1) = 1 - (Đúng && Đúng) = Đúng
  • (1 * 0) = 0 - (Đúng && Sai) = Sai
  • (0 * 0) = 0 - (Sai ​​&& Sai) = Sai

Một hoạt động OR sử dụng kết hợp chức năng * SIGN và bổ sung:

  • dấu (1 + 1) = 1 - (Đúng | | Đúng) = Đúng
  • dấu (1 + 0) = 1 - (Đúng | | Sai) = Đúng
  • dấu (0 + 0) = 0 - (Sai ​​| | Sai) = Sai

Lưu ý: Hàm ký hiệu là cần thiết vì cách bổ sung boolean hoạt động khác với phép cộng số học. Về cơ bản trong phép cộng boolean 1 + 1 = 1, trong phép cộng số học 1 + 1 = 2. Rõ ràng, phép cộng số học sẽ làm rối số đếm nên bạn cần chạy kết quả của phép toán cộng thông qua hàm ký hiệu. Hàm dấu trả về 1 nếu giá trị dương, 0 nếu giá trị là 0 và -1 nếu giá trị âm.

Hãy nói rằng bạn muốn đếm số lần nhấp cho tất cả người dùng trong độ tuổi 20-25:

=ARRAYFORMULA(sum(sign((A:A=20) + (A:A=21) + (A:A=22) + (A:A=23) + (A:A=24) + (A:A=25)) * (C:C="true")))

ĐĂNG KÝ không cần thiết ở đây phải không? chẳng hạn, một ô duy nhất có thể là both20 và 23, vì vậy phần bổ sung sẽ không bao giờ cung cấp cho bạn giá trị> 1 trong trường hợp này. ĐĂNG KÝ chỉ được yêu cầu nếu các điều kiện không loại trừ lẫn nhau. Ngoài ra, từ 20 đến 25 sẽ dễ dàng thực hiện hơn với phiên bản này? =arrayformula(sum((A:A>=20)*(A:A<=25)*(C:C=TRUE)))
baroud houdini

Tôi đã cố gắng giải thích việc sử dụng chung logic OR. Nếu các bài kiểm tra không độc quyền (có trong cùng một cột) thì hàm SIGN sẽ là cần thiết. Trong trường hợp này thì không. Và, vâng, ví dụ của bạn sẽ là cách tiếp cận tốt hơn nhưng không thể hiện việc sử dụng OR. Tôi đã cố gắng nghĩ ra một cách tiếp cận đơn giản để chứng minh việc sử dụng OR phù hợp với câu hỏi của OP nhưng rõ ràng tôi không giỏi lắm trong việc đưa ra các ví dụ ngoài vòng bít. Nếu bạn có một số ví dụ tốt hơn, tôi khuyến khích bạn chỉnh sửa / cải thiện câu trả lời.
Evan Plaice

Xin lỗi, Evan, tôi đã hiểu lầm - đó là một ví dụ tuyệt vời.
barry houdini

bạn có thể tránh = true, vì vậy: = ARRAYFORMULA (sum ((A: A = 26) * C: C))
tic

1
@tic Tôi không sử dụng boolean true (đó là TRUE trong Bảng tính Google) Tôi đã đề cập đến 'true' chuỗi mà op sử dụng trong câu hỏi của anh ấy. Hãy thử nó, tôi khá chắc chắn rằng nếu bạn kiểm tra các giá trị cho C: C, nó sẽ luôn trả về TRUE trên một chuỗi không trống. Trong các ô của bảng tính, Google tuân theo các quy tắc Excel qua JavaScript. Chào mừng đến với thế giới vui vẻ của trừu tượng rò rỉ.
Evan Plaice

10

Đến bây giờ, Google Sheets mới hỗ trợ COUNTIFS, có thể trực tiếp xử lý công việc được yêu cầu.

=COUNTIFS(A:A, E2, C:C, "true")

Liệt kê tất cả các phạm vi và so sánh để phân tách bằng dấu phẩy.


4
Cảm ơn vì đã thưởng cho tôi cuộn xuống hết cỡ. Đây là câu trả lời khi làm việc với các tờ google mới.
Christiaan Westerbeek

3

Trong Excel, tôi sẽ sử dụng SUMPRODVEL trong Excel 2003 hoặc COUNTIFS (có "S") trong Excel 2007 trở lên ....... nhưng trong Google Docs hãy thử điều này

=arrayformula(sum((A:A=E2)*(C:C=TRUE)))


3
=COUNTA( IFERROR( FILTER('Guest List'!$G:$G ; 'Guest List'!$G:$G = "Yes" ; 'Guest List'!$L:$L = "USA" ) ) )

Đây là hai cột - Tôi đang sử dụng danh sách này cho danh sách khách mời đám cưới của mình - trong trường hợp này, lập bảng "Có" khi gửi ngày lưu và "Hoa Kỳ" cho địa điểm, vì vậy tôi có thể tính toán bưu chính sau. Có thể có một công thức ngắn hơn, nhưng điều này dường như hoạt động, vì vậy tôi không làm phiền nó!

Hạnh phúc đếm.


1

Trong Excel, tôi sẽ quên các công thức và sử dụng các bảng Pivot.

Bạn có thể cần thêm một cột "bộ đếm", có thể được sử dụng lặp đi lặp lại như là biến mà bạn tổng hợp để có kết quả.


0

Bạn có thể thêm mảng mà bạn muốn kiểm tra vào {}.

Trong ví dụ dưới đây:

=countif({F2,H2,J2,L2,N2,P2,R2,T2,V2,W2},"TRUE")
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.