Xóa những khoảng trắng thừa trong dữ liệu

Liên hệ QC

hongphuong1997

Thành viên tiêu biểu
Tham gia
12/11/17
Bài viết
771
Được thích
321
Giới tính
Nữ
Em nhờ các thầy và anh chị sử cho em code như trong file đính kèm, em làm đi làm lại mà không được.
Em ghi ở Macro3 nhưng em sửa như macro4 mà không được
Em xin cảm ơn.
 

File đính kèm

Upvote 0
Bạn mô tả công việc làm của bạn đi giúp sẽ dễ hơn.
Tức là cháu có cột A họ tên nhưng mà có những khoảng trống vì vây các hàm Vlookup không tìm được
Bây giờ cháu chèn thêm cột vào và dùng hàm "Trim" để cắt ký tự trống đi bác à,
Sau đó xóa đi cột "B" sau khi đã chèn vào
Như cái Macro3 cháu ghi rồi đó bác.
Bác rút gon code giúp cháu với bác nhé
Cháu cảm ơn bác.
 
Upvote 0
Tức là cháu có cột A họ tên nhưng mà có những khoảng trống vì vây các hàm Vlookup không tìm được
Bây giờ cháu chèn thêm cột vào và dùng hàm "Trim" để cắt ký tự trống đi bác à,
Sau đó xóa đi cột "B" sau khi đã chèn vào
Như cái Macro3 cháu ghi rồi đó bác.
Bác rút gon code giúp cháu với bác nhé
Cháu cảm ơn bác.
Thì bạn cứ nói rõ ngay từ đầu rằng "Tôi muốn dùng code để xóa những khoảng trắng thừa trong dữ liệu". Chỉ vậy thôi là được chứ gì mà chèn cột với chèn dòng ở đây?
Ví dụ là code thế này:
Mã:
Sub TrimAll()
  Dim aShs, item, aSource, rngSource As Range
  Dim wks As Worksheet
  Dim lRow As Long
  aShs = Array("70", "80", "90")
  For Each item In aShs
    Set wks = Worksheets(item)
    Set rngSource = wks.Range("A1", wks.Range("A60000").End(xlUp))
    aSource = rngSource.Value
    For lRow = 1 To UBound(aSource)
      If aSource(lRow, 1) <> Empty Then
        aSource(lRow, 1) = WorksheetFunction.Trim(aSource(lRow, 1))
      End If
    Next
    rngSource.Value = aSource
  Next
End Sub
Chẳng có chèn dòng, chèn cột gì ráo
--------------------------
Ngoài ra thì: Nếu bạn muốn hỏi về code VBA, lý ra bạn phải đăng bài trong box lập trình chứ không phải ở đây
(đã chuyển giúp bạn)
 
Upvote 0
@hongphuong1997 :
Bạn chạy thử macro này xem có đúng không nhé
Mã:
Sub Macro1()
Dim Ws As Worksheet
Dim Names() As Variant
Dim i As Integer
For Each Ws In Worksheets
    If InStr("70 80 90", Ws.Name) > 0 Then
        Names = Ws.Range("a1", Ws.Range("a1000000").End(xlUp))
        For i = 1 To UBound(Names)
            If Names(i, 1) = "" Then Exit For
        Next i
        Ws.Range("a1").Resize(UBound(Names), 1).ClearContents
        Ws.Range("a1").Resize(i, 1) = Names
    End If
Next Ws
End Sub
 
Upvote 0
Thì bạn cứ nói rõ ngay từ đầu rằng "Tôi muốn dùng code để xóa những khoảng trắng thừa trong dữ liệu". Chỉ vậy thôi là được chứ gì mà chèn cột với chèn dòng ở đây?
Ví dụ là code thế này:
Mã:
Sub TrimAll()
  Dim aShs, item, aSource, rngSource As Range
  Dim wks As Worksheet
  Dim lRow As Long
  aShs = Array("70", "80", "90")
  For Each item In aShs
    Set wks = Worksheets(item)
    Set rngSource = wks.Range("A1", wks.Range("A60000").End(xlUp))
    aSource = rngSource.Value
    For lRow = 1 To UBound(aSource)
      If aSource(lRow, 1) <> Empty Then
        aSource(lRow, 1) = WorksheetFunction.Trim(aSource(lRow, 1))
      End If
    Next
    rngSource.Value = aSource
  Next
