Remove linhas (com base na condição) e copia as células (com base na condição)

0

Eu tenho que modificar um script VBA enorme, eu sou novo no VBA e devo dizer também que eu não estou amando isso :( Eu preciso de alguma ajuda para escrever um For-loop eficiente, deixe-me explicar com um exemplo.

Durante a primeira conversão , quero:

  • copie a célula week em todas as células vazias até chegar a uma nova semana
  • copie a célula de nome person em todas as células vazias até chegar a uma nova pessoa

Durante a segunda fase , quero:

  • remove todas as linhas onde as células C & D & E estão vazios

Eu tentei o seguinte código para remover linhas se a coluna C estiver vazia e funcionar, mas eu quero remover se a coluna C & D & E estão todos vazios.

On Error Resume Next
'ActiveSheet.Range(Columns(C), Columns(E)).SpecialCells(xlCellTypeBlanks).EntireRow.Delete does not work
ActiveSheet.Columns(C).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
On Error GoTo 0

Eu gostaria de fazer isso no lugar, quero dizer, quero ver o resultado no lugar das células originais.

Como as células podem ser copiadas com base na condição (por exemplo, na cópia da semana X) e como a linha pode ser excluída com base na condição (por exemplo, se algumas células estiverem vazias)?

    
por theAlse 09.04.2014 / 10:16

1 resposta

0

Eu mesmo resolvi isso.

' Copy week & name to all rows
For i = 1 To ActiveSheet.UsedRange.Rows.Count - 1 Step 1
    If IsEmpty(ActiveSheet.Range("A" & i + 1)) Then
        ActiveSheet.Range("A" & i).Copy Destination:=ActiveSheet.Range("A" & i + 1) ' Week
    End If
    If IsEmpty(ActiveSheet.Range("B" & i + 1)) Then
        ActiveSheet.Range("B" & i).Copy Destination:=ActiveSheet.Range("B" & i + 1) ' Name
    End If
Next i

' Delete entire rows where there is no number (this emplies the row is invalid)
On Error Resume Next
ActiveSheet.Columns("E").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
On Error GoTo 0
    
por 09.04.2014 / 13:06