Menu

Tự động hóa việc định dạng số điện thoại theo chuẩn Việt Nam bằng VBA

Cù Hữu Tâm 06/06/2026 17:03 127 lượt xem 1 trả lời

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 Sub

Lư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.

2

Hay quá bạn ơi! Mình cũng hay gặp vấn đề tương tự với định dạng số điện thoại, nhất là khi nhập liệu từ nhiều nguồn khác nhau. Code của bạn nhìn gọn gàng và giải quyết đúng vấn đề.

Mình có một thắc mắc nhỏ, nếu trong danh sách có cả số điện thoại quốc tế (ví dụ: 1 800 xxx xxx) thì code của bạn có xử lý được không, hay chỉ tập trung vào chuẩn Việt Nam thôi? Chia sẻ thêm kinh nghiệm xử lý các trường hợp "lạ" này nhé!

0

Bạn cần đăng nhập để trả lời chủ đề này.

Đăng nhập Đăng ký