Hoàng Nhật Phương
Thành viên gắn bó



- Tham gia
- 5/11/15
- Bài viết
- 1,894
- Được thích
- 1,218






Làm được nhưng rườm rà chút nhé.
điều kiện là các mã ở bảng 1 không được trùng nhau,



Mỗi lần làm cái gì liên quan tới CF là tui lại hông xem được thứ gì trong đó. Save as thành *.xls cho tui học với. Huhu.tôi chỉ làm ra được như bảng 2 thôi , muốn làm ra bảng 3 thì phải đi kiếm mấy bạn giỏi VBA
khi nào có nhiều người khiếu nại không xem được thì mới phải up file khác , 1 mình bạn thì ráng chịu , lêu lêuMỗi lần làm cái gì liên quan tới CF là tui lại hông xem được thứ gì trong đó. Save as thành *.xls cho tui học với. Huhu.
thôi tha em đi ông trùm , đừng để GiangLeLoi nhìn thấy , hi hiCho dù có save thành .xls bạn cũng xem hok có được đâu (bởi vì lý do gì thì bạn đã từng biết mà...).haha...Thế có muốn xem công thức "Khủng" của cha "Chim Hồng" dùng trong ấy hok zậy???



Xem được mà cha nội. Đợt trước ông save as thành *xls thì xem được. Đương nhiên là muốn soi thánh soi thật kỹ chứ.Cho dù có save thành .xls bạn cũng xem hok có được đâu (bởi vì lý do gì thì bạn đã từng biết mà...).haha...Thế có muốn xem công thức "Khủng" của cha "Chim Hồng" dùng trong ấy hok zậy???



Vậy đưa công thức của cha "Chim Hồng" lên nha. Còn việc bỏ vô cho nó tô tô vẽ vẽ thì bạn tự xứ nhá...Biếng up file lên lắm
P/s: Xin phép chú "Chim Hồng" cho mình được chia sẽ công thức khủng của bạn cho bạn giangleloi soi xét nhé!
Mã:=IF($E6<>"", SUM(MMULT(--(1*TRANSPOSE(MID(SUBSTITUTE($E6,"&",REPT(" ",99)), (ROW(OFFSET($A$1,,,LEN($E6)-LEN(SUBSTITUTE($E6,"&",""))+1))-1)*99+1,99))=Sheet1!$B$4:$B$1000),SIGN(ROW(OFFSET($A$1,,,LEN($E6)-LEN(SUBSTITUTE($E6,"&",""))+1)))))<LEN($E6)-LEN(SUBSTITUTE($E6,"&",""))+1)



Nói chung vô topic này cũng chém gió nhiều quá, nhậu về buồn ngủ viết cho bạn mấy dòng cho tỉnhMong chờ còn có thêm giải pháp cho bảng 3 nữa
Sub ToMau()
Dim Arr(), I, J, Tem, lr
With Sheet2
.[G6:G10000].Font.Color = vbBlack
lr = Sheet1.Range("B" & Rows.Count).End(3).Row
Arr = Range(.[G6], .[G65000].End(3)).Value
For I = 1 To UBound(Arr)
Tem = Split(Arr(I, 1), " & ")
For J = 0 To UBound(Tem)
If Application.WorksheetFunction.CountIf(Sheet1.Range("B4:B" & lr), Tem(J)) = 0 Then
.Range("G" & I + 5).Characters(InStr(Arr(I, 1), Tem(J)), Len(Tem(J))).Font.Color = vbRed
End If
Next
Next
End With
End Sub



