2015-02-01 3 views
0

클라이언트 발송물 목록과 발송물 번호가있는 스프레드 시트가 있다고 가정 해 봅니다. 예 : DairyQueen 024918. 각 선적 번호는 6 자리입니다. 이 발송물 목록은 하루 종일 추가됩니다. 하루가 끝나면 각 회사의 최신 출하를보고 싶습니다.중복 값으로 시작하는 행을 제거하십시오.

기본적으로 클라이언트 이름이 중복되지만 클라이언트 발송물이 중복되지 않는 행을 제거하고 목록의 맨 아래에있는 가장 최근의 것만 유지하려고합니다. 다른 시스템에서의 특정 데이터 검색 설정으로 인해 클라이언트 및 배송 번호를 별도의 열에 입력 할 수 없습니다. 여기

은 예입니다 :

Costco 002456 
DairyQueen 0
Costco 001335 
DairyQueen 008448 
Menards 001444 
Menards 002448 
내가 원하는 것

이 목록에 남아있을 수 있습니다 :

Costco 001335 
DairyQueen 008448 
Menards 002448 

다음과 내가 지금까지 해봤 코드가 될 때 :

Sub DeleteOldClients() 
    Dim LastRow As Integer 
    LastRow = Range("A1").Cells.SpecialCells(xlCellTypeLastCell).Row 
    For i = 1 To LastRow 
     For j = 1 To LastRow 
      If (Left(Range("A" & i).Value, Len(Range("A" & i).Value) - 7) = Left(Range("A" & j).Value, Len(Range("A" & j).Value) - 7)) Then 
       Range("A" & i).EntireRow.Delete 
       LastRow = LastRow - 1 
      End If 
     Next j 
    Next i 
End Sub 

아쉽게도 실패합니다. 아무도 이것으로 도울 수 있습니까?

+0

어떻게 실패합니까? 오류가 있습니까? 대신 무엇을합니까? – SCB

답변

0

루프 카운터 (ij)가 올바르게 설정되지 않은, j 항상 i + 1에서 시작해야하며, iLastRow - 1에서 끝나야합니다. j을 사용하여 행을 삭제해야합니다. 조건문을 좀 더 간단하게 만들었습니다. 답장을 보내 주시면 질문에 답변으로 표시하십시오.

Sub DeleteOldClients() 
    Dim LastRow As Integer 
    LastRow = Range("A1").Cells.SpecialCells(xlCellTypeLastCell).Row 
    For i = 1 To LastRow - 1 
     For j = i + 1 To LastRow 
      If Range("A" & i).Value = Range("A" & j).Value Or Mid(Range("A" & i).Value, 1, 4) = Mid(Range("A" & j).Value, 1, 4) Then 
       Range("A" & j).EntireRow.Delete 
       LastRow = LastRow - 1 
      End If 
     Next j 
    Next i 
End Sub 
+0

도움을 주셔서 감사합니다! 유일한 문제는 "j"행을 삭제하면 맨 아래에 있던 NEWER 발송물이 삭제되어 맨 위에 있던 OLDER 발송물을 삭제하고 싶다는 것이 었습니다. 방금 대신 행 "i"를 삭제하도록 전환했으며 이제는 훌륭하게 작동합니다! –

관련 문제