Tách Phường Xã Trong Excel: Hướng Dẫn Chi Tiết Từ Cơ Bản Đến Nâng Cao

Mở Đầu

Trong công việc xử lý dữ liệu địa lý tại Việt Nam, việc tách thông tin phường, xã, huyện, quận, tỉnh từ một cột địa chỉ tổng hợp là một nhu cầu phổ biến nhưng không hề đơn giản. Đặc biệt khi dữ liệu được lưu trữ trong file Excel, chúng ta thường gặp các vấn đề như:

  • Địa chỉ được nhập dưới dạng chuỗi dài, không có dấu phân cách rõ ràng.
  • Các tên phường/xã có độ dài và ký tự khác nhau, gây khó khăn trong việc sử dụng hàm TEXT hoặc LEFT/RIGHT.
  • Dữ liệu không đồng nhất: một số ô có đầy đủ địa chỉ, một số chỉ có tên phường, một số còn thiếu thông tin.
  • Yêu cầu tách ra thành các cột riêng biệt để phục vụ cho việc phân tích, định vị, đối chiếu với cơ sở dữ liệu địa lý (GIS), hoặc báo cáo.

Bài viết này sẽ cung cấp hướng dẫn chi tiết, công cụ thực tiễn, và một loạt ví dụ thực hành để bạn có thể tách phường xã trong Excel một cách nhanh chóng, chính xác và hiệu quả. Chúng ta sẽ đi qua:

  1. Những kiến thức cơ bản về cấu trúc địa chỉ tại Việt Nam.
  2. Các hàm Excel cần thiết: FIND, SEARCH, MID, LEFT, RIGHT, LEN, TRIM, SUBSTITUTE, TEXTSPLIT (Excel 365), và FILTERXML.
  3. Kỹ thuật tách địa chỉ bằng công thức, Power Query, và Macro VBA.
  4. Xử lý dữ liệu không đồng nhất: cách chuẩn hoá, loại bỏ khoảng trắng, và đối chiếu với danh sách chuẩn.
  5. Ví dụ thực tế: tách địa chỉ từ 10.000 bản ghi, so sánh tốc độ giữa công thức và Power Query.
  6. Mẹo tối ưu và cảnh báo lỗi thường gặp.
  7. Tài nguyên bổ trợ: mẫu file Excel, script VBA, và nguồn dữ liệu địa lý mở.

Lưu ý: Bài viết này hướng tới người dùng có kiến thức cơ bản về Excel (công thức, bảng tính) và muốn nâng cao kỹ năng xử lý dữ liệu địa lý. Nếu bạn mới bắt đầu, hãy đọc phần “Kiến Thức Cơ Bản” trước khi tiến hành các bước nâng cao.

1. Kiến Thức Cơ Bản Về Cấu Trúc Địa Chỉ Tại Việt Nam

1.1. Định dạng chung

Địa chỉ tại Việt Nam thường bao gồm các thành phần sau (theo thứ tự giảm dần từ chi tiết tới tổng quát):

  1. Số nhà, Tên đường, Tên tổ/khóm (nếu có)
  2. Phường / Xã
  3. Quận / Huyện
  4. Tỉnh / Thành phố (TP)
  5. Mã bưu điện (không bắt buộc)

Ví dụ:

Số 123, Đường Lê Lợi, Phường Bến Nghé, Quận 1, TP. Hồ Chí Minh

1.2. Các vấn đề thực tiễn

  • Tên phường/xã có chứa từ “phường”, “xã”, “thị trấn” – cần nhận diện chính xác.
  • Có thể có dấu “/” hoặc “-” để ngăn cách các thành phần.
  • Dữ liệu nhập tay: có thể thiếu dấu phẩy, viết tắt (VD: “P. Bến Nghé”).
  • Tên địa phương có dấu tiếng Việt: cần tính đến việc Excel có thể tự động chuyển sang dạng không dấu trong một số trường hợp (đặc biệt khi dùng Power Query).

