Hola a todos 🙂

Hace unos días me enviaron una consulta sobre la necesidad de pasar la información contenida en un rango de celdas a una única celda.

Hola Segu:
Tengo varias columnas con datos y quiero pasarlos a una celda. No es transponer esos datos, es introducir todo el rango en esa celda y separarlos con una coma ¿Cómo podría hacerlo?.
Muchas gracias.

Aunque la pregunta resulta extraña, este tipo de formato resulta útil para cuando tenemos que trabajar con matrices en VBA (Array). Pero vayamos a la consulta, in situ:

Voy a aprovechar la información de otro post para realizar el ejemplo. Imaginad que tenemos los datos de facturación de los comerciales de una empresa distribuidos por meses.

PASAR INFORMACION DE UN RANGO A UNA CELDA

Y queremos pasar los importes de cada mes (el rango) a una ÚNICA celda. En este ejemplo pasaremos los datos a la hoja «RESULTADO».

Para realizar este ejercicio, utilizaremos la siguiente macro:

Sub RANGO_A_CELDA()
'Declaramos las variables
Dim i As Integer, j As Integer
Dim ncolumna As Integer, nfila As Integer
Dim sCadena As String
'Eliminamos cualquier información en la hoja RESULTADO
Sheets("RESULTADO").Select
With Sheets("RESULTADO")
.Range(.Cells(1, 1), ActiveCell.SpecialCells(xlLastCell)).Select
Selection.ClearContents
.Range("A1").Select
End With
'Iniciamos bucle por columna
With Sheets("DATOS")
ncolumna = Application.CountA(.Range("1:1"))
For i = 1 To ncolumna
'Iniciamos bucle por cada fila de datos
nfila = Application.CountA(.Columns(i))
'En cada Rango debemos vaciar los datos de sCadena
sCadena = vbNullString
'Podemos elegir el separador entre los datos,
'en este caso una coma ","
For j = 2 To nfila
sCadena = sCadena & .Cells(j, i) & ","
Next j
'Llevamos los datos a la hoja RESULTADO
'y formateamos a texto cada celda
With Sheets("RESULTADO")
.Range("A1") = "RESULTADO"
.Range("A" & i + 1).NumberFormat = "@"
.Range("A" & i + 1) = Trim(Mid(sCadena, 1, Len(sCadena) - 1))
End With
Next i
End With
End Sub

Una vez que ejecutamos el código, obtenemos esta información:

PASAR INFORMACION DE UN RANGO A UNA CELDA1

Y como podéis observar, hemos codificado en cada celda toda la información del rango. En total son doce celdas (una por cada mes).

Sobre esta línea del código:

.Range("A" & i + 1) = Trim(Mid(sCadena, 1, Len(sCadena) - 1))

La he utilizado para eliminar el último carácter, que en este caso es una coma. De otra forma, la cadena de datos finalizaría de forma errónea (bajo mi punto de vista).

Como ya dije, estoy utilizando una coma como separador de la información, pero se podía utilizar cualquier otro carácter (o un espacio).

Y eso es todo, si en algún momento tenéis que pasar los datos de una columna a una celda, ahora lo tendréis más fácil.

Descarga el archivo pulsando en: PASAR INFORMACIÓN DE UN RANGO A UNA CELDA

 

Comparte este post