Удалить / объединить повторяющийся идентификатор в VBA - PullRequest
0 голосов
/ 14 июля 2020

Добрый вечер,

Следующий код:


    Dim RunningNum As Long
    Dim LastRow As Long
    Dim MaskType As String
    Dim CurWkSt As Worksheet
    
    Set CurWkSt = Sheets("Output")
    
    LastRow = Sheets("Imported").Range("A" & Rows.Count).End(xlUp).Row + 1
    
    'For Loop to add all information,if duplicated Employee Number.
    
    For RunningNum = 3 To LastRow
        CurWkSt.Range("A" & RunningNum & ":AI" & RunningNum).Borders.LineStyle = xlContinuous
        CurWkSt.Range("A" & RunningNum & ":AI" & RunningNum).HorizontalAlignment = xlLeft
        'If Current Employee Number matches Previous Employee Number
        If CurWkSt.Range("E" & RunningNum) = CurWkSt.Range("E" & RunningNum - 1) Then
    
            'Highlight Employee ID Column to let you visually know.
            CurWkSt.Cells(RunningNum, 5).Interior.ColorIndex = 3
            
            'Find Which Mask it was previously and add to previous row!
            If Not IsEmpty(CurWkSt.Range("J" & RunningNum)) Then
                CurWkSt.Range("J" & RunningNum - 1).Value = CurWkSt.Range("J" & RunningNum).Value
                CurWkSt.Range("J" & RunningNum - 1).Interior.Color = RGB(255, 102, 255)
                CurWkSt.Range("T" & RunningNum - 1).Value = CurWkSt.Range("T" & RunningNum).Value
            End If
    
            If Not IsEmpty(CurWkSt.Range("K" & RunningNum)) Then
                CurWkSt.Range("K" & RunningNum - 1).Value = CurWkSt.Range("K" & RunningNum).Value
                CurWkSt.Range("K" & RunningNum - 1).Interior.Color = RGB(255, 204, 255)
                CurWkSt.Range("U" & RunningNum - 1).Value = CurWkSt.Range("U" & RunningNum).Value
            End If
            
            If Not IsEmpty(CurWkSt.Range("L" & RunningNum)) Then
                CurWkSt.Range("L" & RunningNum - 1).Value = CurWkSt.Range("L" & RunningNum).Value
                CurWkSt.Range("L" & RunningNum - 1).Interior.Color = RGB(255, 204, 0)
                CurWkSt.Range("V" & RunningNum - 1).Value = CurWkSt.Range("V" & RunningNum).Value
            End If
            
            If Not IsEmpty(CurWkSt.Range("M" & RunningNum)) Then
                CurWkSt.Range("M" & RunningNum - 1).Value = CurWkSt.Range("M" & RunningNum).Value
                CurWkSt.Range("M" & RunningNum - 1).Interior.Color = RGB(204, 236, 255)
                CurWkSt.Range("W" & RunningNum - 1).Value = CurWkSt.Range("W" & RunningNum).Value
            End If
            
            If Not IsEmpty(CurWkSt.Range("N" & RunningNum)) Then
                CurWkSt.Range("N" & RunningNum - 1).Value = CurWkSt.Range("N" & RunningNum).Value
                CurWkSt.Range("N" & RunningNum - 1).Interior.Color = RGB(255, 230, 153)
                CurWkSt.Range("X" & RunningNum - 1).Value = CurWkSt.Range("X" & RunningNum).Value
            End If
            
            If Not IsEmpty(CurWkSt.Range("O" & RunningNum)) Then
                CurWkSt.Range("O" & RunningNum - 1).Value = CurWkSt.Range("O" & RunningNum).Value
                CurWkSt.Range("O" & RunningNum - 1).Interior.Color = RGB(153, 255, 153)
                CurWkSt.Range("Y" & RunningNum - 1).Value = CurWkSt.Range("Y" & RunningNum).Value
            End If
            
            If Not IsEmpty(CurWkSt.Range("P" & RunningNum)) Then
                CurWkSt.Range("P" & RunningNum - 1).Value = CurWkSt.Range("P" & RunningNum).Value
                CurWkSt.Range("P" & RunningNum - 1).Interior.Color = RGB(153, 204, 255)
                CurWkSt.Range("Z" & RunningNum - 1).Value = CurWkSt.Range("Z" & RunningNum).Value
            End If
            'For now, we will hide the Duplicated Lines.
            'CurWkSt.Rows(RunningNum).Hidden = True
            'When in operation, we can delete these lines
            CurWkSt.Rows(RunningNum).EntireRow.Delete
        End If
    Next
    
    Call AddTotals
End Sub

Он работает в настоящее время, но проблема у меня сейчас, и я не уверен, почему!

Допустим, например, строки были

1| 12345 | other stuff
2| 12345 | other stuff
3| 12345 | other stuff
4| 12345 | other stuff

. Он только удаляет вторую строку и добавляет ее к первой, но не делает этого ни с какими другими строками. Пример:

1| 12345 | other stuff | Other stuff
3| 12345 | other stuff
4| 12345 | other stuff

, но без добавления всех остальных.

Есть предложения, как я могу это исправить? Моей первой мыслью было запускать сабвуфер несколько раз, но это глупо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...