Tách họ tên và sắp xếp họ tên (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

khaothibaclieu

Thành viên hoạt động
Tham gia
10/4/08
Bài viết
113
Được thích
14
Đề tài này đã được thảo luận rất nhiều, cụ thể ở 2 địa chỉ rất hay dựa theo bài của bác Phạm Duy Long và các bạn khác:
- Tách họ tên:
http://www.giaiphapexcel.com/forum/showthread.php?t=2367

- Sắp xếp họ tên abc:
http://www.giaiphapexcel.com/forum/showthread.php?p=89923#post89923 (Bài của bác Phạm Duy Long cải tiến từ bài của bạn Voda).

Ý mình muốn mọi người giúp cải tiến bằng cách ghép cả 2 sub này với nhau để khi chỉ cần thực hiện một nút lệnh (command button) thì có 1 sub vừa tách họ tên vừa sắp xếp lại dữ liệu luôn theo hướng: Tên --> Lót --> Họ.
Đồng thời, mình cũng muốn giữ lại một tính năng rất hay ở sub của bác Long là ngoài chuyện sắp xếp họ tên còn cho phép sắp xếp thêm các cột khác nữa (Ví dụ mình muốn sắp xếp cột "Trường", "Môn thi" rồi mới sắp xếp "Họ --> Lót --> Tên").
Lưu ý: Mình không muốn cột họ tên phải tách thành 2 hay 3 cột (nghĩa là trong quá trình thực hiện, cột họ tên có thể tạm tách thành 2, 3 cột nhưng khi hoàn chỉnh thì phải ghép lại 1 cột để giữ nguyên định dạng, trang trí của bảng.
Mời xem file kèm theo
 

File đính kèm

Không biết có khó quá không mà sao chưa thấy ai giúp đỡ (hu hu).
Mình đưa ra giải pháp như sau các bạn thấy được không, cho ý kiến nhé:
Mình có thể tách cột họ, tên, lót vào 3 cột mà mình sẽ giấu đi (ví dụ cột AA, AB, AC). Sau đó mình sẽ sắp xếp.
Mong các bạn nghiên cứu.
 
Tập tin TVEXCEL.xla có các công cụ:
1. Chuyển mã VNI, TCVN3-ABC, Unicode: chuyển qua lại giữa 3 bảng mã VNI-Windows, ABC TCVN3, Unicode (nên sử dụng bên TVEXCEL01).
2. Sắp sếp (Sort): sắp xếp họ tên tiếng Việt (không cần tách họ tên ra 2 cột).
3. Chuyển câu (Change Case): chuyển qua lại giữa CHỮ HOA, chữ thường và Chữ Hoa Đầu Từ.
4. Đọc số tiếng Việt: chuyển từ số sang cách đọc tiếng Việt (nên sử dụng bên TVEXCEL01)
5. Tách ghép Họ Tên: tách họ tên 1 cột ra 2 cột, ghép họ tên 2 cột thành 1 cột.

Mục 2 và 5 đáp ứng được yêu cầu của bạn. Tải TVEXCEL tại http://www.giaiphapexcel.com/forum/showpost.php?p=17722&postcount=1
 
Tôi có tìm được file này cài vào tách gộp họ tên rất nhanh may ra có thể giúp gì cho bác không
 

File đính kèm

Tập tin TVEXCEL.xla có các công cụ:
1. Chuyển mã VNI, TCVN3-ABC, Unicode: chuyển qua lại giữa 3 bảng mã VNI-Windows, ABC TCVN3, Unicode (nên sử dụng bên TVEXCEL01).
2. Sắp sếp (Sort): sắp xếp họ tên tiếng Việt (không cần tách họ tên ra 2 cột).
3. Chuyển câu (Change Case): chuyển qua lại giữa CHỮ HOA, chữ thường và Chữ Hoa Đầu Từ.
4. Đọc số tiếng Việt: chuyển từ số sang cách đọc tiếng Việt (nên sử dụng bên TVEXCEL01)
5. Tách ghép Họ Tên: tách họ tên 1 cột ra 2 cột, ghép họ tên 2 cột thành 1 cột.

Mục 2 và 5 đáp ứng được yêu cầu của bạn. Tải TVEXCEL tại http://www.giaiphapexcel.com/forum/showpost.php?p=17722&postcount=1

Cám ơn bác Long. Em đã tải về nghiên cứu rồi nhưng em không thích sử dụng add-in mà chỉ thích dùng command button thôi. Để em nhúng vào chương trình của em í mà.
 
Cám ơn bác Long. Em đã tải về nghiên cứu rồi nhưng em không thích sử dụng add-in mà chỉ thích dùng command button thôi. Để em nhúng vào chương trình của em í mà.
Có phải bạn muốn nhấn 1 nút thì tự sort theo trường, lớp, họ tên (ăn dày). Tôi dùng code của Thầy Long sửa cách gán thêm VungChon thay vì select và sửa cột sort thay vì nhập là OK. Bạn có thể tùy biến trong câu code CotNhap = "G,H,B".
 

File đính kèm

Có phải bạn muốn nhấn 1 nút thì tự sort theo trường, lớp, họ tên (ăn dày). Tôi dùng code của Thầy Long sửa cách gán thêm VungChon thay vì select và sửa cột sort thay vì nhập là OK. Bạn có thể tùy biến trong câu code CotNhap = "G,H,B".

Cám ơn rất nhiều. Nhưng có vấn đề như thế này:
Mình muốn vùng chọn bắt đầu từ ô B9 và kết thúc ở ô P200. có phải mình sẽ sửa code thành như thế này:
Sub SortABC()
Dim VungChon As Range, a, b
Dim ri As Long, rd As Long, rc As Long, ci As Byte, cd As Byte, cc As Byte
Dim vt1 As Byte, vt2 As Byte
Dim CotNhap As String, TenCot As String, Cot3 As String, BangMa As String, FontName As String
'On Error GoTo baoloi
rc = [a65000].End(xlUp).Row
cc = [IV4].End(xlToLeft).Column
Set VungChon = Range(Cells(
9, 2), Cells(rc, cc))
'Set VungChon = [
B9:P200]'Selection
VungChon.Select
rd = VungChon.Row
rc = rd + VungChon.Rows.Count - 1
cd = VungChon.Column
cc = cd + VungChon.Columns.Count - 1


Mình chưa hiểu lắm về Cot3cc = [IV4].End(xlToLeft). Tại sao đặt là Cot3IV4?
Mong bạn giải thích. Cám ơn.

Nói thêm: Khi mình điều chỉnh như trên thì bị báo lỗi:
Runtime Error '13'
Type mismatch
Debug thì thấy tô vàng ở dòng chữ:
MsgBox "Vung sap xep co 1 dong. Khong sap xep !", "Thong bao"
Điều này có nghĩa là mình làm VungChon không đúng phải không?
 
Lần chỉnh sửa cuối:
Cám ơn rất nhiều. Nhưng có vấn đề như thế này:
Mình muốn vùng chọn bắt đầu từ ô B9 và kết thúc ở ô P200. có phải mình sẽ sửa code thành như thế này:
Sub SortABC()
Dim VungChon As Range, a, b
Dim ri As Long, rd As Long, rc As Long, ci As Byte, cd As Byte, cc As Byte
Dim vt1 As Byte, vt2 As Byte
Dim CotNhap As String, TenCot As String, Cot3 As String, BangMa As String, FontName As String
'On Error GoTo baoloi
rc = [a65000].End(xlUp).Row
cc = [IV4].End(xlToLeft).Column
Set VungChon = Range(Cells(
9, 2), Cells(rc, cc))
'Set VungChon = [
B9:P200]'Selection
VungChon.Select
rd = VungChon.Row
rc = rd + VungChon.Rows.Count - 1
cd = VungChon.Column
cc = cd + VungChon.Columns.Count - 1


