Tách chuỗi để lấy cụm số phía sau của chuỗi

Liên hệ QC

hoanglocphat

Thành viên thường trực
Tham gia
27/1/13
Bài viết
258
Được thích
30
Chào các bạn,
Nhờ các bạn tách chuỗi để lấy cụm số ở fía sau của chuỗi
Trong file, kết quả muốn lấy ở cột B
Tôi đã dùng đủ cách nhưng vẫn chưa được, vì số liệu thực tế khoảng trên 10.000 dòng nên tách = thủ công thì mất nhiều thời gian
Các bạn có thể giúp bằng bằng công thức hay VBA cũng được, vì số liệu đa dạng nếu không có cách chính xác thì có thể tính chính xác gần đúng 98% cũng được
Cảm ơn các bạn!
 

File đính kèm

  • Tachsolieu.xls
    14 KB · Đọc: 50
Lần chỉnh sửa cuối:
Chào các bạn,
Nhờ các bạn tách chuỗi để lấy cụm số ở fía sau của chuỗi
Trong file, kết quả muốn lấy ở cột B
Tôi đã dùng đủ cách nhưng vẫn chưa được, vì số liệu thực tế khoảng trên 10.000 dòng nên tách = thủ công thì mất nhiều thời gian
Các bạn có thể giúp bằng bằng công thức hay VBA cũng được, vì số liệu đa dạng nếu không có cách chính xác thì có thể tính chính xác gần đúng 98% cũng được
Cảm ơn các bạn!

1. Chọn cột cần xử lý
2. Bấm Ctrl + H
3. Trong hộp Find nhập dấu * và 1 khoảng trắng ( nhập dấu * rồi gõ vào thanh spacebar 1 cái)
4. Chọn Replace All
 
Bạn sử dụng tạm code này
Mã:
Function Tach(ByVal Chuoi As String)
    Dim i As Long
    For i = Len(Chuoi) To 1 Step -1
        If Mid(Chuoi, i, 1) = " " Or Mid(Chuoi, i, 1) = "_" Or Mid(Chuoi, i, 1) = "-" Then
            Tach = Right(Chuoi, Len(Chuoi) - i)
            Exit Function
        End If
    Next
End Function
 
Chào các bạn,
Nhờ các bạn tách chuỗi để lấy cụm số ở fía sau của chuỗi
Trong file, kết quả muốn lấy ở cột B
Tôi đã dùng đủ cách nhưng vẫn chưa được, vì số liệu thực tế khoảng trên 10.000 dòng nên tách = thủ công thì mất nhiều thời gian
Các bạn có thể giúp bằng bằng công thức hay VBA cũng được, vì số liệu đa dạng nếu không có cách chính xác thì có thể tính chính xác gần đúng 98% cũng được
Cảm ơn các bạn!
Công thức ô B2:
PHP:
=TRIM(RIGHT(SUBSTITUTE(A2;" ";REPT(" ";200));200))
Kết quả là một chuỗi, không phải số.
--------------
Copy cột A sang cột B, xử cột B như bài #2 là gọn nhất.
 
1. Chọn cột cần xử lý
2. Bấm Ctrl H
3. Trong hộp Find nhập dấu * và 1 khoảng trắng ( nhập dấu * rồi gõ vào thanh spacebar 1 cái)
4. Chọn Replace All
Cảm ơn bạn
Cách của bạn khi thực hiện thì lấy cụm ký tự cuối cùng nên còn lấy sót các trường hợp
VD: Hoàng Lộc Phát 123, 456 thì ra kết quả 456 (kết qủa tôi muốn 123, 456)....
Mặt khác do tôi đưa số liệu còn thiếu 1 trường hợp
VD: Hoàng Lộc Phát thì sau khi xử lý thì nó có kết qủa Phát

Bây giờ ta tạm lấy kết quả sau khi xử lý như cách của bạn ở trên, tôi muốn tiếp tục xử lý lần 2 làm sao bỏ các ký tự là chữ, chỉ lấy các ký tự là số, dấu phẩy (,) dấu chấm phẩy (;) và dấu _ hay - . Tóm lại là ta bỏ các ký tự từ A đến Z

DỮ LIỆU -
 
Lần chỉnh sửa cuối:
Cảm ơn bạn
Cách của bạn khi thực hiện thì lấy cụm ký tự cuối cùng nên còn lấy sót các trường hợp
VD: Hoàng Lộc Phát 123, 456 thì ra kết quả 456 (kết qủa tôi muốn 123, 456)....
Mặt khác do tôi đưa số liệu còn thiếu 1 trường hợp
VD: Hoàng Lộc Phát thì sau khi xử lý thì nó có kết qủa Phát

