Đếm số lần xuất hiện theo block liên tiếp (1 người xem)

  • Thread starter Thread starter banhia
  • Ngày gửi Ngày gửi

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

banhia

Thành viên chính thức
Tham gia
11/10/13
Bài viết
84
Được thích
9
giúp mình tính số lần xuất hiện số 3 liên tục, 5 lần xuất hiện liên tiếp được tính là 1 lần
cảm ơn nhiều ạ!
 

File đính kèm

Giúp mình tính số lần xuất hiện số 3 liên tục, 5 lần xuất hiện liên tiếp được tính là 1 lần
cảm ơn nhiều ạ!

Mình chỉ có thể đếm bỡi VBA;
Xin hỏi bạn cho rõ thêm: Nếu có trên năm con số 3 liên tiếp thì sao?
Ví dụ là 6 hay 10 con số này liên tiếp trong dẫy?
 
giúp mình tính số lần xuất hiện số 3 liên tục, 5 lần xuất hiện liên tiếp được tính là 1 lần
cảm ơn nhiều ạ!

Viết tặng bạn 1 hàm Dem123(Vùng đếm, Điều kiện đếm, Số lần lặp)
PHP:
Public Function Dem123(Rng As Range, Num As Long, Lan As Long) As Long
Dim Cll As Range, Dem As Long
For Each Cll In Rng
    If Cll.Value = Num Then
        Dem = Dem + 1
        If Dem = Lan Then
            Dem123 = Dem123 + 1
            Dem = 0
        End If
    Else
        Dem = 0
    End If
Next Cll
End Function
Công thức ô AK6
PHP:
=Dem123(E6:AJ6;3;5)
Đếm trong vùng E6:AJ6, số 3, 5 lần lặp.
Bạn có thể thay đổi các tham số.
 

File đính kèm

thế chả may 6 lần xuất hiện liên tục thì tính là mấy lần? +-+-+-+
 
se ko co ban ak, vi nó theo tuần rồi bạn ạ, 1 tuần chỉ có 7 ngày, thì 2 ngày thứ 7 và CN mình ko tính rồi!
bạn có cách nào tính giúp mình với.
 
Anh Ba Tê có thể giúp e cho e xin 02 công thức
1 cho thời gian thử việc (Cần cứ vào ngày hết hợp đồng)
1 cho thời gian chính thức (Cần cứ vào ngày hết hợp đồng)


Ở trong bài này có một tình huống là
- Ngày vào 03/05/2016
- Ngày kết thúc 02/06/2016
- Trong khi đó ở trong khoảng tuần từ 30/05/2016 - 05/06/2016 có 01 lần block số 3 xuất hiện 5 lần, nhưng nó lại có cả thời gian thử việc và chính thức. (Anh có thể giúp e ở tình huống này, thời gian nào chiếm được 3/5 lần thì lấy bên đó). Như trường hợp này thì sẽ thuộc bên thử việc 1 Block từ 30/05/2016 - 03/06/2016 và 1 block cho chính thức từ 20-24/06/2016


E cảm ơn anh nhiều ạ!
 
Anh Ba Tê có thể giúp e cho e xin 02 công thức
1 cho thời gian thử việc (Cần cứ vào ngày hết hợp đồng)
1 cho thời gian chính thức (Cần cứ vào ngày hết hợp đồng)


Ở trong bài này có một tình huống là
- Ngày vào 03/05/2016
- Ngày kết thúc 02/06/2016
- Trong khi đó ở trong khoảng tuần từ 30/05/2016 - 05/06/2016 có 01 lần block số 3 xuất hiện 5 lần, nhưng nó lại có cả thời gian thử việc và chính thức. (Anh có thể giúp e ở tình huống này, thời gian nào chiếm được 3/5 lần thì lấy bên đó). Như trường hợp này thì sẽ thuộc bên thử việc 1 Block từ 30/05/2016 - 03/06/2016 và 1 block cho chính thức từ 20-24/06/2016


E cảm ơn anh nhiều ạ!

Lúc đầu đâu có biết thử việc, chính thức là sao đâu?
giúp mình tính số lần xuất hiện số 3 liên tục, 5 lần xuất hiện liên tiếp được tính là 1 lần
cảm ơn nhiều ạ!
Bây giờ thì gút lại yêu cầu thế nào?
- 1 block 5 con số 3 liên tục trước ngày hết hợp đồng thì đếm là thử viêc?
- 1 block 5 con số 3 liên tục sau ngày hết hợp đồng thì đếm là chính thức?
- Đúng ngày hết hợp đồng thì đếm bên nào?
- 3/5 thuộc khoảng thời gian bên nào thì đếm là 1 cho bên đó?
- Các số 3 và số 5 lần là cố định không thay đổi? Có liên quan gì đến các số 0, 1 không?
Híc! Còn phải chỉnh lại nhiều.
 
