Hỗ trợ đánh số thứ tự

Liên hệ QC

Tình nghĩa giang hồ

Thanh sơn bất cải, lục thủy trường lưu
Tham gia
29/9/20
Bài viết
330
Được thích
429
Em chào anh chị, nhờ anh chị hỗ trợ giúp em vấn đề này với.

Mong muốn thứ nhất của em là đánh số thứ tự: VD một mã có 4 dòng thì sẽ là (0,1,2,3,4) mã có 5 dòng sẽ là (0,1,2,3,4,5) luôn bắt đầu từ số 0.

Mong muốn thứ 2 của em là, dòng Intem cột B luôn theo quy luật là 0010, 0020, 0030...... tùy theo số dòng mà tăng dần. Trường hợp mã có 3 dòng thì là (0010, 0020, 0030, là đúng, còn nếu nó là 0010, 0020, 0040 thì nó là sai). Trường hợp nó có 4 dòng thì (0010, 0020, 0030, 0040, thì nó là đúng, còn nếu nó là 0010, 0020, 0030, 0050 là sai) . Chung quy: là dãy số đó phải là liên tục. nếu dãy số không liên tục thì nó là sai.

Bình thường em làm tay bằng công thức rồi so sánh lại, nhưng làm kiểu đó em nản quá. Nhờ anh chị hỗ trợ VBA giúp em. Em cảm ơn.
 

File đính kèm

  • check.jpg
    check.jpg
    100.6 KB · Đọc: 18
  • check thông tin + đánh số.XLSX
    10.1 KB · Đọc: 5
Em chào anh chị, nhờ anh chị hỗ trợ giúp em vấn đề này với.

Mong muốn thứ nhất của em là đánh số thứ tự: VD một mã có 4 dòng thì sẽ là (0,1,2,3,4) mã có 5 dòng sẽ là (0,1,2,3,4,5) luôn bắt đầu từ số 0.

Mong muốn thứ 2 của em là, dòng Intem cột B luôn theo quy luật là 0010, 0020, 0030...... tùy theo số dòng mà tăng dần. Trường hợp mã có 3 dòng thì là (0010, 0020, 0030, là đúng, còn nếu nó là 0010, 0020, 0040 thì nó là sai). Trường hợp nó có 4 dòng thì (0010, 0020, 0030, 0040, thì nó là đúng, còn nếu nó là 0010, 0020, 0030, 0050 là sai) . Chung quy: là dãy số đó phải là liên tục. nếu dãy số không liên tục thì nó là sai.

Bình thường em làm tay bằng công thức rồi so sánh lại, nhưng làm kiểu đó em nản quá. Nhờ anh chị hỗ trợ VBA giúp em. Em cảm ơn.
Thử code.
Mã:
Sub dffsfs()
   Dim a As Long, lr As Long, arr, i As Long, b As Long, dk As String, j As Long
   With Sheets("sheet1")
        lr = .Range("A" & Rows.Count).End(xlUp).Row + 1
        arr = .Range("A2:B" & lr).Value
        ReDim kq(1 To UBound(arr), 1 To 2)
        For i = 1 To UBound(arr) - 1
            If arr(i, 1) = arr(i + 1, 1) Then
               If a = 0 Then b = i
               kq(i, 1) = a
               If kq(i, 1) * 10 + 10 = CLng(arr(i, 2)) Then
                  kq(i, 2) = "Dung"
               Else
                  dk = "sai"
               End If
               a = a + 1
            Else
               kq(i, 1) = a
               If kq(i, 1) * 10 + 10 = CLng(arr(i, 2)) Then
                  kq(i, 2) = "Dung"
               Else
                  dk = "sai"
               End If
               If dk = "sai" Then
                  For j = b To i
                      kq(j, 2) = "Sai"
                  Next j
                  dk = Empty
               End If
               a = 0
            End If
        Next i
        .Range("D2:E" & lr).Value = kq
   End With
End Sub
 
Upvote 0
Em chào anh chị, nhờ anh chị hỗ trợ giúp em vấn đề này với.

Mong muốn thứ nhất của em là đánh số thứ tự: VD một mã có 4 dòng thì sẽ là (0,1,2,3,4) mã có 5 dòng sẽ là (0,1,2,3,4,5) luôn bắt đầu từ số 0.

Mong muốn thứ 2 của em là, dòng Intem cột B luôn theo quy luật là 0010, 0020, 0030...... tùy theo số dòng mà tăng dần. Trường hợp mã có 3 dòng thì là (0010, 0020, 0030, là đúng, còn nếu nó là 0010, 0020, 0040 thì nó là sai). Trường hợp nó có 4 dòng thì (0010, 0020, 0030, 0040, thì nó là đúng, còn nếu nó là 0010, 0020, 0030, 0050 là sai) . Chung quy: là dãy số đó phải là liên tục. nếu dãy số không liên tục thì nó là sai.

Bình thường em làm tay bằng công thức rồi so sánh lại, nhưng làm kiểu đó em nản quá. Nhờ anh chị hỗ trợ VBA giúp em. Em cảm ơn.
Chạy code . . .
Mã:
Sub ABC()
  Dim sArr(), res(), sRow&, i&, k&, item&, ma$, fR&, tmp
 
  With Sheets("sheet1")
    sArr = .Range("A2:B" & .Range("A" & Rows.Count).End(xlUp).Row + 1).Value
  End With
  sRow = UBound(sArr) - 1
  ReDim res(1 To sRow, 1 To 2)
  For i = 1 To sRow
    If ma <> sArr(i, 1) Then
      ma = sArr(i, 1)
      k = 0
      tmp = 0
      fR = i
    Else
      k = k + 1
    End If
    res(i, 1) = k
    tmp = tmp + Abs(k * 10 + 10 - CLng(sArr(i, 2)))
    If ma <> sArr(i + 1, 1) Then
      If tmp > 0 Then tmp = "Sai" Else tmp = "Dung"
      For r = fR To i
        res(r, 2) = tmp
      Next r
    End If
  Next i
  Sheets("sheet1").Range("D2").Resize(sRow, 2).Value = res
End Sub
 
Upvote 0
Dạ được rồi, em cảm ơn anh Hiếu CD, và anh snow25 nhiều.
 
Upvote 0
Bài này có bạn nào muốn thử đít sần hôn?
 
Upvote 0
Web KT

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

Back
Top Bottom