Concatenar

21/10/2008 - 16:37 por Antonio | Informe spam
Hola. Os cuento mi problema. Tengo una tarifa en la que la referencia esta
dividida en tres columnas y que ocupa unas 11.000 filas. Para realizar las
busquedas lo que hago es concatenar las tres columnas en una nueva pero lo
hago manualmante y lo debo hacer habitualmente. He encontrado este macro por
la red, y aunque no se na de codigo, lo he apañao para automatizar el
proceso pero funciona bien con pocas filas pero cuando le digo que me lo
haga en las 11.000 filas de la hoja se me cualga. ¿podeis ayudarme?

Sub concatenar()
u = Cells(Rows.Count, 3).End(xlUp).Row
For i = 2 To u
Cells(i, 1) = Cells(i, 2) & "" & Cells(i, 3) & "" & Cells(i, 4)
Next
MsgBox "Datos concatenados por correctamente"
End Sub

Saludos y gracias.

Preguntas similare

Leer las respuestas

#1 Cacho
21/10/2008 - 23:10 | Informe spam
Hola! Antonio. Por supuesto que todo depende de la PC.

Pero puedo comentarte que mientras que tu procedimiento me demora 10
segundos, el siguiente:
_______________________________

Sub Concatenar2()
Application.ScreenUpdating = False
u = [C65536].End(xlUp).Row
MiFormula = "(B2:B" & u & ") & (C2:C" & u & ") & (D2:D" & u & ")"
Range("A2:A" & u) = Evaluate(MiFormula)
End Sub

_______________________________

se completa en uno.

Comenta como te resulta a tí, por favor.
Saludos, Cacho.
Respuesta Responder a este mensaje
#2 Héctor Miguel
21/10/2008 - 23:14 | Informe spam
hola, Antonio !

si entiendo bien, segun los datos que expones...
- buscas la ultima fila con datos en la columna C
- el contenido de las columnas A, B y C lo necesitas concatenado en la columna A
- usas un bucle fila-por-fila para recorrer +/- 11000 filas (que se tarda +/- cuanto ?)

la siguiente propuesta tiene mas lineas de codigo pero...
probando +/- en 14000 filas se ha tomado 2 a 3 decimas de segundo (sin re/calculos necesarios)

corre pruebas y... si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.

Sub Concatena_muchas() ' 2 a 3 decimas de segundo '
Dim Destino As String, Parte1 As String, Parte2 As String, Parte3 As String
With Range([c2], [c65536].End(xlUp))
Destino = .Offset(, -2).Address(0, 0)
Parte1 = .Offset(, -1).Address(0, 0)
Parte2 = .Address(0, 0)
Parte3 = .Offset(, 1).Address(0, 0)
End With
With Application
Range(Destino).Value = Evaluate("transpose(transpose(" & _
Parte1 & "&" & Parte2 & "&" & Parte3 & "))")
End With
End Sub

saludos,
hector.

__ OP __
Tengo una tarifa en la que la referencia esta dividida en tres columnas y que ocupa unas 11.000 filas.
Para realizar las busquedas lo que hago es concatenar las tres columnas en una nueva
pero lo hago manualmante y lo debo hacer habitualmente.
He encontrado este macro por la red, y aunque no se na de codigo, lo he apañao para automatizar el proceso
pero funciona bien con pocas filas pero cuando le digo que me lo haga en las 11.000 filas de la hoja se me cualga...

Sub concatenar()
u = Cells(Rows.Count, 3).End(xlUp).Row
For i = 2 To u
Cells(i, 1) = Cells(i, 2) & "" & Cells(i, 3) & "" & Cells(i, 4)
Next
MsgBox "Datos concatenados por correctamente"
End Sub
Respuesta Responder a este mensaje
#3 Cacho
21/10/2008 - 23:32 | Informe spam
Hola! Antonio. Tiene mucha razón el master Héctor Miguel: existen
alternativas diversas para achicar los tiempos de ejecución, por ejemplo la
siguiente:
_______________________________

Sub Concatenar3()
Application.ScreenUpdating = False
u = Cells(Rows.Count, 3).End(xlUp).Row
With Range("A2:A" & u)
.Formula = "= B2 & C2 & D2"
.Copy
.PasteSpecial xlPasteValues
End With
Application.CutCopyMode = False
End Sub

_______________________________

Saludos, Cacho.
Respuesta Responder a este mensaje
#4 Héctor Miguel
21/10/2008 - 23:52 | Informe spam
hola, chicos !

solo un comentario adicional, si fuera el caso de que los codigos a concatenar (y concatenados) sean numero
cambiar la aplicacion de la formula +/-

de:
.Formula = "= B2 & C2 & D2"

a:
.Formula = "=--(b2&c2&d2)"

saludos,
hector.

Cacho escribio en el mensaje ..
... existen alternativas diversas para achicar los tiempos de ejecucion, por ejemplo la siguiente:

Sub Concatenar3()
Application.ScreenUpdating = False
u = Cells(Rows.Count, 3).End(xlUp).Row
With Range("A2:A" & u)
.Formula = "= B2 & C2 & D2"
.Copy
.PasteSpecial xlPasteValues
End With
Application.CutCopyMode = False
End Sub



p.d. gracias por "el apodo" ;)
Respuesta Responder a este mensaje
#5 Cacho
22/10/2008 - 01:26 | Informe spam
El "apodo" te lo has ganado: ¿quién lo discute?
Éxitos, Cacho.

P.D.:
Esta última aclaración tuya, Héctor... ¿te la enseñó el "común amigo" que
nos explicó -también- como acelerar los procesos ocultando la aplicación? (je
je je)
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida