Kết thúc bằng Ctrl + Shift + Enter nhé=SUM(1/COUNTIF(C3:C22,C3:C22))
sao không dùng countif(C3:C22,C3:C22) thôi ?




Public Function Demdulieu(v1 As Range) As Single
Dim mycell As Range
Dim i As Single, tong As Single
tong = 0
For Each mycell In v1.Cells
i = 1 / WorksheetFunction.CountIf(v1, mycell)
If i < 1 Then
tong = tong + i
End If
Next
Demdulieu = tong
End Function
Dùng công thức mảng
hoặc dùng code sau :
PHP:Public Function Demdulieu(v1 As Range) As Single Dim mycell As Range Dim i As Single, tong As Single tong = 0 For Each mycell In v1.Cells i = 1 / WorksheetFunction.CountIf(v1, mycell) If i < 1 Then tong = tong + i End If Next Demdulieu = tong End Function
Function CountUnique(ByVal Source_Array) as Long
Dim tmpArr, Item, tmp As String
tmpArr = Source_Array
On Error Resume Next
With CreateObject("Scripting.Dictionary")
For Each Item In tmpArr
tmp = Trim(CStr(Item))
If Len(tmp) Then
If Not .Exists(tmp) Then .Add tmp, ""
End If
Next
CountUnique = .Count
End With
End Function


Nếu không cần đánh tên "Nguyễn Văn A" Thì ta dùng ô chứa "Nguyễn Văn A"
=COUNTIF($C$3:$C$22,C3)
Mà công thức của bạn sao tôi làm mãi cũng cho kqua= 0.2 vậy



