Sub HideRowsConditionally()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("TMBCTC")
Dim lastRow As Long
lastRow = ws.Cells(ws.Rows.Count, "AO").End(xlUp).row
Dim i As Long
For i = 1 To lastRow
If ws.Cells(i, 1).Value = "x" Then
ws.Rows(i).Hidden = True
End If
Next i
End Sub
E chạy đoạn code trên nhưng nó không hoạt động. Bác nào biết lỗi ở đau chỉ giúp e với ạh. E xin cảm ơn ạh!
Thứ nhất: Bạn có thể chuyển ngữ từ VBA sang tiếng Việt hay tiếng nào mà bạn thông thuộc thì có thể tự thấy vấn đề
lastRow = ws.Cells(ws.Rows.Count, "AO").End(xlUp).row
Đây là câu lệnh tìm dòng 'lớn nhất' thuộc cột 'AO' có dữ liệu;
Sau câu lệnh này bạn toàn quyền hỏi nó đó là dòng nào, bỡi MsgBox lastRow
→ Nếu chẳng may cột 'AO' này rỗng thì bạn bạn đã phí phạm điện để chạy chương trình;
Nếu không rỗng thì xin chúc mừng bạn & ta tiếp:
Bạn tạo vòng lặp duyệt theo các dòng từ 1 cho đến dòng cuối của cột 'A'
→ Nếu chẳng may cột 'A' này rỗng thì chương trình lại tốn điện khi vâng lời bạn để chạy!
Bằng ngược lại cột 'A' này có dữ liệu
→ Nhưng không chứa dữ liệu yêu cầu ('x') thì chương trình cũng chạy trơn tuột!
→ Cũng phải tính tới chuyện trên cột 'A' này chỉ có 'X' mà không có 'x' như bạn hằng mong mõi!
Thứ hai Nếu là mình thì nên xài phương thức FIND() sẽ gọn gàng & nhanh chóng đạt kết quả hơn vòng lặp
Thứ ba: Bạn cần tìm các dòng có chứa 'x' ở cột 'A' & lại từ trên xuống dưới; điều này có nguy cơ bỏ lọt tội phạm đáng xóa;
Cái tật của tên Excel cố hữu này là dòng trên bị xóa thì dòng dưới được/bị đôn lên
& như vậy dòng bị/được đôn lên này có chứa 'x' ở cột 'A' thì không bị 'trù dập' rồi còn gì!
Nói thêm vẫn có cách duyệt từ trên xuống, nhưng chắc bạn sẽ phải tìm hiểu sau, 1 khi bạn đã duyệt từ dưới lên suôn sẻ đã!
Thứ ba: Bạn cần tìm các dòng có chứa 'x' ở cột 'A' & lại từ trên xuống dưới; điều này có nguy cơ bỏ lọt tội phạm đáng xóa;
Cái tật của tên Excel cố hữu này là dòng trên bị xóa thì dòng dưới được/bị đôn lên
Cũng có thể không được thật, nhưng không được ra sao thì chỉ mình bạn biết, bạn làm lại cho được nhé.
Còn muốn có câu trả lời nhanh, thì phải mô tả thật chi tiết, và có thêm cả file giả lập như thật gửi lên đây. Không thì cứ chờ tiếp vậy
@nhoa18 sửa mã của bạn
1. Thêm CSRT: CSRT(ws.Cells(i, 1).Value)
2. Đặt cột là 1 thay vì "OA": LastRow = ws.Cells(ws..UsedRange.Rows.Count + 2, 1).End(xlUp).row