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.
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:
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
buena tarde puedes ayudar a crear un programa pagadiario
Hola Monura.
Desde Excel Signum te puedo ayudar en las dudas que tengas. Siempre que sean puntuales, claro, dado que esta web es de apoyo, no desarrollo programas completos (no tengo tiempo).
Si ya has comenzado el programa y tienes alguna duda puedes enviarme tus comentarios.
Saludos.
Hola. Me ha sido muy útil al adaptarlo, pero me encuentro con un problema. En las columnas tengo números de 6 cifras ocupando 300 filas.Al copiar el contenido en la celda se pierden datos (entiendo que será por alguna limitación de caracteres impuesta por excel, o algo así). ¿Habría algun modo de subsanar este problema? He mirado el código y he intentado retocarlo, pero no he encontrado la forma.
Muchas gracias por tu atención, un saludo
J.L:
Hola José Luis.
Debería funcionar correctamente. Una pregunta? En qué formato tienes las cifras antes de pasarlas a la celda?. Si son cifras muy grandes, deben tener formato texto, de otra forma se mostrarán con notación científica con el típico E+ al final. Antes de ejecutar la macro pasa las cifras a formato texto.
Así te funcionará. Si te sigue dando problemas. Envíame el archivo con una muestra y los veo.
Saludos