Nói chung vô topic này cũng chém gió nhiều quá, nhậu về buồn ngủ viết cho bạn mấy dòng cho tỉnhBạn biết Macro chắc cũng biết xài)
P/s: Bạn chạy thử, sai cứ la lên vì tui cũng chưa có test.Mã:Sub ToMau() Dim Arr(), I, J, Tem, lr With Sheet2 .[G6:G10000].Font.Color = vbBlack lr = Sheet1.Range("B" & Rows.Count).End(3).Row Arr = Range(.[G6], .[G65000].End(3)).Value For I = 1 To UBound(Arr) Tem = Split(Arr(I, 1), " & ") For J = 0 To UBound(Tem) If Application.WorksheetFunction.CountIf(Sheet1.Range("B4:B" & lr), Tem(J)) = 0 Then .Range("G" & I + 5).Characters(InStr(Arr(I, 1), Tem(J)), Len(Tem(J))).Font.Color = vbRed End If Next Next End With End Sub
Tôi đã test kết quả rất OK bạn ah xin cảm ơn bạn nhiều,đúng là một siêu cao thủ.
Tuy nhiên tôi cũng không hiểu gì về code nên trong điều kiện nào nó không được như ý tôi cũng không thể biết được.
Nếu bạn hoặc ai đó hiểu biết về đoạn mã trên nếu không phiền mong được giải thích để tôi hiểu được phần nào thì tốt biết bao.
Thanks you very much!



Cũng đâu có gì đâu bạn. Nguyên một dãy số bên cột B (từ B4 trở xuống) sheet1 là gốc. Sau khi tách từng dòng ở sheet2 theo dấu "&", nếu số nào không có trong cột B sheet1 thì sẽ tô màu.Tôi đã test kết quả rất OK bạn ah xin cảm ơn bạn nhiều,đúng là một siêu cao thủ.
Tuy nhiên tôi cũng không hiểu gì về code nên trong điều kiện nào nó không được như ý tôi cũng không thể biết được.
Nếu bạn hoặc ai đó hiểu biết về đoạn mã trên nếu không phiền mong được giải thích để tôi hiểu được phần nào thì tốt biết bao.
Thanks you very much!



Nói chung vô topic này cũng chém gió nhiều quá, nhậu về buồn ngủ viết cho bạn mấy dòng cho tỉnhBạn biết Macro chắc cũng biết xài)
P/s: Bạn chạy thử, sai cứ la lên vì tui cũng chưa có test.Mã:Sub ToMau() Dim Arr(), I, J, Tem, lr With Sheet2 .[G6:G10000].Font.Color = vbBlack lr = Sheet1.Range("B" & Rows.Count).End(3).Row Arr = Range(.[G6], .[G65000].End(3)).Value For I = 1 To UBound(Arr) Tem = Split(Arr(I, 1), " & ") For J = 0 To UBound(Tem) If Application.WorksheetFunction.CountIf(Sheet1.Range("B4:B" & lr), Tem(J)) = 0 Then .Range("G" & I + 5).Characters(InStr(Arr(I, 1), Tem(J)), Len(Tem(J))).Font.Color = vbRed End If Next Next End With End Sub



Ờ ha. Nhắc mới nhớ, sao chưa thấy anh ấy giải thích nhỉ, nhìn công thức mà hông hiểu gì ráo. Nếu hông phiền xin nhờ tác giả "Chim hồng" hay "ông trùm" giải thích công thức #11 giúp với.P/s: còn anh "Chinh Hồng" sao không trả lời #12 cho bạn í đi...Chạy đâu cho thoát...
[/COLOR]
bạn phải biết là khi ngồi lên con Cam Rỳ thì sao còn muốn cưỡi Giấc mơ Trung Hoa nữa ? đã có siêu cao thủ làm ra được bảng 3 rồi thì tôi biết thân biết phận xếp xó ngồi im thôi chứ trả lời gì nữaXác nhận lại ý trên: Chính xác là phải liên lạc lại với anh ấy...nhé!
P/s: còn anh "Chinh Hồng" sao không trả lời #12 cho bạn í đi...Chạy đâu cho thoát...
[/COLOR]