Mình chưa hiểu lắm về Cot3cc = [IV4].End(xlToLeft). Tại sao đặt là Cot3IV4?
Mong bạn giải thích. Cám ơn.

Nói thêm: Khi mình điều chỉnh như trên thì bị báo lỗi:
Runtime Error '13'
Type mismatch
Debug thì thấy tô vàng ở dòng chữ:
MsgBox "Vung sap xep co 1 dong. Khong sap xep !", "Thong bao"
Điều này có nghĩa là mình làm VungChon không đúng phải không?
Vậy là vùng chọn chỉ có 1 dòng có dữ liệu.
rc = [a65000].End(xlUp).Row
cc = [IV4].End(xlToLeft).Column
Set VungChon = Range(Cells(
9, 2), Cells(rc, cc))
Set VungChon = [
B9:P200]
Bỏ các dòng đỏ, giữ lại dòng xanh, nhớ là không có dấu "'"
Sửa lại dòng này, kiện tại G là trường, H là môn thi, B là họ tên. Bạn thay tên cột cho phù hợp.
CotNhap = "G,H,B"

 
Vậy là vùng chọn chỉ có 1 dòng có dữ liệu.
rc = [a65000].End(xlUp).Row
cc = [IV4].End(xlToLeft).Column
Set VungChon = Range(Cells(
9, 2), Cells(rc, cc))
Set VungChon = [
B9:P200]
Bỏ các dòng đỏ, giữ lại dòng xanh, nhớ là không có dấu "'"
Sửa lại dòng này, kiện tại G là trường, H là môn thi, B là họ tên. Bạn thay tên cột cho phù hợp.
CotNhap = "G,H,B"


