Các câu hỏi về hàm COUNTIF

Liên hệ QC
Thân chào các bạn
tôi thử tao 1 dãy chử như sau :
cột A
Cho Them một ly nước
Cho thêm một dola tip
lấy giủm ly nước
.....
dùng countif tim xem có bao nhiêu ly, thêm ; một;... đại khái là có cách nào đếm đươc 1 chử nào đó trong 1 đoạn văn nào đó không ?
Xin cám ơn các bạn.
MK
 
Thân chào các bạn
tôi thử tao 1 dãy chử như sau :
cột A
Cho Them một ly nước
Cho thêm một dola tip
lấy giủm ly nước
.....
dùng countif tim xem có bao nhiêu ly, thêm ; một;... đại khái là có cách nào đếm đươc 1 chử nào đó trong 1 đoạn văn nào đó không ?
Xin cám ơn các bạn.
MK
Đương nhiên là đựoc rồi!
Ví dụ dử liệu của bạn là A1 đến A10 nhé, và bạn muốn đếm xem chử "ly" nằm ở bao nhiêu cell thì:
Mã:
=COUNTIF(A1:A10,"*ly*")
 
Chào anh nđu96081631
Được rổi, cái dấu * thật lơi hại quá chừng, tôi dợt hòi mây hôn nay mà không đươc,
Cám ơn anh
MK

------------------
Đề nghị bạn sửa lại tiếng Việt trong bài này cho dễ hiểu hơn.
 
Chỉnh sửa lần cuối bởi điều hành viên:
Sai công thức COUNTIF

Em có tài liệu kèm theo, không biết công thức thống kê Countif của em sai ở đâu, mong các bác chỉ giúp
 

File đính kèm

  • cong thuc.rar
    1.9 KB · Đọc: 24
Giải pháp Excell có thể giúp tôi về các thủ thuật về hàm countif được không
 
Sử dụng pivottable và countif trong thống kê xếp loại hs

Trong thống kê có thể Sử dụng pivottable hoặc counif để thống kê xếp loại hs
(xin lỗi các bạn tôi up file đính kèm lên nhưng không được)
 
Lần chỉnh sửa cuối:
Lỗi: CountIf của mảng?

