Tách chuỗi mong muốn

Liên hệ QC

hutonline

Thành viên mới
Tham gia
25/7/07
Bài viết
22
Được thích
7
Tôi có bài toán sau, mong mọi người giúp đỡ.
Dữ liệu chuỗi gốc tại Cột B, Chuỗi cần xử lý như Cột C.
Chuỗi trong Cột C hiện nay mình đang làm bằng thủ công, do tại Cột B số lượng ký tự không giống nhau nên công thức không áp dụng hết được cho cả bản (bảng thực có hơn 5.000 dòng).
Yêu cầu: lấy Chuỗi XXX từ Cột B, quy tắc: Cột XXX xóm (hoặc đường). xem file đính kèm.
Mong mọi người xem, giúp đỡ
 

File đính kèm

  • tach chuoi.xls
    83 KB · Đọc: 40
Nhìn dữ liệu và kết quả của bạn thấy không thông nhất.
Nếu dữ liệu của bạn "811 1AĐường Giải Phóng Hà Nội" thay bằng "811 1A Đường Giải Phóng Hà Nội" thì tại C2 bạn dùng công thức
=TRIM(MID(SUBSTITUTE(B2," ",REPT(" ",255)),255,255))
 
Tôi có bài toán sau, mong mọi người giúp đỡ.
Dữ liệu chuỗi gốc tại Cột B, Chuỗi cần xử lý như Cột C.
Chuỗi trong Cột C hiện nay mình đang làm bằng thủ công, do tại Cột B số lượng ký tự không giống nhau nên công thức không áp dụng hết được cho cả bản (bảng thực có hơn 5.000 dòng).
Yêu cầu: lấy Chuỗi XXX từ Cột B, quy tắc: Cột XXX xóm (hoặc đường). xem file đính kèm.
Mong mọi người xem, giúp đỡ

Bạn xem file đính kèm nhé.
 

File đính kèm

  • tach chuoi.xls
    90 KB · Đọc: 20
Tôi có bài toán sau, mong mọi người giúp đỡ.
Dữ liệu chuỗi gốc tại Cột B, Chuỗi cần xử lý như Cột C.
Chuỗi trong Cột C hiện nay mình đang làm bằng thủ công, do tại Cột B số lượng ký tự không giống nhau nên công thức không áp dụng hết được cho cả bản (bảng thực có hơn 5.000 dòng).
Yêu cầu: lấy Chuỗi XXX từ Cột B, quy tắc: Cột XXX xóm (hoặc đường). xem file đính kèm.
Mong mọi người xem, giúp đỡ

Bài này không cần công thức cũng xử lý được.
Copy ra 1 cột mới. Chọn hết cột mới
Bấm Ctrl +H
Trong hộp thoại Find What nhập: Khoảng trắngX*
Bấm Replace All
Trong hộp thoại Find What nhập: Đ*
Bấm Replace All
Trong hộp thoại Find What nhập: *khoảng trắng
Bấm Replace All
Mình nghĩ vậy chắc là xong rồi đấy
 
Bài này không cần công thức cũng xử lý được.
Copy ra 1 cột mới. Chọn hết cột mới
Bấm Ctrl +H
Trong hộp thoại Find What nhập: Khoảng trắngX*
Bấm Replace All
Trong hộp thoại Find What nhập: Đ*
Bấm Replace All
Trong hộp thoại Find What nhập: *khoảng trắng
Bấm Replace All
Mình nghĩ vậy chắc là xong rồi đấy

