DeleteEmptyRows (1 người xem)

  • Thread starter Thread starter Thien
  • Ngày gửi Ngày gửi
Liên hệ QC

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

Thien

Thành viên thường trực
Tham gia
23/6/06
Bài viết
352
Được thích
113
Hi ! cả nhà
Mình có 1 sheet chứa khoảng 40.000 dòng, nhưng không liên tục, có lúc cách 5 dòng mới có dữ liệu, có lúc cách 30 dòng mới có dữ liệu.
Mình muốn bỏ tất cả các dòng không có dữ liệu với 3 cách sau:

1/ dùng macro:
PHP:
Sub DeleteRowsThatLookEmptyinColA()
  Application.ScreenUpdating = False
  Application.Calculation = xlCalculationManual   'pre XL97 xlManual'
  Dim rng As Range, ix As Long
  Set rng = Intersect(Range("A:A"), ActiveSheet.UsedRange)
  For ix = rng.Count To 1 Step -1
      If Trim(Replace(rng.Item(ix).Text, _
                Chr(160), Chr(32))) = "" Then
        rng.Item(ix).EntireRow.Delete
      End If
  Next
done:
  Application.Calculation = xlCalculationAutomatic
  Application.ScreenUpdating = True
End Sub

2/ dùng macro:
PHP:
Sub DelEmptyRows()
  Dim i As Long, iLimit As Long 'updated for XL2003 2006-01-31'
  iLimit = ActiveSheet.UsedRange.Rows.Count

  Application.ScreenUpdating = False
  Application.Calculation = xlCalculationManual   'pre XL97 xlManual'
  For i = iLimit To 1 Step -1
    If Application.CountA(Cells(i, 1).EntireRow) = 0 Then
       Cells(i, 1).EntireRow.Delete
    End If
  Next i
   Application.Calculation = xlCalculationAutomatic
   Application.ScreenUpdating = True
   iLimit = ActiveSheet.UsedRange.Rows.Count   'attempt to fix lastcell'
   ActiveWorkbook.Save
End Sub
3/chọn auto filler , chọn blanks để lọc ra các dòng không có dữ liệu rồi delete nhưng không được.

Mong các đại ca chỉ giáo

Xin đa tạ
 
