hongphuong1997
Thành viên tiêu biểu
![](/diendan/data/PhoToDanhHieu/pip.gif)
- Tham gia
- 12/11/17
- Bài viết
- 771
- Được thích
- 321
- Giới tính
- 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 đượcBạn mô tả công việc làm của bạn đi giúp sẽ dễ hơn.
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?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.
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
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
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ácThì 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:
Chẳng có chèn dòng, chèn cột gì ráoMã: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
--------------------------
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)
Em cảm ơn anh,@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
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 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ạn chạy thử macro này xem saoBá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.
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
Bác ơi, cháu biết là bác quá cao và cao thủ , đã giúp cho cháu,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,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"
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?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
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ụngAnh ơ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 đó
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 đâuTạ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
Nhìn lại thấy rõ rồi anh ạ. Nhưng mà chắc cũng chịu không làm được nữa.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
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ử nhaNhờ 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
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òngChắ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
Set wks = Worksheets(item)
Mình không chạy được code, nhờ VetMini chỉ giúp.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
Nếu chỉ có dữ liệu dòng 1 code không chịu xóaXin 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
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á.Nếu chỉ có dữ liệu dòng 1 code không chịu xóa