Tôi lấy ví dụ như thế này nha! Mọi người xem giùm tại sao lại sai vậy!
Mã:
[FONT=Courier New][COLOR=#0000bb]Sub thu()[/COLOR][/FONT]
[FONT=Courier New][COLOR=#0000bb]Dim mang[/COLOR][/FONT][FONT=Courier New][COLOR=#007700]()[/COLOR][/FONT]
[FONT=Courier New][COLOR=#0000bb]Set vung [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000bb]Range[/COLOR][COLOR=#007700]([/COLOR][COLOR=#dd0000]"A1:A20"[/COLOR][/FONT][FONT=Courier New][COLOR=#007700])[/COLOR][/FONT]
[FONT=Courier New][COLOR=#0000bb]ReDim mang[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000bb]vung[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000bb]Count[/COLOR][/FONT][FONT=Courier New][COLOR=#007700])[/COLOR][/FONT]
[FONT=Courier New][COLOR=#007700]For [/COLOR][COLOR=#0000bb]i [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000bb]1 To vung[/COLOR][COLOR=#007700].[/COLOR][/FONT][FONT=Courier New][COLOR=#0000bb]Count[/COLOR][/FONT]
[FONT=Courier New][COLOR=#0000bb]mang[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000bb]i[/COLOR][COLOR=#007700]) = [/COLOR][COLOR=#0000bb]vung[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000bb]Cells[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000bb]i[/COLOR][/FONT][COLOR=#007700][FONT=Courier New])[/FONT][/COLOR]
[FONT=Courier New][COLOR=#0000bb]Next[/COLOR][/FONT]
[FONT=Courier New][COLOR=#0000bb]MsgBox [/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000bb]Application[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000bb]WorksheetFunction[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000bb]CountIf[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000bb][SIZE=4][COLOR=red][B][U]mang[/U][/B][/COLOR][/SIZE][/COLOR][COLOR=#007700](), [/COLOR][COLOR=#0000bb]2[/COLOR][/FONT][FONT=Courier New][COLOR=#007700]))[/COLOR][/FONT]
[FONT=Courier New][COLOR=#0000bb]End Sub[/COLOR][/FONT]
Nó cứ báo lỗi ở chỗ đó không hiểu lý do! Không biết là tôi viết hàm mãng như vậy thì coutif không nhận được hay không được hỗ trợ của Excel vậy!
Và nếu mở rộng ra các hàm Max hoặc các hàm trong bộ Function thì có bị như vậy không? Các khắc phục như thế nào!
Xin chỉ giáo?!
 
hàm COUNTIF có dạng COUNTIF(range,criteria)
vậy biến mang của bạn có là range không
 
Nó không là Range ở thế giới thực mà 1 mảng dữ liệu ghép từ nhiều nơi với nhiều điều kiện khác nhau vào, chỉ là dữ liệu số thôi! Ví dụ: 52, 53, 52, 45, 76, 82, 2, 51, 14, 41, 14, 51, 2
Code này mình chỉ giải sử tình huống xảy ra thì phát hiện nó sai ở đây! Vì không rõ nguyên nhân và cách khắc phục nên muốn tìm hiểu! Hiện mình đang cần đếm xem trong 1 mãng mới đó có bao nhiêu số 2 vậy thôi!
Vậy không biết bạn có thể chỉ mình đếm 1 chuỗi bất kỳ từ nhiều nơi được không?
 
Biến mang() sau khi gán giá trị trở thành tập hợp các giá trị của các ô trong vùng vung.
Countif là hàm của Excel (WorksheetFunction), tham số của nó phải là Range.
Bạn dùng WorksheetFunction mà bắt tính cho biến "giá trị" của VBA nên nó không tính được.
Nếu MsgBox (Application.WorksheetFunction.CountIf(vung,2))
thì tính được, vì vùng vung đã được set là Range("A1:A20")
 
Biến mang() sau khi gán giá trị trở thành tập hợp các giá trị của các ô trong vùng vung.
Countif là hàm của Excel (WorksheetFunction), tham số của nó phải là Range.
Bạn dùng WorksheetFunction mà bắt tính cho biến "giá trị" của VBA nên nó không tính được.
Nếu MsgBox (Application.WorksheetFunction.CountIf(vung,2))
thì tính được, vì vùng đã set là Range("A1:A20")
Ý bạn ấy là muốn từ 1 vùng nào đó lấy ra 1 mảng theo điều kiện và áp dụng countif...
Mình cũng chưa hiểu tại sao đã khai báo Redim mang rồi lúc này mang là kiểu gì.
Còn thường thì mình dùng, do chưa biết hết, thêm 1 vòng ví dụ như, tìm trong vùng => mang, đếm thỏa điều kiện. Đây chỉ là ví dụ.
PHP:
Option Explicit
Sub thu()
Dim mang()
Dim i As Long, vung As Range, n As Long
Set vung = Range("A1:A10")
ReDim mang(1 To vung.Count)
For i = 1 To vung.Rows.Count
    If vung.Cells(i, 1) > 2 Then mang(i) = vung.Cells(i, 1)
Next
For i = 1 To UBound(mang)
    If mang(i) = 2 Then n = n + 1
Next
MsgBox n
'MsgBox Application.WorksheetFunction.CountIf(mang(), 2)
End Sub
 
Hiện mình đang cần đếm xem trong 1 mãng mới đó có bao nhiêu số 2 vậy thôi!
Mã:
Sub thu()
Dim mang()
Set vung = Range("A1:A20")
ReDim mang(vung.Count)
dem = 0
For i = 1 To vung.Count
mang(i) = vung.Cells(i)
If vung.Cells(i) = 2 Then
dem = dem + 1
End If
Next
MsgBox dem
End Sub
 
Mã:
Sub thu()
Dim mang()
Set vung = Range("A1:A20")
ReDim mang(vung.Count)
dem = 0
For i = 1 To vung.Count
mang(i) = vung.Cells(i)
If vung.Cells(i) = 2 Then
dem = dem + 1
End If
Next
MsgBox dem
End Sub
Vậy thì mang(i) làm gì. Nếu chỉ vung không thì đâu cần for i, chỉ cần WF.countif(vung,2)
 
Không phải vì em không biết lấy vùng đó để đếm luôn mà ở đây số liệu là ở dạng động nên vấn đề giả sử code như vầy:
PHP:
Function dem(vung as Range, th1 as Long)
Dim mang()
'' giả sử vung = Range("A1:A20")
ReDim mang(1 To vung.count)
k = 1
 
''....... <khúc này còn nữa
 
For j = 1 To vung.Rows.Count
    If vung.Cells(j) <= 5 Then
        mang(k) = vung.Cells(j) + 1
        k = k + 1
    ElseIf vung.Cells(j) >= 7 Then
        mang(k) = vung.Cells(j) - Int(j / 2)
        k = k + 1
    End If
Next
dem = Application.WorksheetFunction.CountIf(mang(), 10)
End Function
Ở giả sử j = 4vung.cells(4) = 12 thì kết quả mang(4) = 10. Nếu có trường hợp tương tự thì sẽ có nhiều kết quả cho 10.
Vậy muốn biết có bao nhiêu con 10 trong mang thì làm sao?
Còn dùng For để đếm thì cũng là 1 giải pháp, chỉ là nếu mãng này có nhiều số liệu và code đã dài rồi mà làm vậy thì càng dài thêm mà còn chạy chậm nữa chứ!
Còn vung.count thì chẳng biết nó dài bao nhiêu nữa vì em dùng cho Function mà! Các bác thông cảm nếu không cách nào khác thì đành chịu dùng thêm For vậy!
Nhờ mọi người nghĩ cách xem còn cách nào hay hơn For không?

Nhưng vấn đề em phát hiện thấy các hàm của Function không thể chạy khi đó là 1 mãng ảo! Nên muốn tìm cách khắc phục thôi! Còn ứng dụng thì nó thực sự nằm trong 1 SUB khác!

À còn nữa nếu các hàm khác như SMALL hoặc SUMPRODUCT thì bó tay sao??
Xin cảm ơn mọi người đã dành thời gian cho em!
Xin cảm ơn.
 
Lần chỉnh sửa cuối:
Bạn mô tả lại công việc của đoạn mã lệnh xem sao, rối quá!!

Lúc thì Sub, lúc thì Function; Thật hết biết!

Bạn mô tả xem nhiệm vụ Sub/Function của bạn dùng làm gì?
Function dem(vung as Range, th1 as Long)
. . .

End Function
hay
Sub Dem ( Vung As Range, Th1 As Long)
. . .
End Sub
Sẽ làm gì? Mình mường tượng rằng Vung là 1 vùng bạn chưa biết trước số ô trong nó
* Vung này có liên tục theo cột/hàng hay không
Th1 là gì, bạn cứ úp, úp, mở , mở ai mà chịu nổi hở Trời

** Hay nhiệm vụ là lấy các trị chứa trong vùng để xác định vùng mới (# Vung) để khảo sát tìm 1 trị nào đó trong nớ?

Hãy truyền đạt mong muốn của mình cho mọi người hiểu dùm cái!
Lúc đó bạn sẽ nhận được 1 cách chóng vánh kết quả hỗ trợ từ diễn đàn!!:-=


 
Không phải vì em không biết lấy vùng đó để đếm luôn mà ở đây số liệu là ở dạng động nên vấn đề giả sử code như vầy:
PHP:
Function dem(vung as Range, th1 as Long)
Dim mang()
'' giả sử vung = Range("A1:A20")
ReDim mang(1 To vung.count)
k = 1
 
''....... <khúc này còn nữa
 
For j = 1 To vung.Rows.Count
    If vung.Cells(j) <= 5 Then
        mang(k) = vung.Cells(j) + 1
        k = k + 1
    ElseIf vung.Cells(j) >= 7 Then
        mang(k) = vung.Cells(j) - Int(j / 2)
        k = k + 1
    End If
Next
dem = Application.WorksheetFunction.CountIf(mang(), 10)
End Function
Ở giả sử j = 4vung.cells(4) = 12 thì kết quả mang(4) = 10. Nếu có trường hợp tương tự thì sẽ có nhiều kết quả cho 10.
Vậy muốn biết có bao nhiêu con 10 trong mang thì làm sao?
Còn dùng For để đếm thì cũng là 1 giải pháp, chỉ là nếu mãng này có nhiều số liệu và code đã dài rồi mà làm vậy thì càng dài thêm mà còn chạy chậm nữa chứ!
Còn vung.count thì chẳng biết nó dài bao nhiêu nữa vì em dùng cho Function mà! Các bác thông cảm nếu không cách nào khác thì đành chịu dùng thêm For vậy!
Nhờ mọi người nghĩ cách xem còn cách nào hay hơn For không?

Nhưng vấn đề em phát hiện thấy các hàm của Function không thể chạy khi đó là 1 mãng ảo! Nên muốn tìm cách khắc phục thôi! Còn ứng dụng thì nó thực sự nằm trong 1 SUB khác!

À còn nữa nếu các hàm khác như SMALL hoặc SUMPRODUCT thì bó tay sao??
Xin cảm ơn mọi người đã dành thời gian cho em!
Xin cảm ơn.

Bạn xem xét đoạn code này xem sao:
PHP:
Function Dem(Vung As Range)
Dim mang(), Cll As Range, K as Long
ReDim mang(1 To Vung.Count)
K = 1
For Each Cll In Vung
    If Cll <= 5 Then
        If Cll + 1 = 10 Then
        mang(K) = Cll + 1
        K = K + 1
        End If
    ElseIf Cll >= 7 Then
        If Cll - Int(j / 2) = 10 Then
        mang(K) = Cll - Int(j / 2)
        K = K + 1
        End If
    End If
Next Cll
Dem = Application.WorksheetFunction.Count(mang())
End Function
 
Đếm giá trị không dùng hàm countif

Có cách nào , không sử dụng hàm countif nhưng vẫn đếm được các giá trị trong một dãy ô . Vì khi sử dụng hàm countif điều kiện đếm phải để trong ngoặc kép , do đó rất phiền phức khi nó là số thập phân phụ thuộc vào vào định dạng phần thập phân là dấu chấm hoặc phẩy . Nhờ các bạn chỉ giúp , xin cảm ơn nhiều .
 

File đính kèm

  • dem.xls
    13.5 KB · Đọc: 41
Có cách nào , không sử dụng hàm countif nhưng vẫn đếm được các giá trị trong một dãy ô . Vì khi sử dụng hàm countif điều kiện đếm phải để trong ngoặc kép , do đó rất phiền phức khi nó là số thập phân phụ thuộc vào vào định dạng phần thập phân là dấu chấm hoặc phẩy . Nhờ các bạn chỉ giúp , xin cảm ơn nhiều .

Bạn có thể dùng SUMPRODUCT để thay thế!
Trong ví dụ của bạn, để đếm trong vùng có bao nhiêu giá trị <5 thì có thể dùng các công thức sau:
=SUMPRODUCT(--(A1:F1<5))
{=SUM(--(A1:F1<5))} (nhớ Ctrl+Shift+Enter)
{=SUM(IF(A1:F1<5,1,0))} (nhớ Ctrl+Shift+Enter)
 
Web KT
Back
Top Bottom