Kiểm tra sự liên tục của một dãy số

PiPuPyPu

Thành viên mới
Tham gia ngày
11 Tháng ba 2017
Bài viết
25
Được thích
6
Điểm
165
Tuổi
27
Chào Anh(chị)

E muốn kiểm tra số cột G có liên tục hay thiếu số nào không? Nếu "thiếu" or "không liên tục" thì báo "Sai" ở cột I. Điều kiện cột G có 2 loại số: cột F là "CP" thì cột G chỉ có 4 số hàng nghìn và N1, N2, N3 ở cột F thì cột G tới 5 số là chục nghìn.

Nhờ các anh/chị chỉ giáo ạ. Em cám ơn
 

File đính kèm

PiPuPyPu

Thành viên mới
Tham gia ngày
11 Tháng ba 2017
Bài viết
25
Được thích
6
Điểm
165
Tuổi
27
Hi a, nghĩa là dãy sô mình kiểm tra có 2 trường hợp sai đó anh ví dụ 1,2,4 là thiếu số 3 hoặc 10,11,14,12,15 là nằm không liên tục ạ
 

phuocam

Thành viên mới
Tham gia ngày
16 Tháng năm 2013
Bài viết
2,367
Được thích
3,128
Điểm
560
Chào Anh(chị)

E muốn kiểm tra số cột G có liên tục hay thiếu số nào không? Nếu "thiếu" or "không liên tục" thì báo "Sai" ở cột I. Điều kiện cột G có 2 loại số: cột F là "CP" thì cột G chỉ có 4 số hàng nghìn và N1, N2, N3 ở cột F thì cột G tới 5 số là chục nghìn.

Nhờ các anh/chị chỉ giáo ạ. Em cám ơn
Muốn biết số có liên tục hay không chỉ việc làm toán cộng. Một số bằng số trước nó+1 thì liên tục.;)
 

ChanhTQ@

0901452không62
Tham gia ngày
5 Tháng chín 2008
Bài viết
4,261
Được thích
4,933
Điểm
100
Bạn giả âập dữ liệu chưa đa chiều nên tự mà kiểm tra trên thực địa đi:
PHP:
Sub KiemTraTinhLienTucCuaSo()
 Dim SoCP As Long, SoNi As Long
 Dim Cls As Range
 Dim Tmp As String
 If Left([f2].Value, 1) = "C" Then
    SoCP = [f2].Offset(, 1).Value
 Else
    Set Cls = Columns("F:f").Find("C", , xlFormulas, xlPart)
    If Not Cls Is Nothing Then SoCP = Cls.Offset(, 1).Value - 1
 End If
 If Left([f2].Value, 1) = "N" Then
    SoNi = [f2].Offset(, 1).Value
 Else
    Set Cls = Columns("F:f").Find("N")
    If Not Cls Is Nothing Then SoNi = Cls.Offset(, 1).Value - 1
 End If
 For Each Cls In Range([F3], [F3].End(xlDown))
    Tmp = Left(Cls.Value, 1)
    If Tmp = "C" And Cls.Offset(, 1).Value = SoCP + 1 Then
        Cls.Offset(, 3).Value = "GPE.COM":          SoCP = Cls.Offset(, 1).Value
    ElseIf Tmp = "N" And Cls.Offset(, 1).Value = SoNi + 1 Then
        Cls.Offset(, 3).Value = "GPE.COM":          SoNi = Cls.Offset(, 1).Value
    ElseIf Tmp = "N" And Left(Cls.Offset(-1).Value, 1) = "C" Then
        If Cls.Offset(, 1).Value = SoNi + 1 Then
            Cls.Offset(, 3).Value = "GPE.COM"
        Else
            Cls.Offset(, 3).Value = "?"
        End If
        SoNi = Cls.Offset(, 1).Value
    ElseIf Tmp = "C" And Left(Cls.Offset(-1).Value, 1) = "N" Then
        If Cls.Offset(, 1).Value = SoCP + 1 Then
            Cls.Offset(, 3).Value = "GPE.COM"
        Else
            Cls.Offset(, 3).Value = "?"
        End If
        SoCP = Cls.Offset(, 1).Value
    End If
 Next Cls
End Sub
 

PiPuPyPu