Chỉnh sửa lần cuối bởi điều hành viên:
Hỏi lại lần nữa cho rõ: Bạn muốn làm điều gì đối với file này vậy?[/QUOTEA`

Mình loay hoay tìm cách này cách kia để cuối cùng ra được cái report chỉ toàn line item thôi nhưng phải gắn vendor code vô tương ứng từng dòng line item thì mới biết Document đó của vendor nào, bạn xem trong sheet layout mình mới insert vô file để dễ hiểu hơn nhé

(ua sao minh ko gui file duoc, minh het quota gui file roi, lam sao de delete nhung file da upload, hichic)
 
Upvote 0
Bạn ơi mình set danhmuc thi bị báo lỗi variable not define. Mình gửi file để bạn tham khảo

Mượn bài của Sư Phụ ndu96081631 để giúp bạn một cách tổng quát của bài này!

Bạn tạo 1 module rồi chép code dưới đây vào sẽ giải quyết được mọi vấn đề về xóa dòng trống của bạn.

PHP:
Function RemoveBlanksRow(ByVal SrcRng As Range)
  Dim SrcArr, DesArr, i As Long, j As Long, lRow As Long, k As Long
  On Error GoTo ExitFunc
  RemoveBlanksRow = SrcRng.Value
  SrcArr = SrcRng.Value
  RemoveBlanksRow = SrcArr
  ReDim DesArr(1 To UBound(SrcArr, 1), 1 To UBound(SrcArr, 2))
  For i = 1 To UBound(SrcArr, 1)
    lRow = lRow + 1: k = 0
    For j = 1 To UBound(SrcArr, 2)
      If SrcArr(i, j) = "" Then k = k + 1
      DesArr(lRow, j) = SrcArr(i, j)
    Next
  If k = UBound(SrcArr, 2) Then lRow = lRow - 1
  Next
  RemoveBlanksRow = DesArr
ExitFunc:
End Function
 
 
 
Sub Main()
  With Sheet2.UsedRange
    .Value = RemoveBlanksRow(.Cells)
  End With
End Sub

Bạn chạy Sub Main nhé!

Tham khảo nguồn tại đây: http://www.giaiphapexcel.com/forum/...hêm-Sửa-Xóa-trên-ListView&p=305727#post305727
 
Upvote 0
Cảm ơn bạn nhưng mình cũng chưa làm được
Vì mình không load file lên được nên chắc diễn đạt chưa rõ nghĩa

Dữ liệu của mình thể hiện tất cả transaction payment cho từng vendor, format
Phần main item có thông tin của vendor
cách vài dòng rồi đến
Phần line item có thông tin của document và amount .....

Cứ liên tiếp như thế cho nhiều vendor

Mình muốn xem tất cả transaction payment có gắn vendor tương ứng (chỉ cần vendor code là đủ, không cần nhiều thông tin như là địa chỉ, TP....)

Vì vậy, ứng dụng delete dòng trống chỉ mới giải quyết 1/2 vấn đề là các vendor liên tục không có dòng trống nhưng dữ liệu vẫn nằm ở dạng main item rồi đến line item
Giờ mình muốn chèn thêm cot vendor o line item, rồi delete luôn main item

Nhờ các bạn chỉ giúp

(PS: nhân tiện chỉ giúp mình làm sao load file nua nếu bị thông báo exceed quota)

Cam on nhieu
 
Upvote 0
Với mình thì bài này không cần làm phức tạp thêm, mình làm như sau cũng ngon:

1.Chèn thêm 1 dòng trên cùng coi như tiêu đề.
2.Tại ô I2 nhập công thức: =If(Counta(A2:H2)>0,Max($i$1:I1)+1,"") rồi filldown
3.Chép cột I rồi dán lại bằng Paste Speacial (Value) (Nhằm xoá công thức)
4.Sort cột A đến cột I theo cột I rồi xoá cột I là xong
 
Upvote 0
Với mình thì bài này không cần làm phức tạp thêm, mình làm như sau cũng ngon:

1.Chèn thêm 1 dòng trên cùng coi như tiêu đề.
2.Tại ô I2 nhập công thức: =If(Counta(A2:H2)>0,Max($i$1:I1)+1,"") rồi filldown
3.Chép cột I rồi dán lại bằng Paste Speacial (Value) (Nhằm xoá công thức)
4.Sort cột A đến cột I theo cột I rồi xoá cột I là xong

Thanks bạn, mình sẽ áp dụng để xoá dòng trống, nhưng làm cách này cũng chưa giải quyết được vấn đề của mình là copy vendor xuống những dòng line item.

Vendor DocumentNo Doc. Date Amount Yn doc. curr. Curr.
1200016 2000047750 05.05.2011 1849956353 VND

/TABLE]
Nhờ bạn chỉ thêm
 
Lần chỉnh sửa cuối:
Upvote 0
Thanks bạn, mình sẽ áp dụng để xoá dòng trống, nhưng làm cách này cũng chưa giải quyết được vấn đề của mình là copy vendor xuống những dòng line item.
Vendor DocumentNo Doc. Date Amount Yn doc. curr. Curr. 1200016 2000047750 05.05.2011 1,849,956,353 VND
Nhờ bạn chỉ thêm
Bạn không đưa file lên thì dù có nói gì cũng chẳng ai hiểu đâu
 
Upvote 0
hic hic... mình không biết sao cứ bị exceed quota hoài, file mình zip lai chỉ có 11KB mà cũng ko lên dc
 
Upvote 0
hic hic... mình không biết sao cứ bị exceed quota hoài, file mình zip lai chỉ có 11KB mà cũng ko lên dc

Trong hồ sơ của bạn, bạn chọn vào nút "Chọn lệnh", rồi chọn "Điều chỉnh chi tiết hồ sơ", tại "My Setting" bạn chọn "File Đính Kèm". Khi bảng Thống kê đính kèm, bạn check những File nào đó bạn muốn remove (nên chọn những File không có giá trị học tập), rồi bấm vào nút "Xóa Bài Đánh Dấu".

Chúc thành công.
 
Upvote 0
A`, cảm ơn bạn nhiều, giờ mình tải file lên được rồi, bạn xem sheet layout là cái kết quả mình muốn
 

File đính kèm

Upvote 0
A`, cảm ơn bạn nhiều, giờ mình tải file lên được rồi, bạn xem sheet layout là cái kết quả mình muốn

Trời, cái này quá dễ bạn ơi, chỉ cần dùng AutoFilter là được, bạn Insert thêm 1 hàng đầu tiên với tiêu đề
Vendor DocumentNo Doc. Date Amount Yn doc. curr. Curr.
Tô khối dòng tiêu đề này rồi bấm vào Filter, bạn chỉ cần lọc đúng vào DocumentNo thôi, không cần lọc ở đâu nữa, bạn chọn Blank và DocumentNo rồi xóa những cái này. Sau đó cho show all lại là ra cái bạn muốn.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Nhưng mà phải copy vendor xuống trước chứ cột vendor không có sẵn dữ liệu đâu bạn ơi, vậy mình có cách nào copy tự động không?
 
Upvote 0
Nhưng mà phải copy vendor xuống trước chứ cột vendor không có sẵn dữ liệu đâu bạn ơi, vậy mình có cách nào copy tự động không?

Chỉ có bạn mới biết Vender là cái gì và chép vào đâu chứ ai mà biết được nó là cái gì chứ! Còn File của bạn tôi đã gửi lên ở bài trước đấy, xem file nhé.
 
Upvote 0
1.Bạn thêm dòng tiêu đề
2.Bạn nhập công thức sau vào ô K6 (Tạm mượn cột K) rồi filldown hết dữ liệu
=IF(AND(B5<>"",B5="DocumentNo"),E1,IF(B5<>"",K5,""))&IF(AND(A5<>"",A6=""),"Vendor","")
3.Chép cột K và dán Speacial (Value) vào cột A
4.AutoFilter và chọn Blank cột B rồi chon tất và Delete hết
5.Xem kết quả
 
Lần chỉnh sửa cuối:
Upvote 0
Qua điện thoại, tôi hiểu bạn QueAn muốn cần giúp đỡ vấn đề gì rồi, nhưng do trình độ ABC nên tôi gửi lại File lên và nhờ các thành viên giúp đỡ.

Yêu cầu là như vầy: Tại sheet xoadong, Copy số Vendor tại cột E (tôi đã tô màu cam) vào cột A (tôi tô màu xanh) tương ứng với số DocumentNo tại cột B (tôi tô màu xanh lá cây).

Tôi nghĩ chỉ có dùng Code mới thực hiện được, chứ làm thủ công thì ẹc... ẹc... Mong các cao thủ giúp đỡ!
 

File đính kèm

Upvote 0
1.Bạn thêm dòng tiêu đề
2.Bạn nhập công thức sau vào ô K6 (Tạm mượn cột K) rồi filldown hết dữ liệu
=IF(AND(B5<>"",B5="DocumentNo"),E1,IF(B5<>"",K5,""))&IF(AND(A5<>"",A6=""),"Vendor","")
3.Chép cột K và dán Speacial (Value) vào cột A
4.AutoFilter và chọn Blank cột B rồi chon tất và Delete hết
5.Xem kết quả

Đúng là dùng công thức cũng giải quyết được vấn đề này rồi. Cám ơn Anh Seland.
 
Upvote 0
Cảm ơn diễn đàn, mình đã giải quyết được vấn đề rồi.
 
Upvote 0
Xoá dòng cần xoá!!!

Dear Thien,
-----------
Theo mình, nếu công việc xoá các dòng trống như thế này không phải là thường xuyên thì bạn không nhất thiết phải cần đến lập trình.
Dù lập trình hay không thì bạn cũng nên tối ưu lại bảng cơ sở dữ liệu của bạn thật tốt: tạo "field name" cho bảng dữ liệu (khi Ctrl+Shift+* phải chọn được đúng vùng dữ liệu làm việc, các cột nào không cần thiết thì xoá đi hoặc đặt ở vị trí cuối bảng, hạn chế màu (mè),... cụ thể mình đã tối ưu lại bảng cơ sở dữ liệu của bạn:
1. Insert thêm một dòng trước ròng thứ 7, mục đích để ngăn cách với phần Header của bảng
2. Xoá cột F và cột H (hai cột trống, không có tác dụng)
3. Bỏ tô màu toàn bộ bảng, bổ xung cột ghi chú thay vì tô màu
Để xoá được các dòng trống, dù làm thủ công hay kỹ thuật lập trình, bạn phải có dấu hiệu nhận ra chúng. Có nhiều cách giải quyết khác nhau, song theo mình đơn giản và nhanh nhất là sử dụng thêm cột phụ. Cột này sẽ kiểm tra dòng hiện hành nếu trống sẽ có kết quả là 0, đựa vào hàm
=CELL("contents";<reference>)
Bạn lưu ý <reference> là những ô liên tục và có ý nghĩa bắt buộc phải có giá trị. Trong ví dụ của bạn mình chọn các ô trên dòng hiện hành từ cột D đến cột H (do dữ liệu của bạn chưa được tối ưu).
Ví dụ, sau khi bạn đã chèn thêm 1 dòng trước dòng số 7 và xoá đi 2 cột, tại ô O10 = CELL("contents";D10:H10) rồi copy công thức này cho các ô còn lại trong bảng trên cột O.
Bây giờ bạn chỉ việc AutoFilter cột O với giá trị filter = 0. Đó là các dòng trống.
Bạn có thể dễ dàng tạo ra một macro để xoá tự động các dòng này?
Chúc bạn thành công!
Cảm ơn bạn về công thức CELL. Đúng là công thức mình đang cần!!!
 
Upvote 0
Web KT

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

Back
Top Bottom