em đoán chắc cái ny áp dụng vào việc đếm :do yêu cầu của đề bài là đếm xem có bn dữ liệu trùng nhau
ví dụ : nguyen van a,
nguyen van b
-------> kêt quả là 1 thôi ^^
Public Sub Count_unique()
Dim dic As Object, i As Integer, j As Integer, irow As Integer
Dim tmparr, arr() As Variant
Range("E9:F15").ClearContents
Set dic = CreateObject("Scripting.Dictionary")
tmparr = Range("C3:C50")
ReDim arr(1 To UBound(tmparr, 1), 1 To 2)
For irow = 1 To UBound(tmparr, 1)
If Not IsEmpty(tmparr(irow, 1)) And Not dic.exists(tmparr(irow, 1)) Then
i = i + 1
dic.Add tmparr(irow, 1), i
arr(i, 1) = tmparr(irow, 1)
arr(i, 2) = 1
Else
If Not IsEmpty(tmparr(irow, 1)) Then
For j = 1 To UBound(tmparr, 1)
If arr(j, 1) = tmparr(irow, 1) Then
arr(j, 2) = arr(j, 2) + 1
Exit For
End If
Next
End If
End If
Next
Range("E9:F15") = arr
For i = 1 To dic.Count
If arr(i, 2) > 1 Then
sdem = sdem + 1
End If
Next
MsgBox " co tat ca " & sdem & " loai ten trung nhau "
End Sub
Đã viết code mà còn dùng WorksheetFunction vậy thôi ta gõ trực tiếp lên bảng tính luôn cho rồi
Đó là chưa nói đến trường hợp COUNTIF cho kết quả = 0 (khi cell rổng), dẫn đến biến i sẽ bị lỗi
Đã nói đến Unique thì ta nên nghĩ đến Scripting.Dictionary. Tôi viết vầy:
Xử lý mảng, đương nhiên sẽ cho tốc độ cực nhanhPHP:Function CountUnique(ByVal Source_Array) as Long Dim tmpArr, Item, tmp As String tmpArr = Source_Array On Error Resume Next With CreateObject("Scripting.Dictionary") For Each Item In tmpArr tmp = Trim(CStr(Item)) If Len(tmp) Then If Not .Exists(tmp) Then .Add tmp, "" End If Next CountUnique = .Count End With End Function
Thì.....tính ngược lại, thằng nào duy nhất thì....nghỉ chơi nó raCâu hỏi đặt ra là "Có bao nhiêu người trùng tên", có nghĩa là chỉ đếm số tên có bị trùng thôi, còn tên 1 mình lẻ bóng thì không đếm, tính sao với anh Dic hả Thầy?
Câu hỏi đặt ra là "Có bao nhiêu người trùng tên", có nghĩa là chỉ đếm số tên có bị trùng thôi, còn tên 1 mình lẻ bóng thì không đếm, tính sao với anh Dic hả Thầy?
Nhớ không lầm thì câu hỏi này cũng có làm rồi!
Tuy nhiên, Nghĩa download file ở bài 1 về, xem câu hỏi trong đó thì sẽ biết rằng câu mà Nghĩa vừa hỏi lại chẳng liên quan gì đến câu hỏi của tác giả cả ----> Nếu thích thì TỰ NGHIÊN CỨU đi
Ẹc... Ẹc...
Với bài này thì byRef hay byVal đều không có vấn đề. Tuy nhiên tôi luôn có thói quen dùng byVal, còn byRef thì dùng cho 1 trong số ít những trường hợp đặc biệt khác--Nếu để mặc đinh là byref có vấn đề gì xảy ra không
Bài này bạn For... Next nhiều quá! Nếu là tôi thì tôi làm chỉ 1 vòng lập:Cảm ơn pác ndu đã gợi ý cho e học thêm về "scripting.dictionary "
em đoán chắc cái ny áp dụng vào việc đếm :
- có bao loại thí sinh trùng tên nhau
- mỗi tên có bao nhiêu thí sinh
Tiên thể vừa học " scripting.dictionary" nên em thử viết luôn code sau :
Do mới vào nghề nên ngôn ngữ viết còn hơi rườm rà, các pác đóng góp thêm cho e, để e sửa ^^
Sub Count_unique2()
Dim tmpArr, Arr(), Item, tmp As String, n As Long, k As Long
On Error Resume Next
Range("E9:F10000").ClearContents
tmpArr = Range("C3:C10000")
ReDim Arr(1 To UBound(tmpArr, 1), 1 To 2)
With CreateObject("Scripting.Dictionary")
For Each Item In tmpArr
tmp = Trim(CStr(Item))
If Len(tmp) Then
If Not .Exists(tmp) Then
n = n + 1
.Add tmp, n
Arr(n, 1) = tmp
Arr(n, 2) = 1
Else
Arr(.Item(tmp), 2) = Arr(.Item(tmp), 2) + 1
If Arr(.Item(tmp), 2) = 2 Then k = k + 1
End If
End If
Next
End With
If n Then
Range("E9").Resize(n, 2) = Arr
MsgBox " co tat ca " & k & " loai ten trung nhau "
End If
End Sub
Thế Nghĩa có đọc bài này của tác giả không:Hì hì, tiêu đề là "đếm dữ liệu trùng lặp" chứ có nói đếm dữ liệu riêng lẽ đâu Thầy! Với lại trong file của tác giả thật sự là 4 tên và mỗi tên đều có trùng!
Vậy theo Nghĩa tác giả đang hỏi với Ý gì?=SUM(1/COUNTIF(C3:C22,C3:C22)) Kết thúc bằng Ctrl + Shift + Enter LÀ DÚNG RỒI,
Các bác ơi em đang cần cái này không ai giúp được em à?Đó là đếm ra có 4 người trùng, vậy còn lọc 4 người đó ra thế nào các bác? (Dùng công thức)
Các bác ơi em đang cần cái này không ai giúp được em à?
Dạng bài này có cả đống trên diễn đàn rồi, hổng chịu tìm mà cứ la lên hoàiq177
Đó là đếm ra có 4 người trùng, vậy còn lọc 4 người đó ra thế nào các bác? (Dùng công thức)