Bây giờ ta tạm lấy kết quả sau khi xử lý như cách của bạn ở trên, tôi muốn tiếp tục xử lý lần 2 làm sao bỏ các ký tự là chữ, chỉ lấy các ký tự là số, dấu phẩy (,) dấu chấm phẩy (;) và dấu _ hay - . Tóm lại là ta bỏ các ký tự từ A đến Z

DỮ LIỆU -> KẾT QỦA SAU KHI XỬ LÝ
Phát
002;006;010 -> 002;006;010
57981, 6982 -> 57981, 6982
123 -456 -> 123 -456
Từ đầu do bạn không đưa dữ liệu có đủ các trường hợp khác nhau và kết quả cần lấy.
Bây giờ bạn lại ví dụ... mà không có file dữ liệu, phải làm sao đây.
Như bạn mô tả "lấy số" không lấy chữ thì cái số 2 trong dòng này lấy không?
Cty VT XD 2 C/Khỏan T/Tóan HĐ 34706;102969
.
Híc!
 
Cảm ơn bạn
Cách của bạn khi thực hiện thì lấy cụm ký tự cuối cùng nên còn lấy sót các trường hợp
VD: Hoàng Lộc Phát 123, 456 thì ra kết quả 456 (kết qủa tôi muốn 123, 456)....
Mặt khác do tôi đưa số liệu còn thiếu 1 trường hợp
VD: Hoàng Lộc Phát thì sau khi xử lý thì nó có kết qủa Phát

Bây giờ ta tạm lấy kết quả sau khi xử lý như cách của bạn ở trên, tôi muốn tiếp tục xử lý lần 2 làm sao bỏ các ký tự là chữ, chỉ lấy các ký tự là số, dấu phẩy (,) dấu chấm phẩy (;) và dấu _ hay - . Tóm lại là ta bỏ các ký tự từ A đến Z

DỮ LIỆU -> KẾT QỦA SAU KHI XỬ LÝ
Phát
002;006;010 -> 002;006;010
57981, 6982 -> 57981, 6982
123 -456 -> 123 -456
Nghịch ngợm tẹo, vận dụng thế nào cho đúng phù hợp là ở bạn !
Mã:
Sub GPE()
    With CreateObject("vbscript.regexp")
        .Global = True
        .Pattern = "[^0-9[COLOR=#ff0000][B];+-:,_[/B][/COLOR]]"
        MsgBox .Replace("Chuỗi cần tách", "")
    End With
End Sub
 
Nghịch ngợm tẹo, vận dụng thế nào cho đúng phù hợp là ở bạn !
Mã:
Sub GPE()
    With CreateObject("vbscript.regexp")
        .Global = True
        .Pattern = "[^0-9[COLOR=#ff0000][B];+-:,_[/B][/COLOR]]"
        MsgBox .Replace("Chuỗi cần tách", "")
    End With
End Sub

Trong chuỗi mẫu dấu - phải được escape \-

Vả lại, giải thuật trên gặp chuỗi có số hoặc dấu +-:; ở giữa ở giữa thì lọc ra sai.

Bài này thì dùng match để lấy ra chứ ai lại đem match ngược để trừ đi.

Mã:
Function LaySoCuoi(ByVal text As String) As String
With CreateObject("vbscript.regexp")
.Pattern = "( [0-9,\.:;\- ]+$)"
.Global = True
.IgnoreCase = True
If .test(text) Then
    LaySoCuoi = Trim(.Execute(text).Item(0).submatches.Item(0))
Else
    LaySoCuoi = ""
End If
End With
End Function

=== bổ sung ===
Tôi mới xem kỹ lại. Cái mẫu trên còn thiếu 1 chút. Gặp
Chi thuế GTGT đầu vào của HĐ - 687876 ---> - 687876 (dư dấu trừ)
Cần phải nhất định chuỗi lấy bắt đầu bằng 1 ký tự số
Sửa lại
.Pattern = "( [0-9][0-9,\.:;\- ]*$)"

Thiệt là rắc rối. Xem lại thì ý chủ thớt có chỗ này:
Trừ tạm ứng -Chi mua ống cống của Cty ĐT 741-127470 --> 127470, chứ không phải 741-127470
Và không phải dữ liệu nào cũng có dấu cách trước số. Như vậy mẫu phải là
.Pattern = "([0-9][0-9,\.:; ]*$)"

Nếu còn rắc rối nữa thì chịu thua
 
Lần chỉnh sửa cuối:
Web KT

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

Back
Top Bottom