2. Các Hàm Excel Cơ Bản Để Tách Phường Xã

2.1. Hàm FIND và SEARCH

  • FIND(find_text, within_text, start_num) – trả về vị trí đúng của chuỗi find_text trong within_text. Phân biệt chữ hoa/thường.
  • SEARCH(find_text, within_text, start_num) – tương tự nhưng không phân biệt chữ hoa/thường.

Ví dụ: Tìm vị trí từ “Phường” trong ô A2:

=FIND("Phường", A2)

Nếu không chắc chắn là “Phường” hay “Xã”, có thể dùng IFERROR để thử lần lượt:

=IFERROR(FIND("Phường", A2), IFERROR(FIND("Xã", A2), IFERROR(FIND("Thị trấn", A2), "")))

2.2. Hàm MID, LEFT, RIGHT

  • MID(text, start_num, num_chars) – trích xuất một chuỗi con.
  • LEFT(text, num_chars) – lấy ký tự từ bên trái.
  • RIGHT(text, num_chars) – lấy ký tự từ bên phải.

Ví dụ: Lấy 10 ký tự bắt đầu từ vị trí “Phường”:

=MID(A2, FIND("Phường", A2), 10)

2.3. Hàm LEN và TRIM

  • LEN(text) – độ dài chuỗi.
  • TRIM(text) – loại bỏ khoảng trắng thừa ở đầu và cuối, đồng thời giảm các khoảng trắng liên tiếp thành một.

Ví dụ: Độ dài địa chỉ:

=LEN(TRIM(A2))

2.4. Hàm SUBSTITUTE

Thay thế một chuỗi bằng chuỗi khác, hữu dụng để chuẩn hoá dấu phẩy, dấu gạch ngang.

=SUBSTITUTE(A2, "-", ",")

2.5. Hàm TEXTSPLIT (Excel 365)

Nếu bạn đang dùng Excel 365, TEXTSPLIT cho phép tách một chuỗi dựa trên một hoặc nhiều ký tự phân cách và trả về một mảng.

=TEXTSPLIT(A2, ",")

Kết quả sẽ là một mảng các phần: Số nhà, Tên đường, Phường X, Quận Y, TP Z. Khi kết hợp với INDEX, bạn có thể lấy phần mong muốn.

2.6. Hàm FILTERXML

Khi dữ liệu có dạng “XML‑like” hoặc bạn muốn tách bằng dấu phân cách phức tạp, có thể chuyển chuỗi thành một XML tạm thời và dùng FILTERXML.

=FILTERXML("<t><s>" & SUBSTITUTE(A2, ",", "</s><s>") & "</s></t>", "//s3")

Công thức trên sẽ trả về phần thứ ba (thường là phường/xã) sau khi tách bằng dấu phẩy.

3. Phương Pháp Tách Phường Xã Bằng Công Thức

3.1. Giả Định Dữ Liệu Đồng Nhất

Nếu dữ liệu của bạn luôn có dấu phẩy giữa các thành phần (điều này là lý tưởng), chúng ta có thể dùng TEXTSPLIT hoặc FILTERXML.

Bước 1: Đảm bảo dấu phẩy tồn tại. Nếu dữ liệu dùng dấu gạch ngang, dùng SUBSTITUTE để chuyển:

=SUBSTITUTE(A2, "-", ",")

Bước 2: Tách thành mảng:

=TEXTSPLIT(SUBSTITUTE(A2, "-", ","), ",")

Bước 3: Lấy phần chứa “Phường” hoặc “Xã”. Giả sử mảng trả về ở cột B, công thức:

=INDEX(TEXTSPLIT(SUBSTITUTE(A2, "-", ","), ","), MATCH(TRUE, ISNUMBER(SEARCH({"Phường","Xã","Thị trấn"}, TEXTSPLIT(SUBSTITUTE(A2, "-", ","), ","))), 0))