1. Nếu nhỏ hơn hoặc bằng ngày KẾT THÚC HỢP ĐỒNG LÀ thử việc
2. nếu lớn hơn ngày KẾT THÚC HỢP ĐỒNG Là Chính Thức
3. 3/5 thuộc khoảng nào thì tính khoảng đó ( ok)
4. các số 3 và 5 lần là cố định, không liên quan gì đến số 0 và 1 ạ
Anh làm giúp e với ạ!
 
Giúp e với anh ba Tê ơi!
 
Giúp e với anh ba Tê ơi!

trong khi chờ, tôi làm thử
Mã:
Option Explicit
Function DemBlock(rng As Range, DateRng As Range, F_date As Range, loai As Boolean)
Dim i, dem_thuviec, dem_chinhthuc, cnt, cnt2, ngay As Long

If rng.Columns.Count <> DateRng.Columns.Count Then Exit Function

For i = 1 To rng.Columns.Count
If DateRng.Cells(1, i) <> "" Then ngay = DateRng.Cells(1, i).Value2
    If ngay <= F_date.Value2 Then
        If rng.Cells(1, i).Value = 3 Then
            cnt = cnt + 1
        Else
            cnt = 0
        End If
        If cnt = 5 Then dem_thuviec = dem_thuviec + 1: cnt = 0
    Else
        If rng.Cells(1, i).Value = 3 Then
            cnt2 = cnt2 + 1
        Else
            cnt2 = 0
        End If
        If cnt2 = 5 Then dem_chinhthuc = dem_chinhthuc + 1: cnt2 = 0
    End If
    
Next

If loai = True Then
    DemBlock = dem_chinhthuc
Else
    DemBlock = dem_thuviec
    
End If

End Function

Mã:
AK5=DemBlock($E$6:$AJ$6,$E$3:$AJ$3,D6,0)
AL5=DemBlock($E$6:$AJ$6,$E$3:$AJ$3,D6,1)

dòng số 3,ngày, nhập đủ dạng ngày tháng năm nha, vid1 dụ 1/5/16
 
có vẻ chưa đúng anh ơi! trong công thức của anh, cái dòng số 3 ý a muốn có phải là lấy ngày cụ thể của từng tháng thì ở dòng thứ 5 e đã có rồi, e thay dòng 3 bằng dòng 5. NHƯNG KẾT QUẢ RA KHÔNG CHÍNH XÁC Ạ. a kiểm tra lại giúp e với ạ!
 
có vẻ chưa đúng anh ơi! trong công thức của anh, cái dòng số 3 ý a muốn có phải là lấy ngày cụ thể của từng tháng thì ở dòng thứ 5 e đã có rồi, e thay dòng 3 bằng dòng 5. NHƯNG KẾT QUẢ RA KHÔNG CHÍNH XÁC Ạ. a kiểm tra lại giúp e với ạ!

bạn cho cái file đã điền kết quả vào xem thử
 
trong khi chờ, tôi làm thử
Mã:
Option Explicit
Function DemBlock(rng As Range, DateRng As Range, F_date As Range, loai As Boolean)
Dim i, dem_thuviec, dem_chinhthuc, cnt, cnt2, ngay As Long

If rng.Columns.Count <> DateRng.Columns.Count Then Exit Function

For i = 1 To rng.Columns.Count
If DateRng.Cells(1, i) <> "" Then ngay = DateRng.Cells(1, i).Value2
    If ngay <= F_date.Value2 Then
        If rng.Cells(1, i).Value = 3 Then
            cnt = cnt + 1
        Else
            cnt = 0
        End If
        If cnt = 5 Then dem_thuviec = dem_thuviec + 1: cnt = 0
    Else
        If rng.Cells(1, i).Value = 3 Then
            cnt2 = cnt2 + 1
        Else
            cnt2 = 0
        End If
        If cnt2 = 5 Then dem_chinhthuc = dem_chinhthuc + 1: cnt2 = 0
    End If
    
Next

If loai = True Then
    DemBlock = dem_chinhthuc
Else
    DemBlock = dem_thuviec
    
End If

End Function

Mã:
AK5=DemBlock($E$6:$AJ$6,$E$3:$AJ$3,D6,0)
AL5=DemBlock($E$6:$AJ$6,$E$3:$AJ$3,D6,1)

dòng số 3,ngày, nhập đủ dạng ngày tháng năm nha, vid1 dụ 1/5/16



Cảm ơn Anh (chị) Let go go đã giúp e qua công thức trên, Nhưng e vừa thử lại, hình như có 1 điều kiện chưa chính xác ạ. Trong file đính kèm, e có để ở trường hợp đầu tiên khi số ngày Chính thức hoặc thử việc chiếm 3/5 lần số 3 thì được là một lần Block cho hình thức đó. Như trong file người có ngày kết thúc hợp đồng là 22/06/2016 nằm trong tuần từ 20-24/06/2016 Vậy thời gian thử việc trong block này chiếm tới 3 ngày là 20,21,22 NÊN ĐÁP ÁN CỦA trường hợp đầu tiên này phải Bằng 2.
Mong anh chị xem lại giúp e với ạ
 

File đính kèm

