Aqui está a macro o mais curta possível
- abra o Excel e pressione ALT + F11
- insira o código abaixo em sheet1 ou onde quer que seus dados estejam
-
Feche o editor do VBA e pressione ALT + F8 e execute a macro
Sub deletelines() Range("A4:D4").Copy Range("A1").Insert Shift:=xlToRight For i = 2 To Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row c = Cells(i - counter, 1) if IsNumeric(c) And c <> "" Then groupID = c If c = "" Or c = "Name" Or c = "GroupID" Or IsNumeric(c) Then Rows(i - counter).Delete counter = counter + 1 Else Cells(i - counter, 5) = groupID End If Next i End Sub
Como este é um site de perguntas e respostas, eu descrevo o código. Dessa forma, pode ser útil para outras pessoas que podem adaptar e personalizar facilmente o código.
- Linha 1 + 14: inicia e termina uma macro (sub-rotina)
- Linha 2 + 3: copie o intervalo [A4: D4] e insira-o antes de [A1]. Isso forma sua linha de cabeçalho
-
Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
determina a última célula usada. Em seu eample seus 22 - Linha 4: é um loop que começa em 2 e termina em 22. O
i
é usado como índice de linha - Linha 5: salva a primeira célula da linha atual. A sintaxe geral é
cells(rownumber,columnnumber)
Atenção: Como excluímos linhas, temos que subtrair quantas linhas já deletamos. - Linha 6: veja se
c
é um número e salve-o como nosso groupID de curreto até encontrarmos outro número - Linha 7: É uma condição que verifica se o valor da célula atual é "Nome", "GroupID", em branco ou um número.
- Linha 8: Se a condição for verdadeira, isso exclui toda a linha
- Linha 9: se a condição for verdadeira, isso conta o nosso contador howmanydeletedlines
- Linha 10-12: Se a condição for falsa, essa deve ser uma boa linha de dados que queremos preservar
- Linha 13: faz um loop para o próximo
i
, que representa nossa linha atual