Dùng cột phụ tách cái số ở cuối rồi sort theo cột phụ coiEm có file Excel như file đính kèm. Em muốn sắp xếp nó \000.12.09.H32.2021.02.70.pdf rồi lên \000.12.09.H32.2021.03.71.pdf chứ hiện tại đang sắp xếp ngược ạ. Bác nào giúp em với ạ. Em cám ơn .. Chạy cho toàn bộ cột 26 ạ.
Là như nào bác e chưa hiểu.. vì số cuối nó chạy biến thiên từ 1 đến vài nghìn ạDùng cột phụ tách cái số ở cuối rồi sort theo cột phụ coi
Bạn muốn sắp xếp theo những số cuối cùng à? hay thế nào. Cho vài ví dụ cụ thể coi. Tại thấy chuỗi có những chỗ khác nhauLà như nào bác e chưa hiểu.. vì số cuối nó chạy biến thiên từ 1 đến vài nghìn ạ
Bài này khó, ít nhất cũng phải sort 3 cột (năm/thư mục/số). Nếu excel xịn xịn có hàm textsplit thì sort được.Là như nào bác e chưa hiểu.. vì số cuối nó chạy biến thiên từ 1 đến vài nghìn ạ
Nhưng lỡ có phát sinh thư mục hoặc file dài 6, 7 số thì lại dính nữa bác ạ, món sort em dính rồi nên cay cú lắm.Dòng 351:
G:\BHTN_KhanhHoa\2021\10\000.12.09.H32.2021.10.433.pdf
Dòng 352
G:\BHTN_KhanhHoa\2021\100\000.12.09.H32.2021.100.4156.pdf
Có tới 3 chỗ thay đổi
Có lẽ phải quy hết các thành phần bên trong về số ký tự đồng nhất (VD: 5 ký số) rồi sort chăng?
VD:
G:\BHTN_KhanhHoa\2021\00010\000.12.09.H32.2021.00010.00433.pdf
G:\BHTN_KhanhHoa\2021\00100\000.12.09.H32.2021.00100.04156.pdf
Option Explicit
Sub sort()
Dim lr&, i&, j&, rng, sp, st As String
lr = Cells(Rows.Count, "AB").End(xlUp).Row
rng = Range("AB2:AC" & lr).Value
For i = 1 To UBound(rng)
rng(i, 2) = Replace(rng(i, 1), ".", "\")
st = "": sp = Split(rng(i, 2), "\")
For j = 0 To UBound(sp)
If IsNumeric(sp(j)) Then sp(j) = Format(sp(j), "0000000")
st = IIf(st = "", "", st & "\") & sp(j)
Next
rng(i, 2) = st
Next
Range("AB2:AC" & lr).Value = rng
Range("B2:AC" & lr).sort Range("AC1")
Columns("AC").EntireColumn.Delete
End Sub
Tại không biết lường trước. Năm 4 con, tháng 2 con là đương nhiên. Số lượng hợp đồng trong tháng, số lượng chứng từ trong tháng, số lượng khách hàng trong tháng hoàn toàn có thể ước lượng mức tối đa. Công ty xây dựng, công ty dịch vụ, cửa hàng, siêu thị, ... mỗi hình thức kinh doanh đều có con số tối đa riêng của nó. Người đang đi làm phài biết con số tối đa của công ty mình.Nhưng lỡ có phát sinh thư mục hoặc file dài 6, 7 số thì lại dính nữa bác ạ, món sort em dính rồi nên cay cú lắm.
Nếu người dùng chịu khó tìm tòi và hiểu code đang làm gì thì mọi việc quá đơn giản, vì mọi thứ đã phơi bày hết qua hàm format.Tất cả đều lên 7 con ở bài 9 chỉ là biện pháp tạm thời, phải hỏi mới biết. Nếu tự biết khỏi hỏi thì tốt hơn.
Bình thường thôi bác. Vì số ở cuối nó chạy liên tục qua các tháng luôn chứ không quay về 1. Số 70 nằm trong tháng 2, qua số 71 nó thuộc tháng 3.Trình bày đề bài kiểu này thì đợi 2 mùa quýt chín nữa.
Là tôi đang nói tác giả bài 1 và người đang "cay cú", còn bé bo là đã "dùng biện pháp tạm thời". Biện pháp tạm thời thì 10 con, 50 con cũng không hề gì.Nếu người dùng chịu khó tìm tòi và hiểu code đang làm gì thì mọi việc quá đơn giản, vì mọi thứ đã phơi bày hết qua hàm format.
Nếu không dùng đến 7 số thì người dùng có thể điều chỉnh xuống 6 hay 5 tùy ý.
Số không quay về 1 thì cũng có giới hạn (cho 1 năm, 10 năm chẳng hạn). Sau đó là phá sản vì nhân viênBình thường thôi bác. Vì số ở cuối nó chạy liên tục qua các tháng luôn chứ không quay về 1. Số 70 nằm trong tháng 2, qua số 71 nó thuộc tháng 3.
Dù sao, chờ ý kiến thớt mới biết kết quả tại bài #9 thế nào
Số các chữ số trong giới hạn của VBAEm có file Excel như file đính kèm. Em muốn sắp xếp nó \000.12.09.H32.2021.02.70.pdf rồi lên \000.12.09.H32.2021.03.71.pdf chứ hiện tại đang sắp xếp ngược ạ. Bác nào giúp em với ạ. Em cám ơn .. Chạy cho toàn bộ cột 26 ạ.
Option Explicit
Sub SortStringNum()
Dim oList As Object, arr(), S(), aLenNum(), aSort, res()
Dim sRow&, sC&, i&, j&, t&, k&
Set oList = CreateObject("System.Collections.ArrayList")
With Sheets("Excel_2021")
arr = Range("AB2", Range("AB1000000").End(xlUp)).Value
End With
sRow = UBound(arr)
ReDim res(1 To sRow, 1 To 1)
sC = UBound(Split(Replace(arr(1, 1), ".", "\"), "\"))
ReDim aLenNum(0 To sC)
ReDim aSort(1 To sRow)
For i = 1 To sRow
aSort(i) = Split(Replace(arr(i, 1), ".", "\"), "\")
For j = 0 To sC
If IsNumeric(aSort(i)(j)) Then
t = Len(aSort(i)(j))
If aLenNum(j) < t Then aLenNum(j) = t
End If
Next j
Next i
For j = 0 To sC
If aLenNum(j) <> Empty Then aLenNum(j) = String(aLenNum(j), "0")
Next j
For i = 1 To sRow
ReDim S(0 To sC)
For j = 0 To sC
If IsNumeric(aSort(i)(j)) Then
S(j) = Format(CLng(aSort(i)(j)), aLenNum(j))
Else
S(j) = aSort(i)(j)
End If
Next j
oList.Add Join(S, "/")
Next i
aSort = SortRow(oList)
For i = 0 To UBound(aSort)
k = k + 1
res(k, 1) = arr(aSort(i), 1)
Next i
Sheets("Excel_2021").Range("AC2").Resize(sRow) = res
Set oList = Nothing
End Sub
Private Function SortRow(ByVal tList As Object, Optional ByVal bASC As Boolean = True) As Variant
Dim arr(), sR&, i&, k&, r&, tmp, oList As Object
On Error Resume Next
sR = tList.Count - 1
ReDim arr(0 To sR)
Set oList = tList.Clone
tList.Sort
If bASC = False Then tList.Reverse
For i = 0 To sR
tmp = tList.Item(i)
r = oList.IndexOf(tmp, 0)
If tmp = tList.Item(i + 1) Then oList.Item(r) = Empty
arr(k) = r + 1
k = k + 1
Next i
SortRow = arr
Set oList = Nothing
End Function