Giúp Code sắp xếp lại hàng bỏ qua các dòng trống (2 người xem)

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

congnguyen88

Thành viên bị đình chỉ hoạt động
Thành viên bị đình chỉ hoạt động
Tham gia
22/7/14
Bài viết
355
Được thích
31
Mình có 1 bảng tính excel dữ liệu nằm trong vùng B3:E24 , Nhưng trong vùng này người dùng thường xuyên xóa bỏ đi các hàng ( có dòng có dữ liệu, có dòng không có dữ liệu) mình muốn Click vào 1 nút bấm thì dữ liệu nằm trong vùng B3:E24 sẽ sắp xếp lại theo trật tự và bỏ qua các dòng trống.

* Lưu ý là sắp xếp lại bỏ qua các dòng trống, nhưng không được Ẩn dòng
* Điều kiện : Chỉ cần 1 ô của hàng cột C trống thì sắp xếp lại bỏ qua các dòng trống đó luôn
 

File đính kèm

Mình có 1 bảng tính excel dữ liệu nằm trong vùng B3:E24 , Nhưng trong vùng này người dùng thường xuyên xóa bỏ đi các hàng ( có dòng có dữ liệu, có dòng không có dữ liệu) mình muốn Click vào 1 nút bấm thì dữ liệu nằm trong vùng B3:E24 sẽ sắp xếp lại theo trật tự và bỏ qua các dòng trống.

* Lưu ý là sắp xếp lại bỏ qua các dòng trống, nhưng không được Ẩn dòng
* Điều kiện : Chỉ cần 1 ô của hàng cột C trống thì sắp xếp lại bỏ qua các dòng trống đó luôn

Bài này dùng Advanced Filter cái xoẹt là ra, cần gì code kiết
 
Upvote 0
Mong mọi người giúp mình Code, để mình Click vào nút bấm cho nhanh, chứ Advanced Filter mất quá nhiều thao tác. Xin cảm ơn
 
Upvote 0
Mình có 1 bảng tính excel dữ liệu nằm trong vùng B3:E24 , Nhưng trong vùng này người dùng thường xuyên xóa bỏ đi các hàng ( có dòng có dữ liệu, có dòng không có dữ liệu) mình muốn Click vào 1 nút bấm thì dữ liệu nằm trong vùng B3:E24 sẽ sắp xếp lại theo trật tự và bỏ qua các dòng trống.

* Lưu ý là sắp xếp lại bỏ qua các dòng trống, nhưng không được Ẩn dòng
* Điều kiện : Chỉ cần 1 ô của hàng cột C trống thì sắp xếp lại bỏ qua các dòng trống đó luôn

Bạn xem thử có đúng ý bạn không?
 

File đính kèm

Upvote 0
Mình có 1 bảng tính excel dữ liệu nằm trong vùng B3:E24 , Nhưng trong vùng này người dùng thường xuyên xóa bỏ đi các hàng ( có dòng có dữ liệu, có dòng không có dữ liệu) mình muốn Click vào 1 nút bấm thì dữ liệu nằm trong vùng B3:E24 sẽ sắp xếp lại theo trật tự và bỏ qua các dòng trống.

* Lưu ý là sắp xếp lại bỏ qua các dòng trống, nhưng không được Ẩn dòng
* Điều kiện : Chỉ cần 1 ô của hàng cột C trống thì sắp xếp lại bỏ qua các dòng trống đó luôn
Dùng code này xem sao
PHP:
Public Sub XOADONG()
Dim i As Long
With Sheet1
For i = .Range("C65000").End(xlUp).Row To 3 Step -1
If Trim(.Range("C" & i)) = "" Then
.Range("C" & i).EntireRow.Delete
End If
Next i
End With
End Sub
 
Upvote 0
Dùng code này xem sao
PHP:
Public Sub XOADONG()
Dim i As Long
With Sheet1
For i = .Range("C65000").End(xlUp).Row To 3 Step -1
If Trim(.Range("C" & i)) = "" Then
.Range("C" & i).EntireRow.Delete
End If
Next i
End With
End Sub

Ok cảm ơn anh nhiều lắm, Code của anh gần đúng rồi, Nghĩa là em muốn nó trim nhưng không được xóa hết 1 dòng luôn, em chỉ muốn nó trim nhưng chỉ xóa dòng từ cột B đến cột E thôi

Ví dụ thay vì viết code em làm thủ công sẽ như thế này :
Cut nhưng hàng có dữ liệu dán lên những hàng không có dữ liệu
 
Lần chỉnh sửa cuối:
Upvote 0
sắp xếp thế nào, hay xoá dòng trống thui,
xoá thì bạn tự ghi macro là thấy và làm tốt?



Ví dụ thay vì viết code em làm thủ công sẽ như thế này :
Copy nhưng hàng có dữ liệu dán đè lên những hàng không có dữ liệu
 
Upvote 0
sắp xếp thế nào, hay xoá dòng trống thui,
xoá thì bạn tự ghi macro là thấy và làm tốt?