End Sub
Chẳng có chèn dòng, chèn cột gì ráo
--------------------------
Ngoài ra thì: Nếu bạn muốn hỏi về code VBA, lý ra bạn phải đăng bài trong box lập trình chứ không phải ở đây
(đã chuyển giúp bạn)
Bác ơi cháu cảm ơn bác, nhưng trình độ của cháu chưa thể sử dụng được, bác làm cho cháu bằng công thức như cháu đã ghi Macro đi bác
Cháu cảm ơn bác.
Bài đã được tự động gộp:

@hongphuong1997 :
Bạn chạy thử macro này xem có đúng không nhé
Mã:
Sub Macro1()
Dim Ws As Worksheet
Dim Names() As Variant
Dim i As Integer
For Each Ws In Worksheets
    If InStr("70 80 90", Ws.Name) > 0 Then
        Names = Ws.Range("a1", Ws.Range("a1000000").End(xlUp))
        For i = 1 To UBound(Names)
            If Names(i, 1) = "" Then Exit For
        Next i
        Ws.Range("a1").Resize(UBound(Names), 1).ClearContents
        Ws.Range("a1").Resize(i, 1) = Names
    End If
Next Ws
End Sub
Em cảm ơn anh,
hu hu hu... nhưng anh oi, anh làm bằng công thức đi như em ghi macro ấy
còn những cái này em chưa biết sử dụng đâu.
 
Upvote 0
Upvote 0
Bác ơi cháu cảm ơn bác, nhưng trình độ của cháu chưa thể sử dụng được, bác làm cho cháu bằng công thức như cháu đã ghi Macro đi bác
Cháu cảm ơn bác.
Bài đã được tự động gộp:


Em cảm ơn anh,
hu hu hu... nhưng anh oi, anh làm bằng công thức đi như em ghi macro ấy
còn những cái này em chưa biết sử dụng đâu.
Bạn chạy thử macro này xem sao
Mã:
Sub Macro6()
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
    Range("B1").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Selection.FormulaR1C1 = "=IF(LEN(RC[-1])>0,1,0)"
    Selection.AutoFilter
    Range("B1").Select
    ActiveSheet.Range("$B$1:$B$60").AutoFilter Field:=1, Criteria1:="=1", _
        Operator:=xlAnd
    Range("A1").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
    Range("D1").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Columns("A:C").Select
    Selection.Delete Shift:=xlToLeft
End Sub
 
Upvote 0
Người ta gợi ý cho "cái tốt" không xài lại thích xài cái "tào lao"
Bác ơi, cháu biết là bác quá cao và cao thủ , đã giúp cho cháu,
Nhưng thật sự bây giờ cháu mới đang chập chững từ đầu
Vì vậy cháu cần nguyên lý của nó mà bác
Bài đã được tự động gộp:

Người ta gợi ý cho "cái tốt" không xài lại thích xài cái "tào lao"
Bác ơi, cháu biết là bác quá cao và cao thủ , đã giúp cho cháu,
Nhưng thật sự bây giờ cháu mới đang chập chững từ đầu
Vì vậy cháu cần nguyên lý của nó mà bác
Bạn chạy thử macro này xem sao
Mã:
Sub Macro6()
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
    Range("B1").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Selection.FormulaR1C1 = "=IF(LEN(RC[-1])>0,1,0)"
    Selection.AutoFilter
    Range("B1").Select
    ActiveSheet.Range("$B$1:$B$60").AutoFilter Field:=1, Criteria1:="=1", _
        Operator:=xlAnd
    Range("A1").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
    Range("D1").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Columns("A:C").Select
    Selection.Delete Shift:=xlToLeft
End Sub
Anh ơi. em đã dùng hàm "Trim; rùi nó cắt các khoảng trắng đầu và đuôi tại sao anh nghĩ phức tạp như vậy?
Nếu như của anh còn dì hơn cái Macro3 em ghi đó
 
Lần chỉnh sửa cuối:
Upvote 0
Anh ơi. em đã dùng hàm "Trim; rùi nó cắt các khoảng trắng đầu và đuôi tại sao anh nghĩ phức tạp như vậy?
Nếu như của anh còn dì hơn cái Macro3 em ghi đó
Tại thấy vùng số lieu cột A còn ô trống nên mới dùng autofilter xóa luôn các ô thừa. Tiện thể bạn xem luôn về auto filter mà áp dụng
 
Upvote 0
Tại thấy vùng số lieu cột A còn ô trống nên mới dùng autofilter xóa luôn các ô thừa. Tiện thể bạn xem luôn về auto filter mà áp dụng
Người ta muốn cắt những khoảng trắng thừa cho chuỗi (giống như hàm TRIM) chứ không phải là xóa các ô trống đâu
 
