thecuong.n99
Thành viên mới 

			
		- Tham gia
 - 16/8/22
 
- Bài viết
 - 10
 
- Được thích
 - 0
 





ChatGPT chỉ cho code chân phương nhất mà nó biết chứ không tối ưu. Trong trường hợp này phải union các dòng thỏa điều kiện vào 1 range, cuối cùng mới hide 1 lần cho cả range.View attachment 290091
Tạo một tài khoản chatGPT thì những phần này sẽ dễ dàng hơn bạn
Sub HideRowsWithValueZero()
Dim i As Long
For i = 22 To 636
If Range("A" & i).Value = 0 Then
Rows(i).EntireRow.Hidden = True
End If
Next i
End Sub
Tối ưu chi vậy? Ăn mày đòi xôi gấc.ChatGPT chỉ cho code chân phương nhất mà nó biết chứ không tối ưu. Trong trường hợp này phải union các dòng thỏa điều kiện vào 1 range, cuối cùng mới hide 1 lần cho cả range.
Tối ưu vì đam mê bác ơi. Em viết đoạn đổi dấu , thành ; mà ra kết quả nhưng không vừa ý. Nó không được như các chuyên gia. Viết xong lại đá đủ thứ, thế là lại chán.
  
  
					
				
						
					
					www.giaiphapexcel.com
				

Em biết tối ưu chắc chắn cần thiết cho hệ thống có dữ liệu lớn, nhưng em nghĩ là với nhu cầu của em và bạn hỏi đều là những người "ngoại đạo", cần giải quyết nhu cầu cấp bách trước mắt thì chat gpt vẫn là công cụ tương đối là hiệu quả ạ.ChatGPT chỉ cho code chân phương nhất mà nó biết chứ không tối ưu. Trong trường hợp này phải union các dòng thỏa điều kiện vào 1 range, cuối cùng mới hide 1 lần cho cả range.






Sub HideRowsWithZeroValue()
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim rngToHide As Range
    Dim i As Long
    
    Set ws = ThisWorkbook.Sheets("Sheet1") ' Replace "Sheet1" with your actual sheet name
    
    With ws
        lastRow = .Cells(.Rows.Count, 1).End(xlUp).Row ' Find the last row in column A
        
        Application.ScreenUpdating = False ' Disable screen updating for faster execution
        
        For i = 6 To 636 ' Rows 6 to 636
            If .Cells(i, 1).Value = 0 Then ' Check if the value in column A is 0
                If rngToHide Is Nothing Then
                    Set rngToHide = .Rows(i)
                Else
                    Set rngToHide = Union(rngToHide, .Rows(i))
                End If
            End If
        Next i
        
        If Not rngToHide Is Nothing Then
            rngToHide.EntireRow.Hidden = True ' Hide the rows using the Union range
        End If
        
        Application.ScreenUpdating = True ' Enable screen updating
        
    End With
End Sub
	

Sub HideRowsWithZeroValue()
    Dim ws As Worksheet
    Dim lastRow As Long
    
    Set ws = ThisWorkbook.Sheets("Sheet1") ' Replace "Sheet1" with your actual sheet name
    
    With ws
        Application.ScreenUpdating = False ' Disable screen updating for faster execution
        
        lastRow = .Cells(.Rows.Count, 1).End(xlUp).Row ' Find the last row in column A
        
        .Range("A6:A636").AutoFilter Field:=1, Criteria1:=0 ' Apply filter to column A with value 0
        
        If Application.WorksheetFunction.Subtotal(103, .Columns(1)) > 1 Then ' Check if any visible cells exist (excluding the header row)
            .Range("A7:A" & lastRow).SpecialCells(xlCellTypeVisible).EntireRow.Hidden = True ' Hide visible rows (excluding the header row)
        End If
        
        .AutoFilterMode = False ' Turn off the AutoFilter
        
        Application.ScreenUpdating = True ' Enable screen updating
    End With
End Sub
	Bạn định nghĩa "tối ưu" là gì?Em biết tối ưu chắc chắn cần thiết cho hệ thống có dữ liệu lớn, nhưng em nghĩ là với nhu cầu của em và bạn hỏi đều là những người "ngoại đạo", cần giải quyết nhu cầu cấp bách trước mắt thì chat gpt vẫn là công cụ tương đối là hiệu quả ạ.

cảm ơn bác,e thấy cái này nó ẩn 1 phát đc luôn.Ép nó dùng UNION cũng được. Nhưng chỉ thắc mắc là vùng đã xác định từ 22:636 rồi mà nó còn đi tìm lastRow làm gì không biết?
View attachment 290202View attachment 290203
PHP:Sub HideRowsWithZeroValue() Dim ws As Worksheet Dim lastRow As Long Dim rngToHide As Range Dim i As Long Set ws = ThisWorkbook.Sheets("Sheet1") ' Replace "Sheet1" with your actual sheet name With ws lastRow = .Cells(.Rows.Count, 1).End(xlUp).Row ' Find the last row in column A Application.ScreenUpdating = False ' Disable screen updating for faster execution For i = 6 To 636 ' Rows 6 to 636 If .Cells(i, 1).Value = 0 Then ' Check if the value in column A is 0 If rngToHide Is Nothing Then Set rngToHide = .Rows(i) Else Set rngToHide = Union(rngToHide, .Rows(i)) End If End If Next i If Not rngToHide Is Nothing Then rngToHide.EntireRow.Hidden = True ' Hide the rows using the Union range End If Application.ScreenUpdating = True ' Enable screen updating End With End SubBài đã được tự động gộp:
Sau vài lần ép nó ra bã, yêu cầu GPT phải đi tìm phương án tối ưu, phương án cuối cùng nhanh nhất và tối ưu nhất là Filter
View attachment 290204View attachment 290205
PHP:Sub HideRowsWithZeroValue() Dim ws As Worksheet Dim lastRow As Long Set ws = ThisWorkbook.Sheets("Sheet1") ' Replace "Sheet1" with your actual sheet name With ws Application.ScreenUpdating = False ' Disable screen updating for faster execution lastRow = .Cells(.Rows.Count, 1).End(xlUp).Row ' Find the last row in column A .Range("A6:A636").AutoFilter Field:=1, Criteria1:=0 ' Apply filter to column A with value 0 If Application.WorksheetFunction.Subtotal(103, .Columns(1)) > 1 Then ' Check if any visible cells exist (excluding the header row) .Range("A7:A" & lastRow).SpecialCells(xlCellTypeVisible).EntireRow.Hidden = True ' Hide visible rows (excluding the header row) End If .AutoFilterMode = False ' Turn off the AutoFilter Application.ScreenUpdating = True ' Enable screen updating End With End Sub




Thử cái Filter chưa?cảm ơn bác,e thấy cái này nó ẩn 1 phát đc luôn.

e chạy code thì nó báo lỗiThử cái Filter chưa?
Thay vì 636 dòng, test thử với 636000 biết nhau ngay