Đếm số người xuất hiện trong một cột (1 người xem)

Người dùng đang xem chủ đề này

trungcad

Thành viên mới
Tham gia
23/11/11
Bài viết
19
Được thích
0
trung.jpg
Em có một câu hỏi như thế này. Em có bảng trên ,bây giờ em muốn đếm số lần xuất hiện của từng người trong cột .Mọi người giúp em với! Cảm ơn mọi người
 
Sao bạn không đưa file lên cho dễ. Bạn xem file đúng không nhé. Đây chỉ là vd thôi bạn có thể áp dụng vào file của mình.
 

File đính kèm

File đính kèm

Công thức đếm số lần xuất hiện tên ở ô B1 trong chuỗi các tên ở ô A1 là
=(Len(A1)+2-Len(Substitute(("," & A1 & ","), ("," & B1 & ","),"")))/(Len(B1)+2)
(để tránh đếm LAM, LAN khi B1=LA, ta đếm ",LA," trong chuỗi "," &A1& ",").
Sau đó có thể đưa vào công thức mảng để đếm trong cả cột A. Nếu cột A chứa cả dấu space thì công thức phức tạp hơn một chút.
 
Công thức này thì sao nhỉ:
Mã:
=SUMPRODUCT(--ISNUMBER(SEARCH(","&A6&",",SUBSTITUTE(","&$A$1:$A$3&","," ",""))))
 

File đính kèm

Công thức này thì sao nhỉ:
Mã:
=SUMPRODUCT(--ISNUMBER(SEARCH(","&A6&",",SUBSTITUTE(","&$A$1:$A$3&","," ",""))))
Công thức của bác nếu mỗi ô có nhiều tên trùng nhau sẽ chỉ đếm 1 lần (vd: ô A1 là Trung,Trung vẫn tính là 1). Công thức đếm tất cả các tên kể cả tên trùng trong ô là
Mã:
{=SUM((LEN(A1:A3)+2-LEN(SUBSTITUTE("," & A1:A3 & ",","," & A6 & ",","")))/(LEN(A6)+2))}
 
Công thức của bác nếu mỗi ô có nhiều tên trùng nhau sẽ chỉ đếm 1 lần (vd: ô A1 là Trung,Trung vẫn tính là 1). Công thức đếm tất cả các tên kể cả tên trùng trong ô là
Mã:
{=SUM((LEN(A1:A3)+2-LEN(SUBSTITUTE("," & A1:A3 & ",","," & A6 & ",","")))/(LEN(A6)+2))}
Ngồi đoán mò thì tới tết Công-gô nhỉ? Nhìn cái hình có thấy tên nào trùng trong 1 ô đâu?
Công thức trên chưa bỏ khoảng trắng và phân biệt chữ in - chữ thường.
 
ngồi đoán mò thì tới tết công-gô nhỉ? Nhìn cái hình có thấy tên nào trùng trong 1 ô đâu?
Công thức trên chưa bỏ khoảng trắng và phân biệt chữ in - chữ thường.
Nếu có cả space và không phân biệt chữ hoa, thường thì
{=SUM((LEN(A1:A3)+2-LEN(SUBSTITUTE(("," & UPPER(SUBSTITUTE(A1:A3," ",",")) & ","),("," & UPPER(A6) & ","),"")))/(LEN(A6)+2))}
(ô A6 không có space, nếu có nữa thì thay Ạ6 bằng TRIM(A6))
 

File đính kèm

bạn có thể thay code này bằng code trong file cho rõ ràng các tham số truyền vào hàm
Function DEMTUNGO(TEN As String, rngs As Range) As Long


Dim I As Long
Dim DEM As Integer
Dim ARR
Dim clls As Range
For Each clls In rngs
ARR = Split(clls.Value, ",")
For I = 1 To UBound(ARR, 1)
If (UCase(TEN) = UCase(ARR(I))) Then
DEM = DEM + 1
End If
Next
Next
DEMTUNGO = DEM
End Function
 
thử cái này xem sao? tôi viết hàm macro

Sử dụng mảng và hàm split như thế này:

Function DEMTUNGO(TEN As String, rngs As Range) As Long
' hàm đếm số lần lặp lại của TEN trong range rngs
Dim pt
DEMTUNGO = 0
For Each pt In Split(Join(Application.Transpose(rngs), ","), ",")
If pt = TEN Then DEMTUNGO = DEMTUNGO + 1
Next pt
End Function
 
bạn có thể thay code này bằng code trong file cho rõ ràng các tham số truyền vào hàm
thầy vetmini có thể cho em hỏi vẫn đề này. ví dụ code ở trên em khai báo dim arr thì ok. mà khai báo dim arr() thì bị lỗi. thầy có thể giải thích giúp em được không?
 
thầy vetmini có thể cho em hỏi vẫn đề này. ví dụ code ở trên em khai báo dim arr thì ok. mà khai báo dim arr() thì bị lỗi. thầy có thể giải thích giúp em được không?

Theo tôi Split trả về 1 Variant. Trong Variant nói chung có thể là dữ liệu số, chuỗi, gía trị lôgic, mảng .... Split trả về 1 Variant chứa một mảng. Vậy thì đòi hỏi Arr phải là Variant.
Nhìn
Mã:
For I = [B][COLOR=#ff0000]1[/COLOR][/B] To UBound(ARR, 1)

thì biết bạn bị mất dữ liệu. Vì mảng trả về bởi Split có chỉ số dưới là 0.
Khi không chắc chắn thì nên dùng LBound
 
Split trả về một mảng chuỗi (string).
Nếu bạn khai báo "Dim ARR" thì ARR là một Variant, như vậy nó có thể chứa một mảng chuỗi.
Nếu bạn khai báo "Dim ARR()" thì ARR là một mảng mà mỗi phần tử là một Variant. Tuy mỗi phần tử này có thể chứa được một chuỗi, nhưng VBA không có phép ép kiểu để đưa mảng chuỗi vào mảng Variant. Do vậy nó báo lỗi.
Nếu bạn khai báo "Dim ARR() As String" thì sẽ được thông qua.

Tiếp theo giải thích của bác siwtom: khi làm việc với VBA, bạn phải lưu ý sự khác biệt giữa hàm của VBA và hàm của Excel. Trong hầu hết các trường hợp, VBA mặc định chỉ số dưới của mảng là 0 trong khi Excel mặc định là 1.
 

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

Back
Top Bottom