pingping2288
Thành viên chính thức
- Tham gia
- 1/11/11
- Bài viết
- 86
- Được thích
- 1
Nếu cột B đã sắp xếp từ nhỏ đến lớn, công thức ô A2: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 ạ!
=IF(COUNTIF($B$2:B2;B2)=1;MAX($A$1:A1)+1;A1)
Dạ, em cám ơn," Ba Tê" rất ngon cho bữa trưa ạ!Nếu cột B đã sắp xếp từ nhỏ đến lớn, công thức ô A2:
Copy xuống đến "mút chỉ".PHP:=IF(COUNTIF($B$2:B2;B2)=1;MAX($A$1:A1)+1;A1)
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 ạ!Nếu cột B đã sắp xếp từ nhỏ đến lớn, công thức ô A2:
Copy xuống đến "mút chỉ".PHP:=IF(COUNTIF($B$2:B2;B2)=1;MAX($A$1:A1)+1;A1)
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
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: "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 ạ!
=IF(COUNTIF($B$2:B2,B2)=1,MAX($A$1:A1)+1,INDEX($A$1:A1,MATCH(B2,$B$1:B1,0)))
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.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 ạ!
"Hổng được đâu", 13/10 số 2 mà 7/10 số 3 kìa.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)))
Thử.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 ạ!
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 ạ!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 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 ạ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!