Trang 1/2 1 2 cuốicuối
Hiển thị kết quả tìm kiếm từ 1 đến 10 trên tổng số: 14
  1. #1

    Cắt khoảng trắng, kí tự đặc biệt trong chuỗi

    Mình có 1 chuổi như thế này:
    " 00-1-099-555.98*ACD. 000"
    Bác nào giúp mình cách cắt các khoảng trắng + các kí tự đặt biệt ra khỏi chuổi trên dùm
    để được chuổi như sau: "00109955598ACD000" (Các Bác lưu ý dùm phía trước vẫn còn giữ lại được số 0)
    Mong các Bác giúp đỡ nhiệt tình

  2. #2
    Tham gia ngày
    12 2007
    Bài gởi
    671
    Cảm ơn
    187
    Được cảm ơn 356 lần trong 224 bài viết

    php

    Tôi viết hàm trong file đính kèm, chỉ giữ lại các số, chữ cái. bạn có thể sửa để giữ lại thêm gì đó trong dong lệnh có chữ đỏ
    PHP Code:
    Function loai(bc As String)
    Dim kq As String
    kq 
    ""
    For 1 To Len(bc)
    kq1 Mid(bci1)
    Select Case kq1
    [B][COLOR=red]C[/COLOR][COLOR=red]ase [/COLOR][COLOR=red]"0" To "9""a" To "z""A" To "Z"[/COLOR][/B]
    kq kq kq1
    End Select
    Next
    loai 
    kq
    End 
    Function 
    Còn 1 lỗi: đó là nếu kq chỉ toàn số thì các số 0 ở đầu bị bỏ qua. Tuy nhiên sửa không khó
    Tập tin đính kèm Tập tin đính kèm
    thay đổi nội dung bởi: hoangdanh282vn, 23-12-10 lúc 10:55 AM

  3. Thành viên sau cảm ơn haonlh về bài viết này:


  4. #3
    Tham gia ngày
    12 2007
    Nơi Cư Ngụ
    Q. Bình Thạnh - TPHCM
    Bài gởi
    1,861
    Cảm ơn
    2,859
    Được cảm ơn 4,945 lần trong 1,489 bài viết
    Trích Nguyên văn bởi netmatrix View Post
    Mình có 1 chuổi như thế này:
    " 00-1-099-555.98*ACD. 000"
    Bác nào giúp mình cách cắt các khoảng trắng + các kí tự đặt biệt ra khỏi chuổi trên dùm
    để được chuổi như sau: "00109955598ACD000" (Các Bác lưu ý dùm phía trước vẫn còn giữ lại được số 0)
    Mong các Bác giúp đỡ nhiệt tình
    Bạn có thể dùng công thức sau. Giả sử ô A1 chứa dữ liệu :

    PHP Code:
    =SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1," ",""),"-",""),".",""),"*",""
    Nếu có thêm ký tự đặc biệt thì bạn thêm hàm Substitute vào công thức là ok.

  5. Có 2 thành viên cảm ơn hoangdanh282vn về bài viết này:


  6. #4
    1. Cám ơn Bác haonlh và Bác hoangdanh282vn đã giúp đỡ mình tận tình.
    Đây là trường hợp mình gặp trong thực tế do phải tổng hợp, so sánh dữ liệu từ các bộ phận trong cty. Mình rất đau đầu vì trường hợp này
    Chuổi trên " 00-1-099-555.98*ACD. 000" là 1 ví dụ điển hình (tuy hơi quá) về mã hàng hoá của nhiều nhà sản xuất.
    Mình muốn cắt hết toàn bộ các khoảng trắng + kí tự đặt biệt để tinh gọn dữ liệu, chỉ cần giữ lại được chính xác số kí tự trong chuổi mà thôi (ví dụ: sao khi cắt sẽ là:"00109955598ACD000" giữ lại kể cả 2 số 0 phía trước)
    @haonlh: Mình thích cách áp dụng function của Bác Tuy nhiên mình mù tịt về VB nếu Bác có thể giúp mình hoàn chỉnh phần Code để có thể giữ lại được mấy số 0 phía trước lẫn phía sau vd: như trường hợp "004123,00" mình rất biết ơn Bác (dấu , thực ra là dấu . nhưng do người nhập liệu sai nên chắc chắn sẽ có thể xảy ra trường hợp này)
    @hoangdanh282vn: Cách sử dụng hàm sẵn có trong excell của Bác rất đơn giản và dễ sử dụng. Tuy nhiên vẫn không khắc phục được lỗi mất số 0 phía trước. Bác có cao kiến gì không?
    2. Mình vừa nghĩ ra thêm 1 giải pháp để hạn chế việc nhập liệu bị sai cũng như thống nhất cách nhập liệu giữa các bộ phận trong cty: Là định dạng sẵn 1 cột sao cho khi ta nhập dữ liệu dạng chuổi vào cột ấy vd: " 00-1-099-555.98*ACD. 000" và nhấn enter thì chuổi sẽ tự động được trả về giá trị "00109955598ACD000"
    Các Bác có cách nào giải quyết vấn đề thứ 2 mình nêu ra không?
    3. 1 lần nữa xin chân thành cám ơn 2 Bác haonlh, hoangdanh282vn đã giúp đỡ mình
    Xin hoan nghênh các thành viên khác có dịp ghé qua topic này và để lại giải pháp giúp mình giải quyết 2 vấn đề trên
    thay đổi nội dung bởi: netmatrix, 24-12-10 lúc 07:57 AM

  7. #5
    Tham gia ngày
    09 2009
    Bài gởi
    2,604
    Cảm ơn
    3,308
    Được cảm ơn 5,334 lần trong 2,335 bài viết
    Trích Nguyên văn bởi netmatrix View Post
    1. Cám ơn Bác haonlh và Bác hoangdanh282vn đã giúp đỡ mình tận tình.
    Đây là trường hợp mình gặp trong thực tế do phải tổng hợp, so sánh dữ liệu từ các bộ phận trong cty. Mình rất đau đầu vì trường hợp này
    Chuổi trên " 00-1-099-555.98*ACD. 000" là 1 ví dụ điển hình (tuy hơi quá) về mã hàng hoá của nhiều nhà sản xuất.
    Mình muốn cắt hết toàn bộ các khoảng trắng + kí tự đặt biệt để tinh gọn dữ liệu, chỉ cần giữ lại được chính xác số kí tự trong chuổi mà thôi (ví dụ: sao khi cắt sẽ là:"00109955598ACD000" giữ lại kể cả 2 số 0 phía trước)
    @haonlh: Mình thích cách áp dụng function của Bác Tuy nhiên mình mù tịt về VB nếu Bác có thể giúp mình hoàn chỉnh phần Code để có thể giữ lại được mấy số 0 phía trước lẫn phía sau vd: như trường hợp "004123,00" mình rất biết ơn Bác (dấu , thực ra là dấu . nhưng do người nhập liệu sai nên chắc chắn sẽ có thể xảy ra trường hợp này)
    @hoangdanh282vn: Cách sử dụng hàm sẵn có trong excell của Bác rất đơn giản và dễ sử dụng. Tuy nhiên vẫn không khắc phục được lỗi mất số 0 phía trước. Bác có cao kiến gì không?
    2. Mình vừa nghĩ ra thêm 1 giải pháp để hạn chế việc nhập liệu bị sai cũng như thống nhất cách nhập liệu giữa các bộ phận trong cty: Là định dạng sẵn 1 cột sao cho khi ta nhập dữ liệu dạng chuổi vào cột ấy vd: " 00-1-099-555.98*ACD. 000" và nhấn enter thì chuổi sẽ tự động được trả về giá trị "00109955598ACD000"
    Các Bác có cách nào giải quyết vấn đề thứ 2 mình nêu ra không?
    3. 1 lần nữa xin chân thành cám ơn 2 Bác haonlh, hoangdanh282vn đã giúp đỡ mình
    Xin hoan nghênh các thành viên khác có dịp ghé qua topic này và để lại giải pháp giúp mình giải quyết 2 vấn đề trên
    Vấn đề thứ 2 của bạn không khó nhưng phải xem dữ liệu ban đầu & dữ liệu muốn lấy của bạn, nói chung nó phải có quy luật thì Ok ngay thôi
    Còn "bi" giờ tạm thời mình góp với bạn một cách làm bằng hàm tự tạo, vì có nhiều người nhập == >dữ liệu bị lung tung, nên cách mình làm là cứ những ký tự nào mà bạn cho là "đặc biệt" phải "thịt" nó thì bạn cho vào hàm nhé
    Code:
     
    Public Function cat(Vung As Range, KtDb)
        Dim I As Integer, Tam As String
            For I = 1 To Len(Vung)
                If InStr(1, KtDb, Mid(Vung, I, 1)) Then
                    Tam = Tam
                Else
                    Tam = Tam & Mid(Vung, I, 1)
                End If
            Next
        cat = Tam
    End Function
    Thí dụ dữ liệu nằm ở A1
    Cú pháp: =cat(A1,"những ký tự muốn cắt")
    Tập tin đính kèm Tập tin đính kèm

  8. Thành viên sau cảm ơn concogia về bài viết này:


  9. #6
    Tham gia ngày
    12 2007
    Bài gởi
    671
    Cảm ơn
    187
    Được cảm ơn 356 lần trong 224 bài viết
    cái của anh concopgia hay hon cua tôi đó. Vì nó có tham số thứ 2 là các ký tự không lấy.Nếu cần giữ lại các số 0 ở đầu và ở cuối sau dấu chấm thập phân thì nên ghép thêm 1 chữ cái vô đầu. Ví dụ, dùng chữ "a" và lấy hàm của anh concopgia:= "a" & cat(A1,"những ký tự muốn cắt") Tất nhiên khi xử lý thì phải chú ý.

  10. #7
    Tham gia ngày
    06 2008
    Bài gởi
    24,219
    Cảm ơn
    13,896
    Được cảm ơn 43,151 lần trong 19,514 bài viết
    Hàm thế này cũng được vậy!
    PHP Code:
    Function RejSymbol(Text As String)
      
    With CreateObject("VBScript.RegExp")
        .Global = 
    True: .Pattern "\W"
        
    RejSymbol = .Replace(Text"")
      
    End With
    End 
    Function 
    Mấy vụ tách số, tách chữ này đâu cần đến vòng lập (code VBA có sẵn để làm việc này)
    Tập tin đính kèm Tập tin đính kèm
    thay đổi nội dung bởi: ndu96081631, 24-12-10 lúc 09:40 AM

  11. Có 5 thành viên cảm ơn ndu96081631 về bài viết này:


  12. #8
    Tham gia ngày
    02 2008
    Bài gởi
    796
    Cảm ơn
    942
    Được cảm ơn 1,188 lần trong 562 bài viết
    Trích Nguyên văn bởi netmatrix View Post
    2. Mình vừa nghĩ ra thêm 1 giải pháp để hạn chế việc nhập liệu bị sai cũng như thống nhất cách nhập liệu giữa các bộ phận trong cty: Là định dạng sẵn 1 cột sao cho khi ta nhập dữ liệu dạng chuổi vào cột ấy vd: " 00-1-099-555.98*ACD. 000" và nhấn enter thì chuổi sẽ tự động được trả về giá trị "00109955598ACD000"
    Các Bác có cách nào giải quyết vấn đề thứ 2 mình nêu ra không?
    Làm cho bạn thử nè:
    Hãy gõ lung tung rồi Enter xem
    Tập tin đính kèm Tập tin đính kèm

  13. Thành viên sau cảm ơn thanhlanh về bài viết này:


  14. #9
    @concopgia: Thanks Bác rất nhiều, mình thích cách viết code của Bác vì có tham số cho phép lựa chọn để cắt <-- ứng dụng sẽ rộng hơn
    Vấn đề thứ 2 Bác nêu ra "Vấn đề thứ 2 của bạn không khó nhưng phải xem dữ liệu ban đầu & dữ liệu muốn lấy của bạn, nói chung nó phải có quy luật thì Ok ngay thôi" Thực ra nó có quy luật đấy chứ: Mã hàng của nhà sản xuất thường chỉ có số 0-9 kèm chữ a-Z và được ngăn cách với nhau bằng dấu ". - _ hoặc # khoảng trắng" (theo quy luật ngầm định của mỗi công ty). Các kí tự đặt biệt này chỉ đóng vai trò thứ yếu, giúp nhà sản xuất nhận dạng nhanh mã số hàng này thuộc chủng loại hoặc nhóm hàng nhất định nào đó, cho nên có hay không có thì cũng không quan trọng. Nên mình nghĩ vấn đề thứ 2 có khả năng giải quyết được.
    @ndu96081631: Bác giúp mình giải quyết bài toán với 1 hướng khác thuần VBA, code này chắc chắn chạy nhanh hơn vòng lặp (theo ý chủ quan của mình vì mình ko biết rành VBA). Bác trùm về VBA rồi, code của Bác concopgia mình còn lơ mơ hiểu đôi chút (hao hao giống C, pascal mình từng học), còn của Bác thì mình .... chịu :(. Thanks Bác đã giúp đỡ nhiệt tình. Bác có cách giúp mình giải quyết vấn đề thứ 2 được chứ ?
    @Thanhlanh: Hướng giải quyết vấn đề thứ 2 của Bác rất hay, mình gõ "lung tung" theo ý Bác thì kết quả là nó cắt mất số "0" đầu và cuối của mình rồi :( + với tác dụng trên toàn sheet không ổn bác ơi. Mình chỉ cần 1 cột thôi :D vì sheet còn chứa nhiều thứ khác nữa mà. Bác lỡ làm rồi thì làm tới luôn đi cho AE diễn đàn còn học hỏi :D . Thanks Bác nhiều
    PS: Vấn đề 1 đã giải quyết xong 1 cách tuyệt vời nhờ sự giúp đỡ nhiệt tình của các Bác. Vấn đề thứ 2 còn nan giải
    * Vấn đề thứ 2: Cần định dạng 1 cột dữ liệu sao cho khi nhập vào giá trị chuổi " 00-1-099-555.98*ACD. 000" và nhấn enter thì chuổi sẽ tự động được trả về giá trị "00109955598ACD000"
    thay đổi nội dung bởi: netmatrix, 25-12-10 lúc 01:29 AM

  15. #10
    Tham gia ngày
    06 2008
    Bài gởi
    24,219
    Cảm ơn
    13,896
    Được cảm ơn 43,151 lần trong 19,514 bài viết
    Trích Nguyên văn bởi netmatrix View Post
    PS: Vấn đề 1 đã giải quyết xong 1 cách tuyệt vời nhờ sự giúp đỡ nhiệt tình của các Bác. Vấn đề thứ 2 còn nan giải
    * Vấn đề thứ 2: Cần định dạng 1 cột dữ liệu sao cho khi nhập vào giá trị chuổi " 00-1-099-555.98*ACD. 000" và nhấn enter thì chuổi sẽ tự động được trả về giá trị "00109955598ACD000"
    Hàm có rồi, giờ cứ ráp vào sự kiện Change là xong thôi
    PHP Code:
    Private Sub Worksheet_Change(ByVal Target As Range)
      
    Dim Clls As RangeResRng As Range
      On Error 
    GoTo ExitSub
      
    If Not Intersect(Range("A2:A1000"), TargetIs Nothing Then
        Set ResRng 
    Intersect(Range("A2:A1000"), Target)
        
    Application.EnableEvents False
        
    For Each Clls In ResRng
          
    If Clls.Value <> "" Then Clls.Value RejSymbol(Clls.Value)
        
    Next
    ExitSub
    :
        
    Application.EnableEvents True
      End 
    If
    End Sub 
    Với code này thì:
    - Khi ta nhập liệu từ cell A2 đến cell A1000, code sẽ tự động chuyển đổi theo ý
    - Cho phép copy từ nơi khác paste vào nhiều cell cùng lúc
    - Cho phép thêm dòng, xóa dòng mà vẫn không gây lỗi
    Tập tin đính kèm Tập tin đính kèm
    thay đổi nội dung bởi: ndu96081631, 25-12-10 lúc 08:22 AM

  16. Có 3 thành viên cảm ơn ndu96081631 về bài viết này:


Trang 1/2 1 2 cuốicuối

Thông tin về chủ đề này

Users Browsing this Thread

Hiện có 1 người đang xem đề tài này. (0 thành viên và 1 khách)

Bookmarks

Bookmarks

Quyền Sử Dụng Ở Diễn Ðàn

  • Bạn không thể đăng đề tài mới
  • Bạn không thể đăng trả lời
  • Bạn không thể đăng file đính kèm.
  • Bạn không thể sửa bài viết.
  •  

Mudim v0.8 Tắt VNI Telex Viqr Tổng hợp
Chính tả Bỏ dấu kiểu mới  [Bật/Tắt (F9)]