Thành viên mới
Tham gia ngày
11 Tháng ba 2017
Bài viết
25
Được thích
6
Điểm
165
Tuổi
27
Bạn giả âập dữ liệu chưa đa chiều nên tự mà kiểm tra trên thực địa đi:
PHP:
Sub KiemTraTinhLienTucCuaSo()
 Dim SoCP As Long, SoNi As Long
 Dim Cls As Range
 Dim Tmp As String
 If Left([f2].Value, 1) = "C" Then
    SoCP = [f2].Offset(, 1).Value
 Else
    Set Cls = Columns("F:f").Find("C", , xlFormulas, xlPart)
    If Not Cls Is Nothing Then SoCP = Cls.Offset(, 1).Value - 1
 End If
 If Left([f2].Value, 1) = "N" Then
    SoNi = [f2].Offset(, 1).Value
 Else
    Set Cls = Columns("F:f").Find("N")
    If Not Cls Is Nothing Then SoNi = Cls.Offset(, 1).Value - 1
 End If
 For Each Cls In Range([F3], [F3].End(xlDown))
    Tmp = Left(Cls.Value, 1)
    If Tmp = "C" And Cls.Offset(, 1).Value = SoCP + 1 Then
        Cls.Offset(, 3).Value = "GPE.COM":          SoCP = Cls.Offset(, 1).Value
    ElseIf Tmp = "N" And Cls.Offset(, 1).Value = SoNi + 1 Then
        Cls.Offset(, 3).Value = "GPE.COM":          SoNi = Cls.Offset(, 1).Value
    ElseIf Tmp = "N" And Left(Cls.Offset(-1).Value, 1) = "C" Then
        If Cls.Offset(, 1).Value = SoNi + 1 Then
            Cls.Offset(, 3).Value = "GPE.COM"
        Else
            Cls.Offset(, 3).Value = "?"
        End If
        SoNi = Cls.Offset(, 1).Value
    ElseIf Tmp = "C" And Left(Cls.Offset(-1).Value, 1) = "N" Then
        If Cls.Offset(, 1).Value = SoCP + 1 Then
            Cls.Offset(, 3).Value = "GPE.COM"
        Else
            Cls.Offset(, 3).Value = "?"
        End If
        SoCP = Cls.Offset(, 1).Value
    End If
 Next Cls
End Sub
Hi anh, em không rành về giả lập, em muốn tìm công thức hàm cho điều kiện này ạ!
Cám ơn anh
 

ChanhTQ@

0901452không62
Tham gia ngày
5 Tháng chín 2008
Bài viết
4,261
Được thích
4,933
Điểm
100
(/ề công thức thì mình còn thua cả bạn nữa í chứ!
Bạn có thể fải chờ tác giả #6 hay ai khác đi vậy!

Mà công thức chi nữa cũng giả thiết cho mọi trường hợp (4)
 

dhn46

Hướng tới tương lai
Tham gia ngày
1 Tháng ba 2011
Bài viết
3,246
Được thích
3,829
Điểm
560
Nơi ở
Hải Phòng
Hi anh,

Khi trừ or cộng thì giao giữa điều kiên CP và N1 thì ô check sẽ sai nên em chưa biết làm sao
Bạn thử công thức này tại I2 và kéo xuống xem sao nhé
Mã:
=IF(COUNTIF($F$2:F2,F2)=1,"OK",IF(LOOKUP(2,1/($F$1:F1=F2),$G$1:G1)=G2-1,"OK","NG"))
 

phuocam

Thành viên mới
Tham gia ngày
16 Tháng năm 2013
Bài viết
2,367
Được thích
3,128
Điểm
560
Thử:
Mã:
=IF(COUNTIF($F$2:F2,LEFT(F2,1)&"*")=1,"OK",IF(LOOKUP(2,1/(LEFT($F$1:F1,1)=LEFT(F2,1)),$G$1:G1)=G2-1,"OK","NG"))
 

ChanhTQ@

0901452không62
Tham gia ngày
5 Tháng chín 2008
Bài viết
4,261
Được thích
4,933
Điểm
100
Hi anh,
Tốt hơn hồi nãy nhưng vẫn chưa 100% ạ, anh xem lại giúp.
Nếu là mình được trả lời câu này thì nghỉ chơi với bạn luôn!

Nếu chưa 100% thì đã được bao nhiêu rồi?
& quan trọng hơn là đang sai sót ở chổ nào.

Người ngoài đợc cứ tưởng bạn là thầy đang hỏi bài học viên vậy!

Tạm biệt!
 
Top Bottom