Có vẻ chưa ổn lắm thì phải. Tôi ý kiến thôi nhé, không áp đặt đâu. Không khăng khăng cho là mình đúng đâu nhé.
Hiện thời thì trước "Đường" không có dấu cách còn trước "Xóm" có dấu cách. Do dữ liệu lung tung như vậy nên ta có quyền giả thiết là trong dữ liệu thực thì có chỗ ngược lại, tức trước "Đường" có dấu cách còn trước "Xóm" không có dấu cách.
Dòng "811 1A Đường Giải Phóng Hà Nội" sau khi thực hiện Replace cho " X*" và "Đ*" thì thành ""811 1A ", tiếp theo sau Replace cho "* " thì hết trụi.
Dòng "aaa 38AXóm Yên Sơn Thanh Ngọc T/C" sau khi thực hiện Replace cho " X*" và "Đ*" thì vẫn là "aaa 38AXóm Yên Sơn Thanh Ngọc T/C", tiếp theo sau Replace cho "* " thì là "T/C"
-------------
Ngoài các th trên là hoàn toàn có thể sẩy ra thì tôi không biết liệu có kiểu dữ liệu như sau không nhỉ:
"811 1Đ Đường Giải Phóng Hà Nội"
"aaa 38XXóm Yên Sơn Thanh Ngọc T/C"
--------------
Ngoài "Xóm" và "Đường" ra thì dữ liệu còn có: "Cột 24A.3 TBA Yên Sơn Thanh Chương"
Không biết còn dạng nào nữa mà người hỏi quên không nhỉ?
 
Công thức của hoangminhtien kết hợp SUBSTITUTE Đường Xóm sẽ thỏa điều kiện của bác siwtom:
=SUBSTITUTE(SUBSTITUTE(TRIM(MID(SUBSTITUTE(B2," ",REPT(" ",255)),255,255)),"Đường",""),"Xóm","")
 

File đính kèm

  • tach chuoi.xls
    76.5 KB · Đọc: 13
Lần chỉnh sửa cuối:
Có vẻ chưa ổn lắm thì phải. Tôi ý kiến thôi nhé, không áp đặt đâu. Không khăng khăng cho là mình đúng đâu nhé.
Hiện thời thì trước "Đường" không có dấu cách còn trước "Xóm" có dấu cách. Do dữ liệu lung tung như vậy nên ta có quyền giả thiết là trong dữ liệu thực thì có chỗ ngược lại, tức trước "Đường" có dấu cách còn trước "Xóm" không có dấu cách.
Dòng "811 1A Đường Giải Phóng Hà Nội" sau khi thực hiện Replace cho " X*" và "Đ*" thì thành ""811 1A ", tiếp theo sau Replace cho "* " thì hết trụi.
Dòng "aaa 38AXóm Yên Sơn Thanh Ngọc T/C" sau khi thực hiện Replace cho " X*" và "Đ*" thì vẫn là "aaa 38AXóm Yên Sơn Thanh Ngọc T/C", tiếp theo sau Replace cho "* " thì là "T/C"
-------------
Ngoài các th trên là hoàn toàn có thể sẩy ra thì tôi không biết liệu có kiểu dữ liệu như sau không nhỉ:
"811 1Đ Đường Giải Phóng Hà Nội"
"aaa 38XXóm Yên Sơn Thanh Ngọc T/C"
--------------
Ngoài "Xóm" và "Đường" ra thì dữ liệu còn có: "Cột 24A.3 TBA Yên Sơn Thanh Chương"
Không biết còn dạng nào nữa mà người hỏi quên không nhỉ?

Thực ra mình đưa ra phương pháp cho chủ topic tham khảo. Nếu bạn ấy khéo léo vận dụng thì tự nhiên sẽ biết ứng phó với dữ liệu thật của bạn ấy thôi anh ơi. Để cho an toàn thì xử cả chuỗi luôn. Ví dụ "Đường*"
Nếu xa xỉ hơn tí nữa thì xài code thế này xem sao
PHP:
Sub Loc()
Dim dl As Range, i As Long
Range([B2], [B65536].End(3)).Copy [E2]
Set dl = Range([E2], [E65536].End(3))
For i = 1 To dl.Rows.Count
   dl(i, 1).Replace "X*", ""
   dl(i, 1).Replace ChrW(272) & "*", ""
   dl(i, 1).Replace "TBA*", ""
   dl(i, 1) = Trim(dl(i, 1))
   dl(i, 1).Replace "* ", ""
