tranphuson
Thành viên thường trực




- Tham gia
- 14/8/09
- Bài viết
- 268
- Được thích
- 10
- Giới tính
- Nam
Sub DongDongTheoNgay()
Dim Dat As Date, J As Long, W As Integer, Rws As Long
Dim Arr(), dRg As Range
Dat = [w1].Value
Rws = Sheet1.UsedRange.Rows.Count
Arr() = [A2:T2].Resize(Rws).Value
Set dRg = Rows(9 + Rws & ":" & Rws + 9)
For J = 1 To UBound(Arr())
If Arr(J, 20) = Dat Then
W = W + 1
Set dRg = Union(dRg, Rows(1 + J & ":" & J + 1))
End If
Next J
MsgBox W
End Sub
Xin lỗi đã phản hồi trễ. Mình thấy đoạn code này thông báo đúng -> chỉ thêm lệnh xóa dòng nữa là quá tốtBạn kiểm thử theo macro sau:
PHP:Sub DongDongTheoNgay() Dim Dat As Date, J As Long, W As Integer, Rws As Long Dim Arr(), dRg As Range Dat = [w1].Value Rws = Sheet1.UsedRange.Rows.Count Arr() = [A2:T2].Resize(Rws).Value Set dRg = Rows(9 + Rws & ":" & Rws + 9) For J = 1 To UBound(Arr()) If Arr(J, 20) = Dat Then W = W + 1 Set dRg = Union(dRg, Rows(1 + J & ":" & J + 1)) End If Next J MsgBox W End Sub
Sau khi kiểm nếu đúng số dòng thì ta còn lệnh xóa dòng nữa là xong!
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim cell As Range, U As Range
If Target.Address(0, 0) <> "W1" Then Exit Sub
For Each cell In Range("T2:T" & Cells(Rows.Count, "T").End(xlUp).Row)
If cell.Value = Target Then
If U Is Nothing Then
Set U = cell
Else
Set U = Union(U, cell)
End If
End If
Next
If U Is Nothing Then
MsgBox "Khong tim thay!"
Exit Sub
End If
U.Select
If MsgBox("Co " & U.Rows.Count & " dong sap sua bi delete. Ban co muon tiep tuc khong? ", vbYesNo) = vbNo Then
Range("W1").Select
Exit Sub
End If
U.EntireRow.Delete
Range("W1").Select
End Sub
Cảm ơn bạn, số dòng được xóa là chính xác nhưng thông báo thì lại không đúng -> Vì tổng số dòng ngày 18/4 là 309 dòng (xen kẽ) nhưng code chỉ hiểu là số dòng ngày liên tục chỉ có 26 dòngMột cách khác: Bạn chỉ cần thay đổi ô W1 và kết quả sẽ tự thay đổi
(Code này đặt trong worksheet module, không đặt trong general module)
Mã:Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) Dim cell As Range, U As Range If Target.Address(0, 0) <> "W1" Then Exit Sub For Each cell In Range("T2:T" & Cells(Rows.Count, "T").End(xlUp).Row) If cell.Value = Target Then If U Is Nothing Then Set U = cell Else Set U = Union(U, cell) End If End If Next If U Is Nothing Then MsgBox "Khong tim thay!" Exit Sub End If U.Select If MsgBox("Co " & U.Rows.Count & " dong sap sua bi delete. Ban co muon tiep tuc khong? ", vbYesNo) = vbNo Then Range("W1").Select Exit Sub End If U.EntireRow.Delete Range("W1").Select End Sub
Lệnh xóa thì đơn giản thôi:Xin lỗi đã phản hồi trễ. Mình thấy đoạn code này thông báo đúng -> chỉ thêm lệnh xóa dòng nữa là quá tốt
Cảm ơn trước
dRng.Delete
OK. Vậy thêm 1 biến đếm c nhéCảm ơn bạn, số dòng được xóa là chính xác nhưng thông báo thì lại không đúng -> Vì tổng số dòng ngày 18/4 là 309 dòng (xen kẽ) nhưng code chỉ hiểu là số dòng ngày liên tục chỉ có 26 dòng
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c&, cell As Range, U As Range
If Target.Address(0, 0) <> "W1" Then Exit Sub
For Each cell In Range("T2:T" & Cells(Rows.Count, "T").End(xlUp).Row)
If cell.Value = Target Then
c = c + 1
If U Is Nothing Then
Set U = cell
Else
Set U = Union(U, cell)
End If
End If
Next
If U Is Nothing Then
MsgBox "Khong tim thay!"
Exit Sub
End If
U.Select
If MsgBox("Co " & c & " dong sap sua bi delete. Ban co muon tiep tuc khong? ", vbYesNo) = vbNo Then
Range("W1").Select
Exit Sub
End If
U.EntireRow.Delete
Range("W1").Select
End Sub
Xin cảm ơn đã giúpLệnh xóa thì đơn giản thôi:
Mã:dRng.Delete
Đoạn code này đã đúng số dòng xóa so với thông báo, xin cảm ơnOK. Vậy thêm 1 biến đếm c nhé
Mã:Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) Dim c&, cell As Range, U As Range If Target.Address(0, 0) <> "W1" Then Exit Sub For Each cell In Range("T2:T" & Cells(Rows.Count, "T").End(xlUp).Row) If cell.Value = Target Then c = c + 1 If U Is Nothing Then Set U = cell Else Set U = Union(U, cell) End If End If Next If U Is Nothing Then MsgBox "Khong tim thay!" Exit Sub End If U.Select If MsgBox("Co " & c & " dong sap sua bi delete. Ban co muon tiep tuc khong? ", vbYesNo) = vbNo Then Range("W1").Select Exit Sub End If U.EntireRow.Delete Range("W1").Select End Sub