Cám ơn bạn ThuNghi. Mình đã thực hiện theo và tùy biến CotNhap (của mình là cột O, D) nhưng khi thực hiện sắp xếp thì chỉ sắp xếp theo cột O thôi. Còn cột D (cột họ tên) thì không thấy sắp xếp. Mình xài font Times New Roman, bảng mã Uni.
 
Cám ơn bạn ThuNghi. Mình đã thực hiện theo và tùy biến CotNhap (của mình là cột O, D) nhưng khi thực hiện sắp xếp thì chỉ sắp xếp theo cột O thôi. Còn cột D (cột họ tên) thì không thấy sắp xếp. Mình xài font Times New Roman, bảng mã Uni.
Đúng là không sort theo tên, cái này chắc phải nhờ Thầy Long quá. Do code của Thầy Long viết là tùy chọn cột sort. Vì nếu cái gì cũng tách ra và sort theo từ cuối thì không khả thi. Với bài này nếu bạn chập nhận tùy biến cột tên luôn ở vị trí cuối, CotNhap (O, D) cụ thể nếu Họ tên ở cột D thì cột luôn ở cuối như CotNhap (O, D). Nếu Họ tên ở cột F thì CotNhap (O, F). Nếu OK mình có thể làm cho bạn được. Mình sẽ tự tách họ tên thành và sort, gộp lại.
Theo tôi phần này bạn nên làm bằng UDF tách thành 2, sort (đổi biến) và gộp lại.
 
Đúng là không sort theo tên, cái này chắc phải nhờ Thầy Long quá. Do code của Thầy Long viết là tùy chọn cột sort. Vì nếu cái gì cũng tách ra và sort theo từ cuối thì không khả thi. Với bài này nếu bạn chập nhận tùy biến cột tên luôn ở vị trí cuối, CotNhap (O, D) cụ thể nếu Họ tên ở cột D thì cột luôn ở cuối như CotNhap (O, D). Nếu Họ tên ở cột F thì CotNhap (O, F). Nếu OK mình có thể làm cho bạn được. Mình sẽ tự tách họ tên thành và sort, gộp lại.
Theo tôi phần này bạn nên làm bằng UDF tách thành 2, sort (đổi biến) và gộp lại.

Tôi đành sử dụng giải pháp tạm thời như sau:
Tôi sử dụng 2 nút command button. Sau khi tách cột họ tên ra thì mới sắp xếp nhưng gặp lỗi như sau:
1. Định dạng của bảng tính bị mất do dữ liệu di chuyển sang phải. Ví dụ: Cột cần rộng thì lại hẹp, canh giữa không theo yêu cầu.
2. Sub SapxepABC bị lỗi. Debug thì bị tô vàng ở dòng chữ: MsgBox "Vung sap xep co 1 dong. Khong sap xep !", "Thong bao"
Mong các bạn giúp khắc phục.
 

