Xóa khoảng trắng Space trong các phần tử trong mảng

Liên hệ QC

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

  • Demo.xlsm
    21.1 KB · Đọc: 8
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

  • Demo.xlsm
    21.1 KB · Đọc: 2
Lần chỉnh sửa cuối:
Upvote 0
Đây nhé.
 

File đính kèm

  • demeo_.xlsm
    16.7 KB · Đọc: 5
Upvote 0
Web KT
Back
Top Bottom