Upvote 0
Nhờ anh chị chỉ giúp, mình muốn xóa những khoảng trắng thừa ở 3 cột ( A, B, C ) thì chỉnh code bên dưới như thế nào.
Xin cảm ơn.
Mã:
Sub TrimAll()
  Dim aShs, item, aSource, rngSource As Range
  Dim wks As Worksheet
  Dim lRow As Long
  aShs = Array("70", "80", "90")
  For Each item In aShs
    Set wks = Worksheets(item)
    Set rngSource = wks.Range("A1", wks.Range("A60000").End(xlUp))
    aSource = rngSource.Value
    For lRow = 1 To UBound(aSource)
      If aSource(lRow, 1) <> Empty Then
        aSource(lRow, 1) = WorksheetFunction.Trim(aSource(lRow, 1))
      End If
    Next
    rngSource.Value = aSource
  Next
End Sub
 
Upvote 0
Nhờ anh chị chỉ giúp, mình muốn xóa những khoảng trắng thừa ở 3 cột ( A, B, C ) thì chỉnh code bên dưới như thế nào.
Xin cảm ơn.
Mã:
Sub TrimAll()
  Dim aShs, item, aSource, rngSource As Range
  Dim wks As Worksheet
  Dim lRow As Long
  aShs = Array("70", "80", "90")
  For Each item In aShs
    Set wks = Worksheets(item)
    Set rngSource = wks.Range("A1", wks.Range("A60000").End(xlUp))
    aSource = rngSource.Value
    For lRow = 1 To UBound(aSource)
      If aSource(lRow, 1) <> Empty Then
        aSource(lRow, 1) = WorksheetFunction.Trim(aSource(lRow, 1))
      End If
    Next
    rngSource.Value = aSource
  Next
End Sub
Chắc sửa thêm 1 chút như vầy. Bạn xem thử nha
Mã:
Sub TrimAll()
    Dim aShs, item, aSource, rngSource As Range
    Dim wks As Worksheet
    Dim lRow As Long, J As Long
aShs = Array("70", "80", "90")
For Each item In aShs
    Set wks = Worksheets(item)
    Set rngSource = wks.Range("A1", wks.Range("A60000").End(xlUp)).Resize(, 3)
    aSource = rngSource.Value
    For lRow = LBound(aSource, 1) To UBound(aSource, 1)
        For J = LBound(aSource, 2) To UBound(aSource, 2)
            If aSource(lRow, J) <> Empty Then
                aSource(lRow, J) = WorksheetFunction.Trim(aSource(lRow, J))
            End If
        Next J
    Next lRow
    rngSource.Value = aSource
Next
End Sub
 
Upvote 0
Chắc sửa thêm 1 chút như vầy. Bạn xem thử nha
Mã:
Sub TrimAll()
    Dim aShs, item, aSource, rngSource As Range
    Dim wks As Worksheet
    Dim lRow As Long, J As Long
aShs = Array("70", "80", "90")
For Each item In aShs
    Set wks = Worksheets(item)
    Set rngSource = wks.Range("A1", wks.Range("A60000").End(xlUp)).Resize(, 3)
    aSource = rngSource.Value
    For lRow = LBound(aSource, 1) To UBound(aSource, 1)
        For J = LBound(aSource, 2) To UBound(aSource, 2)
            If aSource(lRow, J) <> Empty Then
                aSource(lRow, J) = WorksheetFunction.Trim(aSource(lRow, J))
            End If
        Next J
    Next lRow
    rngSource.Value = aSource
Next
End Sub
Code báo lỗi tại dòng
Mã:
Set wks = Worksheets(item)
Bạn chỉnh giúp mình với.
Cảm ơn bạn đã giúp
 
Upvote 0
Viết lại từ đầu mạnh khoẻ và mát mẻ, sạch sẽ hơn
Sub abc()
' xoá khoảng trắng thừa trong 3 cột A, B, C
XoaKhongTrangThuaCaCot(ActiveSheet, "A")
XoaKhongTrangThuaCaCot(ActiveSheet, "B")
XoaKhongTrangThuaCaCot(ActiveSheet, "C")
End Sub

Private Sub XoaKhongTrangThuaCaCot(byVal sh As Worksheet, byVal ct As String)
' Hàm xoá tất cả các khoảng trắng thừa ở cột ct, trong sheet sh
Dim a, i As Long
a = sh.Range(ct & "1").Resize(sh.Cells(sh.Rows.Count, ct).End(xlUp).Row, ).Value
For i = 1 to UBound(a)
If a(i, 1) <> Empty Then a(i, 1) = Application.Trim(a(i,1))
Next i
sh.sh.Range(ct & "1").Resize(i - 1,).Value = a
End Sub
 
