giúp thêm tui về count

Liên hệ QC

a_newday

Thành viên mới
Tham gia
29/3/07
Bài viết
30
Được thích
3
Mình đã đọc các bài viết về countif ma ban kienht cần hỗ trợ nhưng mình vẫn còn một kiểu đếm như thế này (mình sẽ trình bày dưới đây) mà mình không thể thực hiện được các ban giúp mình với nhé.

mình muốn đếm trong một cột như dưới đây từ dưới lên trên có bao nhiêu số 4 cho đến khi gặp một số khác 4
1
2
4
3
4
4
4
4
Ai bít thì giúp mình -0-/. nhé, cám ơn nhiều;;;;;;;;;;;
 
B1=COUNTIF($a$1:$a1,$a1)-1,
Copy xuống
 
Thu Nghi oi van chua on minh thu voi cot duoi day
1
3
1
2
2
1
1
1
1
lai cho ket qua la 5 ma dung ra phai la 4 moi dung. Ban xem lai giup minh nhe.
 
Cái này có lẽ không dùng VBA không giải quyết được. Hơn nữa câu hỏi chưa rõ : Chuỗi số này có đặc tính hay quy luật gì không ??
Bạn thử cho mình lời giải nếu chuỗi như thế này :Tìm số 1
1
2
3
4
1
1
1
1
2
1
1
1
2
3
1
4
Vậy thì kết quả là bao nhiêu đây ?
Qua đó mới hiểu hết bài toán của bạn được.
Thân!
 
Chuoi so cua minh la chuoi ngau nhien. Minh muon dem tu duoi len doi voi mot so bat ky khi gap mot so khac so can dem thi dung lai. Nhu chuoi so cua ban Okebab thi neu minh muon dem so 4 thi ket qua se la 1 con neu minh dem nhung so khac thi ket qua se la 0. Giup minh nhe. Thank.
 
Vậy thì phải dùng VBA thôi.
 
Mở Excel, nhấn Alt+F11 để vào VBA
Nhấn Insert/ Module, rồi copy đoạn code dưới đây vào Module1
Mã:
Public Function CountIf_Pre(rngData As Range, so)
Dim i As Long, j As Long
Dim dem As Long
If rngData.Rows.Count >= rngData.Columns.Count Then
    For i = rngData.Rows.Count To 1 Step -1
        If rngData.Cells(i, 1) = so Then Exit For
    Next i
    If i = 0 Then
        CountIf_Pre = 0
        Exit Function
    ElseIf i = 0 And rngData.Cells(1, 1) = so Then
        CountIf_Pre = 1
        Exit Function
    End If
    
    For j = i To 1 Step -1
        If rngData.Cells(j, 1) = so And rngData.Cells(j - 1, 1) = so Then
            dem = dem + 1
        Else
            Exit For
        End If
    Next j
Else
    For i = rngData.Columns.Count To 1 Step -1
        If rngData.Cells(1, i) = so Then Exit For
    Next i
    If i = 0 Then
        CountIf_Pre = 0
        Exit Function
    ElseIf i = 0 And rngData.Cells(1, 1) = so Then
        CountIf_Pre = 1
        Exit Function
    End If
    
    For j = i To 1 Step -1
        If rngData.Cells(1, j) = so And rngData.Cells(1, j - 1) = so Then
            dem = dem + 1
        Else
            Exit For
        End If
    Next j
End If
CountIf_Pre = dem + 1
End Function
Nhấn Alt+Q để về Excel
Bây giờ bạn có thể sử dụng hàm CountIf_Pre như một hàm của Excel với cú pháp là:
CountIf_Pre(rngData As Range, so)
Trong đó:
rngData: là vùng dữ liệu của bạn
so: chính là số (hoặc từ...) mà bạn cần đếm
 
Cảm ơn NVson minh đã làm được rồi. Thanks a lot.
Thế là mình đã biết sơ qua về VBA rồi đấy, hi hi.
Tuy nhiên đáp số vẫn còn có vấn chưa cho kêts quả là 0 khi mình nhập số (ví dụ mình nhập số 3 vào công thức trong chuỗi sau đây kết quả lại là 1)
1
2
2
2
3
1
Nvson chỉnh giúp đoạn code nhé
 
Vậy bạn dùng đoạn code sau:
Mã:
Option Explicit
Public Function CountIf_Pre(rngData As Range, so)
Dim i As Long, j As Long
Dim dem As Long
If rngData.Rows.Count >= rngData.Columns.Count Then
    For i = rngData.Rows.Count To 1 Step -1
        If rngData.Cells(i, 1) = so Then Exit For
    Next i
    If i <= 1 Then
        CountIf_Pre = 0
        Exit Function
    End If
    
    For j = i To 1 Step -1
        If rngData.Cells(j, 1) = so And rngData.Cells(j - 1, 1) = so Then
            dem = dem + 1
        Else
            Exit For
        End If
    Next j
