Copie un rango de celdas y solo seleccione celdas con datos

Estoy buscando una forma de copiar un rango de celdas, pero solo copiar las celdas que contienen un valor.

En mi hoja de Excel tengo datos que se ejecutan desde A1-A18, B está vacío y C1-C2. Ahora me gustaría copiar todas las celdas que contienen un valor.

 With Range("A1")
     Range(.Cells(1, 1), .End(xlDown).Cells(50, 3)).Copy
 End With

Esto copiará todo de A1-C50, pero solo quiero que se copien A1-A18 y C1-C2, ya que contienen datos. Pero debe formarse de manera que una vez que tenga datos en B o mi rango se extienda, estos también se copien.

'So the range could be 5000 and it only selects the data with a value.
With Range("A1")
Range(.Cells(1, 1), .End(xlDown).Cells(5000, 3)).Copy
End With

¡Gracias

Gracias a Jean, Código actual:

Sub test()

Dim i As Integer
Sheets("Sheet1").Select
i = 1

With Range("A1")
   If .Cells(1, 1).Value = "" Then
   Else
     Range(.Cells(1, 1), .End(xlDown)).Copy Destination:=Sheets("Sheet2").Range("A" & i)
     x = x + 1
   End If
End With

Sheets("Sheet1").Select

x = 1
With Range("B1")
' Column B may be empty. If so, xlDown will return cell C65536
' and whole empty column will be copied... prevent this.
    If .Cells(1, 1).Value = "" Then
       'Nothing in this column.
       'Do nothing.
    Else
       Range(.Cells(1, 1), .End(xlDown)).Copy Destination:=Sheets("Sheet2").Range("B" & i)
       x = x + 1
    End If
End With

Sheets("Sheet1").Select

x = 1
With Range("C1")
    If .Cells(1, 1).Value = "" Then
    Else
        Range(.Cells(1, 1), .End(xlDown)).Copy Destination:=Sheets("Sheet2").Range("C" & i)
        x = x + 1
    End If
End With

End Sub

A1 - A5 contiene datos, A6 es blanco, A7 contiene datos. Se detiene en A6 y se dirige a la columna B, y continúa de la misma manera.

Respuestas a la pregunta(3)

Su respuesta a la pregunta