bạn phải biết là khi ngồi lên con Cam Rỳ thì sao còn muốn cưỡi Giấc mơ Trung Hoa nữa ? đã có siêu cao thủ làm ra được bảng 3 rồi thì tôi biết thân biết phận xếp xó ngồi im thôi chứ trả lời gì nữa



Nhiều sheet thì cần chỉnh lại code. Nhưng mà có điều sao bạn không nói từ đầu, với lại có cấu trúc như sheet2, tức là bảng 3 cũng nằm y chang như vậy hả. (Nếu khác thì gửi lại file 1 lần nữa, code luôn 1 lần, chứ ngại viết nữa rồi sửa nữa lắm.)Xin hỏi nếu file của tôi có nhiều sheets
ví dụ: sheet2,sheet3,sheet4,sheet5 đều có cấu trúc giống như sheet2 và chỉ có duy nhất sheet1 chứa list mã số
thì code trên áp dụng để kiểm tra cho cá sheet từ 2->5 sẽ phải viết như thế nào ạ, hay mỗi sheets tôi phải sử dụng 1 code đó.
Rất mong được bạn và mọi người hỗ trợ thêm.
Thanks you very much,
"Chàng" đừng có nói thế. "Chàng" mà viết code thì cái code trên của "thiếp" bỏ sọt sớm thôi.bạn phải biết là khi ngồi lên con Cam Rỳ thì sao còn muốn cưỡi Giấc mơ Trung Hoa nữa ? đã có siêu cao thủ làm ra được bảng 3 rồi thì tôi biết thân biết phận xếp xó ngồi im thôi chứ trả lời gì nữa



Nhiều sheet thì cần chỉnh lại code. Nhưng mà có điều sao bạn không nói từ đầu, với lại có cấu trúc như sheet2, tức là bảng 3 cũng nằm y chang như vậy hả. (Nếu khác thì gửi lại file 1 lần nữa, code luôn 1 lần, chứ ngại viết nữa rồi sửa nữa lắm.)



Thế bạn thử lại với cái này xem sao:Đúng vậy bạn ah, từ sheet2 đến 5 về định dạng cấu trúc gống hệt nhau chỉ khác tên sheet thôi.
Tôi cũng không ngờ đến vấn đề này,khi muốn áp dụng thì mới thấy có điều cần thắc mắc, rất mong bạn thông cảm và giúp đỡ.
Sub ToMau()
Dim Arr(), Ws, I, J, Tem, lr
For Each Ws In ThisWorkbook.Worksheets
If Ws.Name <> "Sheet1" Then
With Ws
.[G6:G10000].Font.Color = vbBlack
lr = Sheet1.Range("B" & Rows.Count).End(3).Row
Arr = .Range(.[G6], .[G65000].End(3)).Value
For I = 1 To UBound(Arr)
Tem = Split(Arr(I, 1), " & ")
For J = 0 To UBound(Tem)
If Application.WorksheetFunction.CountIf(Sheet1.Range("B4:B" & lr), Tem(J)) = 0 Then
.Range("G" & I + 5).Characters(InStr(Arr(I, 1), Tem(J)), Len(Tem(J))).Font.Color = vbRed
End If
Next
Next
End With
End If
Next Ws
End Sub
Thế bạn thử lại với cái này xem sao:
P/s: Trường hợp nếu cột G có 1 dòng dữ liệu là sẽ bị lỗi đấy nha.Mã:Sub ToMau() Dim Arr(), Ws, I, J, Tem, lr For Each Ws In ThisWorkbook.Worksheets If Ws.Name <> "Sheet1" Then With Ws .[G6:G10000].Font.Color = vbBlack lr = Sheet1.Range("B" & Rows.Count).End(3).Row Arr = .Range(.[G6], .[G65000].End(3)).Value For I = 1 To UBound(Arr) Tem = Split(Arr(I, 1), " & ") For J = 0 To UBound(Tem) If Application.WorksheetFunction.CountIf(Sheet1.Range("B4:B" & lr), Tem(J)) = 0 Then .Range("G" & I + 5).Characters(InStr(Arr(I, 1), Tem(J)), Len(Tem(J))).Font.Color = vbRed End If Next Next End With End If Next Ws End Sub