File đính kèm

Lần chỉnh sửa cuối:
Tôi đành sử dụng giải pháp tạm thời như sau:
Tôi sử dụng 2 nút command button. Sau khi tách cột họ tên ra thì mới sắp xếp nhưng gặp lỗi như sau:
1. Định dạng của bảng tính bị mất do dữ liệu di chuyển sang phải. Ví dụ: Cột cần rộng thì lại hẹp, canh giữa không theo yêu cầu.
2. Sub SapxepABC bị lỗi. Debug thì bị tô vàng ở dòng chữ: MsgBox "Vung sap xep co 1 dong. Khong sap xep !", "Thong bao"
Mong các bạn giúp khắc phục.
Cột môn thi chưa nhập nên không cái mà sort. Tôi làm trên file cũ của bạn với nguồn là B9:P200, Cột B: Ten; Cột O: Trường, Cột P: là môn theo code nhập là (O,P,R,Q,) cột R và Q là thêm để tách họ tên sau đó xóa đi.
Bạn xem file.
 

File đính kèm

Cột môn thi chưa nhập nên không cái mà sort. Tôi làm trên file cũ của bạn với nguồn là B9:P200, Cột B: Ten; Cột O: Trường, Cột P: là môn theo code nhập là (O,P,R,Q,) cột R và Q là thêm để tách họ tên sau đó xóa đi.
Bạn xem file.

Bạn ơi mình đã nhập cột môn thi vào rồi. Vẫn lỗi.
 
Đây này. Mong bạn giúp mình nhé. Nếu chỉ cần làm 1 command button thì càng tốt.
1/ Không biết code có sai
Const Unicode = "AkronismAmazoneAntiqueArialBigappleCircleCircle3dCourier NewCrystalFloralFlowdecoGeorgia RefLcalligMerscrbMicrosoft Sans SerifMS Ref Sans SerifMS Ref SerifPalatino LinotypeRockstonStarstrpTahomaTimes New RomanVerdanaVictoria"
Tôi mới thêm chữ s để tìm ra font mà chọn UDF
2/ Khi sort bạn phải selection, theo code yêu cầu như vậy.
3/ Vậy bạn muốn srt cố địng vùng nào, sort theo gì và có cần phải tách tên ra trước? Reply nhanh tôi làm cho. Sắp off
 
1/ Không biết code có sai

Tôi mới thêm chữ s để tìm ra font mà chọn UDF
2/ Khi sort bạn phải selection, theo code yêu cầu như vậy.
3/ Vậy bạn muốn srt cố địng vùng nào, sort theo gì và có cần phải tách tên ra trước? Reply nhanh tôi làm cho. Sắp off

Bạn cứ giữ nguyên cấu trúc file của mình. Cột họ và tên lúc trước mình phải tách ra vì không thể làm khác hơn. Bạn có thể gộp 2 cột lại dùm. Sort theo mã môn, tên, lót, họ. Cám ơn. Mình cũng off luôn rồi. Cám ơn bạn rất nhiều.
Mình học excel toàn là học lóm nên không có kinh nghiệm khi đũng vào VBA này.
 
Bạn cứ giữ nguyên cấu trúc file của mình. Cột họ và tên lúc trước mình phải tách ra vì không thể làm khác hơn. Bạn có thể gộp 2 cột lại dùm. Sort theo mã môn, tên, lót, họ. Cám ơn. Mình cũng off luôn rồi. Cám ơn bạn rất nhiều.
Mình học excel toàn là học lóm nên không có kinh nghiệm khi đũng vào VBA này.
Bạn tham khảo file sau, sao thấy mấy cái vâlidtion chọn môn, if=10,..., sao không validation theo môn.
 

File đính kèm

Web KT

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

Back
Top Bottom