Next
End Sub
 

File đính kèm

  • Copy of tach chuoi.rar
    23.7 KB · Đọc: 19
Lần chỉnh sửa cuối:
Bạn có thể up file lên hộ mình không
 
Cảm ơn mọi người đã giúp đỡ, cơ bản đã giải quyết được vấn đề, tuy nhiên dữ liệu thật có các tình huống sau, do người nhập dữ liệu gây nên:

Tôi chạy Code của quanghai196 có một số tình huống sau:

1.dữ liệu "Cột11B.4 Xóm Ngọc Yên - Thanh Ngọc". Sau Côt không có dấu cách, nếu sử dụng VBA của bạn sẽ cho kết quả Cộtt11B.4;
2. dữ liệu "Cột 25A Yên Sơn Thanh Ngọc Thanh Chương", chạy VBA cho kết quả Chương, cái này do trong VBA chưa định nghĩa Y
Mong mọi người xem, giải quyết giùm





Thực ra mình đưa ra phương pháp cho chủ topic tham khảo. Nếu bạn ấy khéo léo vận dụng thì tự nhiên sẽ biết ứng phó với dữ liệu thật của bạn ấy thôi anh ơi. Để cho an toàn thì xử cả chuỗi luôn. Ví dụ "Đường*"
Nếu xa xỉ hơn tí nữa thì xài code thế này xem sao
PHP:
Sub Loc()
Dim dl As Range, i As Long
Range([B2], [B65536].End(3)).Copy [E2]
Set dl = Range([E2], [E65536].End(3))
For i = 1 To dl.Rows.Count
   dl(i, 1).Replace "X*", ""
   dl(i, 1).Replace ChrW(272) & "*", ""
   dl(i, 1).Replace "TBA*", ""
   dl(i, 1) = Trim(dl(i, 1))
   dl(i, 1).Replace "* ", ""
Next
End Sub
 
Cảm ơn mọi người đã giúp đỡ, cơ bản đã giải quyết được vấn đề, tuy nhiên dữ liệu thật có các tình huống sau, do người nhập dữ liệu gây nên:

Tôi chạy Code của quanghai196 có một số tình huống sau:

1.dữ liệu "Cột11B.4 Xóm Ngọc Yên - Thanh Ngọc". Sau Côt không có dấu cách, nếu sử dụng VBA của bạn sẽ cho kết quả Cộtt11B.4;
2. dữ liệu "Cột 25A Yên Sơn Thanh Ngọc Thanh Chương", chạy VBA cho kết quả Chương, cái này do trong VBA chưa định nghĩa Y
Mong mọi người xem, giải quyết giùm
Bạn xem code bổ sung. Nếu có phát sinh trường hợp mới bạn tự sửa được mà
PHP:
Sub Loc()
Dim dl As Range, i As Long
Range([B2], [B65536].End(3)).Copy [E2]
Set dl = Range([E2], [E65536].End(3))
For i = 1 To dl.Rows.Count
   dl(i, 1).Replace "X*", ""
   dl(i, 1).Replace ChrW(272) & "*", ""
   dl(i, 1).Replace "TBA*", ""
   dl(i, 1).Replace "Y*", ""
   dl(i, 1).Replace "*t", ""
   dl(i, 1) = Trim(dl(i, 1))
   dl(i, 1).Replace "* ", ""
Next
End Sub
Hoặc thử thế này xem
PHP:
Sub Loc2()
Dim dl(), i As Long
Range([B2], [B65536].End(3)).Copy [E2]
dl = Range([B2], [B65536].End(3)).Value
With CreateObject("vbscript.regexp")
   .Global = True
For i = 1 To UBound(dl)
   .Pattern = ChrW(272) & ".*|X.*|Y.*|TBA.*"
   dl(i, 1) = Trim(.Replace(dl(i, 1), ""))
   .Pattern = ".*t|.* "
   dl(i, 1) = .Replace(dl(i, 1), "")