Quả thực là rất nhanh ,, xin cảm ơn bạn rất nhiều.Thế bạn thử lại với cái này xem sao:
P/s: Trường hợp nếu cột G có 1 dòng dữ liệu là sẽ bị lỗi đấy nha.Mã:Sub ToMau() Dim Arr(), Ws, I, J, Tem, lr For Each Ws In ThisWorkbook.Worksheets If Ws.Name <> "Sheet1" Then With Ws .[G6:G10000].Font.Color = vbBlack lr = Sheet1.Range("B" & Rows.Count).End(3).Row Arr = .Range(.[G6], .[G65000].End(3)).Value For I = 1 To UBound(Arr) Tem = Split(Arr(I, 1), " & ") For J = 0 To UBound(Tem) If Application.WorksheetFunction.CountIf(Sheet1.Range("B4:B" & lr), Tem(J)) = 0 Then .Range("G" & I + [COLOR=#ff0000][B]5[/B][/COLOR]).Characters(InStr(Arr(I, 1), Tem(J)), Len(Tem(J))).Font.Color = vbRed End If Next Next End With End If Next Ws End Sub



Cứ nói quá hông à. Sợ "chàng" soi nên nói trước ấy chứ, sợ lắm 2 từ "trách nhiệm".cột G có 1 dòng dữ liệu hay 0 dòng là quyền của người dùng , tại sao siêu cao thủ nỡ đẫy trách nhiệm qua cho họ vẩy ?



Thử thêm cái mớ hỗn độn này vậy:Quả thực là rất nhanh ,, xin cảm ơn bạn rất nhiều.
Vậy trường hợp lỗi như bạn cảnh báo chẳng lẽ không có giải pháp nào khắc phục sao?
Sub ToMau()
Dim Arr(), Ws, I, J, Tem, lr, lrs
For Each Ws In ThisWorkbook.Worksheets
If Ws.Name <> "Sheet1" Then
With Ws
.[G6:G10000].Font.Color = vbBlack
lr = Sheet1.Range("B" & Rows.Count).End(3).Row
lrs = .Range("G" & Rows.Count).End(3).Row
If lrs = 6 Then
Arr = .[G6:G7].Value
Else
Arr = .Range(.[G6], .[G65000].End(3)).Value
End If
For I = 1 To UBound(Arr)
If Arr(I, 1) <> Empty Then
Tem = Split(Arr(I, 1), " & ")
For J = 0 To UBound(Tem)
If Application.WorksheetFunction.CountIf(Sheet1.Range("B4:B" & lr), Tem(J)) = 0 Then
.Range("G" & I + 5).Characters(InStr(Arr(I, 1), Tem(J)), Len(Tem(J))).Font.Color = vbRed
End If
Next
End If
Next
End With
End If
Next Ws
End Sub
Vì khi chạy code I bắt đầu bằng 1, mà cột G của bạn bắt đầu từ dòng 6 nên + thêm 5.Xin hỏi bạn số 5 trong đoạn code có nghĩa là vậy ạ?
Lâu lâu hứng lên viết mà mấy anh cứ bắt bí tui quá. Mốt tui nhậu say là về ngủ luôn.Ơ nói vậy là không giải quyết ah...tính cho qua ah???. Giải quyết triệt để cái vụ "Chim Hồng" đã gợi ý ở trên đi chứ.... "Chủ trương là phải Triệt Để" nhé!![]()



Thử thêm cái mớ hỗn độn này vậy:
Mã:Sub ToMau() Dim Arr(), Ws, I, J, Tem, lr, lrs For Each Ws In ThisWorkbook.Worksheets If Ws.Name <> "Sheet1" Then With Ws .[G6:G10000].Font.Color = vbBlack lr = Sheet1.Range("B" & Rows.Count).End(3).Row lrs = .Range("G" & Rows.Count).End(3).Row If lrs = 6 Then Arr = .[G6:G7].Value Else Arr = .Range(.[G6], .[G65000].End(3)).Value End If For I = 1 To UBound(Arr) If Arr(I, 1) <> Empty Then Tem = Split(Arr(I, 1), " & ") For J = 0 To UBound(Tem) If Application.WorksheetFunction.CountIf(Sheet1.Range("B4:B" & lr), Tem(J)) = 0 Then .Range("G" & I + 5).Characters(InStr(Arr(I, 1), Tem(J)), Len(Tem(J))).Font.Color = vbRed End If Next End If Next End With End If Next Ws End Sub
Vì khi chạy code I bắt đầu bằng 1, mà cột G của bạn bắt đầu từ dòng 6 nên + thêm 5.
Lâu lâu hứng lên viết mà mấy anh cứ bắt bí tui quá. Mốt tui nhậu say là về ngủ luôn.



Gọn hơn nhưng hiệu quả thì phải coi lại nha "cưng". Vụ này hồi nhớ có chọc ông 1 lần rồi. Bữa nay mình lại bị phá lại. >"<Ý ảnh mới thêm cái đoạn đỏ đỏ kìa
Vầy nó gọn hơn í...
Mã:Arr = .Range(.[G6], .[G65000].End(3)).resize(1).Value

Gọn hơn nhưng hiệu quả thì phải coi lại nha "cưng". Vụ này hồi nhớ có chọc ông 1 lần rồi. Bữa nay mình lại bị phá lại. >"<
P/s: Cơ mà hãy thử cái dòng đó vô code trên xem.![]()
cái trường đó thiệt là vô trách nhiệm với xã hội quá đi àÝ ảnh mới thêm cái đoạn đỏ đỏ kìa
Vầy nó gọn hơn í...
Mã:Arr = .Range(.[G6], .[G65000].End(3)).resize(1).Value



Tui và ảnh ấy chung trường, chung thầy cô dạy, cho nên không thể nào đổ lỗi do nhà trường hay thầy cô đượcbạn phải hỏi trường mẫu giáo nào cấp bằng cho học viên viết đoạn này
cái trường đó thiệt là vô trách nhiệm với xã hội quá đi à









Cụ thể là bạn muốn 1 code mới để riêng cho trường hợp này? Code đó tô 1 lúc 2 bảng luôn. Hay bảng 1 là bạn để làm công thức?Xin cảm ơn sự hỗ trợ của các bạn rất nhiều.
Hiện giờ vẫn kiểu dữ liệu như cũ nhưng tôi muốn thiết lập thêm một kiểu khác nữa cụ thể đã nêu trong file kèm.
Rất mong lại nhận được thêm nhiều sự hỗ trợ nữa từ của các bạn.
Thanks you very much.



Đúng vậy bạn ah đây là một bài toán mới.Cụ thể là bạn muốn 1 code mới để riêng cho trường hợp này? Code đó tô 1 lúc 2 bảng luôn. Hay bảng 1 là bạn để làm công thức?
Đúng vậy bạn ah đây là một bài toán mới.
Cũng như bài trước dùng công thức cũng được dùng code cũng được.
Mỗi bảng là 1 trường hợp riêng bạn nhé.
Rất mong bạn và mọi người giúp đỡ.
Thanks you very much.
=IF(ISNUMBER(FIND("&",$E6)), SUMPRODUCT(--(1* MID(SUBSTITUTE($E6,"&",REPT(" ",99)),(ROW(OFFSET($A$1,,,LEN($E6)-LEN(SUBSTITUTE($E6,"&",""))))-1)*99+1,99) < 1* MID(SUBSTITUTE($E6,"&",REPT(" ",99)),(ROW(OFFSET($A$1,,,LEN($E6)-LEN(SUBSTITUTE($E6,"&","")))))*99,99)))<LEN($E6)-LEN(SUBSTITUTE($E6,"&","")))



Xin cảm ơn bạn đã giúp đỡ tôitôi ngó bộ các thanh niên hôm nay có vẻ sẽ nghiêm túc lắm đây . hí hí =))
tôi có viết công thức nhưng thật tiếc excel nó không cho copy vào ô CF , lý do tại sao thì phải nhờ cộng đồng giải thích hộ rồi
Mã:=IF(ISNUMBER(FIND("&",$E6)), SUMPRODUCT(--(1* MID(SUBSTITUTE($E6,"&",REPT(" ",99)),(ROW(OFFSET($A$1,,,LEN($E6)-LEN(SUBSTITUTE($E6,"&",""))))-1)*99+1,99) < 1* MID(SUBSTITUTE($E6,"&",REPT(" ",99)),(ROW(OFFSET($A$1,,,LEN($E6)-LEN(SUBSTITUTE($E6,"&","")))))*99,99)))<LEN($E6)-LEN(SUBSTITUTE($E6,"&","")))
còn nếu xài code thì phải đi kiếm các siêu cao thủ thôi
nó không cho đi cửa trước thì chui cửa sau , chép công thức vào cột kế bên , trong ô CF gọi đến ô đóXin cảm ơn bạn đã giúp đỡ tôi
Tôi đã chuyển file sang *xlsb mà cũng không copy vào được.
Giới hạn của file Excel 2003 là 255 ký tự, Excel 2007 là 8192.Theo suy đoán chủ quan của tôi thì cái ô CF trong excel nó giới hạn về độ dài (ký tự) trong công thức. Nhưng không rõ là nó giới bạn bao nhiêu... Cho nên nếu công thức quá dài thì không có cách nào mà ép nó vào được...![]()
Được chứ sao lại không. Tuy nhiên, sau khi save as bạn phải đóng và mở lại file thì mới được. Bạn xem file đính kèm.Xin cảm ơn bạn đã giúp đỡ tôi
Tôi đã chuyển file sang *xlsb mà cũng không copy vào được.
Sau khi đánh dấu bằng màu bạn sẽ làm gì tiếp theo? Nếu bạn đánh dấu để sửa lại cho đúng chuẩn thì sao không nhờ mọi người giúp chuyển dữ liệu về đúng chuẩn luôn mà phải đi đường vòng???Xin cảm ơn sự hỗ trợ của các bạn rất nhiều.
Hiện giờ vẫn kiểu dữ liệu như cũ nhưng tôi muốn thiết lập thêm một kiểu khác nữa cụ thể đã nêu trong file kèm.
Rất mong lại nhận được thêm nhiều sự hỗ trợ nữa từ của các bạn.
Thanks you very much.



