Loại bỏ dòng trống

Liên hệ QC
Leo chọn dòng đủ điều kiện, gán vào mảng kết quả, đưa vào sheet sẽ nhanh hơn với dữ liệu lớn
Thân
Bác "con cò giả" xem chỗ nào chưa ổn thì sửa lại dùm em với:
[gpecode=vb]
Sub Sheet2_Button1_Click()
Dim sArr(), rArr()
Dim iR As Long, nR As Long, jR As Long
With Sheet2
Range("H2:I" & Range("H65535").End(xlUp).Row).ClearContents
sArr = Range("A2:C" & Range("A65535").End(xlUp).Row).Value
ReDim rArr(1 To UBound(sArr, 1), 1 To 3)
For iR = 1 To UBound(sArr, 1)
If sArr(iR, 2) <> "" And sArr(iR, 3) = "" Then
nR = nR + 1
For jR = 1 To 3
rArr(nR, jR) = sArr(iR, jR)
Next jR
End If
Next iR
Range("H2").Resize(nR, 3) = rArr
End With
End Sub
[/gpecode]
 

File đính kèm

  • CSDL.xls
    43.5 KB · Đọc: 99
Cách khác Dùng filter đi cho lẹ

[GPECODE=vb]
Sub CopyDK()
With Sheet2.Range("A1:C1000")
.AutoFilter 1, "<>"
.AutoFilter 3, "="
.Copy Range("G1")
.AutoFilter
End With
End Sub
[/GPECODE]
 
Xin hỏi: nếu dữ liệu tới mấy chục ngàn dòng thì Filter có ổn không? Tốc độ có nhanh hơn mảng không?
Cảm ơn!

Filter có hạn chế của nó là nếu dữ liệu nhiều mà không trùng lắp thì nó hiện được dữ liệu 10.000 dòng trong list như vẫn có thể dùng code được ví dụ dữ liệu anh muốn lấy nằm ở 2 dòng 65535 với 65536 đi thì chạy code trên hơi bị đuối ah
Nhân đây các bạn test dùm mình code này cũng để lấy dữ liệu bài trên mà sao máy mình bị báo lỗi
[GPECODE=vb]
With Range("C1:C12").SpecialCells(xlCellTypeBlanks)
.Offset(, -2).SpecialCells(xlCellTypeConstants, 23).Resize(, 3).Copy Range("G1")
End With
End Sub
[/GPECODE]

Báo lỗi chỗ Resize +-+-+-++-+-+-++-+-+-+
 
Chào bạn,

Mình đã áp dụng công thức của bạn trong trường hợp dòng có giá trị là 0 nằm trong cột cần lọc.
Nhưng mình có chút thắc mắc là nếu dòng chứa 0 nằm ở cột khác thì công thức trên không đúng cho lắm.
Nhờ bạn xử lý giúp trong trường hợp này.
Ví dụ
Cột A Cột B
ABC 2
CBD 0
FGH 1
..............
Kết quả trả về là
Cột A Cột B
ABC 2
FGH 1
.............
Cảm ơn bạn...
Nhìn cấu trúc File của bạn thì bạn không nên dùng VBA vì bạn sẽ không biết cách tùy biến, bạn nên sử dụng công thức. Bạn tham khảo công thức sau, kết thúc bằng tổ hợp 3 phím Ctrl + Shift + Enter
Mã:
=IF(ROW(1:1)<=COUNTIF($B$6:$B$15,"<>0"),INDEX($B$6:$B$15,SMALL(IF($B$6:$B$15<>0,ROW(INDIRECT("1:"&ROWS($B$6:$B$15))),""),ROW(1:1))),"")
 
Capture.PNG cả nhà làm ơn cho mình hỏi là để dồn đk các dòng trống như hình trên thì có các nào dùng hàm cho nhanh k ạ ?? k dùng đến công cụ !!!!
 
Web KT
Back
Top Bottom