Next
End With
[E2].Resize(i - 1) = dl
End Sub
 
Lần chỉnh sửa cuối:
tính tổng mét khối đang sử dụng

Mình là thành viên mới, ko biết tạo chủ để ở đâu.mình có vấn đề này mong mọi người giúp.yêu cầu tính tổng m3 đang sử dụng, điền vào bảng 2.mình dùng sumif, nhưng kéo sang ngang thì kết quả ko đúng.&&&%$R.thanks
 

File đính kèm

  • Book1.xls
    18.5 KB · Đọc: 7
Lần chỉnh sửa cuối:
Cảm ơn bạn quanghai,
Code trên thì mình hiểu nhưng code sau:
Sub Loc2()
Dim dl(), i As Long
Range
([B2], [B65536].End(3)).Copy [E2]
dl = Range([B2], [B65536].End(3)).Value
With CreateObject
("vbscript.regexp")
.Global =
True
For i = 1 To UBound(dl)
.
Pattern = ChrW(272) & ".*|X.*|Y.*|TBA.*"
dl(i, 1) = Trim(.Replace(dl(i, 1), ""))
.
Pattern = ".*t|.* "
dl(i, 1) = .Replace(dl(i, 1), "")
Next
End With
[E2].Resize(i - 1) = dl
End Sub

bạn có thể giải thích được không
Bạn xem code bổ sung. Nếu có phát sinh trường hợp mới bạn tự sửa được mà
PHP:
Sub Loc()
Dim dl As Range, i As Long
Range([B2], [B65536].End(3)).Copy [E2]
Set dl = Range([E2], [E65536].End(3))
For i = 1 To dl.Rows.Count
   dl(i, 1).Replace "X*", ""
   dl(i, 1).Replace ChrW(272) & "*", ""
   dl(i, 1).Replace "TBA*", ""
   dl(i, 1).Replace "Y*", ""
   dl(i, 1).Replace "*t", ""
   dl(i, 1) = Trim(dl(i, 1))
   dl(i, 1).Replace "* ", ""
Next
End Sub
Hoặc thử thế này xem
PHP:
Sub Loc2()
Dim dl(), i As Long
Range([B2], [B65536].End(3)).Copy [E2]
dl = Range([B2], [B65536].End(3)).Value
With CreateObject("vbscript.regexp")
   .Global = True
For i = 1 To UBound(dl)
   .Pattern = ChrW(272) & ".*|X.*|Y.*|TBA.*"
   dl(i, 1) = Trim(.Replace(dl(i, 1), ""))
   .Pattern = ".*t|.* "
   dl(i, 1) = .Replace(dl(i, 1), "")
Next
End With
[E2].Resize(i - 1) = dl
End Sub
 
Mình là thành viên mới, ko biết tạo chủ để ở đâu.mình có vấn đề này mong mọi người giúp.yêu cầu tính tổng m3 đang sử dụng, điền vào bảng 2.mình dùng sumif, nhưng kéo sang ngang thì kết quả ko đúng.&&&%$R.thanks
G17 bạn viết:=SUMIF($C$4:$C$13,C4,$G$4:$G$13) khi kéo ngang C4 sẽ là C5, C6, ... Cn, bạn nhìn vào ô H17 xem sao
Bảng 2 dòng 16 có các khu vực A, B, C sao bạn không sử dụng?
G17 =SUMIF($C$4:$C$13,G$16,$G$4:$G$13)
Ô G16 mình cố định dòng 16 với dấu $, còn cột G không cần cố định để khi kéo qua phải cột G sẽ là cột H
Nhờ mod chuyển hoặc xóa bài #12 và bài này dùm, cảm ơn !
 
cho mình hỏi Mình có kí 10A-2-2 mình muốn bỏ dấu - sau chữ A thành liền kề với chữ A,dấu - tiếp theo thì chuyển thành dấu chấm.kết quả mình mong muốn là 10A2.2.thanks các bạn trước nhé
 
Web KT
Back
Top Bottom