Excel - Como posso recolher dados, eliminando linhas em branco?

0

Eu tenho uma coluna de 3 colunas e 20 linhas. (A1: C20) As 3 colunas são cada 1 dígito de um número de 3 dígitos. Algumas das linhas têm 3 dígitos, algumas estão em branco.

Eu preciso de uma maneira de retornar todas as linhas não vazias de 3 dígitos, uma após a outra, começando com a parte superior em 3 colunas separadas. Se valores forem adicionados a linhas em branco, a saída será refletida.

Ex:

A2: C2 é 4 6 2
A10: C10 é 2 6 6
A18: C18 é 0 6 1

saída em D1: F3 seria
4 6 2
2 6 6
0 6 1

Eu tenho uma solução como:

Sub ReturnValued ()
Set cpySht = Sheets("Sheet1")
Set pstSht = Sheets("Sheet2")
i = 0
For Each cell In cpySht.Range(cpySht.Cells(1, "A"), cpySht.Cells(cpySht.Cells(Rows.Count, "A").End(xlUp).Row, "A"))
  If cell.Value <> "" Then
    i = i + 1
    pstSht.Cells(i, "A") = cell.Value
  End If
Next cell
End Sub

Eu estava pensando se havia uma solução melhor ou uma com fórmulas.

Qualquer ajuda é apreciada! Fórmulas preferidas, macros bem-vindas.

    
por Will S 29.08.2014 / 20:41

1 resposta

0

Sub returnValues()

'last row used in the origin data sheet
lastRow = Sheets("sheet1").UsedRange.Rows.Count

'counter for the rows to be pasted in sheet 2
n = 1

'loop through all rows
For rowNum = 1 To lastRow
    'test if all three cells in the row have data in them:
    If Not IsEmpty(Sheets("sheet1").Cells(rowNum, 1)) And _
        Not IsEmpty(Sheets("sheet1").Cells(rowNum, 2)) And _
        Not IsEmpty(Sheets("sheet1").Cells(rowNum, 3)) Then
        'if ok, copies the entire row and paste to sheet 2
        Sheets("sheet1").Cells(rowNum, 1).EntireRow.Copy Sheets("sheet2").Range("A" & n)
        n = n + 1
    End If
Next rowNum

End Sub
    
por 31.08.2014 / 04:21