
Gửi bởi
ndu96081631
Mấy cái vụ đếm hay tính tổng CÓ ĐIỀU KIỆN này nó vô chừng lắm. Ai mà biết người ta sẽ dùng điều kiện thế nào mà bạn lại ghi trong code là If Val(kq(j, 1)) > Val(dk) Then
Người khác thích đếm không trùng và <9 thì... lại sửa code à?
Mặc khác, đã gọi là ĐIỀU KIỆN thì ta phải hình dung có thể có 1 đ/k hoặc nhiều đ/k
Tóm lại: Không dễ ăn khi xây dựng mấy hàm kiểu này
Nói thật với thầy hàm này em viết với mục đích giải quyết công việc trước mắt của tác giả thôi. Nhiều khi cũng muốn viết code thật tổng quát áp dụng được cho nhiều bài khác nhau nhưng năng lực có hạn nên đành bó tay!
Thêm vào code chút để có thêm lựa chọn kiểu so sánh khác.
Mã:
Public Function countk(rng As Range, kieu As String, dk As String) As Long
Dim arr(), i As Long, d As Long
Dim Dic As Object
Set Dic = CreateObject("Scripting.Dictionary")
arr = rng
Select Case kieu
Case Is = ">"
For i = 1 To UBound(arr, 1)
If Val(arr(i, 1)) > Val(dk) Then
If Not Dic.Exists(arr(i, 1)) Then
d = d + 1
Dic.Add arr(i, 1), d
End If
End If
Next i
countk = d
Case Is = "<"
For i = 1 To UBound(arr, 1)
If Val(arr(i, 1)) < Val(dk) Then
If Not Dic.Exists(arr(i, 1)) Then
d = d + 1
Dic.Add arr(i, 1), d
End If
End If
Next i
countk = d
Case Is = ">="
For i = 1 To UBound(arr, 1)
If Val(arr(i, 1)) >= Val(dk) Then
If Not Dic.Exists(arr(i, 1)) Then
d = d + 1
Dic.Add arr(i, 1), d
End If
End If
Next i
countk = d
Case Is = "<="
For i = 1 To UBound(arr, 1)
If Val(arr(i, 1)) <= Val(dk) Then
If Not Dic.Exists(arr(i, 1)) Then
d = d + 1
Dic.Add arr(i, 1), d
End If
End If
Next i
countk = d
End Select
End Function
----------------------------------------
P/S chủ topic: Cú pháp dùng như sau:
=countk(Vùng, Kiểu so sánh,giá trị so sánh)
----------------------------------------------
Ví dụ:
=countk(A1:A10,"<=",2)