Cách tách Họ Tên, Số điện thoại, Địa chỉ từ một ô dữ liệu trong Excel

Nếu sếp giao cho bạn một danh sách khách hàng như hình bên trái. Yêu cầu bạn tách Họ Tên, Số điện thoại, Địa chỉ ra thành một các cột riêng biệt như hình bên phải.


Bạn phải làm như thế nào? Dùng biện pháp thủ công: cắt chuỗi ra rồi dán vào từng cột riêng biệt chăng? Nếu danh sách chỉ có vài chục dòng thì chắc bạn phải tốn vài giờ là hoàn thành công việc được giao. Nhưng nếu danh sách lên đến vài trăm dòng thì bạn phải tốn vài ngày, vài tháng,... Bạn có từng nghĩ chỉ cần một cú nhấp chuột, Excel sẽ tự động tách Họ Tên, Số điện thoại và Địa chỉ riêng ra cho bạn. Excel sẽ tự điền vào đúng vị trí các cột, và đặc biệt là thời gian chỉ mất có vài giây. Hiệu quả công việc của bạn được nâng lên đáng kể, và có thể sếp cũng có một suy nghĩ một vị trí mới cho bạn, ...

Trong bài viết này, tôi sẽ hướng dẫn các bạn tách ra chỉ với vài dòng code trong VBA. Các bạn có thể tham khảo các bài viết sau để nắm các kiến thức nền về lập trình VBA trong Excel:


{tocify} $title={Table of Contents}

Chèn thêm các cột Họ Tên, Số điện thoại, Địa chỉ

Nếu các bạn có sẵn một danh sách mẫu thì hãy thực hiện ngay trên danh sách của bạn. Hoặc bạn có thể tải file mẫu của tôi, với đường dẫn bên dưới.
Sau khi tải về, trước tiên chúng ta hãy chèn thêm 3 cột và đặt tên là Họ Tên, Số điện thoại, Địa chỉ. Đôi khi trong quá trình viết code có xảy ra lỗi làm mất dữ liệu. Để đảm bảo không bị mất dữ liệu thì trước tiên chúng ta lưu lại file với định dạng *.xlsm nhé.


Cách lưu nếu chưa biết bạn có thể tham khảo bài viết:

Viết chương trình thực thi

Tạo một nút lệnh tên "Thực thi" trên Sheet chứa danh sách khách hàng. Nút lệnh này sẽ liên kết với function ThucThi_Click(). Khi chúng ta nhấp vào nút Thực thi thì các đoạn chương trình bên trong sẽ bắt đầu thực hiện. Cách thức thực hiện sẽ do chúng ta tạo.

Các bạn dán đoạn code sau đây vào trong function ThucThi_Click().
    Dim txtAdd As String
    Dim tmpString As Variant
    Dim LastRow As Integer
    LastRow = Sheets("SGP-1").Cells(Sheets("SGP-1").Rows.Count, "E").End(xlUp).Row
    For i = 2 To LastRow
        txtAdd = Sheets("SGP-1").Cells(i, 5).Value
        'Dung ham Split de tach chuoi
        tmpString = Split(txtAdd, vbLf)

        '---------Gan gia tri vao cac cot---------------
        '-------gan Ho Ten-------------
        Sheets("SGP-1").Cells(i, 2).Value = tmpString(0)

        'Dinh dang o thanh kieu Text
        Sheets("SGP-1").Cells(i, 3).NumberFormat = "@"
        '-------gan So dien thoai------
        Sheets("SGP-1").Cells(i, 3).Value = tmpString(1)

        '-------gan Dia chi---------
        Sheets("SGP-1").Cells(i, 4).Value = tmpString(2)
    Next i

Trong đó:
  • LastRow là biến kiểu Interger, để lưu trữ số dòng cuối cùng của danh sách.
  • Hàm Split để cắt chuỗi thành nhiểu mãnh tại các vị trí xuống dòng (vbLf)

Các bạn cũng có thể định dạng canh trái, canh giữa các cell. Định dạng Wraptext để chuỗi tự ngắt dòng trong cell với cú pháp như sau:
Sheets("SGP-1").Cells(i, 4).WrapText = True

Sheets("SGP-1").Cells(i, 4).HorizontalAlignment = xlLeft

Lưu lại đoạn chương trình vừa thay đổi. Các bạn nhấp vào nút lệnh Thực thi để xem kết quả nhé.

Post a Comment

Previous Post Next Post

Comments