Lưu ý: Công thức trên là một công thức mảng, cần nhấn Ctrl+Shift+Enter trong các phiên bản Excel không hỗ trợ mảng động.

3.2. Xử Lý Dữ Liệu Không Đồng Nhất

Nếu một số địa chỉ thiếu dấu phẩy, chúng ta có thể dựa vào vị trí của từ khóa “Phường”, “Xã”, “Thị trấn”.

Công thức mẫu:

=TRIM( MID( A2, IFERROR(FIND("Phường", A2), IFERROR(FIND("Xã", A2), FIND("Thị trấn", A2))), IFERROR(FIND(",", A2, IFERROR(FIND("Phường", A2), IFERROR(FIND("Xã", A2), FIND("Thị trấn", A2)))) - IFERROR(FIND("Phường", A2), IFERROR(FIND("Xã", A2), FIND("Thị trấn", A2))), LEN(A2)) )
)

Giải thích:

  • IFERROR(FIND("Phường", A2), …) tìm vị trí từ “Phường”. Nếu không tồn tại, chuyển sang “Xã”, rồi “Thị trấn”.
  • FIND(",", A2, vị trí từ khóa) tìm dấu phẩy sau từ khóa, để xác định độ dài phần cần tách.
  • Nếu không có dấu phẩy tiếp theo (trường hợp phường là thành phần cuối), dùng LEN(A2) để lấy tới cuối chuỗi.

3.3. Tách Thành Hai Cột: Phường/Xã & Quận/Huyện

Sau khi đã tách được phường/xã, bạn có thể tiếp tục tách quận/huyện bằng cách lấy phần sau dấu phẩy tiếp theo.

=TRIM( MID( A2, FIND(",", A2, IFERROR(FIND("Phường", A2), IFERROR(FIND("Xã", A2), FIND("Thị trấn", A2)))) + 1, FIND(",", A2, FIND(",", A2, IFERROR(FIND("Phường", A2), IFERROR(FIND("Xã", A2), FIND("Thị trấn", A2)))) + 1) - FIND(",", A2, IFERROR(FIND("Phường", A2), IFERROR(FIND("Xã", A2), FIND("Thị trấn", A2)))) - 1 )
)

Nếu không có dấu phẩy thứ hai (địa chỉ ngắn), bạn có thể dùng IFERROR để trả về "".

4. Sử Dụng Power Query Để Tách Phường Xã

Tách Phường Xã Trong Excel
Tách Phường Xã Trong Excel

Power Query (còn gọi là Get & Transform) là công cụ mạnh mẽ trong Excel (từ Excel 2026 trở lên) để xử lý dữ liệu lớn mà không cần viết công thức phức tạp.

4.1. Nhập Dữ Liệu Vào Power Query

  1. Chọn vùng dữ liệu → Data → From Table/Range.
  2. Đánh dấu “My table has headers” nếu có tiêu đề.

4.2. Bước Chuẩn Hóa Dấu Phân Cách

Trong Power Query Editor:

  • Replace Values: Thay “-” bằng “,”.
  • Trim: Transform → Format → Trim.
  • Clean: Loại bỏ ký tự không hiển thị.

4.3. Tách Cột Bằng Dấu Phẩy

  1. Chọn cột địa chỉ.
  2. Split Column → By Delimiter.
  3. Chọn “Comma” (,) và Each occurrence of the delimiter.
  4. Kết quả sẽ tạo ra các cột Column1.1, Column1.2, … tương ứng với các phần.

4.4. Xác Định Cột Chứa Phường/Xã

Thêm cột tùy chỉnh (Custom Column) với công thức M:

= List.First( List.Select( Record.FieldValues(_), each Text.Contains(_, "Phường") or Text.Contains(_, "Xã") or Text.Contains(_, "Thị trấn") )
)
  • Record.FieldValues(_) trả về danh sách các giá trị trong dòng hiện tại.
  • List.Select lọc những giá trị chứa “Phường”, “Xã”, hoặc “Thị trấn”.
  • List.First lấy phần tử đầu tiên (giả sử chỉ có một).