Nghĩa là Cut những hàng nào có dữ liệu paste vào những hàng không có dữ liệu quá trình lặp lại khi nào hết hàng trống thì thôi
 
Upvote 0
Ok cảm ơn anh nhiều lắm, Code của anh gần đúng rồi, Nghĩa là em muốn nó trim nhưng không được xóa hết 1 dòng luôn, em chỉ muốn nó trim nhưng chỉ xóa dòng từ cột B đến cột E thôi

Ví dụ thay vì viết code em làm thủ công sẽ như thế này :
Cut nhưng hàng có dữ liệu dán lên những hàng không có dữ liệu
Với dữ liệu như file của bạn.
Xoá hết các dòng phía dưới dòng 24, xoá hết Merge cells
PHP:
Public Sub GPE()
Range([B3], [B65536].End(xlUp)).Resize(, 4).Sort Key1:=[B3]
[B3].End(xlDown).Offset(1).Resize(100, 4).Clear
End Sub
 
Upvote 0
Ví dụ thay vì viết code em làm thủ công sẽ như thế này :
Copy nhưng hàng có dữ liệu dán đè lên những hàng không có dữ liệu
Thử code này xem, điều kiện xóa chỉ là cột [C] trống, các cột còn lại không quan tâm
Bấm vào ô màu tím của bạn nhé
Thân
 

File đính kèm

Upvote 0
Ok cảm ơn anh nhiều lắm, Code của anh gần đúng rồi, Nghĩa là em muốn nó trim nhưng không được xóa hết 1 dòng luôn, em chỉ muốn nó trim nhưng chỉ xóa dòng từ cột B đến cột E thôi

Ví dụ thay vì viết code em làm thủ công sẽ như thế này :
Cut nhưng hàng có dữ liệu dán lên những hàng không có dữ liệu
Nếu chỉ xóa từ B:E thì sửa thế này
PHP:
Public Sub XOADONG()
Dim Rng As Range, i As Long
With Sheet1
Set Rng = .Range("B3:E" & .Range("E65000").End(xlUp).Row)
For i = .Range("E65000").End(xlUp).Row To 1 Step -1
If Trim(Rng(i, 2)) = "" Then
Rng.Rows(i).Delete
End If
Next i
End With
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Với dữ liệu như file của bạn.
Xoá hết các dòng phía dưới dòng 24, xoá hết Merge cells
PHP:
Public Sub GPE()
Range([B3], [B65536].End(xlUp)).Resize(, 4).Sort Key1:=[B3]
[B3].End(xlDown).Offset(1).Resize(100, 4).Clear
End Sub
Tính hỏng viết thêm nhưng thôi kệ bon chen với anh cho vui. Em code phải ngắn hơn cho anh tức coi chơi
Bảo đảm thằng này là ngắn vô địch luôn
PHP:
Sub xoaxoa()
[C3:C24].SpecialCells(4).EntireRow.Delete
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Tính hỏng viết thêm nhưng thôi kệ bon chen với anh cho vui. Em code phải ngắn hơn cho anh tức coi chơi
Bảo đảm thằng này là ngắn vô địch luôn
PHP:
Sub xoaxoa()
[C3:C24].SpecialCells(4).EntireRow.Delete
End Sub
Ố la la!
Đúng là ngắn vô địch, chỉ có 1 dòng lệnh.
Nhưng!
"Câu" cũng vô địch!
......Nghĩa là em muốn nó trim nhưng không được xóa hết 1 dòng luôn, em chỉ muốn nó trim nhưng chỉ xóa dòng từ cột B đến cột E thôi.......
1/ Người ta hổng chịu xóa cả dòng, vì có thể trên những dòng đó ở các cột khác dữ liệu vẫn "còn xài được"
2/ Người ta phải hỏi lại: dữ liệu không phải cố định C3:C24 thì sao?
3/ Hu hu hu.......
 
Upvote 0
Ố la la!
Đúng là ngắn vô địch, chỉ có 1 dòng lệnh.
Nhưng!
"Câu" cũng vô địch!

1/ Người ta hổng chịu xóa cả dòng, vì có thể trên những dòng đó ở các cột khác dữ liệu vẫn "còn xài được"
2/ Người ta phải hỏi lại: dữ liệu không phải cố định C3:C24 thì sao?
3/ Hu hu hu.......

Cái đồ quỷ này em offset rồi resize thì xoá ầm ầm chứ gì, hí hí. Cũng là 1 dòng thôi.
********
ý ý mà hình như cốc có xóa được anh ơi. Code nó không cho em resize mới tức chứ.
 
Lần chỉnh sửa cuối:
Upvote 0
Cái đồ quỷ này em offset rồi resize thì xoá ầm ầm chứ gì, hí hí. Cũng là 1 dòng thôi.
Nhưng cả bài của tôi và của Hải đều sai "tè lè"
Người ta còn có yêu cầu ghi lại STT liên tục kìa.
Hồi nãy tôi cũng không xem kỹ cột STT.
Chắc phải 2 dòng lệnh trở lên rồi.
Ẹc..
 