Cảm ơn Anh (chị) Let go go đã giúp e qua công thức trên, Nhưng e vừa thử lại, hình như có 1 điều kiện chưa chính xác ạ. Trong file đính kèm, e có để ở trường hợp đầu tiên khi số ngày Chính thức hoặc thử việc chiếm 3/5 lần số 3 thì được là một lần Block cho hình thức đó. Như trong file người có ngày kết thúc hợp đồng là 22/06/2016 nằm trong tuần từ 20-24/06/2016 Vậy thời gian thử việc trong block này chiếm tới 3 ngày là 20,21,22 NÊN ĐÁP ÁN CỦA trường hợp đầu tiên này phải Bằng 2.
Mong anh chị xem lại giúp e với ạ

đổi ngày thành tuần
nếu có số liệu trong 2 năm, có thể sai
Mã:
Option Explicit
Function DemBlock(rng As Range, DateRng As Range, F_date As Range, loai As Boolean)
Dim i, dem_thuviec, dem_chinhthuc, cnt, cnt2, tuan As Long

If rng.Columns.Count <> DateRng.Columns.Count Then Exit Function

For i = 1 To rng.Columns.Count
tuan = Format(DateRng.Cells(1, i).Value2, "ww")
    If tuan <= Format(F_date.Value2, "ww") Then
        If rng.Cells(1, i).Value = 3 Then
            cnt = cnt + 1
        Else
            cnt = 0
        End If
        If cnt = 5 Then dem_thuviec = dem_thuviec + 1: cnt = 0
    Else
        If rng.Cells(1, i).Value = 3 Then
            cnt2 = cnt2 + 1
        Else
            cnt2 = 0
        End If
        If cnt2 = 5 Then dem_chinhthuc = dem_chinhthuc + 1: cnt2 = 0
    End If
    
Next

If loai = True Then
    DemBlock = dem_chinhthuc
Else
    DemBlock = dem_thuviec
    
End If

End Function
 
dùng code của bài #10, thêm một chút
Mã:
Function DemBlock(rng As Range, DateRng As Range, F_date As Range, loai As Boolean)
Dim i, dem_thuviec, dem_chinhthuc, cnt, cnt1, cnt2, ngay As Long
If rng.Columns.Count <> DateRng.Columns.Count Then Exit Function
For i = 1 To rng.Columns.Count
If DateRng.Cells(1, i) <> "" Then ngay = DateRng.Cells(1, i).Value2
    If ngay <= F_date.Value2 Then
        If rng.Cells(1, i).Value = 3 Then
            cnt = cnt + 1: cnt1 = cnt1 + 1
        Else
            cnt = 0: cnt1 = 0
        End If
        If cnt1 = 5 Then dem_thuviec = dem_thuviec + 1: cnt = 0: cnt1 = 0
    Else
        If rng.Cells(1, i).Value = 3 And rng.Cells(1, i - 1).Value = 3 Then
            cnt1 = cnt1 + 1
        Else
            cnt = 0: cnt1 = 0
        End If
        If cnt1 = 5 Then
            If cnt > 2 Then
                dem_thuviec = dem_thuviec + 1
            Else
                dem_chinhthuc = dem_chinhthuc + 1
            End If
            cnt = 0: cnt1 = 0
        End If
        If rng.Cells(1, i).Value = 3 Then
            cnt2 = cnt2 + 1
        Else
            cnt2 = 0
        End If
        If cnt2 = 5 Then dem_chinhthuc = dem_chinhthuc + 1: cnt2 = 0
    End If
Next
If loai = True Then
    DemBlock = dem_chinhthuc
Else
    DemBlock = dem_thuviec
End If
End Function
 
Quá hay, cảm ơn a Hiếu ạ! lâu không gặp anh!
 
1. Nếu nhỏ hơn hoặc bằng ngày KẾT THÚC HỢP ĐỒNG LÀ thử việc
2. nếu lớn hơn ngày KẾT THÚC HỢP ĐỒNG Là Chính Thức
3. 3/5 thuộc khoảng nào thì tính khoảng đó ( ok)
4. các số 3 và 5 lần là cố định, không liên quan gì đến số 0 và 1 ạ
Anh làm giúp e với ạ!

Xem lại file này và thử với nhiều trường hợp xem có đúng không.
PHP:
Public Function Dem123(Rng As Range, Ngay As Range, HHD As Long, Optional Num As Long = 0) As Long
Dim J As Long, DemTV As Long, DemCT As Long
For J = 1 To Rng.Columns.Count
    If Rng(1, J).Value = 3 Then
        If Ngay(1, J).Value <= HHD Then
            DemTV = DemTV + 1
        Else
            DemCT = DemCT + 1
        End If
            If DemTV + DemCT = 5 Then
                If Num = 0 Then
                    If DemTV >= 3 Then Dem123 = Dem123 + 1
                Else
                    If DemCT >= 3 Then Dem123 = Dem123 + 1
                End If
            End If
    Else
        DemTV = 0
        DemCT = 0
    End If
Next J
End Function
 

File đính kèm

Lần chỉnh sửa cuối:

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

Back
Top Bottom