Chào các anh em trong diễn đàn,
Dạo này mình làm việc với danh sách khách hàng, mà số điện thoại cứ loạn cả lên, có đầu +84, có 09x, có cả 849x... nhìn rất khó chịu. Mình muốn tự động hóa việc định dạng lại cho nó về một chuẩn chung, ví dụ như 09x.xxx.xxxx hoặc +84 9x xxx xxxx chẳng hạn.
Sau một hồi mày mò thì mình cũng viết được một đoạn code VBA nhỏ để làm việc này. Chia sẻ lên đây để anh em nào cần thì dùng, hoặc có cách nào hay hơn thì chỉ bảo mình nhé.
Code VBA xử lý định dạng số điện thoại
Giả sử bạn có danh sách số điện thoại ở cột A, từ dòng 2 trở đi. Bạn có thể thêm một nút bấm để chạy macro này.
Sub FormatPhoneNumber()
Dim ws As Worksheet
Dim rng As Range
Dim cell As Range
Dim phoneNum As String
Set ws = ThisWorkbook.Sheets("Sheet1") ' Thay "Sheet1" bằng tên sheet của bạn
Set rng = ws.Range("A2:A" & ws.Cells(Rows.Count, "A").End(xlUp).Row)
For Each cell In rng
phoneNum = Trim(cell.Value) ' Lấy giá trị và loại bỏ khoảng trắng thừa
' Loại bỏ các ký tự không phải số
phoneNum = Application.WorksheetFunction.Clean(phoneNum)
phoneNum = Replace(phoneNum, " ", "")
phoneNum = Replace(phoneNum, ".", "")
phoneNum = Replace(phoneNum, "-", "")
phoneNum = Replace(phoneNum, "(", "")
phoneNum = Replace(phoneNum, ")", "")
' Kiểm tra nếu bắt đầu bằng +84 hoặc 84
If Left(phoneNum, 3) = "+84" Then
phoneNum = Mid(phoneNum, 4)
ElseIf Left(phoneNum, 2) = "84" Then
phoneNum = Mid(phoneNum, 3)
End If
' Kiểm tra nếu bắt đầu bằng 0 và có đủ 10 số
If Left(phoneNum, 1) = "0" And Len(phoneNum) = 10 Then
' Định dạng chuẩn: 0xx.xxx.xxxx
cell.Value = Left(phoneNum, 3) & "." & Mid(phoneNum, 4, 3) & "." & Mid(phoneNum, 7, 4)
' Hoặc định dạng chuẩn quốc tế: +84 xx xxx xxxx
' cell.Value = "+84 " & Mid(phoneNum, 2, 2) & " " & Mid(phoneNum, 4, 3) & " " & Mid(phoneNum, 7, 4)
Else
' Xử lý các trường hợp khác nếu cần, hoặc để nguyên
cell.Value = phoneNum ' Hoặc có thể báo lỗi, hoặc để nguyên giá trị gốc
End If
Next cell
MsgBox "Đã định dạng xong số điện thoại!", vbInformation
End SubLưu ý:
- Bạn cần thay
"Sheet1"bằng tên sheet chứa dữ liệu của bạn. - Code này đang định dạng theo chuẩn
0xx.xxx.xxxx. Nếu bạn muốn định dạng theo chuẩn quốc tế+84 xx xxx xxxx, hãy bỏ comment dòng code tương ứng và comment dòng đang dùng. - Code này chỉ xử lý số điện thoại có 10 số bắt đầu bằng 0 sau khi đã loại bỏ đầu số quốc tế. Các trường hợp khác có thể cần bổ sung logic xử lý.
Hy vọng đoạn code này giúp ích được cho mọi người.