Code đánh Số thứ tự tăng dần theo thời gian, nếu trùng ngày sẽ chung 1 số thứ tự

Liên hệ QC

pingping2288

Thành viên chính thức
Tham gia
1/11/11
Bài viết
86
Được thích
1
Em xin chào mọi người ạ! Em có 1 file như này, mong mọi người giúp code tự động đánh STT tăng dần theo thời gian, nếu ngày tháng năm trùng nhau thì sẽ có chung 1 số thứ tự. Em xin cảm ơn ạ!
 

File đính kèm

Em xin chào mọi người ạ! Em có 1 file như này, mong mọi người giúp code tự động đánh STT tăng dần theo thời gian, nếu ngày tháng năm trùng nhau thì sẽ có chung 1 số thứ tự. Em xin cảm ơn ạ!
Nếu cột B đã sắp xếp từ nhỏ đến lớn, công thức ô A2:
PHP:
=IF(COUNTIF($B$2:B2;B2)=1;MAX($A$1:A1)+1;A1)
Copy xuống đến "mút chỉ".
 
Upvote 0
Nếu cột B đã sắp xếp từ nhỏ đến lớn, công thức ô A2:
PHP:
=IF(COUNTIF($B$2:B2;B2)=1;MAX($A$1:A1)+1;A1)
Copy xuống đến "mút chỉ".
Dạ, em cám ơn," Ba Tê" rất ngon cho bữa trưa ạ!
Bài đã được tự động gộp:

Nếu cột B đã sắp xếp từ nhỏ đến lớn, công thức ô A2:
PHP:
=IF(COUNTIF($B$2:B2;B2)=1;MAX($A$1:A1)+1;A1)
Copy xuống đến "mút chỉ".
Dạ, thầy ơi, sao file của em nó vẫn lỗi, không xếp đúng ạ, cái cột B của em nó lộn xộn ạ, tại công việc của em là nó gối nhau ạ, lúc làm hạng mục này, lúc làm hạng mục khác thầy ạ!
 

File đính kèm

Upvote 0
Nếu vẫn muốn nghiên cứu hay xài 'Code' thì phương án thô nhất là như sau:
B1: Dùng WorkBookFunction để xác định giới hạn dưới & giới hạn trên (về ngày) tại cột 'B'
B2: Thực hiện vòng lặp từ giá trị nhở nhất đến giá trị lớn nhất tìm được
B3: Thực hiện việc tìm kiếm trị của vòng lặp trong cột 'B'
B3.1: Tìm thấy thì đánh số TT cho ngày (kể cả ngày trùng)

PHP:
Sub DanhSoThuTuTheoNgay()
 Dim WF As Object, Rng As Range, sRng As Range
 Dim J As Long, fDat As Date, lDat As Date, SoNgay As Integer, Dat As Date
 Dim MyAdd As String
 Const Alf As String = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
 
 Set WF = Application.WorksheetFunction
 Set Rng = Range([B2], [B2].End(xlDown))
 Rng.NumberFormat = "MM/DD/yyyy"
 fDat = WF.Min(Rng):                        lDat = WF.Max(Rng)
 SoNgay = lDat - fDat
 For J = 0 To SoNgay
    Dat = fDat + J
    Set sRng = Rng.Find(Format(Dat, "MM/DD/yyyy"), , xlValues, xlWhole)
    If Not sRng Is Nothing Then
        MyAdd = sRng.Address
        Do
            sRng.Offset(, -1).Value = (Year(Dat) - 2010) * 10 ^ 4 + Month(Dat) * 100 + Day(Dat)
            Set sRng = Rng.FindNext(sRng)
        Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
    End If
 Next J
End Sub

Chúc bạn ngày vui cuối tuần & thành công mỹ mãn!
 
Lần chỉnh sửa cuối:
Upvote 0
cái cột B của em nó lộn xộn ạ, tại công việc của em là nó gối nhau ạ,
lúc làm hạng mục này, lúc làm hạng mục khác thầy ạ!
Bài trên có nói rõ: "Nếu cột B đã sắp xếp từ nhỏ đến lớn, công thức ô A2: "
Trường hợp không sắp xếp, thử công thức này:
Mã:
=IF(COUNTIF($B$2:B2,B2)=1,MAX($A$1:A1)+1,INDEX($A$1:A1,MATCH(B2,$B$1:B1,0)))
 
Upvote 0
Dạ, em cám ơn," Ba Tê" rất ngon cho bữa trưa ạ!
Bài đã được tự động gộp:


Dạ, thầy ơi, sao file của em nó vẫn lỗi, không xếp đúng ạ, cái cột B của em nó lộn xộn ạ, tại công việc của em là nó gối nhau ạ, lúc làm hạng mục này, lúc làm hạng mục khác thầy ạ!
Dễ nhất là sort thủ công bảng tính theo cột B trước khi nhập công thức.
Bài đã được tự động gộp:

Bài trên có nói rõ: "Nếu cột B đã sắp xếp từ nhỏ đến lớn, công thức ô A2: "
Trường hợp không sắp xếp, thử công thức này:
Mã:
=IF(COUNTIF($B$2:B2,B2)=1,MAX($A$1:A1)+1,INDEX($A$1:A1,MATCH(B2,$B$1:B1,0)))
"Hổng được đâu", 13/10 số 2 mà 7/10 số 3 kìa.
 
Upvote 0
Em xin chào mọi người ạ! Em có 1 file như này, mong mọi người giúp code tự động đánh STT tăng dần theo thời gian, nếu ngày tháng năm trùng nhau thì sẽ có chung 1 số thứ tự. Em xin cảm ơn ạ!
Thử.
Mã:
Sub sapxep()
    Dim arr, kq, i As Long, dk As Long, lr As Long, olit As Object, R As Long, a As Long
    Set olit = CreateObject("System.Collections.SortedList")
    With Sheets("sheet1")
         lr = .Range("B" & Rows.Count).End(xlUp).Row
         If lr = 1 Then Exit Sub
         arr = .Range("b2:C" & lr).Value
         R = UBound(arr)
         ReDim kq(1 To R, 1 To 1)
         For i = 1 To R
             dk = CLng(arr(i, 1))
             If Not olit.Contains(dk) Then
                 olit.Add dk, i
             End If
         Next i
         For i = 1 To R
             dk = CLng(arr(i, 1))
             a = olit.IndexOfKey(dk)
             kq(i, 1) = a + 1
         Next i
         .Range("A2:A" & lr).Value = kq
   End With
End Sub
 
Upvote 0
Thử.
Mã:
Sub sapxep()
    Dim arr, kq, i As Long, dk As Long, lr As Long, olit As Object, R As Long, a As Long
    Set olit = CreateObject("System.Collections.SortedList")
    With Sheets("sheet1")
         lr = .Range("B" & Rows.Count).End(xlUp).Row
         If lr = 1 Then Exit Sub
         arr = .Range("b2:C" & lr).Value
         R = UBound(arr)
         ReDim kq(1 To R, 1 To 1)
         For i = 1 To R
             dk = CLng(arr(i, 1))
             If Not olit.Contains(dk) Then
                 olit.Add dk, i
             End If
         Next i
         For i = 1 To R
             dk = CLng(arr(i, 1))
             a = olit.IndexOfKey(dk)
             kq(i, 1) = a + 1
         Next i
         .Range("A2:A" & lr).Value = kq
   End With
End Sub
Em cám ơn nhiều ạ, code chạy chuẩn luôn ạ!
Bài đã được tự động gộp:

Nếu vẫn muốn nghiên cứu hay xài 'Code' thì phương án thô nhất là như sau:
B1: Dùng WorkBookFunction để xác định giới hạn dưới & giới hạn trên (về ngày) tại cột 'B'
B2: Thực hiện vòng lặp từ giá trị nhở nhất đến giá trị lớn nhất tìm được
B3: Thực hiện việc tìm kiếm trị của vòng lặp trong cột 'B'
B3.1: Tìm thấy thì đánh số TT cho ngày (kể cả ngày trùng)

PHP:
Sub DanhSoThuTuTheoNgay()
Dim WF As Object, Rng As Range, sRng As Range
Dim J As Long, fDat As Date, lDat As Date, SoNgay As Integer, Dat As Date
Dim MyAdd As String
Const Alf As String = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"

Set WF = Application.WorksheetFunction
Set Rng = Range([B2], [B2].End(xlDown))
Rng.NumberFormat = "MM/DD/yyyy"
fDat = WF.Min(Rng):                        lDat = WF.Max(Rng)
SoNgay = lDat - fDat
For J = 0 To SoNgay
    Dat = fDat + J
    Set sRng = Rng.Find(Format(Dat, "MM/DD/yyyy"), , xlValues, xlWhole)
    If Not sRng Is Nothing Then
        MyAdd = sRng.Address
        Do
            sRng.Offset(, -1).Value = (Year(Dat) - 2010) * 10 ^ 4 + Month(Dat) * 100 + Day(Dat)
            Set sRng = Rng.FindNext(sRng)
        Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
    End If
Next J
End Sub

Chúc bạn ngày vui cuối tuần & thành công mỹ mãn!
Em xin cảm ơn ạ. E chúc thầy và gia đình mạnh khỏe để tiếp tục giúp đỡ bọn em ạ :)
 
Upvote 0
Web KT

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

Back
Top Bottom