Jump to content

paikerr

Members
  • Content Count

    129
  • Joined

  • Last visited

Everything posted by paikerr

  1. Pues no lo encuentro... @Antoni, si lo tienes por ahí a mano, te agradecería que lo compartieras con nosotros. Gracias.
  2. Si. Que es que envié el mensaje más tarde. Gracias.
  3. Cierto, me gusta tu idea. Gracias. Voy a ver si lo encuentro...
  4. Jajaja... Lo del Blablabla es irónico. El MsgBox dice: "El tiempo exacto de la ejecución del procedimiento es de " Y luego agrega ya el resultado final de la diferencia Tiempo_inicial y Tiempo_final. En este caso, 417,2543 segundos. Simplemente, me gustaría saber si existe alguna función que lo convierta en horas, minutos y segundos directamente. Algo así como lo siguiente: FunctionXXX(Tiempo_final - Tiempo_inicial) = XXX h. XXX m. XXX s.
  5. Hola a todxs, Tengo este código: ... Application.ScreenUpdating = False Tiempo_inicial = Timer() (Aquí va un bucle For/Next) Tiempo_final = Timer() Application.ScreenUpdating = True MsgBox "El tiempo exacto de la ejecución del procedimiento es de " & Tiempo_final - Tiempo_inicial & " segundos." ... El problema con el que me encuentro es que al ejecutar la macro, me despliega un mensaje de alerta que dice "(Blablabla...) 417,2543 segundos." Y no quiero que me diga eso o lo que salga, sino el tiempo medido en horas, minutos y segundos. Es decir, que me devuelva "(Blablabla...) 6 minutos y 57 segundos". He encontrado esta macro por la web... http://diagramas-de-flujo.blogspot.com/2013/01/convertir-de-segundos-horas-minutos-y-segundos-en-Visual-Basic.html Pero estoy convencido que tiene que existir alguna otra función que lo convierta automáticamente (sin necesidad de hacer uso de la macro anterior), y que todavía desconozco. Gracias de antemano.
  6. Cojonudoo... Pues no tenía ni pajorela idea de que existían esos códigos aplicables al formato fecha personalizada. Me guardo el archivo como si fuera un tesoro. Mil gracias por el aporte a los dos. Saludos.
  7. Hola a todxs, Necesito cambiar el formato de las fechas, pero no tengo ni p... idea de cómo plantearlo. En realidad, lo que quiero es lo siguiente: "En la interfaz de usuario de Excel, podemos encontrar la opción de crear tanto fechas cortas como fechas largas, y que siguen un formato muy parecido a lo siguiente: 01/10/2018 (Fecha corta) ---> lunes, 01 de octubre de 2018 (Fecha larga) Sin embargo, he observado que la opción de fecha larga no se encuentra disponible en otras lenguas. De modo que me gustaría poder desarrollar una macro que cambiara el formato de las fechas cortas en fechas largas según el tipo de lengua. Así por ejemplo, para que quedara algo como lo siguiente: Inglés: 01/10/2018 (Fecha corta) ---> monday, 01 of october 2018 (Fecha larga) Francés: 01/10/2018 (Fecha corta) ---> Aujourd'hui, c'est le lundi 01 d'octobre du 2018 (Fecha larga) Italiano: 01/10/2018 (Fecha corta) ---> lunedi, 01 di ottobre dell'anno 2018 (Fecha larga)." Principalmente, entiendo que hay dos partes a tener en cuenta: Una parte destinada a la comprensión de las fechas: Hoy es 01/10/2018, lo que imagino que habrá que convertirla a número entero, o sea el 43374, para después reordenar el día, el mes y el año dentro de la fecha larga en función de la lengua seleccionada; Y finalmente, una parte destinada a texto de relleno o cadena de caracteres. Así por ejemplo en francés quedaría algo como lo siguiente: Dim Dia_texto As String, Dia_numero As Byte, Mes As Byte, Anyo As Integer "Aujour'hui, c'est le " & Dia_texto & " " & Dia_numero & "d'" & Mes & "du " & Anyo Creo que algo de esto se puede plantear bajo una lógica Switch Case, pero no sé... Estoy bastante pérdido en ese sentido, y no sé cómo iniciar el planteamiento. Necesito algo de ayuda. Gracias a todos de antemano.
  8. Hola a todxs, Tengo el siguiente código, que podéis descargar también en el siguiente enlace: https://www.dropbox.com/s/xgpztwdijkdd3ut/INVENTARIO.xlsm?dl=0 Sub BUSCADOR() ' *** DECLARACION DE VARIABLES *** ' Dim INVENTARIO As Worksheet Set INVENTARIO = Sheets("Inventario") Dim VENTAS As Worksheet Set VENTAS = Sheets("Ventas") Dim Fila As Long, Fila_actual As Long Application.ScreenUpdating = False Fila = 3 For Fila_actual = INVENTARIO.Cells(Rows.Count, 1).End(xlUp).Row To 3 Step -1 Fecha_INVENTARIO = CDate(INVENTARIO.Cells(Fila_actual, 1) & " " & Format(INVENTARIO.Cells(Fila_actual, 2), "h:mm;@")) Fecha_VENTAS = CDate(VENTAS.Cells(Fila, 1) & " " & Format(VENTAS.Cells(Fila, 2), "h:mm;@")) Codigo_INVENTARIO = INVENTARIO.Cells(Fila_actual, 3) Codigo_VENTAS = VENTAS.Cells(Fila, 3) Seccion_INVENTARIO = INVENTARIO.Cells(Fila_actual, 4) Seccion_VENTAS = VENTAS.Cells(Fila, 4) Unidades_INVENTARIO = INVENTARIO.Cells(Fila_actual, 5) Unidades_VENTAS = VENTAS.Cells(Fila, 5) ' *** ACTUALIZACION DE DATOS *** ' If Fecha_INVENTARIO = Fecha_VENTAS And Codigo_INVENTARIO = Codigo_VENTAS And Seccion_INVENTARIO = Seccion_VENTAS Then Unidades_VENTAS.Copy Destination:=Unidades_INVENTARIO VENTAS.Rows(Fila).Delete Shift:=xlUp Else VENTAS.Rows(Fila).Delete Shift:=xlUp End If Fila = Fila + 1 Next Fila_actual Application.ScreenUpdating = True End Sub La idea es la siguiente: "Tengo dos hojas de datos: Una llamada 'Inventario', y la otra llamada 'Ventas'. A partir de ahí, el procedimiento BUSCADOR() debe copiar y destinar todos los datos contenidos en la columna de 'Unidades', siempre y cuando los valores contenidos dentro de las columnas de 'Fecha', 'Hora', 'Codigo' y 'Seccion' coincidan entre sí con las dos hojas. Si los datos no coinciden, entonces que el procedimiento borre la fila actual de la hoja de 'Ventas', y pase a leer los datos contenidos en la siguiente fila." Es un poco lioso... Pero he intentado dejarlo explicado de la mejor manera posible. La verdad, no se ejecuta la macro del modo correcto. Necesito vuestra ayuda. Gracias de antemano por vuestro tiempo. Post-data: A parte de los errores habituales con CDate(...), también creo que no debo de borrar las filas sino dejar que el bucle actúe por si solo.
  9. Jajaja... Pues entonces ha sido una ventaja coincidir conmigo en este foro, porque cientos de veces se me ocurren "chorradas como esta". Jod... @Antoni, es que eso es mucho nivel para mis escasos conocimientos. De todos modos, gracias a todxs por el aporte.
  10. Hola a todxs, Estaba realizando una macro, y me he parado a pensar en una cosa: "Supongamos que tengo que comparar el valor contenido dentro de dos celdas. Cells(1, 1) = "25412 - AFGS" Cells(1, 2) = "25400 - AFGR" Supongamos que tuviera un código sencillito como el siguiente: If Cells(1, 1) = Cells(1, 2) Then Cells.Clear En cambio, si realizara la misma comparación pero de esta otra manera: If Cells(1, 1).Value = Cells(1, 2).Value Then Cells.Clear Mi pregunta es la siguiente: El uso de la propiedad .Value, ¿podría llegar a ralentizar el código si tuviera que realizar la comparación con más de 100.000 celdas?" Igual es una chorrada... No sé... Pero se me ha ocurrido parar a pensar en ello. Gracias de antemano.
  11. Así es @Antoni, siempre tan acertado en tus comentarios. La hoja de INVENTARIO efectivamente está ordenada por fecha y hora. No es que quisiera "destrozar tu código" (cosa que te vuelvo a agradecer una vez más por el aporte realizado), sino que simplemente me encuentro más cómodo y seguro a mí manera, en vez de usar tantas variables y bifurcaciones condicionales. Porque luego además, este código tengo que integrarlo dentro de un procedimiento aun mayor, y leer todas esas variables y alternativas me dificulta un poco la lectura. Supongo que como vosotros ya tenéis muchísima más experiencia, pues estaréis más que acostumbrados a ver este tipo de cosas. Es cierto. El código se ralentiza un poco, pero como la lectura es desde abajo para arriba y el número de filas a agregar tampoco es excesivamente grande, tampoco es que estemos hablando de mucho tiempo, tan sólo de 1 o 2 segundos más. De todos modos, gracias de nuevo.
  12. Sub PRUEBAS() Dim FIFO As Worksheet Set FIFO = Sheets("FIFO") Dim INVEN As Worksheet Set INVEN = Sheets("INVENTARIO") Dim Fila As Long For Fila = INVEN.Range("A" & Rows.Count).End(xlUp).Row To 3 Step -1 If CDate(INVEN.Cells(Fila, 1) & " " & Format(INVEN.Cells(Fila, 2), "hh:mm")) < _ CDate(FIFO.Cells(3, 1) & " " & Format(FIFO.Cells(3, 2), "hh:mm")) Then INVEN.Range(Fila + 1 & ":" & INVEN.Cells(Rows.Count, 1).End(xlUp).Row).EntireRow.Delete Shift:=xlUp Exit For End If Next End Sub Hola a todxs, Esas son las modificaciones que he aplicado directamente al código proporcionado por @Antoni. Simplemente, he eliminado las variables y lo he simplificado un poquito. Gracias.
  13. Jod... @Antoni, siempre tan directo. Por supuesto que sí. De hecho, he corregido algunos detalles, y la estoy probándolo en el archivo de origen. Mil gracias. Cualquier problema os lo comento...
  14. Pero esto es precisamente lo que tengo puesto en el código, y no se ejecuta del modo correcto. Bueno, en realidad tengo puesto esto otro: ... Dim Fecha As Date, Hora As Variant Fecha = FIFO.Cells(3, 1) Hora = FIFO.Cells(3, 2) ... Jejeje...
  15. Hola a todxs, Tengo un problema con el siguiente código: Sub BORRADOR() Application.ScreenUpdating = False ' *** DECLARAR TODAS LAS VARIABLES *** ' Dim Fila As Long, Fila_actual As Long, Fila_final As Long Dim Fecha As Date, Hora As Variant Fecha = FIFO.Cells(3, 1) Hora = FIFO.Cells(3, 2) ' *** BORRAR TODOS LOS DATOS DUPLICADOS *** ' Fila = 3 Do While INVENTARIO.Cells(Fila, 1) <> Empty If INVENTARIO.Cells(Fila, 1) >= Fecha And INVENTARIO.Cells(Fila, 2) >= Hora Then INVENTARIO.Rows(Fila).Delete Shift:=xlUp End If Fila = Fila + 1 Loop ' *** COPIAR TODOS LOS DATOS DE ORIGEN *** ' Fila_actual = INVENTARIO.Cells(Rows.Count, 1).End(xlUp).Row Range(Range(FIFO.Cells(3, 1), FIFO.Cells(3, 4)), Range(FIFO.Cells(3, 1), FIFO.Cells(3, 4)).End(xlDown)).Copy Destination:=INVENTARIO.Cells(Fila_actual + 1, 1) Fila_final = INVENTARIO.Cells(Rows.Count, 1).End(xlUp).Row ' *** APLICAR FORMATO A TODAS LAS CELDAS *** ' INVENTARIO.Rows(Fila_actual).Copy Range(INVENTARIO.Rows(Fila_actual), INVENTARIO.Rows(Fila_final)).PasteSpecial Paste:=xlPasteFormats ' *** APLICAR FORMATO A LAS HOJAS DE DATOS *** ' Sheets("FIFO").Select With ActiveWindow ' Panel de la ventana: .SplitRow = 3 .SplitColumn = 0 .FreezePanes = True ' Zoom de la ventana: .Zoom = 75 End With Cells(1, 1).Select Application.ScreenUpdating = True Sheets("INVENTARIO").Select With ActiveWindow ' Panel de la ventana: .SplitRow = 3 .SplitColumn = 0 .FreezePanes = True ' Zoom de la ventana: .Zoom = 75 End With Cells(Fila_final + 1, 1).Select End Sub Os paso por aquí el archivo, para que veáis cómo actua el procedimiento con los datos en las hojas: https://www.dropbox.com/s/puiuvxym731h952/REFERENCIAS%20%281%29.xlsm?dl=0 La idea es la siguiente: "Tenemos dos hojas de datos, una principal llamada INVENTARIO y otra secundaria llamada FIFO. De manera que los datos contenidos en FIFO sirven de apoyo para completar los datos de INVENTARIO. El procedimiento es tal que si los datos de fecha y hora contenidos en la hoja FIFO son mayores o iguales que los datos contenidos en la hoja INVENTARIO, entonces elimina todos aquellos datos que sean posteriores de la hoja INVENTARIO y copia todos los datos procedentes de la hoja FIFO. Es un poco lioso... Pero la idea principal es actualizar todos los datos de la hoja INVENTARIO conforme a los datos procedentes de la hoja FIFO." Entonces... El tema es que al ejecutar la macro, me salta una ventana de alerta que me dice lo siguiente: "Se ha producido un error '424' en tiempo de ejecución. Se requiere un objeto." Además, no se exportan los datos de la hoja FIFO del modo correcto, sino que los pega justo debajo de los que ya tengo. En conclusión, se me duplican los datos. Necesito un poco de ayuda, por favor. Gracias de antemano por vuestro tiempo.
  16. Hola a todxs, He creado un archivo con el siguiente código: Sub Buscar() For Fila_actual = 1 To Hoja1.Cells(Rows.Count, 1).End(xlUp).Row If Hoja1.Cells(Fila_actual, 1) = Hoja2.Cells(1, 1) _ And Hoja2.Cells(1, 2) = Hoja1.Cells(Fila_actual, 2) Then Hoja2.Cells(1, 3).Copy Destination:=Hoja1.Cells(Fila_actual, 3) Hoja2.Rows(1).Delete Shift:=xlUp Else Hoja2.Rows(1).Delete Shift:=xlUp End If Next Fila_actual End Sub Podéis comprobar directamente qué es lo que ocurre al ejecutar la macro, en el siguiente archivo adjunto: PRUEBAS.xlsm Veréis... Este archivo es un ejemplo muy sencillito de lo que quiero hacer. La idea no es otra cosa, sino trasladar los datos que coincidan desde la Hoja2 hasta la Hoja1. Sin embargo, me gustaría saber si es posible depurar aun más el código. Y otro problema que tengo es que el archivo original con el que trabajo está compuesto por más de 50.000 filas, con lo que tarda una eternidad en vincular todos los datos. ¿Esto es por lo bucles o por qué?
  17. Hola a todxs, Tengo este dato contenido dentro de una celda: "(25,07:50,10) (42,34:23,25) (15,18:27,45)". Quiero dividir el dato anterior en varias columnas, tal que quede del siguiente modo: Celda 1: "25,07" Celda 2: "50,10" Celda 3: "42,34" Celda 4: "23,25" Celda 5: "15,18" Celda 6: "27,45" He probado con el código proporcionado con la interfaz de usuario de Excel, es decir, Datos > Texto en columnas > Delimitados... El código sería algo como lo siguiente: ... .Replace what:="(", Replacement:="" .Replace what:=")", Replacement:="" .Replace what:=":", Replacement:="+" .Replace what:=" ", Replacement:="+" .TextToColumns Destination:=Cells(1, 1), DataType:=xlDelimited, Other:=True, OtherChar:="+" ... Pero eso, aunque resulta funcional, resulta ser una solución muy cutre. De modo que me gustaría saber, si existe algún otro método con VBA que permita dividir datos en columnas sin necesidad de realizar todo lo anterior. Gracias de antemano por vuestro tiempo.
  18. Si, si... Me expliqué yo mal, jeje. Gracias @Antoni por tu tiempo.
  19. Es el número de ventas que realiza un trabajador por cada día... jeje.
  20. Gracias, pero lo que quería era insertar (o mejor dicho, desplazar dos de las celdas hacia la derecha) una vez el procedimiento se encuentra dentro de un bucle For/Next. Cuando salga de este, ya no es necesario. Por este motivo, no quería trabajar por áreas. Perdón, quizás me expresé yo mal... Creo que la propiedad .resize que me proponen @johnmpl y @Gerson Pineda, me viene como anillo al dedo para lo que quiero construir. Gracias a todxs.
  21. Hola a todxs, Tengo este código: ... Dim Fila As Integer For Fila = 1 To Cells(Rows.Count, 1).End(xlUp).Row With Cells(Fila, 2) .Insert Shift:=xlToRight .Insert Shift:=xlToRight ' Texto de las celdas: .Value = Fila ' Formato de las celdas: .NumberFormat = "0.00" End With Next Fila ... Quiero insertar dos columnas sin necesidad de repetir dos veces la misma sentencia. ¿Existe alguna otra manera? Gracias de antemano.
  22. Hola a todxs, Tengo la siguiente duda: "Supongamos que tengo un Array de datos, y es tan grande que desconozco el número de datos que contiene. De manera que perdería mucho tiempo en ir contando uno a uno cada uno de esos datos. El código sería algo como lo siguiente: ... Vector = Array("elemento1", "elemento2", "elemento3", ... , "elementoi", ... , "elementoN") For i = 0 To N Cells(i + 1, 1).Value = Vector(i) Next i ... ¿Existe alguna manera o algún método para conocer el enésimo elemento N que compone el vector de datos?." Muchas gracias de antemano. Post-data: Sé que en otros lenguajes de programación tales como Java o JavScript, se utiliza la función .length.
  23. Hola a todxs, Tengo este código: ... Cells(Fila_actual, 2).Select With Selection ' Texto de las celdas: .FormulaR1C1 = Date ' Formato de las celdas: .NumberFormat = "[$-x-sysdate]dddd, mmmm dd, yyyy" ' Tamaño de las celdas: .ColumnWidth = 30 End With ... Teniendo en cuenta que este código está integrado dentro de un bucle For/Next, mi pregunta es la siguiente: ¿Es mejor suprimir .Select porque ralentiza mucho la ejecución de la macro, para que quede algo como lo siguiente? ... Cells(Fila_actual, 2).FormulaR1C1 = Date + 1 Cells(Fila_actual, 2).NumberFormat = "[$-x-sysdate]dddd, mmmm dd, yyyy" Cells(Fila_actual, 2).ColumnWidth = 30 ... Saludos, y gracias de antemano.
  24. Hola a todxs, Tengo este código: ... Cells(1048576, 1).End(xlUp).Select Fila_final = ActiveCell.Row ... ¿Hay alguna manera más rápida de grabar la fila final en una variable que no sea posicionando el cursor en la última fila?
×
×
  • Create New...

Important Information

Privacy Policy


CTA Templates.png