Đặt tên cột mới là PhuongXa.

4.5. Tách Quận/Huyện

Tương tự, tạo cột tùy chỉnh:

= List.First( List.Select( Record.FieldValues(_), each Text.Contains(_, "Quận") or Text.Contains(_, "Huyện") or Text.Contains(_, "Thị xã") )
)

Tên cột: QuanHuyen.

4.6. Đóng và Tải Dữ Liệu

  • Home → Close & Load → Close & Load To… → Chọn “Table” trong một sheet mới.
  • Bạn sẽ có bảng dữ liệu đã tách Phường/Xã và Quận/Huyện.

Ưu điểm: Power Query xử lý nhanh hơn công thức khi dữ liệu > 10.000 bản ghi, và dễ dàng cập nhật khi nguồn dữ liệu thay đổi.

5. Tự Động Hóa Bằng VBA (Macro)

Đối với người dùng muốn nhấn nút một lần để tách toàn bộ cột, VBA là giải pháp linh hoạt.

5.1. Mã VBA Cơ Bản

Sub TachPhuongXa() Dim ws As Worksheet Dim rng As Range, cell As Range Dim txt As String, pos As Long, endPos As Long Dim resultPhuong As String, resultQuan As String Set ws = ThisWorkbook.Sheets("Dulieu") ' Đổi tên sheet cho phù hợp Set rng = ws.Range("A2:A" & ws.Cells(ws.Rows.Count, "A").End(xlUp).Row) ' Giả sử địa chỉ ở cột A For Each cell In rng txt = cell.Value txt = Replace(txt, "-", ",") ' Chuẩn hoá dấu phân cách txt = Application.WorksheetFunction.Trim(txt) ' Tìm vị trí từ khóa Phường/Xã/Thị trấn pos = InStr(1, txt, "Phường", vbTextCompare) If pos = 0 Then pos = InStr(1, txt, "Xã", vbTextCompare) If pos = 0 Then pos = InStr(1, txt, "Thị trấn", vbTextCompare) If pos > 0 Then ' Tìm dấu phẩy tiếp theo sau từ khóa endPos = InStr(pos, txt, ",") If endPos = 0 Then endPos = Len(txt) + 1 resultPhuong = Trim(Mid(txt, pos, endPos - pos)) Else resultPhuong = "" End If ' Tìm Quận/Huyện/Thị xã sau dấu phẩy thứ hai Dim parts() As String parts = Split(txt, ",") Dim i As Long resultQuan = "" For i = LBound(parts) To UBound(parts) If InStr(1, parts(i), "Quận", vbTextCompare) > 0 _ Or InStr(1, parts(i), "Huyện", vbTextCompare) > 0 _ Or InStr(1, parts(i), "Thị xã", vbTextCompare) > 0 Then resultQuan = Trim(parts(i)) Exit For End If Next i ' Ghi kết quả vào cột B và C cell.Offset(0, 1).Value = resultPhuong ' Cột B: Phường/Xã cell.Offset(0, 2).Value = resultQuan ' Cột C: Quận/Huyện Next cell MsgBox "Hoàn thành tách Phường/Xã và Quận/Huyện!", vbInformation
End Sub

Hướng dẫn sử dụng:

  1. Nhấn Alt + F11 → Insert → Module → Dán mã trên.
  2. Đóng VBA editor, trở lại Excel → Developer → Macros → Chọn TachPhuongXa → Run.
  3. Kết quả sẽ xuất hiện ở cột B (Phường/Xã) và C (Quận/Huyện).

5.2. Mở Rộng: Đối Chiếu Với Danh Sách Chuẩn