Else
    For i = rngData.Columns.Count To 1 Step -1
        If rngData.Cells(1, i) = so Then Exit For
    Next i
    If i <= 1 Then
        CountIf_Pre = 0
        Exit Function
    End If
    
    For j = i To 1 Step -1
        If rngData.Cells(1, j) = so And rngData.Cells(1, j - 1) = so Then
            dem = dem + 1
        Else
            Exit For
        End If
    Next j
End If
CountIf_Pre = dem
End Function
 
a_newday đã viết:
Nvson oi khong on roi toi thu doan code cua you gui nhung ma ket qua khong dung. Xem lai cho minh nhe
Mình không biết nó không ổn ở chỗ nào???
CountIf_Pre.jpg


P/S: Nếu vùng dữ liệu (A1:A6) bạn định dạng là Text, sau đó bạn nhập dữ liệu thì thông số thứ 2 của hàm bạn phải để trong dấu nháy kép.
VD: =CountIf_Pre(A1:A5,"3")
còn nếu tham chiếu đến ô thì ô đó cũng phải được định dạng giống như vùng dữ liệu
 
Minh thu tiep lai roi Nvson, Nhung no ma van chua duoc. Theo nhu chuoi so cua Nvson thi neu tim "tu duoi len" voi so can tim la 1 thi ket qua cho la 1, voi so can tim la 2 thi ket qua la 0, voi so can tim la 3 thi ket qua cung la 0. The moi dung co. Xem lai cho minh nho
 
oh, Mình hiểu sai ý bạn nên thuật toán chưa đúng.
Mã:
Option Explicit
Public Function CountIf_Pre2(rngData As Range, so)
Dim i As Long, j As Long
Dim dem As Long
Dim rngSubData As Range
If rngData.Rows.Count >= rngData.Columns.Count Then
    For i = rngData.Rows.Count To 1 Step -1
        If rngData.Cells(i, 1) = so Then Exit For
    Next i
    If i <= 1 Then
        CountIf_Pre2 = 0
        Exit Function
    Else
        For j = i To 1 Step -1
            If rngData.Cells(j, 1) <> so Then Exit For
        Next j
        Set rngSubData = Range(rngData.Cells(1, 1), rngData.Cells(j, 1))
        dem = WorksheetFunction.CountIf(rngSubData, so)
    End If
Else
    For i = rngData.Columns.Count To 1 Step -1
        If rngData.Cells(1, i) = so Then Exit For
    Next i
    If i <= 1 Then
        CountIf_Pre2 = 0
        Exit Function
    Else
        For j = i To 1 Step -1
            If rngData.Cells(1, j) <> so Then Exit For
        Next j
        Set rngSubData = Range(rngData.Cells(1, 1), rngData.Cells(1, j))
        dem = WorksheetFunction.CountIf(rngSubData, so)
    End If
End If
CountIf_Pre2 = dem
End Function
P/S: Lần sau gõ tiếng Việt nhé
 
Có thể giải BT trên bằng các hàm index, counta, offset và if
Hơi rườm rà một tí, nhưng bạn a_newday cần để giải quyết vấn đề gì vậy, thấy có vẻ không thực tế lắm.
 
Lần chỉnh sửa cuối:
ThuNghi đã viết:
Có thể giải BT trên bằng các hàm index, counta, offset và if
Hơi rườm rà một tí, nhưng bạn a_newday cần để giải quyết vấn đề gì vậy, thấy có vẻ không thực tế lắm.
Nếu được dùng cột phụ thì dễ rồi. Chỉ cần dùng ifsum là xong thôi. Bạn xem nhé :
Thân!
 

File đính kèm

  • LaySoCuoi.zip
    4.2 KB · Đọc: 19
Lần chỉnh sửa cuối:
Cảm ơn Thu Nghi. Bạn đúng là siêu Excel đấy. Cả Mrokebab nữa. Còn Nvson, u very good at VBA. Tuy nhiên bạn làm hơi nhanh :) Mình thực sự đang cố để hiểu hết các công thức mà Thu Nghi làm. Thực ra việc đếm này rất có ích đối với mình, nó liên quan đến tiền nong. (Chuỗi số này và một số thứ khác). Mình đang trong giai đoạn thử nghiệm, khi thành công sẽ chia sẻ với các bạn. Cảm ơn các bạn nhiều, rất mong sau này được các bạn chỉ bảo thêm về VBA và các công thức Excell.
 
a_newday đã viết:
Chuoi so cua minh la chuoi ngau nhien. Minh muon dem tu duoi len doi voi mot so bat ky khi gap mot so khac so can dem thi dung lai. Nhu chuoi so cua ban Okebab thi neu minh muon dem so 4 thi ket qua se la 1 con neu minh dem nhung so khac thi ket qua se la 0. Giup minh nhe. Thank.

Mình khg hiểu ý bạn lắm, bạn muốn đếm 1 số bất kỳ hay chỉ đếm số cuối cùng từ dưới lên. Bạn dùng thử như mình xem có được khg?
 

File đính kèm

  • Test.xls
    14.5 KB · Đọc: 14
Web KT
Back
Top Bottom