Vấn đề sắp xếp dữ liệu từ dưới lên trên vẫn giữ nguyên cấu trúc.

Liên hệ QC

Ếch Xanh

Thành viên tích cực
Tham gia
12/8/09
Bài viết
865
Được thích
1,572
Kính thưa với các Thầy Cô,
Tôi có cơ sở dữ liệu, vì những lý do cần xóa 1 vài dòng nên tạo những dòng trống. Tôi muốn sắp xếp lại bằng cách dồn hàng từ dưới lên trên (không phải sort theo ABC), chỗ nào có khoảng trống thì ở dưới dồn lên thôi.
Vậy cho hỏi có ai có Code này không?
 

File đính kèm

Kính thưa với các Thầy Cô,
Tôi có cơ sở dữ liệu, vì những lý do cần xóa 1 vài dòng nên tạo những dòng trống. Tôi muốn sắp xếp lại bằng cách dồn hàng từ dưới lên trên (không phải sort theo ABC), chỗ nào có khoảng trống thì ở dưới dồn lên thôi.
Vậy cho hỏi có ai có Code này không?
Cái này đâu cần gì Code. Thao tác bằng tay cũng đâu mất tới 30s.

Bôi đen cột A | F5 | Special... | Blank | Ok | Ctrl + (-) | Entire Row | Ok

Nếu bạn muốn có Code thì mở chức năng Record Macro lên và thực hiện từng bước theo hướng dẫn.
 
Upvote 0
Cái này đâu cần gì Code. Thao tác bằng tay cũng đâu mất tới 30s.

Bôi đen cột A | F5 | Special... | Blank | Ok | Ctrl + (-) | Entire Row | Ok

Nếu bạn muốn có Code thì mở chức năng Record Macro lên và thực hiện từng bước theo hướng dẫn.

Dữ liệu của bạn này có cột "CHI TIẾT", cột này dòng có dòng không, làm như vậy thì khi dòng nào thiếu cột "CHI TIẾT" thì bị xoá trắng cả dòng và hơn nữa cấu trúc bảng bị thay đổi.
 
Upvote 0
Dữ liệu của bạn này có cột "CHI TIẾT", cột này dòng có dòng không, làm như vậy thì khi dòng nào thiếu cột "CHI TIẾT" thì bị xoá trắng cả dòng và hơn nữa cấu trúc bảng bị thay đổi.
Đã biết cột Chi tiết có dòng có có dòng không vậy sao bạn còn chọn cột đó làm chuẩn để xóa để rồi mất dữ liệu. Tôi nói rõ là chọn cột A, Cột A là cột Mã nên sẽ không bao giớ thiếu.

Còn về cấu trúc bảng, không có gì thay đổi hết.

Làm thử theo đúng như hướng dẫn sẽ thấy kết quả như thế nào.
 
Upvote 0
Huu Thang à, ý kiến của chủ Topic có lý riêng đấy và không dồn bằng xóa ô trống được, ví dụ link dữ liệu chẳng hạn khi xóa dòng thì vùng link báo lỗi ngay. Phải dùng code thôi.
 
Upvote 0
Cái này đâu cần gì Code. Thao tác bằng tay cũng đâu mất tới 30s.

Bôi đen cột A | F5 | Special... | Blank | Ok | Ctrl + (-) | Entire Row | Ok

Nếu bạn muốn có Code thì mở chức năng Record Macro lên và thực hiện từng bước theo hướng dẫn.

Đây là code EntireRow
PHP:
Sub EntireHang()
    Range("A8:A57").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
    Range("A7").Select
End Sub

Nói như bạn Ptlong là đúng, bởi Code trên là có sử dụng Delete, ý tác giả không muốn Delete vì muốn giữ nguyên cấu trúc bảng tính.
Có cách khác không anh Hữu Thắng???
 
Upvote 0
Kính thưa với các Thầy Cô,
Tôi có cơ sở dữ liệu, vì những lý do cần xóa 1 vài dòng nên tạo những dòng trống. Tôi muốn sắp xếp lại bằng cách dồn hàng từ dưới lên trên (không phải sort theo ABC), chỗ nào có khoảng trống thì ở dưới dồn lên thôi.
Vậy cho hỏi có ai có Code này không?