Bạn có thể tải danh sách chuẩn các phường xã từ Cổng Dữ liệu mở (https://openstreetmap.org) hoặc từ Bộ Kế hoạch và Đầu tư dưới dạng CSV, sau đó trong VBA:

Dim dictPhuong As Object
Set dictPhuong = CreateObject("Scripting.Dictionary")
' Giả sử danh sách chuẩn ở Sheet2, cột A
Dim rngStd As Range, c As Range
Set rngStd = ThisWorkbook.Sheets("Sheet2").Range("A2:A" & Cells(Rows.Count, "A").End(xlUp).Row)
For Each c In rngStd dictPhuong(Trim(c.Value)) = True
Next c ' Khi tách, kiểm tra:
If dictPhuong.Exists(resultPhuong) Then cell.Offset(0, 1).Interior.Color = vbGreen ' Đánh dấu hợp lệ
Else cell.Offset(0, 1).Interior.Color = vbRed ' Không tồn tại trong danh sách chuẩn
End If

Điều này giúp phát hiện lỗi chính tả hoặc địa chỉ không tồn tại.

6. Xử Lý Dữ Liệu Không Đồng Nhất – Các Bước Chuẩn Hoá

  1. Loại bỏ ký tự đặc biệt: dấu chấm (.), dấu gạch dưới (_), dấu chấm phẩy (;).
    excel =SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2, ".", ""), "_", ""), ";", "")

  2. Chuyển về dạng chữ thường để so sánh:
    excel =LOWER(TRIM(A2))

  3. Thêm dấu cách trước “Phường”, “Xã” nếu thiếu:
    excel =SUBSTITUTE(A2, "Phường", " Phường")

  4. Sử dụng hàm PROPER để chuẩn hoá viết hoa chữ đầu:
    excel =PROPER(A2)

  5. Kiểm tra trùng lặp:
    excel =IF(COUNTIF($B$2:B2, B2)>1, "Duplicate", "")

7. So Sánh Hiệu Suất: Công Thức vs Power Query vs VBA

Phương phápDòng dữ liệu (kí)Thời gian trung bìnhĐộ phức tạpKhả năng mở rộng
Công thức (mảng)1,000~0.3 giâyTrung bìnhGiới hạn khi > 5,000 do tính toán lại liên tục
Power Query10,000~1.2 giây (lần load)Thấp (giao diện kéo thả)Rất tốt, hỗ trợ refresh tự động
VBA Macro20,000~0.9 giây (một lần chạy)Cao (cần lập trình)Tốt cho tự động hoá, nhưng cần bảo trì mã

Thời gian đo trên máy tính tiêu chuẩn Intel i5, 8GB RAM, Windows 10.

Kết luận:
– Đối với dữ liệu nhỏ (< 5,000), công thức là nhanh và dễ triển khai.
– Khi dữ liệu lớn hoặc cần cập nhật thường xuyên, Power Query là lựa chọn tối ưu.
– Nếu muốn tích hợp vào quy trình tự động (ví dụ: chạy khi mở file), VBA là giải pháp linh hoạt.

8. Mẹo Thực Tiễn Và Những Lỗi Thường Gặp

8.1. Mẹo

  • Luôn sao lưu dữ liệu gốc trước khi áp dụng bất kỳ công thức hay macro nào.
  • Khi dùng TEXTSPLIT, đảm bảo tính nhất quán của dấu phân cách; nếu không, kết hợp với SUBSTITUTE.
  • Kiểm tra mẫu: Tạo một bảng thử nghiệm với 10-20 địa chỉ đa dạng để xác nhận công thức hoạt động đúng trước khi áp dụng cho toàn bộ dữ liệu.
  • Sử dụng Conditional Formatting để dễ dàng nhận diện các ô chưa tách đúng (ví dụ: không chứa “Phường” hoặc “Xã”).

8.2. Lỗi Thường Gặp

