Tách họ và tên trong Excel
Trong công việc văn phòng, chúng ta thường nhập Họ và Tên thành hai cột riêng biệt, đối với những danh sách dài nhiều trang thì tốc độ nhập thường bị hạn chế do phải di chuyển qua lại giữa hai cột Họ và Tên; bài viết này có ý muốn hỗ trợ các bạn tạo các danh sách thật nhanh và đẹp đối với loại danh sách có hai cột Họ và Tên riêng biệt.
Toàn bộ chương trình gồm hai phần: macro TachHT() và hàm TachHoTen; sử dụng nhanh và rất tiện lợi. Đối với Macro TachHT() bạn chỉ việc nhập tất cả Họ Tên vào một cột; bôi đen vùng chọn và chạy nó; kết quả là ta có hai cột Họ, Chữ lót và Tên.
Trước tiên các bạn khởi động Excel, nhấn Alt_F8, trong mục Macro Name điền tên Macro là TachHT; kế đến chọn Create.
Tại màn hình soạn thảo Visual Basic Editor, các bạn nhập vào toàn bộ các mã nguồn như dưới đây:
Chú ý các phần có dấu nháy (‘) có chữ tiếng Việt theo sau là các phần giải thích, vì vậy các bạn không cần phải nhập vào!!!
‘~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
‘<<<<<<<<<<<<<<<<<< Macro Tách Họ và Tên >>>>>>>>>>>>>>>>>>>>>>>
‘Tach: Biến gán số lần thực hiện tách Họ và Tên
‘HgHT: Biến gán cho tổng số hàng trong vùng chọn
‘sd: Biến gán cho mỗi hàng trong vùng chọn
‘Lch: Biến gán phần đối số
‘~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Option Explicit
Public Sub TachHT()
Dim tach, HgHT, sd As Integer
Dim Lch, cb
On Error GoTo Thoat
HgHT = Selection.Rows.Count ‘đếm tổng số hàng trong vùng chọn
For tach = 1 To 2 ‘Chạy lần 1: Tách Họ và Chữ lót; lần 2: Tên
Lch = Choose(tach,1,2)
Selection.EntireColumn.Insert ‘Chèn thêm 1 cột bên trái vùng chọn
For sd = 0 To HgHT - 1 ‘Thi hành hàm TachHoTen
cb = ActiveCell.Offset(sd, 1).Value ‘Trị cột bên phải mỗi dòng
ActiveCell.Offset(sd, 0).Value = TachHoTen(cb, Lch)
ActiveCell.Offset(sd, 0).Value = ActiveCell.Offset(sd, 0).Value
Next sd
With Selection ‘Định dạng cho vùng đang chọn
.HorizontalAlignment = xlLeft
.VerticalAlignment = xlBottom
.EntireColumn.AutoFit
.Offset(0, 1).Select
End With
Next tach
Selection.EntireColumn.Delete ‘Xóa cột hiện hành chứa Họ và Tên cũ
ActiveCell.Offset(0, 0).Select ‘Di chuyển về ô đầu
Thoat:
End Sub
‘~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
‘<<<<<<<<<<<<< Hàm TachHoTen >>>>>>>>>>>>>>>>>>
‘HovaTen: chuỗi Họ, Chữ lót và Tên
‘x: đối số; x =1 (tách Họ và Chữ lót); x = 2 (tách Tên)
‘~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Function TachHoTen(HovaTen, x)
Dim Ten, Dodai As Integer, i As Integer ‘Khai báo các biến Ten, Dodai,i
HovaTen = Trim(HovaTen) ‘Cắt bỏ khoảng trống thừa
Dodai = Len(HovaTen) ‘Xác định độ dài của chuỗi HovaTen
If Dodai = 0 Then
Ten = “”
Else ‘ Tìm khoảng trống đầu tiên kể từ bên phải chuỗi để tách Tên
For i = 1 To Dodai - 1
Select Case x ‘Lựa chọn tách Họ, Chữ lót và Tên
Case 1 ‘Lấy phần Họ và Chữ lót
If Mid(HovaTen, (Dodai - i), 1) = Space(1) Then
Ten = Left(HovaTen, (Dodai - i))
Exit For
Else ‘Bỏ trống khi HovaTen chung
Ten = Space(1)
End If
Case 2 ‘Lấy phần Tên
If Mid(HovaTen, (Dodai - i), 1) = Space(1) Then
Ten = Right(HovaTen, i)
Exit For
Else ‘Lấy phần HovaTen chung
Ten = HovaTen
End If
End Select
Next i
End If ‘Dodai = 0
TachHoTen = Ten
End Function
Sau khi nhập xong toàn bộ macro trên, các bạn nhấn Ctr_S và lưu bảng tính với tên mà bạn muốn; kế đến nhấn Alt_Q để thoát khỏi màn hình soạn thảo Visual Basic Editor, tại một Worksheet trống các bạn nhập theo minh họa dưới đây; bao gồm các tên làm mẫu với kích thước khác nhau (các bạn có thể tự nhập theo ý của các bạn) để kiểm tra macro có chạy đúng theo yêu cầu hay chưa:
A B C
1 Công Huyền Tôn Nữ Minh
Thư
2 Trần Khắc Tỵ
3 Trần Ngọc Phương Thảo
4 Trần Thị Hạnh Dung
5 Sesame
Nhập xong như minh họa trên, các bạn chọn vùng A1:A10; kế đến nhấn Alt_F8, chọn macro TachHT và nhấn Run. Kết quả sẽ được như sau:
A B C
1 Công Huyền Tôn Nữ Minh Thư
2 Trần Khắc Tỵ
3 Trần Ngọc Phương Thảo
4 Trần Thị Hạnh Dung
5 Sesame
Trên đây là toàn bộ chương trình “Tách Họ Tên trong Excel 97”; hy vọng nó giúp ích cho các bạn một phần nào trong công việc văn phòng và cũng có thể chương trình còn nhiều thiếu sót; rất mong các bạn đóng góp ý kiến và cải tiến cho chương trình hoàn thiện hơn.