Bạn dùng tạm code này vì làm theo ví dụ của bạn nên khi áp dụng bạn phải chỉnh lại vùng nguồn và vùng đích trong code
 

File đính kèm

Upvote 0
Đây là code EntireRow
PHP:
Sub EntireHang()
    Range("A8:A57").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
    Range("A7").Select
End Sub
Nói như bạn Ptlong là đúng, bởi Code trên là có sử dụng Delete, ý tác giả không muốn Delete vì muốn giữ nguyên cấu trúc bảng tính.
Có cách khác không anh Hữu Thắng???

Cách thì nhiều. Dùng Sort chẳng hạn.
PHP:
Sub GPE()
With Range([G8], [A65536].End(xlUp).Offset(, 6))
    .Formula = "=ROW()"
    .Value = .Value
    .Offset(, -6).Resize(, 7).Sort [A8], 1, Header:=xlNo
End With
Range([A8], [A65536].End(xlUp)).Resize(, 7).Sort [G8], 1, Header:=xlNo
[G:G].ClearContents
End Sub
 
Upvote 0
Kính thưa với các Thầy Cô,
Tôi có cơ sở dữ liệu, vì những lý do cần xóa 1 vài dòng nên tạo những dòng trống. Tôi muốn sắp xếp lại bằng cách dồn hàng từ dưới lên trên (không phải sort theo ABC), chỗ nào có khoảng trống thì ở dưới dồn lên thôi.
Vậy cho hỏi có ai có Code này không?

Với dữ liệu của bạn và theo ý tưởng của huuthang_bd ở bài trên, mình nghĩ cách đơn giản nhất là bôi đen cả bảng dữ liệu rồi Sort theo cột MÃ KH là xong, hic, đỡ nhức đầu.+-+-+-++-+-+-++-+-+-+

PS : có phải minhthien321 muốn làm 1 ndu thứ 2 không, hehe.
 
Upvote 0
Hay lắm! Hữu Thắng "đổi sao" có khác! Rất hiệu quả mượn cột G để sort dữ liệu theo Row, đúng là sáng tạo!

P/S: Sẳn đây cho tôi gửi lời chúc mừng đến việc "đổi sao không xoay" của Hữu Thắng nhé!
 
Upvote 0
Mình tham gia 1 đoạn code (Chưa hoàn thiện lắm), mình test thấy được

Mã:
Sub setdata()
Dim Rng As Range
Dim temp As Variant
Dim dg1, dg2, dg3 As Long
With Sheet1
dg1 = .[a56356].End(xlUp).Row
dg2 = .Cells(dg1, 1).End(xlUp).Row
dg3 = .Cells(dg2, 1).End(xlUp).Row
Do While dg1 > 7 And dg2 > 7 And dg3 > 7
Set Rng = .Cells(dg1, 1).CurrentRegion
temp = Rng
Rng.ClearContents
.Range("A" & dg3 + 1).Resize(Rng.Rows.Count, 6) = temp
dg1 = .[a56356].End(xlUp).Row
dg2 = .Cells(dg1, 1).End(xlUp).Row
dg3 = .Cells(dg2, 1).End(xlUp).Row
Loop
End With
Set Rng = Nothing
End Sub
 
Upvote 0
Không hiểu máy tôi có vấn đề không, nhưng tôi thử code của Anh Sealand không thấy chạy anh à, tôi thử thêm một record bất kỳ vào bên dưới cách xa 1 đoạn, test code của Anh nó không có gì thay đổi. Anh kiểm tra lại xem nhé (đã sửa lại A65536)
 
Upvote 0
Bạn nhấn Ctrl+m xem sao, thử lại chép sheet2 về sheet1 (Cái dòng 65536 không quan trọng vì mấy khi dữ liệu đến vạy)
 

File đính kèm

Upvote 0
Bạn nhấn Ctrl+m xem sao, thử lại chép sheet2 về sheet1 (Cái dòng 65536 không quan trọng vì mấy khi dữ liệu đến vạy)