Giới hạn của file Excel 2003 là 255 ký tự, Excel 2007 là 8192.
Công thức dài cũng có cách chứ không phải không. Cắt ra thành nhiều đoạn cho vào name là được.
Được chứ sao lại không. Tuy nhiên, sau khi save as bạn phải đóng và mở lại file thì mới được. Bạn xem file đính kèm.
Sau khi đánh dấu bằng màu bạn sẽ làm gì tiếp theo? Nếu bạn đánh dấu để sửa lại cho đúng chuẩn thì sao không nhờ mọi người giúp chuyển dữ liệu về đúng chuẩn luôn mà phải đi đường vòng???



Chỉnh lại để bạn xài theo kiểu mới:Xin cảm ơn sự hỗ trợ của các bạn rất nhiều.
Hiện giờ vẫn kiểu dữ liệu như cũ nhưng tôi muốn thiết lập thêm một kiểu khác nữa cụ thể đã nêu trong file kèm.
Rất mong lại nhận được thêm nhiều sự hỗ trợ nữa từ của các bạn.
Thanks you very much.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 7 Then
Dim Arr(), I, J, Tem, lr, Num
With Sheet1
.[G6:G10000].Font.Color = vbBlack
lr = .Range("G" & Rows.Count).End(3).Row
If lr = 6 Then
Arr = .[G6:G7].Value
Else
Arr = .Range(.[G6], .[G65000].End(3)).Value
End If
For I = 1 To UBound(Arr)
Num = 0
If Arr(I, 1) <> Empty Then
Tem = Split(Arr(I, 1), " & ")
End If
For J = 1 To UBound(Tem)
If Val(Tem(J)) < Val(Tem(J - 1)) Then
Num = Num + Len(Tem(J - 1)) + 3 * J
.Range("G" & I + 5).Characters(InStr(Num, Arr(I, 1), Tem(J)), Len(Tem(J))).Font.Color = vbRed
End If
Next
Next
End With
End If
End Sub



