查找最新的分组

时间:2014-07-28 14:06:10

标签: vba excel-vba excel

我有几百个细胞。我想找到最新的分组。例如,我有以下数据:

  • 233400-003-02
  • 233400-002-03
  • 233400-002-02
  • 233400-002-01
  • 233400-001-04
  • 233400-001-03
  • 233400-001-02
  • 233400-001-01

最后一个数字定义了修订版。我想只保留最大数量或最新版本。到目前为止我有

For j = 9 To i Step 1
    Dim Idstring As String

    If Len(Cells(j, 1)) = 13 Then
        Idstring = Left(Cells(j, 1), 10)
        Cells(j, 5) = Idstring
    ElseIf Len(Cells(j, 1)) = 16 Then
        Idstring = Left(Cells(j, 1), 10)
        Cells(j, 5) = Idstring
    ElseIf Len(Cells(j, 1)) = 17 Then
        Idstring = Left(Cells(j, 1), 14)
        Cells(j, 5) = Idstring
    ElseIf Len(Cells(j, 1)) = 20 Then
        Idstring = Left(Cells(j, 1), 14)
        Cells(j, 5) = Idstring
    End If


    If Cells(j, 5) = Cells(j - 1, 5) Then


        If Len(Cells(j, 1)) = 16 Then
            Cells(j, 5).EntireRow.Delete
        ElseIf Len(Cells(j, 1)) = 20 Then
            Cells(j, 5).EntireRow.Delete
        ElseIf Right(Cells(j, 1), 1) < Right(Cells(j + 1, 1), 1) Then
            Cells(j, 5).EntireRow.Delete
        ElseIf Right(Cells(j, 1), 1) > Right(Cells(j + 1, 1), 1) Then
            Cells(j + 1, 5).EntireRow.Delete
            j = j + 1
        End If
    End If

下一个j

我做错了什么?谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

我认为你在填充单元格(j-1)之前与单元格(j-1)进行比较。但是,如果我错了,你需要在删除行时向后循环,或者Excel丢失跟踪你的位置。

Public Sub DeleteAllButLatest()

    Dim i As Long

    For i = 9 To 3 Step -1
        If Base(Cells(i, 1).Value) = Base(Cells(i - 1, 1).Value) Then
            Cells(i, 1).EntireRow.Delete
        End If
    Next i

End Sub

Public Function Base(ByVal sCode As String) As String

    Select Case Len(sCode)
        Case 13, 17
            Base = Left(sCode, Len(sCode) - 3)
        Case 16, 20
            Base = Left(sCode, Len(sCode) - 6)
    End Select

End Function

根据A2:A9中的样本数据。只需要去第3行,因为第2行必须是好的,所以不需要检查它。我做了一个函数来返回&#34; base&#34;每个数字,以便您可以比较当前单元格的基数与其上方的单元格。如果它们相同,请删除。如果没有,假设它是最新的。