Upvote 0
Viết lại từ đầu mạnh khoẻ và mát mẻ, sạch sẽ hơn
Sub abc()
' xoá khoảng trắng thừa trong 3 cột A, B, C
XoaKhongTrangThuaCaCot(ActiveSheet, "A")
XoaKhongTrangThuaCaCot(ActiveSheet, "B")
XoaKhongTrangThuaCaCot(ActiveSheet, "C")
End Sub

Private Sub XoaKhongTrangThuaCaCot(byVal sh As Worksheet, byVal ct As String)
' Hàm xoá tất cả các khoảng trắng thừa ở cột ct, trong sheet sh
Dim a, i As Long
a = sh.Range(ct & "1").Resize(sh.Cells(sh.Rows.Count, ct).End(xlUp).Row, ).Value
For i = 1 to UBound(a)
If a(i, 1) <> Empty Then a(i, 1) = Application.Trim(a(i,1))
Next i
sh.sh.Range(ct & "1").Resize(i - 1,).Value = a
End Sub
Mình không chạy được code, nhờ VetMini chỉ giúp.
Xin cảm ơn VetMini đã giúp.
 
Upvote 0
Xin lỗi, viết tầm bậy. Sai tùm lum hết
Sửa lại (lần này thì có tét).
Sub abc()
' xoá khoảng trắng thừa trong 3 cột A, B, C
XoaKhoangTrangThuaCaCot ActiveSheet, "A"
XoaKhoangTrangThuaCaCot ActiveSheet, "B"
XoaKhoangTrangThuaCaCot ActiveSheet, "C"
End Sub

Private Sub XoaKhoangTrangThuaCaCot(ByRef sh As Worksheet, ByVal ct As String)
' Hàm xoá tất cả các khoảng trắng thừa ở cột ct, trong sheet sh
Dim a, i As Long
a = sh.Range(ct & "1").Resize(sh.Cells(sh.Rows.Count, ct).End(xlUp).Row).Value
If TypeName(a) <> "Variant()" Then Exit Sub
For i = 1 To UBound(a)
If a(i, 1) <> Empty Then a(i, 1) = Application.Trim(a(i, 1))
Next i
sh.Range(ct & "1").Resize(i - 1).Value = a
End Sub

Chạy sub abc
 
Upvote 0
Xin lỗi, viết tầm bậy. Sai tùm lum hết
Sửa lại (lần này thì có tét).
Sub abc()
' xoá khoảng trắng thừa trong 3 cột A, B, C
XoaKhoangTrangThuaCaCot ActiveSheet, "A"
XoaKhoangTrangThuaCaCot ActiveSheet, "B"
XoaKhoangTrangThuaCaCot ActiveSheet, "C"
End Sub

Private Sub XoaKhoangTrangThuaCaCot(ByRef sh As Worksheet, ByVal ct As String)
' Hàm xoá tất cả các khoảng trắng thừa ở cột ct, trong sheet sh
Dim a, i As Long
a = sh.Range(ct & "1").Resize(sh.Cells(sh.Rows.Count, ct).End(xlUp).Row).Value
If TypeName(a) <> "Variant()" Then Exit Sub
For i = 1 To UBound(a)
If a(i, 1) <> Empty Then a(i, 1) = Application.Trim(a(i, 1))
Next i
sh.Range(ct & "1").Resize(i - 1).Value = a
End Sub

Chạy sub abc
Nếu chỉ có dữ liệu dòng 1 code không chịu xóa
 
Upvote 0
Nếu chỉ có dữ liệu dòng 1 code không chịu xóa
Phiền nhỉ. Tạm chữa cháy thế này. Viết cho nó thật đúng thì dài dòng quá.

Private Sub XoaKhoangTrangThuaCaCot(ByRef sh As Worksheet, ByVal ct As String)
' Hàm xoá tất cả các khoảng trắng thừa ở cột ct, trong sheet sh
Dim a, i As Long
i = sh.Cells(sh.Rows.Count, ct).End(xlUp).Row
a = sh.Range(ct & "1").Resize(i, Iif(i > 1, 1, 2)).Value
' nếu chỉ có 1 ô thì a sẽ trở về mặc định là trị của ô (string), resize ra 2 cột để ép nó phải lấy array
For i = 1 To UBound(a)
If a(i, 1) <> Empty Then a(i, 1) = Application.Trim(a(i, 1))
Next i
sh.Range(ct & "1").Resize(i - 1, 1).Value = a
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom