Xóa khoảng trắng Space trong các phần tử trong mảng (1 người xem)

  • Thread starter Thread starter lehoctk
  • Ngày gửi Ngày gửi
Liên hệ QC

Người dùng đang xem chủ đề này

lehoctk

Thành viên chính thức
Tham gia
20/2/21
Bài viết
60
Được thích
1
Mong các thành viên trên diễn đàn cho em xin ý kiến về vấn đề loại bỏ khoảng trắng thừa trong các phần tử trong mảng.
Hiện tại em có thử đoạn đoạn code bên dưới nhưng không loại bỏ được khoảng trắng ở cuối chuỗi.
PHP:
Function RemoveSpaceChar(ByVal Str As String)
    With CreateObject("VBScript.RegExp")
        .IgnoreCase = True
        .MultiLine = True
        .Global = True
        .Pattern = "\s+"
        RemoveSpaceChar = Trim(.Replace(Str, Space(1)))
    End With
End Function

Sub tst()
    Dim i, tmp, data
    data = Array("         Banh       da do       500g        Xuan       Loc    ")
    For i = 0 To UBound(data)
        tmp = RemoveSpaceChar(data(i))
    Next
End Sub
A/c nào có thể chỉ cho em nguyên nhân lỗi được không ạ, em cảm ơn.
 
Có chắc là cái "trắng trắng" là "khoảng trắng" không :D ?.
 
Upvote 0
Mong các thành viên trên diễn đàn cho em xin ý kiến về vấn đề loại bỏ khoảng trắng thừa trong các phần tử trong mảng.
Hiện tại em có thử đoạn đoạn code bên dưới nhưng không loại bỏ được khoảng trắng ở cuối chuỗi.
PHP:
Function RemoveSpaceChar(ByVal Str As String)
    With CreateObject("VBScript.RegExp")
        .IgnoreCase = True
        .MultiLine = True
        .Global = True
        .Pattern = "\s+"
        RemoveSpaceChar = Trim(.Replace(Str, Space(1)))
    End With
End Function

Sub tst()
    Dim i, tmp, data
    data = Array("         Banh       da do       500g        Xuan       Loc    ")
    For i = 0 To UBound(data)
        tmp = RemoveSpaceChar(data(i))
    Next
End Sub
A/c nào có thể chỉ cho em nguyên nhân lỗi được không ạ, em cảm ơn.
Vâng, đúng là khoảng trắng bác nhé. Nó tương đương như này bác nhé: Array(Space(9) & "Banh" Space(7) &"da do" & Space(7) & "500g" & Space(8) & "Xuan& Space(8) & "Loc" & Space(4)).
Ở đây em đang giả thiết để nhằm mục đích học tập ạ, mong bác giữ chuỗi ở nguyên dạng mảng giúp em, để em còn thuận tiện mở rộng bác nhé. Em cảm ơn nhiều.
 
Lần chỉnh sửa cuối:
Upvote 0
Mong các thành viên trên diễn đàn cho em xin ý kiến về vấn đề loại bỏ khoảng trắng thừa trong các phần tử trong mảng.
Hiện tại em có thử đoạn đoạn code bên dưới nhưng không loại bỏ được khoảng trắng ở cuối chuỗi.
Bạn kiểm tra thế nào mà cho là vẫn còn space ở cuối? Tôi chạy code thì kết quả làm gì có khoảng trắng ở cuối.
 
Upvote 0
Đơn giản thế này thôi:

Mã:
Function RemoveSpaceChar(ByVal Str As String)
    With CreateObject("VBScript.RegExp")
        .IgnoreCase = True
        .MultiLine = True
        .Global = True
        .Pattern = "^\s+|\s+$|(\s)\s*"
        RemoveSpaceChar = .Replace(Str, "$1")
    End With
End Function

Bài đã được tự động gộp:

Hoặc sử dụng hàm của Excel:
Application.WorksheetFunction.trim(str)
 
Lần chỉnh sửa cuối:
Upvote 0
Mong các thành viên trên diễn đàn cho em xin ý kiến về vấn đề loại bỏ khoảng trắng thừa trong các phần tử trong mảng.
Hiện tại em có thử đoạn đoạn code bên dưới nhưng không loại bỏ được khoảng trắng ở cuối chuỗi.
PHP:
Function RemoveSpaceChar(ByVal Str As String)
    With CreateObject("VBScript.RegExp")
        .IgnoreCase = True
        .MultiLine = True
        .Global = True
        .Pattern = "\s+"
        RemoveSpaceChar = Trim(.Replace(Str, Space(1)))
    End With
End Function

Sub tst()
    Dim i, tmp, data
    data = Array("         Banh       da do       500g        Xuan       Loc    ")
    For i = 0 To UBound(data)
        tmp = RemoveSpaceChar(data(i))
    Next
End Sub
A/c nào có thể chỉ cho em nguyên nhân lỗi được không ạ, em cảm ơn.
Mình thích hàm thế này hơn:
Mã:
Function RemoveSpaceChar(ByVal Str As String)
Dim tmp As String
    Str = Trim(Str)
    Do
        tmp = Str
        Str = Replace(Str, Space(2), Space(1))
    Loop Until Str = tmp
    RemoveSpaceChar = Str
End Function
 
Upvote 0
Theo tôi hiểu thì chủ thớt không xin code khác, xịn hay không xịn. Chủ thớt có code và cho là có lỗi. Chủ thớt tò mò tại sao lại có lỗi. Thế thôi. Đôi khi người ta muốn biết đã phạm lỗi gì để tránh nó trong tương lai.
 
Upvote 0
Đơn giản thế này thôi:

Mã:
Function RemoveSpaceChar(ByVal Str As String)
    With CreateObject("VBScript.RegExp")
        .IgnoreCase = True
        .MultiLine = True
        .Global = True
        .Pattern = "^\s+|\s+$|(\s)\s*"
        RemoveSpaceChar = .Replace(Str, "$1")
    End With
End Function

Bài đã được tự động gộp:

Hoặc sử dụng hàm của Excel:
Application.WorksheetFunction.trim(str)
Em đã sử dụng hàm Trim vẫn có khoảng trắng = Space(1) ở cuối, em cũng không hiểu lý do tại sao lại sai. Nếu có thể mong được bác ultra view sửa lỗi ạ.
Bài đã được tự động gộp:

Mình thích hàm thế này hơn:
Mã:
Function RemoveSpaceChar(ByVal Str As String)
Dim tmp As String
    Str = Trim(Str)
    Do
        tmp = Str
        Str = Replace(Str, Space(2), Space(1))
    Loop Until Str = tmp
    RemoveSpaceChar = Str
End Function
EM cũng đã thử cách của bác nhưng vẫn bị lỗi, em không biết lý do tại sao, nếu có thể, mong bác ultra view giúp em ạ
 
Upvote 0
Mong các thành viên trên diễn đàn cho em xin ý kiến về vấn đề loại bỏ khoảng trắng thừa trong các phần tử trong mảng.
Hiện tại em có thử đoạn đoạn code bên dưới nhưng không loại bỏ được khoảng trắng ở cuối chuỗi.
PHP:
Function RemoveSpaceChar(ByVal Str As String)
    With CreateObject("VBScript.RegExp")
        .IgnoreCase = True
        .MultiLine = True
        .Global = True
        .Pattern = "\s+"
        RemoveSpaceChar = Trim(.Replace(Str, Space(1)))
    End With
End Function

Sub tst()
    Dim i, tmp, data
    data = Array("         Banh       da do       500g        Xuan       Loc    ")
    For i = 0 To UBound(data)
        tmp = RemoveSpaceChar(data(i))
    Next
End Sub
A/c nào có thể chỉ cho em nguyên nhân lỗi được không ạ, em cảm ơn.
Đưa cái file bị thừa ấy lên đi bạn
 
Upvote 0
Tôi test như sau:
PHP:
Sub tst()
    Dim i, tmp, data
    data = Array("         Banh       da do       500g        Xuan       Loc    ")
    For i = 0 To UBound(data)
        tmp = RemoveSpaceChar(data(i))
    Next
    Range("A1").Value = tmp
End Sub

Sau khi có kết quả trong A1, kiểm tra : =LEN(A1) =LEN(TRIM(A1)) => True, không có dấu cách cuối.

.
 
Upvote 0
Em đã sử dụng hàm Trim vẫn có khoảng trắng = Space(1) ở cuối, em cũng không hiểu lý do tại sao lại sai. Nếu có thể mong được bác ultra view sửa lỗi ạ.
Thì bạn test các kiểu:

RemoveSpaceChar = .Replace(Trim(Str), Space(1))

Hoặc:

Str = .Replace(Str, Space(1))
RemoveSpaceChar = Trim(str)

Nếu thật là có chuyện này xảy ra ở máy của bạn thì đó là do lỗi biên dịch.
Cũng có thể do phiên bản VBA
 
Upvote 0
Tôi test đơn giản hơn
Mã:
Sub tst()
    Dim i, tmp, data
    data = Array("         Banh       da do       500g        Xuan       Loc    ")
    For i = 0 To UBound(data)
        tmp = RemoveSpaceChar(data(i))
        Debug.Print "hichic" & tmp & "blala"
    Next
End Sub
Kết quả = hichicBanh da do 500g Xuan Locblala

Tức không có dấu cách ở đầu và cuối.
 
Upvote 0
Theo tôi hiểu thì chủ thớt không xin code khác, xịn hay không xịn. Chủ thớt có code và cho là có lỗi. Chủ thớt tò mò tại sao lại có lỗi. Thế thôi. Đôi khi người ta muốn biết đã phạm lỗi gì để tránh nó trong tương lai.
Nếu có code khác mà vẫn dùng cho mảng thì quá tuyệt ạ. Em cảm ơn!
Bài đã được tự động gộp:

Bạn kiểm tra thế nào mà cho là vẫn còn space ở cuối? Tôi chạy code thì kết quả làm gì có khoảng trắng ở cuối.
Em check Value trong Locals Windows ạ
 
Upvote 0
Em xin gửi file, mong được các bác chỉ dạy em ạ.
 

File đính kèm

Upvote 0
Bạn kiểm tra thế nào mà cho là vẫn còn space ở cuối? Tôi chạy code thì kết quả làm gì có khoảng trắng ở cuối.
Em check Value trong Locals Windows ạ
Bạn nói dối, tôi không tin bạn.

Tôi và mọi người nói về kiểm tra code mà bạn gửi GPE, với dữ liệu mà bạn gửi GPE. Với dữ liệu mà bạn gửi GPE thì sau khi chạy không thể còn dấu cách được. Bạn nói bạn đã kiểm tra là bạn nói dối. VBA không thể TỰ HỎNG được.

Tuy nhiên sau khi chạy code với các dữ liệu có trong sheet2 thì kết quả có khoảng trắng ở cuối. Khoảng trắng này người khác không kiểm tra được do bạn không đính kèm tập tin. Bạn chắc chắn kiểm tra các kết quả này, nhưng đừng nói là bạn đã kiểm tra cái mà bạn tung lên GPE. Nhập nhèm và cố tình nói dối là không được. Tôi không tin là code TỰ DƯNG làm sai. Và chỉ làm sai trên máy bạn.

Code sau khi chạy cho dữ liệu sheet2 có khoảng trắng đằng sau vì đó là "dấu cách cứng" có mã là 160 chứ không là dấu cách thường với mã 32.

Kết luận: xóa dấu cách thừa và các dấu cách cứng với mã 160.
Mã:
Function RemoveSpaceChar(ByVal Str As String)
    RemoveSpaceChar = Replace(Application.Trim(Str), Chr(160), "")
End Function
 
Upvote 0
Bạn nói dối, tôi không tin bạn.
Nếu nói nhẹ hơn đó là lầm tưởng mình làm đúng.
1. Đoạn text trong code Sub tst() là
Mã:
"         Banh       da do       500g        Xuan       Loc    "
là gõ tay vào code, và cho là nó tương đương với:
Mã:
Space(9) & "Banh" Space(7) &"da do" & Space(7) & "500g" & Space(8) & "Xuan& Space(8) & "Loc" & Space(4)
Điều này đúng. Nhưng rõ ràng ký tự đưa vào là Space (code = 32), kết quả code này không còn khoảng trắng cuối.
2. Code tst() không hề được kiểm tra như đã tuyên bố. Có lẽ đã kiểm tra code tst1 (bằng Local windows).

Cái lầm tưởng tôi nói, đó là lầm tưởng dữ liệu của mình có thể gõ tay lại và chúng bằng nhau. Lẽ ra gõ tay vào code nào thì phải kiểm tra kết quả của code đó, lại đi kiểm tra kết quả của code khác.
 
Upvote 0
Đưa cái file bị thừa ấy lên đi bạn
Em gửi ạ
Bạn nói dối, tôi không tin bạn.

Tôi và mọi người nói về kiểm tra code mà bạn gửi GPE, với dữ liệu mà bạn gửi GPE. Với dữ liệu mà bạn gửi GPE thì sau khi chạy không thể còn dấu cách được. Bạn nói bạn đã kiểm tra là bạn nói dối. VBA không thể TỰ HỎNG được.

Tuy nhiên sau khi chạy code với các dữ liệu có trong sheet2 thì kết quả có khoảng trắng ở cuối. Khoảng trắng này người khác không kiểm tra được do bạn không đính kèm tập tin. Bạn chắc chắn kiểm tra các kết quả này, nhưng đừng nói là bạn đã kiểm tra cái mà bạn tung lên GPE. Nhập nhèm và cố tình nói dối là không được. Tôi không tin là code TỰ DƯNG làm sai. Và chỉ làm sai trên máy bạn.

Code sau khi chạy cho dữ liệu sheet2 có khoảng trắng đằng sau vì đó là "dấu cách cứng" có mã là 160 chứ không là dấu cách thường với mã 32.

Kết luận: xóa dấu cách thừa và các dấu cách cứng với mã 160.
Mã:
Function RemoveSpaceChar(ByVal Str As String)
    RemoveSpaceChar = Replace(Application.Trim(Str), Chr(160), "")
End Function
Vâng, em cảm ơn bác. Nhưng bác bảo em nói dối thì có thể bác đang hiểu nhầm em rồi, thực sự em không có ý nói dối, có thể lỗi do em đặt vấn đề không tốt. ban đầu em muốn trích lại dữ liệu theo cách chạy code trực tiếp cho tiện các bác trên GPE có thể xem trực tiếp và chỉ dạy luôn, vả lại thời điểm đó em chạy đoạn code trên cũng bị lỗi, chắc do chuỗi trong mảng em copy nên bị phát sinh dấu cách cứng như bác bảo. Em sẽ rút kinh nghiệm trong cách đặt vấn đề ạ. Em cảm ơn bác rất nhiều.
Bài đã được tự động gộp:

Nếu nói nhẹ hơn đó là lầm tưởng mình làm đúng.
1. Đoạn text trong code Sub tst() là
Mã:
"         Banh       da do       500g        Xuan       Loc    "
là gõ tay vào code, và cho là nó tương đương với:
Mã:
Space(9) & "Banh" Space(7) &"da do" & Space(7) & "500g" & Space(8) & "Xuan& Space(8) & "Loc" & Space(4)
Điều này đúng. Nhưng rõ ràng ký tự đưa vào là Space (code = 32), kết quả code này không còn khoảng trắng cuối.
2. Code tst() không hề được kiểm tra như đã tuyên bố. Có lẽ đã kiểm tra code tst1 (bằng Local windows).

Cái lầm tưởng tôi nói, đó là lầm tưởng dữ liệu của mình có thể gõ tay lại và chúng bằng nhau. Lẽ ra gõ tay vào code nào thì phải kiểm tra kết quả của code đó, lại đi kiểm tra kết quả của code khác.
Vâng, em cảm ơn góp ý của bác. do em muốn trích lại code để đưa lên cho các bác trên GPE có thể hỗ trợ trực tiếp mà không cần mở file. Lần sau em sẽ rút kinh nghiệm cho việc đặt vấn đề trên GPE.
Bài đã được tự động gộp:

Nếu nói nhẹ hơn đó là lầm tưởng mình làm đúng.
1. Đoạn text trong code Sub tst() là
Mã:
"         Banh       da do       500g        Xuan       Loc    "
là gõ tay vào code, và cho là nó tương đương với:
Mã:
Space(9) & "Banh" Space(7) &"da do" & Space(7) & "500g" & Space(8) & "Xuan& Space(8) & "Loc" & Space(4)
Điều này đúng. Nhưng rõ ràng ký tự đưa vào là Space (code = 32), kết quả code này không còn khoảng trắng cuối.
Do em chưa có hiểu biết về Space Chr(32) và Chr(160) như bác batman1 chỉ giáo. qua quá trình tìm kiếm trên mạng thì em có biết tới space(1) nên em mới chú thích khoảng trắng bằng space để các bác dễ hình dung ạ. cảm ơn bác.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Vâng e, cảm ơn, em cũng đã tham khảo tư vấn của bác batman1 về việc dùng Chr(160) và giải quyết được vấn đề rồi ạ. Em cảm ơn tất cả các anh/chị đã chỉ dạy. Em xin kết thúc cuộc thảo luận ở đây ạ.
Sao bạn không hỏi tại sao lại có những loại khoảng trắng như char 32, char 160

Char 32 sẽ bị thu gọn lại khi ô có WrapText, char này gọi là khoảng trắng cổ điển. Một số trường hợp gặp lỗi che mất ký tự. Vì vậy mà char 160 được sinh ra để giải quyết vấn đề này.

Char 160 sẽ không bị thu gọn lại khi ô có WrapText, char này còn gọi là khoảng trắng không ngắt. Có tác dụng trong co giãn văn bản không bị lỗi che mất ký tự. Nó được dùng đa số trong kỹ thuật hiển thị văn bản. Bạn sẽ gặp nó đa số trong "Ngôn ngữ Đánh dấu", như xml, html, ....
 
Upvote 0
Cái lầm tưởng tôi nói, đó là lầm tưởng dữ liệu của mình có thể gõ tay lại và chúng bằng nhau. Lẽ ra gõ tay vào code nào thì phải kiểm tra kết quả của code đó, lại đi kiểm tra kết quả của code khác.
Thực ra tôi hỏi là chủ thớt có kiểm tra cái được tung lên GPE không, vì tôi có biết mặt mũi cái tập tin thế nào đâu mà hỏi về nó. Và tôi cũng viết rõ trong bài #12 là tôi không gặp lỗi, và viết rõ cả cách test. Tại sao chủ thớt tới tận bài #13 vẫn không giật mình, không thử chạy cái được tung lên GPE?
 
Upvote 0
Bạn nói dối, tôi không tin bạn.
...
Thớt cẩu thả, trả lời đại cho nên thành ra nói dối (nói chuyện không chắc mà cứ cãi là chắc thì coi như nói dối). Có lẽ do không quen nói chuyện kỹ thuật (cần chắc chắn), chứ thực tâm không muốn vậy.

...
Kết luận: xóa dấu cách thừa và các dấu cách cứng với mã 160.
Mã:
Function RemoveSpaceChar(ByVal Str As String)
    RemoveSpaceChar = Replace(Application.Trim(Str), Chr(160), "")
End Function
Bác phải đổi 160 thành 32 trước khi trim chứ. Nếu bản chính có dùng 160 ở giữa thì từ không bị dính lại.

Vâng e, cảm ơn, em cũng đã tham khảo tư vấn của bác batman1 về việc dùng Chr(160) và giải quyết được vấn đề rồi ạ. Em cảm ơn tất cả các anh/chị đã chỉ dạy. Em xin kết thúc cuộc thảo luận ở đây ạ.
Bạn còn non tay lắm. Chưa hoàn toàn làm chủ được luật dấu cách thì chưa kết thúc được ở đây đâu.
 
Upvote 0
Bạn còn non tay lắm. Chưa hoàn toàn làm chủ được luật dấu cách thì chưa kết thúc được ở đây đâu.
Bác cho em hỏi "Luật dấu cách" thì còn có thêm những kiến thức nào nữa ạ, mong bác chia sẻ thêm ạ.
Bài đã được tự động gộp:

À đúng
Mã:
Function RemoveSpaceChar(ByVal Str As String)
    RemoveSpaceChar = Application.Trim(Replace(Str, Chr(160), Chr(32)))
End Function
Vâng, chỗ này thì em hiểu nên đã chủ động sửa lại như này rồi ạ.
 
Upvote 0

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

Back
Top Bottom