Hoàng Nhật Phương
Thành viên gắn bó



- Tham gia
- 5/11/15
- Bài viết
- 1,895
- Được thích
- 1,219
Option Explicit
Sub An5DongTrong()
Dim SoDg As Long
Dim Cls As Range, aRng As Range
For Each Cls In Range("E2:E33")
If Cls.Value = "" Then
SoDg = SoDg + 1
If SoDg = 1 Then
Set aRng = Cls
ElseIf SoDg < 5 Then
Set aRng = Union(aRng, Cls)
ElseIf SoDg = 5 Then
Union(aRng, Cls).EntireRow.Hidden = True
Set aRng = Nothing: SoDg = 0
End If
Else
Set aRng = Nothing: SoDg = 0
End If
Next Cls
End Sub
Option Explicit
Sub an_dong()
Dim i As Long, dem As Long, vung As Range, vung2 As Range
Set vung = Range("A1")
For i = 2 To 33
If IsEmpty(Cells(i, 5).Value) Then
dem = dem + 1
If dem = 5 Then
Set vung = Union(Cells(i, 5).Offset(-4).Resize(5), vung)
dem = 0
End If
Else
dem = 0
End If
Next i
Set vung2 = Intersect([E2:E100], vung)
vung2.EntireRow.Hidden = True
End Sub
PHP:Option Explicit Sub An5DongTrong() Dim SoDg As Long Dim Cls As Range, aRng As Range For Each Cls In Range("E2:E33") If Cls.Value = "" Then SoDg = SoDg + 1 If SoDg = 1 Then Set aRng = Cls ElseIf SoDg < 5 Then Set aRng = Union(aRng, Cls) ElseIf SoDg = 5 Then Union(aRng, Cls).EntireRow.Hidden = True Set aRng = Nothing: SoDg = 0 End If Else Set aRng = Nothing: SoDg = 0 End If Next Cls End Sub
Public Sub GPE()
Dim Cll As Range, Num As Long
For Each Cll In Range("E2:E33")
If Cll.Value = "" Then
Num = Num + 1
Else
Num = 0
End If
If Num = 5 Then
Rows(Cll.Row & ":" & Cll.Offset(-4).Row).EntireRow.Hidden = True
Num = 0
End If
Next
End Sub
Option Explicit
Sub An5OTrongLienTiep()
Dim J As Long: Dim Rng As Range
For J = 2 To 44 Step 5
Set Rng = Cells(J, "E").Resize(5)
If Application.WorksheetFunction.Sum(Rng) = 0 Then
Rng.EntireRow.Hidden = True
End If
Next J
End Sub
PHP:Option Explicit Sub An5OTrongLienTiep() Dim J As Long: Dim Rng As Range For J = 2 To 44 Step 5 Set Rng = Cells(J, "E").Resize(5) If Application.WorksheetFunction.Sum(Rng) = 0 Then Rng.EntireRow.Hidden = True End If Next J End Sub
Option Explicit
Sub An5OTrongLienTiep()
Dim J As Long: Dim Rng As Range
For J = 2 To 44 Step 5
Set Rng = Cells(J, "E").Resize(5)
If Application.WorksheetFunction.CountBlank(Rng) = 5 Then
Rng.EntireRow.Hidden = True
End If
Next J
End Sub
Thì tại bạn đưa file toàn chưa kí số không cơ mà!
PHP:Option Explicit Sub An5OTrongLienTiep() Dim J As Long: Dim Rng As Range For J = 2 To 44 Step 5 Set Rng = Cells(J, "E").Resize(5) If Application.WorksheetFunction.CountBlank(Rng) = 5 Then Rng.EntireRow.Hidden = True End If Next J End Sub
Thì tại bạn đưa file toàn chưa kí số không cơ mà!
PHP:Option Explicit Sub An5OTrongLienTiep() Dim J As Long: Dim Rng As Range For J = 2 To 44 Step 5 Set Rng = Cells(J, "E").Resize(5) If Application.WorksheetFunction.CountBlank(Rng) = 5 Then Rng.EntireRow.Hidden = True End If Next J End Sub
For J = 2 To 7000 Step 5
Xin chào tất cả các bạn,đúng là code đã hoat động tốt rồi ạ...
Tuy nhiên với dữ liệu khoảng 7000 dòng thì code chạy cũng rất lâu:
Xin hỏi các bạn còn giải pháp nào tối ưu về thời gian chạy code nữa không ạ?Mã:For J = 2 To 7000 Step 5
Rất mong được các bạn hỗ trợ thêm cho chủ để này.
Xin cảm ơn.
---
Có lẽ cũng là lỗi của O.Thơ không nói kỹ hơn, rất xin lỗi tất cả các bạn.
Bạn up file khoảng 7000 dòng lên đây mình test thử thế nào. Tôi thấy code #8 nếu sửa chút nửa có thể giải quyết được, nhưng phải có file test mới trả lời được.Xin chào tất cả các bạn,đúng là code đã hoat động tốt rồi ạ...
Tuy nhiên với dữ liệu khoảng 7000 dòng thì code chạy cũng rất lâu:
Xin hỏi các bạn còn giải pháp nào tối ưu về thời gian chạy code nữa không ạ?Mã:For J = 2 To 7000 Step 5
Rất mong được các bạn hỗ trợ thêm cho chủ để này.
Xin cảm ơn.
---
Có lẽ cũng là lỗi của O.Thơ không nói kỹ hơn, rất xin lỗi tất cả các bạn.
Xin cảm ơn các bạn đã quan tâm đến chủ đề ạ.
Vâng o.Thơ xin upfile minh họa dữ liệu lớn ạ. ( so với file số 2 cũng không có gì thay đổi đâu ạ chỉ là tăng số lượng dòng và sheet lên thêm thôi ).
Chỉ là dữ liệu trong file của O.Thơ hơi nhạy cảm một chút nên O.Thơ không up file thật lên được chứ trong đó có gì quý giá đáng học hay đang xem đâu ạ.
Đúng là code bài 8, O.Thơ đã giải quyết được vấn đề rồi và O.Thơ đã áp dụng một lần nữa cảm ơn bạn HYen17 đã hỗ trợ
nhưng O.Thơ thấy hơi chậm lên muốn hỏi thêm xem có giải pháp nào tối ưu hơn nữa không ạ.
Nếu các bạn có thời gian và hứng thú rất mong các bạn tiếp tục với chủ đề ạ.
Xin cảm ơn tất cả các bạn rất nhiều
Mạng phép sử dụng code của bạn HYen17 và chỉnh sửa chút đỉnh để tăng tốc, hy vọng đáp ứng yêu cầu của bạn.Xin cảm ơn các bạn đã quan tâm đến chủ đề ạ.
Vâng o.Thơ xin upfile minh họa dữ liệu lớn ạ. ( so với file số 2 cũng không có gì thay đổi đâu ạ chỉ là tăng số lượng dòng và sheet lên thêm thôi ).
Chỉ là dữ liệu trong file của O.Thơ hơi nhạy cảm một chút nên O.Thơ không up file thật lên được chứ trong đó có gì quý giá đáng học hay đang xem đâu ạ.
Đúng là code bài 8, O.Thơ đã giải quyết được vấn đề rồi và O.Thơ đã áp dụng một lần nữa cảm ơn bạn HYen17 đã hỗ trợ
nhưng O.Thơ thấy hơi chậm lên muốn hỏi thêm xem có giải pháp nào tối ưu hơn nữa không ạ.
Nếu các bạn có thời gian và hứng thú rất mong các bạn tiếp tục với chủ đề ạ.
Xin cảm ơn tất cả các bạn rất nhiều
Sub An5OTrongLienTiep()
Dim J As Long, vung As Range, Rng As Range, kt As Boolean
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.Calculation = xlCalculationManual
For J = 2 To 8097 Step 5
Set Rng = Cells(J, "E").Resize(5)
If Application.WorksheetFunction.CountBlank(Rng) = 5 Then
If vung Is Nothing Then
Set vung = Rng
Else
Set vung = Union(vung, Rng)
End If
End If
Next J
vung.EntireRow.Hidden = True
Application.ScreenUpdating = True
Application.DisplayAlerts = True
Application.Calculation = xlCalculationAutomatic
End Sub
Bạn nói rõ lại là từng nhóm 5 dòng trong cột E nếu hoàn toàn trống rỗng thì bỏ qua không lọc? Có một dấu nháy đơn cũng coi là có dữ liệu? (Vì tôi thấy có nhóm không có số 1,2,3... mà có 1 dấu nháy đơn)
Lọc dữ liệu sang sheet khác được không hay phải ẩn dòng tại chỗ?
Mạng phép sử dụng code của bạn HYen17 và chỉnh sửa chút đỉnh để tăng tốc, hy vọng đáp ứng yêu cầu của bạn.
Mã:Sub An5OTrongLienTiep() Dim J As Long, vung As Range, Rng As Range, kt As Boolean Application.ScreenUpdating = False Application.DisplayAlerts = False Application.Calculation = xlCalculationManual For J = 2 To 8097 Step 5 Set Rng = Cells(J, "E").Resize(5) If Application.WorksheetFunction.CountBlank(Rng) = 5 Then If vung Is Nothing Then Set vung = Rng Else Set vung = Union(vung, Rng) End If End If Next J vung.EntireRow.Hidden = True Application.ScreenUpdating = True Application.DisplayAlerts = True Application.Calculation = xlCalculationAutomatic End Sub
Option Explicit
Sub AnNhomDongTrong()
Dim Sarr, tam(1 To 60000) As Variant
Dim i, j, k As Long
Dim rng As Range
Sarr = [e2:e8101]
For i = 1 To UBound(Sarr) Step 5
If Trim(Sarr(i, 1)) = "" Then
k = k + 1
tam(k) = "E" & i + 1 & ":E" & i + 5
End If
Next
With Application
.Calculation = xlCalculationManual
.ScreenUpdating = False
For i = 1 To k
Range(tam(i)).EntireRow.Hidden = True
Next
.Calculation = xlCalculationAutomatic
.ScreenUpdating = True
End With
End Sub
Option Explicit
Sub AnNhomDongTrong()
Dim Sarr, tam(1 To 60000) As Variant
Dim i, j, k As Long
Dim rng, VUNG As Range
Sarr = [e2:e8101]
For i = 1 To UBound(Sarr) Step 5
If Trim(Sarr(i, 1)) = "" Then
Set rng = Range("E" & i + 1 & ":E" & i + 5)
If VUNG Is Nothing Then
Set VUNG = rng
Else
Set VUNG = Union(VUNG, rng)
End If
End If
Next
With Application
.Calculation = xlCalculationManual
.ScreenUpdating = False
VUNG.EntireRow.Hidden = True
.Calculation = xlCalculationAutomatic
.ScreenUpdating = True
End With
End Sub
góp vui
=========Mã:Option Explicit Sub AnNhomDongTrong() Dim Sarr, tam(1 To 60000) As Variant Dim i, j, k As Long Dim rng As Range Sarr = [e2:e8101] For i = 1 To UBound(Sarr) Step 5 If Trim(Sarr(i, 1)) = "" Then k = k + 1 tam(k) = "E" & i + 1 & ":E" & i + 5 End If Next With Application .Calculation = xlCalculationManual .ScreenUpdating = False For i = 1 To k Range(tam(i)).EntireRow.Hidden = True Next .Calculation = xlCalculationAutomatic .ScreenUpdating = True End With End Sub
Sửa code sau khi đọc bài 16 của bạn "giaiphap"
hehehhe..sửa xong thấy y chang bài người ta..........heheheehMã:Option Explicit Sub AnNhomDongTrong() Dim Sarr, tam(1 To 60000) As Variant Dim i, j, k As Long Dim rng, VUNG As Range Sarr = [e2:e8101] For i = 1 To UBound(Sarr) Step 5 If Trim(Sarr(i, 1)) = "" Then Set rng = Range("E" & i + 1 & ":E" & i + 5) If VUNG Is Nothing Then Set VUNG = rng Else Set VUNG = Union(VUNG, rng) End If End If Next With Application .Calculation = xlCalculationManual .ScreenUpdating = False VUNG.EntireRow.Hidden = True .Calculation = xlCalculationAutomatic .ScreenUpdating = True End With End Sub
giống "đạo code" quá...kkkakakak