Ý tưởng của Anh thật hay, nhưng mình chạy lần đầu thì ổn, nhưng bắt dầu tạo một dòng cách khoảng dưới cái bảng tính, VD ở Row 65 chẳng hạn, thử lại thì không thấy chạy nữa?!?!
 
Upvote 0
Mình không hiểu ban thử ra sao chứ mình test chỉ trừ dòng 65536 còn đều ổn mà

(Lưu ý: Mình tôn trọng không đụng chạm tới bất cứu ô nào sau cột F và trên dòng 8, tiêu chuẩn xác định rỗng là cột A, vì vậy dòng thêm phải đảm bảo cột A có dữ liệu)
 
Lần chỉnh sửa cuối:
Upvote 0
Mình không hiểu ban thử ra sao chứ mình test chỉ trừ dòng 65536 còn đều ổn mà

(Lưu ý: Mình tôn trọng không đụng chạm tới bất cứu ô nào sau cột F và trên dòng 8, tiêu chuẩn xác định rỗng là cột A, vì vậy dòng thêm phải đảm bảo cột A có dữ liệu)

Cám ơn Anh, chắc Excel 2007 mà tôi xài có vấn đề thôi. Tôi sẽ nghiên cứu code của Anh tỉ mỉ hơn.:-=
 
Upvote 0
Kính thưa với các Thầy Cô,
Tôi có cơ sở dữ liệu, vì những lý do cần xóa 1 vài dòng nên tạo những dòng trống. Tôi muốn sắp xếp lại bằng cách dồn hàng từ dưới lên trên (không phải sort theo ABC), chỗ nào có khoảng trống thì ở dưới dồn lên thôi.
Vậy cho hỏi có ai có Code này không?

Mình góp thêm 1 cách dùng Sort rất đơn giản :

PHP:
Sub SapXep()
    Range("A7", [E65536].End(xlUp).Offset(0, 1)) _
    .Sort [A7], xlAscending, , , , , , xlYes
End Sub
 

File đính kèm

Upvote 0
Bạn dùng tạm code này vì làm theo ví dụ của bạn nên khi áp dụng bạn phải chỉnh lại vùng nguồn và vùng đích trong code
Anh ơi... hướng đi của anh là chuẩn nhất ---> Có điều tại sao anh không xóa dòng rổng luôn mà lại copy dử liệu sang nơi khác
Ý em là xóa theo kiểu Shift cells up
Như vầy đây:
PHP:
Sub Test()
  Dim i As Long
  With Range([A8], [A60000].End(xlUp)).SpecialCells(4)
    For i = .Areas.Count To 1 Step -1
      .Areas(i).Resize(, 6).Delete 2
    Next
  End With
End Sub
Thuật toán gần giống code của anh đúng không?
 
Upvote 0
Anh ơi... hướng đi của anh là chuẩn nhất ---> Có điều tại sao anh không xóa dòng rổng luôn mà lại copy dử liệu sang nơi khác
Ý em là xóa theo kiểu Shift cells up
Như vầy đây:
PHP:
Sub Test()
  Dim i As Long
  With Range([A8], [A60000].End(xlUp)).SpecialCells(4)
    For i = .Areas.Count To 1 Step -1
      .Areas(i).Resize(, 6).Delete 2
    Next
  End With
End Sub
Thuật toán gần giống code của anh đúng không?

Anh à, tác giả yêu cầu phải dữ nguyên kích thước cái cái bảng màu xanh xanh đó, nếu mà .delete thì bảng đó bị ngắn lại mất rồi.
 
Upvote 0
Mình góp thêm 1 cách dùng Sort rất đơn giản :

PHP:
Sub SapXep()
    Range("A7", [E65536].End(xlUp).Offset(0, 1)) _
    .Sort [A7], xlAscending, , , , , , xlYes
End Sub
Bạn Sort như thế này thì làm đảo lộn vị trí dữ liệu của người ta rồi. Đây là file ví dụ chứ thực tế Mã khách hàng đâu có xếp theo thứ tự từ trước đâu.
 
Upvote 0
Web KT

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

Back
Top Bottom