Tặng bạn UDF này. Có thể sắp xếp chuỗi/số, tăng/giảmĐúng đúng quả là một ý tưởng tốt thật sự tôi không nghĩ là có thể làm được như vậy như bạn đã nêu tôi chỉ đánh dầu để sửa lại thôi
Nếu có thể mong bạn và mọi người tiếp tục hỗ trợ thêm ạ.
Xin cảm ơn bạn rất nhiều.
Function SortText(ByVal Text As String, Optional ByVal Delimiter As String, Optional ByVal ZtoA As Boolean = False, Optional ByVal IsNum As Boolean = False) As String
Dim Arr As Variant, Arr1 As Variant, i As Long
Arr = Split(Text, Delimiter)
If IsNum Then
ReDim Arr1(LBound(Arr, 1) To UBound(Arr, 1))
For i = LBound(Arr, 1) To UBound(Arr, 1)
Arr1(i) = Val(Arr(i))
Next
Else
Arr1 = Arr
End If
SortArr Arr1, ZtoA
SortText = Join(Arr1, Delimiter)
End Function
Private Sub SortArr(ByRef Arr1, ByVal ZtoA)
Dim i As Long, j As Long, TmpVal
For i = LBound(Arr1, 1) To UBound(Arr1, 1) - 1
For j = i + 1 To UBound(Arr1, 1)
If (Arr1(i) < Arr1(j)) = ZtoA Then
TmpVal = Arr1(i): Arr1(i) = Arr1(j): Arr1(j) = TmpVal
End If
Next
Next
End Sub



