Tengo una hoja de cálculo simple, con 30 mil filas.

Debajo de la columna B, tengo una celda en blanco, esto indicará que debajo de la columna A la dirección tiene más de dos filas, quiero concatenar estas 2 celdas en una celda.

Sub Merge()

Dim LR As Integer
Dim icell As Range
Dim strMerge As String
Dim MyCell As Range

'Add new Sheet and rename it
Worksheets.Add After:=Worksheets("Austin Grids")
ActiveSheet.Name = "Austin Grids1"

'Copy sheets contents from original to the new sheet
Sheets("Austin Grids").Cells.Copy Destination:=Sheets("Austin Grids1").Range("A1")

'Find last row of current sheet
LR = Worksheets("Austin Grids1").Cells(Rows.Count, 1).End(xlUp).Row

Set MyCell = Sheets("Austin Grids1").Range("A:A")

'Move rows of where column is null
For Each icell In Range("B:B")
    If icell.Value = "" Then
        icell.Select
        icell.Offset(0, -1).Select
        strMerge = MyCell.Value
    End If
Next icell

End Sub

Captura de pantalla:

0
James Niven 16 oct. 2018 a las 16:53

2 respuestas

La mejor respuesta

Aquí está el bucle que puede usar para VBA. Comenzará al final, subiendo fila por fila hasta llegar a la Fila 2.

Dim totalRows As Long, i As Long

totalRows = Range("A1").End(xlDown).Row

With Sheets("Austin Grids1")
For i = totalRows To 2 Step -1
    If .Cells(i, 2) = "" Then
        .Cells(i + 1, 1).Value = .Cells(i, 1).Value & .Cells(i + 1, 1).Value
        .Cells(i, 1).EntireRow.Delete
    End If
Next i
End With
0
BruceWayne 16 oct. 2018 a las 15:05

No necesita usar VBA, así que si puedo, ofreceré una solución de fórmula.

En H2, pegue esta fórmula y arrastre hacia abajo tanto como sea necesario:

=IF(B1="",A1&" "&A2,"")

Nota: Es posible que solo necesite A1&A2, no puedo decir si la columna A realmente tiene espacios iniciales en esos nombres, o eso es formato

Luego, en I2, pega esto y arrastra hacia la derecha:

=IF($H2<>"",B2,"")

enter image description here

0
BruceWayne 16 oct. 2018 a las 14:16