e cần giúp bài toán này ạ (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

angelfire1512

Thành viên mới
Tham gia
26/8/14
Bài viết
5
Được thích
0
[TABLE="width: 79"]
[TR]
[TD]
630190250
[/TD]
[/TR]
[TR]
[TD]630190251[/TD]
[/TR]
[TR]
[TD]630190251[/TD]
[/TR]
[TR]
[TD]632325140[/TD]
[/TR]
[TR]
[TD]632325140[/TD]
[/TR]
[TR]
[TD]632325141[/TD]
[/TR]
[TR]
[TD]632325141
[/TD]
[/TR]
[TR]
[TD]632325141
[/TD]
[/TR]
[TR]
[TD]632325141[/TD]
[/TR]
[TR]
[TD]636273360[/TD]
[/TR]
[TR]
[TD]636273360[/TD]
[/TR]
[TR]
[TD]636273360[/TD]
[/TR]
[TR]
[TD]636273360
[/TD]
[/TR]
[TR]
[TD]636273361[/TD]
[/TR]
[TR]
[TD]636273361[/TD]
[/TR]
[TR]
[TD]636273361[/TD]
[/TR]
[TR]
[TD]636273361[/TD]
[/TR]
[TR]
[TD]637352760[/TD]
[/TR]
[TR]
[TD]637352761[/TD]
[/TR]
[TR]
[TD]641950730[/TD]
[/TR]
[TR]
[TD]641950730[/TD]
[/TR]
[/TABLE]
lọc trùng với điều kiện là
chỉ giữ lại những dòng có giá trị số cuối lớn nhất
ví dụ 636273360 và 636273361 và 636273362 thì xóa hết những dòng 636273360, 636273361 đi chỉ giữ lại 636273362 thôi
Mã:
Sub test()

    Dim LastRow As Long
    Dim i, j As Integer
    'MsgBox Left(Range("c3"), 8)
    With ActiveSheet
        LastRow = .Cells(.Rows.Count, "C").End(xlUp).Row
    End With
    For i = 1 To 2
        For j = 0 To LastRow - 1
            If Left(Cells(i, "C"), 8) = Left(Cells(i + j, "C"), 8) Then
                If Right(Cells(i, "C"), 1) > Right(Cells(i + j, "C"), 1) Then Cells(i + j, "D").Value = "xoa"
                Else: If Right(Cells(i, "C"), 1) < Right(Cells(i + j, "C"), 1) Then Cells(i, "D").Value = "xoa"
            End If
        Next j
    Next i
    
End Sub
trên đó là code e viết
code này e làm để lọc những dòng đó ra, chưa xóa nhưng đánh dấu bằng cách những dòng nào cần xóa thì ô bên cạnh ghi xóa
bác nào giúp e với ạ. e mới mày mò về vba, cũng google mấy ngày rồi tự nghiên cứu mà chưa giải đc bài này
ý tưởng của e là lấy hàm left để so sánh mấy ký tự đầu, rồi nếu = nhau thì mới so sánh ký tự cuối, dòng nào nhỏ hơn thì del
 
bài này mình nên tách làm 2 bài nhỏ
1 là tìm số đuôi lớn nhất trong các số
ví dụ tìm đc MAX=5 rồi thì xóa các dòng có MAX khác 5 đi thôi !
 
Bạn xem macro này co đúng í bạn không:
PHP:
Option Explicit
Sub LocTrungCong1()
 Dim Arr()
 Dim j As Long, Tmp As Double, W As Integer
  
 Arr() = [c2].CurrentRegion.Offset(1).Value
 ReDim dArr(1 To UBound(Arr()), 1 To 1)
 Tmp = Arr(1, 1):           W = 1
 dArr(W, 1) = Tmp:
 For j = 2 To UBound(Arr())
    If Arr(j, 1) = Tmp Or Arr(j, 1) = Tmp + 1 Then
    ElseIf Arr(j, 1) > Tmp + 1 Then
        W = W + 1:          dArr(W, 1) = Arr(j, 1)
        Tmp = Arr(j, 1)
    End If
 Next j
 [e2].Resize(W).Value = dArr()
End Sub
 
Nếu có nhiều ô lớn nhất bằng nhau thì giữ lại hay xoá cái nào.

Khi nói chuyện lớn/nhỏ, LUÔN LUÔN tính đến trường hợp bằng nhau.
 
Web KT

Bài viết mới nhất

Back
Top Bottom