Sắp xếp trong Excel
Em có file Excel như file đính kèm. Em muốn sắp xếp nó 00.12.09.H32.2021.02.70.pdf rồi lên 00.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 ạ.
Dùng cột phụ tách cái số ở cuối rồi sort theo cột phụ coi
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 ạ 🙁
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 nhau
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.
Dòng 351:
G:BHTN_KhanhHoa202110 00.12.09.H32.2021.10.433.pdf
Dòng 352
G:BHTN_KhanhHoa2021100 00.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_KhanhHoa2021 0010 00.12.09.H32.2021.00010.00433.pdf
G:BHTN_KhanhHoa2021 0100 00.12.09.H32.2021.00100.04156.pdf
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.
Cho nó format 7 số luôn cho hoành tráng
Quy tắc:
1- Tất cả các thành phần có giá trị số tại cột AB sẽ được format thành 7 số tại cột AC
VD: AB2:
G:BHTN_KhanhHoa2021 1 00.12.09.H32.2021.01.01.pdf
AC2 sẽ là:
G:BHTN_KhanhHoa 002021 000001 000000 000012 000009H32 002021 000001 000001pdf
2- Mượn cột AC để dán kết quả tạm thời, sau đó sort cả bảng theo cột này, sau đó delete nó đi không còn dấu vết
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
www.giaiphapexcel.com/diendan/threads/s%E1%BA%AFp-x%E1%BA%BFp-trong-excel.163697/
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.
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.
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.
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 ý.
Thớt lặn mất tăm rồi.
Theo bài #1 thì thớt chỉ cần xếp cái tên tập tin thôi, còn khúc trước là cây thư mục thì mặc kệ nó.
1103
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.
Dù sao, chờ ý kiến thớt mới biết kết quả tại bài #9 thế nào
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ì.
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ên
Số các chữ số trong giới hạn của VBA
Chỉ sort 1 cột và gán tạm kết quả vào cột kế
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
www.giaiphapexcel.com/diendan/threads/s%E1%BA%AFp-x%E1%BA%BFp-trong-excel.163697/post-1092107
Học Nhân sự Tổng hợp – Trở thành chiến binh nhân sự vững nghiệp vụ
Con người là một trong những yếu tố quan trọng của công ty, là tài sản quý giá của doanh nghiệp. Chính vì thế,...
Xem khóa học