Tặng bạn UDF này. Có thể sắp xếp chuỗi/số, tăng/giảm
PHP:Function SortText(ByVal Text As String, Optional ByVal Delimiter As String, Optional ByVal ZtoA As Boolean = False, Optional ByVal IsNum As Boolean = False) As String Dim Arr As Variant, Arr1 As Variant, i As Long Arr = Split(Text, Delimiter) If IsNum Then ReDim Arr1(LBound(Arr, 1) To UBound(Arr, 1)) For i = LBound(Arr, 1) To UBound(Arr, 1) Arr1(i) = Val(Arr(i)) Next Else Arr1 = Arr End If SortArr Arr1, ZtoA SortText = Join(Arr1, Delimiter) End FunctionPHP:Private Sub SortArr(ByRef Arr1, ByVal ZtoA) Dim i As Long, j As Long, TmpVal For i = LBound(Arr1, 1) To UBound(Arr1, 1) - 1 For j = i + 1 To UBound(Arr1, 1) If (Arr1(i) < Arr1(j)) = ZtoA Then TmpVal = Arr1(i): Arr1(i) = Arr1(j): Arr1(j) = TmpVal End If Next Next End Sub
Bạn lấy lại code trên Paste vô sheet2 rồi thử nhập dữ liệu xem nhé. Nếu sai la lên chỉnh lại còn hông thì tui dừng tại đây. Chúc thành công.
Thân chào.