Upvote 0
Cái đồ quỷ này em offset rồi resize thì xoá ầm ầm chứ gì, hí hí. Cũng là 1 dòng thôi.
********
ý ý mà hình như cốc có xóa được anh ơi. Code nó không cho em resize mới tức chứ.

không resize được là đúng rui

Muốn code ngắn gọn 1 dòng thì thế này mới được

Mã:
Sub Trim1Cells()
    With [C5:C65000].SpecialCells(4): Union(.Offset(, -1), .Offset(0), .Offset(, 1), .Offset(, 2)).Delete xlUp: End With
End Sub


Người ta còn có yêu cầu ghi lại STT liên tục kìa.
..
Còn việc đặt thứ tự không thấy chủ topic nhắc tới, mà y.c này nghe lạ

Xoá dòng ô, sao chủ topic không tự khi macro???
 
Upvote 0
Hoặc phương án nữa ngắn gọn hơn

PHP:
Sub TrimCells()
    Intersect([C5:C65000].SpecialCells(4).EntireRow, [B:E]).Delete xlUp
End Sub

đảm bảo chỉ xóa trong vùng B:E
 
Upvote 0
Đúng là ngắn.....vô địch ( bởi vậy chưa có "dzợ"), nhưng nhìn em này "EntireRow.Delete" hình như ......trật "tè le hột me" rồi hay sao í
Híc
Em mà code cái vụ xóa dòng thì không chê vào đâu được nhá. Dùng For Next xóa trên mảng là nhanh nhấp nháy. Còn cái vụ ngắn...vô địch thì cũng không ngắn lắm ... đâu. Hic
 
Upvote 0
Em mà code cái vụ xóa dòng thì không chê vào đâu được nhá. Dùng For Next xóa trên mảng là nhanh nhấp nháy. Còn cái vụ ngắn...vô địch thì cũng không ngắn lắm ... đâu. Hic
Những dạng bài xóa dòng này có nhiều trên diễn đàn rồi:
1) Xóa trực tiếp trên sheet bằng vòng lặp
2) Dùng SpicialCells chọn những dòng nào thỏa thì "thịt" những thằng đó
3) Dùng vòng lặp, chọn em nào không thỏa, bỏ vào mảng, xong thì xóa bảng cũ, gán mảng xuống sheet
Híc, ai thích kiểu nào thì "chơi" kiểu đó
Còn vụ kia, khi nào lấy vợ như ku Tùng mình mới tin. Hihi
 
Upvote 0
Với dữ liệu như file của bạn.
Xoá hết các dòng phía dưới dòng 24, xoá hết Merge cells
PHP:
Public Sub GPE()
Range([B3], [B65536].End(xlUp)).Resize(, 4).Sort Key1:=[B3]
[B3].End(xlDown).Offset(1).Resize(100, 4).Clear
End Sub

Đúng ý của mình rồi mình Xin cảm ơn 1 tỷ lần
 
Upvote 0
Tính hỏng viết thêm nhưng thôi kệ bon chen với anh cho vui. Em code phải ngắn hơn cho anh tức coi chơi
Bảo đảm thằng này là ngắn vô địch luôn
PHP:
Sub xoaxoa()
[C3:C24].SpecialCells(4).EntireRow.Delete
End Sub

Code bạn khác với người ta bạn ak, người ta xóa dòng từ cot B đến cột F còn của bạn xóa hết các hàng đó luôn ( mình muốn các dữ liệu nằm bên phải hoặc bên trái của cột từ B đến F sẽ không duoc xóa )
 
Upvote 0
Upvote 0
Hoặc phương án nữa ngắn gọn hơn

PHP:
Sub TrimCells()
    Intersect([C5:C65000].SpecialCells(4).EntireRow, [B:E]).Delete xlUp
End Sub

Đúng roi, chính xác rồi anh... Anh có thể giải thich giúp em là SpecialCells(4). là gì dc hok
SpecialCells(4) tức là chọn C5:C65000 chọn Ctrl+G chọn blanks

Nếu không biết code chứ record ra cái nào không cần thì bỏ đây là code tôi record ra được vẫn đáp ứng yêu cầu bạn?

Mã:
Sub Macro2()
    
    
    Range("C3:C24").Select
    Selection.SpecialCells(xlCellTypeBlanks).Select
    Selection.EntireRow.Delete
    
End Sub
 
Upvote 0
Hoặc phương án nữa ngắn gọn hơn

PHP:
Sub TrimCells()
    Intersect([C5:C65000].SpecialCells(4).EntireRow, [B:E]).Delete xlUp
End Sub

Đúng roi, chính xác rồi anh... Anh có thể giải thich giúp em là SpecialCells(4). là gì dc hok

4 là chọn ô Blank tương đương hằng số xlCellTypeBlanks

Chú ý thận trọng nên tôi để 65000, nếu dữ liệu của bạn nhiều nhất là tới dòng 1000, thì thay số đó bằng 1001 nhé cho nó gọn và nhanh hơn
 
Upvote 0

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

Back
Top Bottom