Saltar al contenido

Macro que elimina duplicados y coloca tramos


Recommended Posts

Buenas,

No se si esto se puede hacer con macros, espero que me podais ayudar en el caso de poderse realizar.

Tengo una seria de personas con unas fechas de inico de tramo y fin de tramo, cada tramo con un % de jornada. Necesito que si para cada tramo en la misma persona tiene el mismo % de jornada se elimine.

Que si para cada tramo su % de jornada es diferente se quede como esta y si tiene dos tramos iguales que se quede con su primera fecha de inicio tramo y la ultima fecha de fin tramo.

Dejo un archivo en el cual lo esplico con un ejemplo, de poderse hacer mi vida seria mucho mas sencilla.

Gracias.

Ayuda Tramos.xls

Enlace a comentario
Compartir con otras webs

Esta interesante el problema tratare de dedicarle algo de tiempo, por lo menos te echare la mano en:

"""Si todos los tramos para cada persona tienen el mismo % jornada se eliminan"""

y quizas en:

"""Si tiene diferentes %jornada para cada tramo se deja igual"""

a la otra condicion como que no le entendi!

Enlace a comentario
Compartir con otras webs

En el archivo viene mas o menos explicada.

Si por ejemplo un trabajador tiene dos tramos a 50% y el primero tiene una fecha inicial del 01/01/2013 y su fecha final es del 31/01/2013 y su segundo tramo tiene fecha inicial 01/02/2013 y fecha final 28/02/2013 se deberia quedar un solo tramo que fuese la fecha inicial del primer tramo 01/01/2013 y la fecha final del segundo tramo 28/02/2013.

No se si la explicacion resuelve tus dudas.

Muchas gracias por tu tiempo

Enlace a comentario
Compartir con otras webs

En el archivo viene mas o menos explicada.

Si por ejemplo un trabajador tiene dos tramos a 50% y el primero tiene una fecha inicial del 01/01/2013 y su fecha final es del 31/01/2013 y su segundo tramo tiene fecha inicial 01/02/2013 y fecha final 28/02/2013 se deberia quedar un solo tramo que fuese la fecha inicial del primer tramo 01/01/2013 y la fecha final del segundo tramo 28/02/2013.

No se si la explicacion resuelve tus dudas.

Muchas gracias por tu tiempo

Ok! ya me quedo claro!

ya solo me falta esto que me acabas de explicar, lo demas ya lo tengo! Vaya... pense que seria algo sencillo, me llevo mucho tiempo. Como para cobrar por el procesamiento... jajaja ok todo sea por aprender, mejorar mis habilidades y no aburrirme ahora que estoy desempleado! yo creo que al rato o mañana ya lo tienes!

Enlace a comentario
Compartir con otras webs

Ok! ya me quedo claro!

ya solo me falta esto que me acabas de explicar, lo demas ya lo tengo! Vaya... pense que seria algo sencillo, me llevo mucho tiempo. Como para cobrar por el procesamiento... jajaja ok todo sea por aprender, mejorar mis habilidades y no aburrirme ahora que estoy desempleado! yo creo que al rato o mañana ya lo tienes!

Llevo yo mas de una semana dando vueltas y no he sido capaz, eso si, mis conocimientos en macros es pesimo y eso que tengo unos cuantos libros pero .......se me hace complicado.

Muchas gracias

Enlace a comentario
Compartir con otras webs

Bien... despues de mucho sufrimiento y dolor... jajaja aqui esta, pruebala y comentas. Realmente subestime el problema o no soy tan bueno como pensaba... en fin!

Desde hace tiempo que no me entretenia con un problema del foro... son muy pocos los que despiertan mi interes, entre otras cosas mas...

Tu consulta ha servido para darme cuenta de que debo contar con algun tipo de clase o estructura para poder manipular arrays en memoria de manera mas rapida y practica.

