Tách địa chỉ , tỉnh thành giúp mình với !!!

Liên hệ QC

doanhoanghai

Thành viên hoạt động
Tham gia
20/12/07
Bài viết
195
Được thích
4
Mình có khoảng hơn 1000 Khách hàng mà muốn tách riêng ra thành 2 côt
địa chỉ và tỉnh thành mà không làm thế nào được !

Mong các bạn giúp đỡ -\\/.!
 
Bạn thử dùng công thức trong file sau đó sửa 1 số địa chỉ nhập không có nguyên tắc
 

File đính kèm

Mình có khoảng hơn 1000 Khách hàng mà muốn tách riêng ra thành 2 côt
địa chỉ và tỉnh thành mà không làm thế nào được !

Mong các bạn giúp đỡ -\\/.!
Dữ liệu của bạn không đồng nhất nên khó cho kết quả chính xác.
VD: BT6-Số 262 Nguyễn Huy Tưởng, Q,Thanh Xuân-HN\ => BT6 ? (Dựa vào dấu "-")
 
Cảm ơn bạn nhé

Nhưng không còn cách nào khác nữa sao bạn ơi ! mình chỉ coppy 1000 Khách hàng thôi chứ thực ra mình có 90.700 cơ thế này chắc mình chết rồi +-+-+-+
 
Bạn thử chạy macro sau trên trang tính 100.000 khách hàng của bạn xem sao

Cảm ơn bạn nhé

Nhưng không còn cách nào khác nữa sao bạn ơi ! mình chỉ coppy 1000 Khách hàng thôi chứ thực ra mình có 90.700 cơ thế này chắc mình chết rồi +-+-+-+

Chú í:
(*) Bạn cần đổi 1 trang tính trắng có tên là "KQ" & trang tính chứa CSDL là Sheet1
Tất nhiên kết quả chưa thể mĩ mãn được ngay; Nhưng chưa chi đã than khóc, mất nhuệ khí thanh niên đi!
(*) Nếu trang KQ có khoảng 40% dữ liệu thì báo cho biết với nha! Mình sẽ xóa các dòng đã tách được bên Sheet1
(*) Với số dữ liệu của bạn, bạn nên xài macro hơn là xài công thức!


PHP:
Option Explicit
Sub TachDC()
 On Error Resume Next
 Const Ph As String = ","
 Dim Clls As Range, VTr As Byte, Sh As Worksheet
 
 Set Sh = Sheets("KQ"):             Sheet1.Select
 Sh.[B1].CurrentRegion.Offset(1).ClearContents
 For Each Clls In Range([A1], [A65500].End(xlUp))
   With Sh.[A65500].End(xlUp).Offset(1)
      VTr = InStr(Clls.Value, Ph)
      If VTr > 0 Then
         .Value = Left(Clls.Value, VTr - 1)
         .Offset(, 1).Value = Mid(Clls.Value, VTr + 1)
      End If
   End With
 Next Clls
End Sub
Chờ tin bạn!
 
Lần chỉnh sửa cuối:
Do dữ liệu gốc của bạn nhập quá nhiều kiểu, nguyên tắc ghi địa danh nên việc tách nó có tính tương đối, sau đó bạn phải hoàn thiện bằng tay những ô mà chỉ có bạn mới hiểu nổi ấy.
Ngoài việc dùng code, công thức bạn dùng chức năng text to column cũng khả dĩ.
Cụ thể:
1/Chọn toàn bộ cột 90.000 địa chỉ ấy--copy sang 1 cột tạm
2/Chọn cột tạm-->Edit--fìnd-->Gõ "-" trong ô Replace gõ ","-->Replace All
3/Vẫn chọn cả cột tạm-->Data--->Text to Column
Thực hiện theo trình tự Vizard:
Bước 1: Chọn Delimited-->Next
Bước 2:Ô Commar chắc chắn được chọn -->Next
Bước 3:Trong ô Destination bạn chon ô đầu tiên của vùng kết quả xuất ra-->Finish
Nói thì lòng vòng vậy nhưng thực tế khá nhanh gọn thôi
 
Lần chỉnh sửa cuối:
Không được bạn à !

không biết sao không chạy gì cả **~**
 
Haha. Vui quá. GPE ngày càng nhiều cao thủ. Học hỏi được nhiều. Thanks các thanh niên
 
Mình viết Code VBA bạn thử xem sao. Mở File lên rồi ở đâu cũng được nhấn Ctrl+m kể cả đích ở sheet nào khác.

PHP:
Sub Addr_Split()
Dim Tam
Dim Rg1, Rg2, Cll As Range
Dim Tb1, Tb2, ch As String
Dim k, k1 As Long
On Error GoTo Thoat
k = 0: k1 = 0
Tb1 = "Chon vung du lieu can tach, co the chon ca cot: " & Chr(10) & "(Co the dung chuot quet vung du lieu)"
Tb2 = "SEALAND GPE"
Set Rg1 = Application.InputBox(Tb1, Tb2, , , , , , 8)
If Rg1.Columns.Count > 1 Then MsgBox "Chi chon 1 cot thoi! De nghi chon lai.": Exit Sub
Tb1 = "Chon o dau tien cua cot dich: " & Chr(10) & "(Co the dung chuot de chon)"
Set Rg2 = Application.InputBox(Tb1, Tb2, , , , , , 8)
For Each Cll In Rg1.Cells
If Cll.Text <> "" Then
ch = Replace(Cll.Text, "-", ",")
Tam = Split(ch, ",")
Rg2.Offset(k) = Tam(0)
k1 = k1 + 1
End If
k = k + 1
Next
MsgBox "Da tach tong so " & Format(k1, "#,##0") & " dia chi."
Thoat:
Exit Sub
End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
Web KT

Bài viết mới nhất

Back
Top Bottom