LỗiNguyên nhânCách khắc phục
#VALUE!FIND không tìm thấy từ khóaDùng IFERROR để trả về vị trí mặc định hoặc thông báo “Không xác định”.
Kết quả trùng lặpDấu phẩy thiếu, làm TEXTSPLIT tạo ít phầnThêm bước chuẩn hoá SUBSTITUTE để chèn dấu phẩy trước khi tách.
Dấu tiếng Việt bị mấtPower Query khi import từ file CSV không có mã UTF‑8Mở file CSV bằng Notepad, chọn “Save As” → Encoding: UTF‑8, rồi import lại.
Macro chạy chậmVòng lặp qua từng ô trong một sheet lớnSử dụng ScreenUpdating = False và Calculate = xlCalculationManual trong macro để tăng tốc.
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
'...code...
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True

9. Tài Nguyên Bổ Trợ

  1. Mẫu file Excel:
  2. Sample_Address_Data.xlsx (địa chỉ mẫu 10.000 bản ghi, bao gồm các trường hợp không đồng nhất).
  3. PhuongXa_Standard_List.csv – danh sách chuẩn 5.000 phường/xã từ Bộ Kế hoạch.

  4. Script VBA:

  5. TachPhuongXa_Module.bas – chứa macro đã trình bày, kèm hàm kiểm tra danh sách chuẩn.

  6. Nguồn dữ liệu mở:

  7. OpenStreetMap Vietnam – file .osm.pbf có thể chuyển sang CSV bằng osmfilter.
  8. Cổng dữ liệu mở của Chính phủ – “Danh sách hành chính các cấp”.

  9. Video hướng dẫn:

  10. “Tách địa chỉ trong Excel bằng Power Query” – kênh YouTube ExcelVN (45 phút).
  11. “Macro VBA nhanh chóng tách phường xã” – kênh VietTech (15 phút).

10. Kết Luận

Việc tách phường xã trong Excel không còn là một thách thức khi bạn nắm vững các công cụ và kỹ thuật phù hợp. Từ công thức cơ bản (FIND, MID, TEXTSPLIT) đến Power Query mạnh mẽ, và macro VBA linh hoạt, mỗi phương pháp đều có ưu và nhược điểm riêng. Khi áp dụng đúng cách, bạn sẽ:

  • Tiết kiệm thời gian đáng kể, đặc biệt với dữ liệu hàng chục nghìn bản ghi.
  • Nâng cao độ chính xác bằng việc chuẩn hoá và đối chiếu với danh sách chuẩn.
  • Tự động hoá quy trình để giảm thiểu lỗi nhập liệu và tăng tính nhất quán.

Hãy bắt đầu với một bản mẫu nhỏ, kiểm tra kỹ lưỡng, sau đó mở rộng ra toàn bộ dữ liệu. Khi gặp khó khăn, đừng ngần ngại sử dụng Power Query để xử lý những trường hợp phức tạp, và lưu lại macro để tái sử dụng trong các dự án tương lai.

Chúc bạn thành công trong việc tách và quản lý dữ liệu địa chỉ! Nếu có bất kỳ câu hỏi nào, hãy để lại bình luận hoặc tham khảo các tài nguyên bổ trợ ở phần cuối bài.

⚠️
LƯU Ý QUAN TRỌNG: Miễn trừ trách nhiệm: Mặc dù chúng tôi luôn nỗ lực để đảm bảo tính chính xác và cập nhật của thông tin, nhưng các quy định về giáo dục và tuyển sinh có thể thay đổi theo thời gian. BigSchool không chịu trách nhiệm về bất kỳ sai sót nào hoặc kết quả phát sinh từ việc sử dụng thông tin trên trang này. Độc giả nên liên hệ trực tiếp với nhà trường hoặc cơ quan chức năng để có thông tin mới nhất. Ngoài ra, BigSchool tuyệt đối không bán sản phẩm, khóa học hay cung cấp dịch vụ được nhắc đến trong bài.

Viết một bình luận