Prueba la macro... la programe suponiendo que el listado de datos a procesar nunca superara las 65500 filas!

Definitivamente creo que se puede compactar y optimizar mas el codigo, pero se necesita mas tiempo a invertir...

Saludos!

Ayuda Tramos.zip

Enlace a comentario
Compartir con otras webs

Impresionante !!

Esta perfecto y me acaba de funcionar con 5500 filas sin ningun problema. Me alegro que te lo pasases "bien" con este problema, aunque para ti haya sido un problemilla jejejejejeje

Muchisimas gracias tio, ojala se me diese la mitad de bien que a ti.

Tan solo una preguntilla, donde puedo poner un boton para ejecutar la macro sin que esta termine por borrarmelo, pq si agrego alguna columna antes de la tabla **** la macro y aunque intento cambiar los rangos y tal pero hay muchas cosas que no controlo y no termino por hacerlo bien.

Saludos!

Enlace a comentario
Compartir con otras webs

Impresionante !!

Esta perfecto y me acaba de funcionar con 5500 filas sin ningun problema. Me alegro que te lo pasases "bien" con este problema, aunque para ti haya sido un problemilla jejejejejeje

Muchisimas gracias tio, ojala se me diese la mitad de bien que a ti.

Tan solo una preguntilla, donde puedo poner un boton para ejecutar la macro sin que esta termine por borrarmelo, pq si agrego alguna columna antes de la tabla **** la macro y aunque intento cambiar los rangos y tal pero hay muchas cosas que no controlo y no termino por hacerlo bien.

La verdad es que si me hizo pensar, jajaja!

Y se te puede dar igual o mejor que yo, solo es cuestion de interes, estudio y sobre todo mucha practica!

En cuanto a lo del boton... en la ficha de programador (en la cinta de opciones), en la parte de controles, le das en insertar y en controles de formulario le das en boton, con lo cual se insertara un boton que de inmediato te pedira que mecro deseas asignar a este para que se ejecute cuando le das click. En caso de no tener habilitada la ficha programador, hay muchos tutoriales en internet, no recuerdo como se hace en excel 2010, ya que yo tengo 2007.

que bueno que te funciono la macro! de echo tu problema me ha insiprado para crear un clase en VBA/Excel para poder solucionar de manera rapida y practica problemas de este tipo!

Saludos!

Enlace a comentario
Compartir con otras webs

Me alegro que tu tambien hayas salido ganando algo, aunque sea experiencia jejejejeje

Si lo del boton sabia hacerlo pero al crearlo y al ejecutar la macro se me borra todo lo que esta a la derecha de la tabla, boton incluido. He agrandado la fila 1, donde los encabezados y ahi he creado el boton.

Gracias nuevamente.

Saludos!

