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
30
Được thích
14
Đ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
30
Được thích
14
Đ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,559
Được thích
3,478
Đ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,938
Đ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
30
Được thích
14
Đ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,938
Đ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,250
Được thích
3,837
Đ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,559
Được thích
3,478
Đ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,938
Đ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