Chỉ dùm em chỗ sai của đoạn code

Liên hệ QC

Robinhod

Thành viên mới
Tham gia
7/7/10
Bài viết
37
Được thích
5
Em viết đoạn code lọc ngày nhưng không hiểu sao nó vẫn chưa chạy được (Em muốn dùng vòng lặp). AC chỉ dùm em chỗ sai!
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim ws As Worksheet
    Dim i As Long
    Dim j As Long
    On Error Resume Next
    Application.ScreenUpdating = False
    Set ws = Sheets("Sheet1")
    If Target.Address = "$C$1" Then
    Range("A4:B1500").ClearContents
    i = 4
    For j = 2 To 1000
        If ws.Range("A" & j) = "$C$1" Then
        Range("A" & i) = ws.Range("B" & j)
        Range("B" & i) = ws.Range("C" & j)
        i = i + 1
        End If
    Next
    End If
    Set ws = Nothing
End Sub
 

File đính kèm

  • GPEh.xls
    26.5 KB · Đọc: 6
Câu này:
If ws.Range("A" & j) = "$C$1" Then

Bạn có thấy vô lý không?

Lẽ ra là Range("C1") hoặc [C1] hoặc Target.
 
Upvote 0
AC sửa dùm em code này nhé! Em muốn nếu cột ngày giống nhau thì nó chỉ hiện ngày đó ở dòng đầu tiên thôi.
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim ws As Worksheet
    Dim i As Long, j As Long, eRw As Long, eR As Long
    On Error Resume Next
    Application.ScreenUpdating = False
    Set ws = Sheets("DATA")
    eRw = ws.Cells(Cells.Rows.Count, "B").End(xlUp).Row
    If Target.Address = "$B$3" Then
    Range("A6:C65535").ClearContents
    i = 6
    For j = 2 To eRw
        If ws.Range("B" & j) = Target Then
            Range("A" & i) = ws.Range("A" & j)
            Range("B" & i) = ws.Range("C" & j)
            Range("C" & i) = ws.Range("D" & j)
        i = i + 1
        End If
    Next
    End If
    eR = Cells(Cells.Rows.Count, "A").End(xlUp).Row
    For i = 6 To eR Step -1 
        If Cells(i, 1) = Cells(i - 1, 1) Then Cells(i, 1) = ""
    Next i
    Set ws = Nothing
End Sub
 

File đính kèm

  • GPEv.rar
    10.5 KB · Đọc: 9
Lần chỉnh sửa cuối:
Upvote 0
PHP:
 eR = Cells(Cells.Rows.Count, "A").End(xlUp).Row
    For i = 6 To eR Step -1

Sao lại step - 1? eR bao giờ cũng >=6, mà 6 - 1 đến bao giờ mới bằng eR!
 
Upvote 0
PHP:
 eR = Cells(Cells.Rows.Count, "A").End(xlUp).Row
For i = 6 To eR Step -1

Sao lại step - 1? eR bao giờ cũng >=6, mà 6 - 1 đến bao giờ mới bằng eR!

Nếu em để
PHP:
For i = eR To 6 Step -1
thì nó chỉ trừ đi 1 dòng thôi. Vậy em phải sửa nó như thế nào ah?
Em đã nghĩ hết cách rùi...........!! AC chỉ dùm em nha!
 
Lần chỉnh sửa cuối:
Upvote 0
Các AC sửa dùm em với nhé! Em đã thử tất cả những gì em biết rùi............!!
 
Upvote 0
Dòng cuối đã có sẵn sao lại không dùng chứ? Đó là i -1 đấy!

PHP:
 For k = i - 1 To 6 Step -1
        If Cells(k, 1) = Cells(k - 1, 1) Then Cells(k, 1).ClearContents
    Next k

Nếu tính lại eR = Cells(65536, 1).End(xlUp).Row, eR sẽ bằng 6, vì ScreenUpdating đang bằng False, các số liệu chưa kịp đổ xuống sheet.
Sau đó nó đổ xuống theo kiểu nào đó mà ta không kiểm soát được cả i và eR.
 
Lần chỉnh sửa cuối:
Upvote 0
Dòng cuối đã có sẵn sao lại không dùng chứ?

PHP:
 For k = i To 6 Step -1
If Cells(k, 1) = Cells(k - 1, 1) Then Cells(k, 1).ClearContents
Next k
Nhưng nếu không tận dụng i=6 thì tại sao lại không được? Em vẫn không hiểu chỗ này. Anh vui lòng nói cho em hiểu rõ hơn?
 
Upvote 0
Nếu tính lại eR = Cells(65536, 1).End(xlUp).Row, eR sẽ bằng 6, vì ScreenUpdating đang bằng False, các số liệu chưa kịp đổ xuống sheet.
Sau đó nó đổ xuống theo kiểu nào đó mà ta không kiểm soát được cả i và eR.

Thí dụ dùng 1 câu lệnh kiểm tra:
Mã:
eR = Cells(65536, 1).End(xlUp).Row
    For k = eR To 6 Step -1
        If Cells(k, 1) = Cells(k - 1, 1) Then Cells(k, 1).ClearContents
        [COLOR=red]Debug.Print k, eR[/COLOR]
    Next k
Kết quả: k và eR trong cửa sổ immediate. Sự thực chỉ có 22 dòng nhưng for chạy quá trời vòng luôn. Cả k và eR đều chạy lung tung.

PHP:
 16            24 
 15            24 
 14            24 
 13            24 
 12            24 
 11            24 
 10            24 
 9             24 
 8             24 
 7             24 
 6             24 
 24            24 
 23            24 
 22            24 
  ..... 'giảm tiếp'
 8             24 
 7             24 
 6             24 
 26            26 
 25            26 
 24            26 
 23            26 
 22            26 
 21            26 
   ..... 'giảm tiếp'
 7             26 
 6             26 
 26            26 
 25            26 
 24            26 
  ..... 'giảm tiếp'
 8             26 
 7             26 
 6             26 
 26            26 
 25            26 
 24            26 
   ..... 'giảm tiếp'
 9             26 
 8             26 
 7             26 
 6             26 
 26            26 
 25            26 
 24            26 
   ..... 'giảm tiếp'
 8             26 
 7             26 
 6             26 
 27            27 
 26            27 
 25            27 
 24            27 
   ..... 'giảm tiếp'
 8             27 
 7             27 
 6             27 
 26            26 
 25            26 
   ..... 'giảm tiếp'
 7             26 
 6             26 
 26            26 
 25            26 
 24            26 
  ..... 'giảm tiếp'
 8             26 
 7             26 
 6             26 
 26            26 
 25            26 
   ..... 'giảm tiếp'
 8             26 
 7             26 
 6             26
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT
Back
Top Bottom