Enlace a comentario
Compartir con otras webs

  • 1 month later...

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

  • 96 ¿Te parecen útiles los tips de las funciones? (ver tema completo)

    1. 1. ¿Te parecen útiles los tips de las funciones?


      • No
      • Ni me he fijado en ellos

  • Ayúdanos a mejorar la comunidad

    • Donaciones recibidas este mes: 0.00 EUR
      Objetivo: 130.00 EUR
  • Archivos

  • Estadísticas de descargas

    • Archivos
      177
    • Comentarios
      90
    • Revisiones
      27

  • Crear macros Excel

  • Mensajes

    • Si  no me he liado con los paréntesis: Private Sub Worksheet_Change(ByVal Target As Range) Application.ScreenUpdating = False Application.Calculation = xlManual Application.EnableEvents = False If Not Intersect(Target, Range("$L$5:$Y$9")) Is Nothing Then Range("E22") = WorksheetFunction.Sum(Range("E4:E21")) Range("E23") = WorksheetFunction.Sum(Range("E4:E19")) Range("E24") = Range("E23") - WorksheetFunction.Sum(Range("I4:I7")) Range("I22") = WorksheetFunction.Sum(Range("I4:I21")) Range("I4") = Range("E23") * 0.1 Range("I5") = Range("EN10") * Range("EN11") Range("I6") = Range("E23") * 0.0127 Range("I7") = Range("E23") * 0.006 Range("I25") = Range("E22") - Range("I22") Range("I12") = Range("E24") * 0.03 Range("C7") = Range("EQ8") - Range("EQ9") + Range("EN13") + Range("EN14") + Range("EN15") + Range("EN16") Range("C9") = Range("EQ9") + Range("EN17") + Range("EN18") + Range("EN19") Range("E7") = Range("E4") / Range("C4") * 7 / 44 * 1.5 * Range("C7") Range("E8") = Range("E4") / Range("C4") * 7 / 44 * 0.3 * Range("C8") Range("E9") = Range("E4") / Range("C4") * 7 / 44 * 1.3 * 1.5 * Range("C9") End If Application.Calculation = xlAutomatic Application.ScreenUpdating = True Application.EnableEvents = True End Sub  
    • Hola de nuevo a ambos, @daren, tu archivo lleva excesivos datos, que creo no son necesarios para la información final que buscas. Te subo otro archivo, simplificado al máximo, que, si lo he entendido bien, con esta fórmula simplificada: =CONTAR.SI('Casos de Prueba'!I:I;"OK")*('Casos de Prueba'!I1="Resultados Ciclo "&COLUMNA(A5)) se calcularía el primer dato, que se encuentra en la columna I. Copiando la fórmula a la derecha las celdas que necesites, se completaría el rango.  Tu fórmula la coloco en D7, y esta nueva en D9, que como ves (si, repito, he interpretado bien lo que buscas), da los mismos resultados. ---------------------------------------------------------------- En cuanto a: Aquí tienes, en el mismo archivo (Hoja 3) lo que devuelve tu fórmula cuando hay un determinado dato en A1 y en B2. No llego a entender qué es lo que quieres exactamente.  Tal vez con una pequeña explicación de lo que esperas obtener, sea suficiente para poner el hilo a la aguja. ? ----------------------------------------------------------------- En el caso de que falte por añadir o evaluar alguna otra variable o parámetro (en tu primer post hablabas sólo de 'OK' y ahora veo que en el archivo figuran además 'KO' y 'BLOCK'), por favor, intenta emular el ejemplo del archivo que estoy subiendo; añade EXCLUSIVAMENTE esos datos en la hoja allá donde proceda, explicando dónde o cómo deben contarse o sumarse. Mejor trabajar siempre con datos anónimos y reducidos. Desconozco si en tu archivo alguno de esos datos puede considerarse confidencial, pero seguro que no interesan a nadie. Mucho mejor obviarlos. Saludos, Plantilla V3 (B).xlsx
    • buenas noches, quisiera saber si puedo mejorar mi macros que se encuentra en el evento change de la hoja de calculo de Excel, son códigos de cálculos básicos, además si me pudieran ayudar a reducir el código o darme algún tip para reducirlo yo mismo estaría muy agradecido.  de ante mano muchas gracias     Private Sub Worksheet_Change(ByVal Target As Range)     Application.ScreenUpdating = False     Application.Calculation = xlManual     Application.EnableEvents = False              If Not Intersect(Target, Range("$L$5:$Y$9")) Is Nothing Then             Sub todo()          Range("E22") = WorksheetFunction.Sum(Range("E4:E21"))     Range("E23") = WorksheetFunction.Sum(Range("E4:E19"))     Range("E24") = WorksheetFunction.Sum(Range("E23") - WorksheetFunction.Sum(Range("I4:I7")))     Range("i22") = WorksheetFunction.Sum(Range("I4:I21"))     Range("I4") = Range("E23") * 0.1     Range("I6") = Range("E23") * 0.0127     Range("I5") = Range("EN10") * Range("EN11")     Range("I7") = Range("E23") * 0.006     Range("I25") = Range("E22") - Range("I22")     Range("I12") = Range("E24") * 0.03     Range("C7") = WorksheetFunction.Sum(Range("EQ8") - (Range("EQ9"))) + Range("EN13") + Range("EN14") + Range("EN15") + Range("EN16")     'Range("E7") = WorksheetFunction.Sum(Range("C7") * ((Range("E4") * 0.0077777)))     Range("C9") = Range("EQ9") + Range("EN17") + Range("EN18") + Range("EN19")     'Range("E9") = WorksheetFunction.Sum(((((Range("E4") / Range("C4")) * 7) / 45) * 1.3) * 1.5) * Range("C9")     'Range("E8") = WorksheetFunction.Sum(((((Range("E4") / Range("C4")) * 7) / 45) * 0.3)) * (Range("C8"))     Range("E9") = WorksheetFunction.Sum(((((Range("E4") / Range("C4")) * 7) / 44) * 1.3) * 1.5) * Range("C9")     Range("E8") = WorksheetFunction.Sum(((((Range("E4") / Range("C4")) * 7) / 44) * 0.3)) * (Range("C8"))     Range("E7") = WorksheetFunction.Sum((((Range("E4") / Range("C4")) * 7) / 44) * 1.5) * Range("C7")          End Sub              End If                  Application.Calculation = xlAutomatic     Application.ScreenUpdating = True     Application.EnableEvents = True     End Sub
    • Buenas perdonad la espera adjunto el fichero Excel y explico mas detallado lo que me solicitan: Lo que me solicitan es que esos CP de la pestaña Casos de prueba los cuales tienen formulas para que cuando se copien y peguen junto a sus pasos el CP se va autoincrementando a 1,2,3 etc...., pero si copias ese CP bien solo con el primer paso o con todos sus  pasos y lo insertas entre dos CP no continua con la numeración, como se ve en la foto al hacer eso el CP insertado continua con la numeración CP2 y el de abajo pone también CP2 no se incrementa ni ese ni el valor de CU que hay a la derecha que también es incremental. Necesitaría que continuara con esa numeración aun insertándolo entre medio de 2 tanto el CP como el CU de la derecha. También me solicitan que el campo Ciclo 1 de la pestaña Resumen es auto incremental cuando copias y pegas va sumando 1, pero en las formulas referentes a Ok KO Y bloqueo al copiar y pegar se mantiene la misma formula , la idea es que cuando copies y pegues la fila donde están los ciclos se autoincremente Ciclo a 1,2,3,4 etc... y la formula de los campos OK,KO y Bloqueos se incremente también pasando de la columna I a la J  luego a la k etc... y que en Resultados Ciclo el numero de la formula también se incremente Resultados Ciclo 1 , 2 ,3 etc... que cambie la columna a la vez que el numero de Resultados Ciclo. Gracias por adelantado un saludo. Plantilla v3 Pruebas.xlsx  
    • Saludos amigos espero estén bien Estoy intentando hacer un formulario que me convierta unidades de masa sin embargo  en el mejor de los casos solo he podido lograr la conversión de una unidad a la vez en los TextBox 1, 3, 5, 7, 9, 11 y 13 y cuando lo logro el resultado que se copia  en la celda no se corresponde con el obtenido originalmente en el Textbox del Formulario (frmconv)  ejemplo al convertir 1900 Kg a Lb el resultado en el TextBox1 =4188,78298142 sin embargo al guardar el resultado lo que se copia en la Celda  "F11" es  418.878.298.142,00, adicionalmente el resultado de la conversión no se visualiza inmediatamente por lo que debo de hacer click en los TextBox 1, 3, 5, 7, 9, 11 y 13  para ver el resultado. Mucho les sabre agradecer la ayuda que me puedan brindar. PRUEBA.xlsm
  • Visualizado recientemente

    • No hay usuarios registrado para ver esta página.
×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.