copiar valores a todas las provincias

6 envíos / 0 nuevos
Último envío
Alex2000
Imagen de Alex2000
Offline
última acción: Hace 5 años 3 meses
alta: 05/12/2018 - 16:39
Puntos: 45
copiar valores a todas las provincias

Hola a todos:

tengo en la columna A unas mil filas con diferentes valores numéricos. En la columna B tengo valores de texto. De la columna C en adelante tengo las 52 provincias españolas, en cada columna una provincia. Quiero hacer una macro que sea razonable en tiempo para copiar los valores de la columna A en todas las columnas de las provincias (por ejemplo, si en A2 tengo un 5, copiar ese 5 en todas las 52 columnas en la fila 2, si en A3 tengo un 7, copiarlo en todas las 52 columnas en la fila 3, etc.). Así con las mil filas que tengo con valores.  Pero además, quiero que me haga el copiado solo para las filas que tengo filtradas, según el valor que yo desee de la columna B. En las filas que no se ven, no quiero copiarles nada.

¿Me podeis ayudar? He probado alguna macro haciendo un blucle For each, Next y preguntando si la fila tiene altura, pero tarda demasiado tiempo. No es viable.

Muchas gracias

pacomegia
Imagen de pacomegia
Offline
última acción: Hace 7 horas 14 mins
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntosadministrador
alta: 27/12/2006 - 23:26
Puntos: 11175
Supongo que copias una vez y

Supongo que copias una vez y pegas de golpe en las 52 celdas, es decir, sólo un pegado por fila.

Imagino que has seguido los trucos habituales para reducir tiempos de ejecución de macros largas: fundamentalmente desactivar la actualización de pantalla, desactivar el cálculo automático. Hay varios temas del foro sobre estos temas de rendimiento, por ejemplo:

http://www.necesitomas.com/macro-lenta

http://www.necesitomas.com/ejecutar-macro-mayor-rapidez

 

Sobre el bucle de las 1000 filas (que tampoco son muchas) ...

Lo mejor es que adjuntes tu código para que lo podamos ver y podamos proponer alguna alternativa o ver si hay algo especilmente extraño.

 

 

------
Ya sé Excel, pero necesito más.

Alex2000
Imagen de Alex2000
Offline
última acción: Hace 5 años 3 meses
alta: 05/12/2018 - 16:39
Puntos: 45
Hola:Se me olvidó decir que

Hola:

Se me olvidó decir que las columnas (provincias) no van contiguas. Hay una columna vacía entre ellas que no puede contener nada.

 

Sub Copiar()

 

Application.ScreenUpdating = False

Application.Calculation = xlCalculationManual

 

Dim col, fil As Integer

Set InputRng = ActiveSheet.Range("A2:A1000")

col = 3

For col = 3 To 105

 

    For fil = 2 To 1000

        If ActiveSheet.Cells(fil, 1).EntireRow.RowHeight > 0 Then

           ActiveSheet.Cells(fil, 1).Copy

           ActiveSheet.Cells(fil, col).PasteSpecial

        End If

    Next

 

col = col + 1

Next col

 

 

Application.ScreenUpdating = True

Application.Calculation = xlCalculationAutomatic

 

End Sub

 

AdjuntoTamaño
File copiar_filtrado.xlsm27.4 KB
pacomegia
Imagen de pacomegia
Offline
última acción: Hace 7 horas 14 mins
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntosadministrador
alta: 27/12/2006 - 23:26
Puntos: 11175
No entiendo por qué dejas una

No entiendo por qué dejas una columna vacía entre medias.

Bueno, tampoco entiendo esta organización de tus datos, pero bueno, supongo que tendrás otros condicionantes.

 

Estás haciendo tus bucles primero recorriendo una columna, copiando cada valor y pegándolo, y luego pasas a la siguiente columna.

esto hace que copies y pegues muchas veces.

prueba a anidar los bucles al revés, primero recorres todas las columnas, y luego cambias a la siguiente fila, de modo que copies sólo una vez y pegues muchas. algo así:

 

Sub Copiar_retocado()

    Application.ScreenUpdating = False

    Application.Calculation = xlCalculationManual

    Dim col, fil As Integer

    For fil = 2 To 1000

        If ActiveSheet.Cells(fil, 1).EntireRow.RowHeight > 0 Then

            ActiveSheet.Cells(fil, 1).Copy

            For col = 3 To 105 Step 2

                ActiveSheet.Cells(fil, col).PasteSpecial

            Next

        End If

    Next

    Application.ScreenUpdating = True

    Application.Calculation = xlCalculationAutomatic

End Sub

 

 

------
Ya sé Excel, pero necesito más.

Alex2000
Imagen de Alex2000
Offline
última acción: Hace 5 años 3 meses
alta: 05/12/2018 - 16:39
Puntos: 45
Hola pacomegia. La

Hola pacomegia. La organización de los datos que tengo es algo complicado de explicar. Las columnas entre las provincias tienen otra serie de datos que no vienen al caso. He puesto el resumen que funcionalmente es idéntico.

Va mucho mejor, tarda mucho menos. Tu razonamiento ahorra muchas copys. 

Voy a hacer más pruebas de cuanto tarda según lo que filtre. No sé si habría forma de depurarlo algo más.

Muchas gracias

Cron
Imagen de Cron
Offline
última acción: Hace 8 meses 1 día
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntos
alta: 23/06/2010 - 12:30
Puntos: 12735
Un error que yo he cometido

Un error que yo he cometido durante muchos años y que es muy extendido es almacenar los datos de la misma manera que se quieren presentar. Hace algún tiempo que abogo por una alternativa: almacenar los datos en formato tabla (como si fuera una base de datos) y posteriormente localizarlos para hacer la presentación aparte.

Este sistema funciona mucho mejor, es más fácil de trabajar, más fácil de entender por la máquina, y al final aporta los mismos resultados (el mismo informe), pero con mucho menos trabajo.

 

Otra práctica que intento desterrar es la de utilizar ficheros anuales, o distintas pestañas para distintos meses. Es mejor meter todos los datos juntos, como dije antes, con una columna con la fecha que nos permita posteriormente clasificar los datos para hacer la presentación del mes correspondiente.

 

Solo contesto para apuntar esto. Un buen trabajo con lápiz y papel antes de empezar con el archivo ahorra mucho trabajo inútil posteriormente. Sé que en la mayoría de las ocasiones no es posible, pero sería deseable.

 

Un saludo