Máximos colaboradores
Popular Content
Showing content with the highest reputation since 02/12/25 in all areas
-
Abre el adjunto y pulsa sobre el botón. Vale para cualquier cantidad de filas y columnas de Sheet1. copiar color.xlsm2 points
-
Hola, tal cual se plantea, solamente con macros (VBA); en todo caso, hacerlo a mano o con "CTRL + ;". Saludos.2 points
-
Bueno con el ejemplo así como lo tienes, te puedo compartir que ese error de referencia circular es el que te ayuda a mantener la fecha y la hora "congeladas" podrías evitarlo usando una columna auxiliar para el vacío pero la fórmula AHORA() te cambiara el resultado cada que la hoja se calcule o cuando le des guardar. Sin VBA de por medio será esperar el aporte de algún maestro o usuario avanzado. Si cambias de opinión pasa el tema para la otra sección. Saludos2 points
-
1 point
-
Intenta con: =INDICE(G$3:AK$3,,CONTAR(G$3:AK$3))-SI.ERROR(BUSCAR(2,1/(G4:INDICE(G4:AK4,,CONTAR(G$3:AK$3))=0),G$3:AK$3),G$3-1)1 point
-
1 point
-
Una idea con VBA Private Sub Worksheet_Change(ByVal Target As Range) Dim ws As Worksheet Dim filterRange As Range Dim selectedValue As String Dim lastRow As Long Set ws = ThisWorkbook.Sheets("Hoja1") lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row Set filterRange = ws.Range("A4:D" & lastRow) If Not Intersect(Target, ws.Range("B2")) Is Nothing Then selectedValue = ws.Range("B2").Value filterRange.AutoFilter Field:=1, Criteria1:=selectedValue If selectedValue = "" Then filterRange.AutoFilter End If End If End Sub1 point
-
1 point
-
Así como está el ejemplo si agregas un argumento a la fórmula que pusiste debería devolver el resultado que buscas: =BUSCARV(I4,I25:M36,2,FALSO)1 point
-
Complicado saber si tengo el conocimiento que sirva para recomendarle algo. Le recomiendo hacer una copia del libro, elimine los datos que no se necesitan para mostrar el ejemplo, elimine todos los condicionales, solo deje lo que le permita replicar el error que está viendo, guarde el libro como tipo binario.1 point
-
Trata con esta correción a la fórmula: =MAX(A:.A)-BYROW(F4:.AK400,LAMBDA(r,SI.ERROR(BUSCAR(2,1/(r=0),F3:.AK3),G3-1))) CONTADOR FINAL (Solucion) (1).xlsb1 point
-
Que tal nuevamente, adjunto una solución alternativa: =MAX(A:.A)-BYROW(F4:.AK20,LAMBDA(r,BUSCAR(2,1/(r=0),F3:.AK3))) Cabe mencionar que esta solución requiere funciones nuevas como RECORTAR.RANGO. CONTADOR FINAL (Solucion).xlsb1 point
-
'Opción 1 Sub FiltrarSKUPorFecha(): Application.ScreenUpdating = False Dim ultimaFila As Long, fila As Long Dim diccionarioSKU As Object Dim listaEliminar As Object Dim fechaActual As String, fechaSiguiente As String Dim f As Variant With Sheets("Consolidado") ultimaFila = .Cells(.Rows.Count, 1).End(xlUp).Row ' Crear diccionarios para comparar SKU y almacenar filas a eliminar Set diccionarioSKU = CreateObject("Scripting.Dictionary") Set listaEliminar = CreateObject("Scripting.Dictionary") ' Recorrer desde la primera fila hasta la penúltima For fila = 2 To ultimaFila - 1 fechaActual = .Cells(fila, 1).Value fechaSiguiente = .Cells(fila + 1, 1).Value ' Solo comparar la fecha actual con la siguiente (inmediatamente superior) If fechaActual <> fechaSiguiente Then diccionarioSKU.RemoveAll ' Limpiar el diccionario antes de llenarlo ' Guardar los SKU de la fecha siguiente (solo de la siguiente) For f = fila + 1 To ultimaFila If .Cells(f, 1).Value <> fechaSiguiente Then Exit For diccionarioSKU(.Cells(f, 2).Value) = 1 Next f ' Revisar los SKU de la fecha actual y marcar los que deben eliminarse For f = fila To 2 Step -1 If .Cells(f, 1).Value <> fechaActual Then Exit For ' Solo eliminar si el SKU no está en la fecha siguiente If Not diccionarioSKU.exists(.Cells(f, 2).Value) Then listaEliminar(f) = 1 ' Marcar fila para eliminar después End If Next f ' Ya no es necesario seguir buscando después de comparar la primera y la siguiente fecha Exit For End If Next fila ' Eliminar las filas marcadas sin afectar el bucle principal For Each f In listaEliminar.keys .Rows(f).Delete Next End With MsgBox "Completado correctamente.", vbInformation End Sub 'Opción 2 Sub FiltrarSKUPorFecha1(): Application.ScreenUpdating = False Dim ultimaFila As Long, fila As Long Dim listaEliminar As Collection Dim fechaActual As String, fechaSiguiente As String Dim f As Variant, i As Long Dim SKUExiste As Boolean With Sheets("Consolidado") ultimaFila = .Cells(.Rows.Count, 1).End(xlUp).Row ' Inicializar la colección para marcar las filas a eliminar Set listaEliminar = New Collection ' Recorrer desde la primera fila hasta la penúltima For fila = 2 To ultimaFila - 1 fechaActual = .Cells(fila, 1).Value fechaSiguiente = .Cells(fila + 1, 1).Value ' Solo comparar la fecha actual con la siguiente (inmediatamente superior) If fechaActual <> fechaSiguiente Then ' Revisar los SKU de la fecha actual y marcar los que deben eliminarse For f = fila To 2 Step -1 If .Cells(f, 1).Value <> fechaActual Then Exit For ' Comprobar si el SKU está en la fecha siguiente SKUExiste = False For i = fila + 1 To ultimaFila If .Cells(i, 1).Value <> fechaSiguiente Then Exit For If .Cells(i, 2).Value = .Cells(f, 2).Value Then SKUExiste = True Exit For End If Next i ' Si el SKU no se encuentra en la fecha siguiente, marcar para eliminar If Not SKUExiste Then listaEliminar.Add f ' Marcar fila para eliminar después End If Next f ' Ya no es necesario seguir buscando después de comparar la primera y la siguiente fecha Exit For End If Next fila ' Eliminar las filas marcadas sin afectar el bucle principal For Each f In listaEliminar .Rows(f).Delete Next f End With MsgBox "Completado correctamente.", vbInformation End Sub TABLA ELIMINAR.xlsm1 point
-
1 point
-
Que tal, una posible solución podría ser: =M$1-BUSCAR(2, 1/(A2:M2=0), A$1:M$1) Espero le sea útil. DIAS CONSECUTIVOS (SOLUCION).xlsx1 point
-
Buenas, Al final lo he arreglado guardando una copia del "export" en el odenador que lo ejecute. Como el informe lo ejecutara cada persona en su ordenador, y cada vez que lo utilice necesitara datos actualizados, el export lo guardo en la raiz de C:\ de cada ordenador y PQ hace la llamada a esa ruta. Da igual que en cada ordenador haya un export, porque el valido siempre será el que se cree en ese momento, con independencia de donde se haya creado. Me hubiera gustado poder guardarlo en sharepoint, mas que nada por tenerlo todo organizado, pero asi me vale; ademas la macro que genera el export, se encarga de guardarlo, cerrarlo y actualizar la plantilla para capturar con PQ. Saludos a todos.1 point
-
1 point
-
1 point
-
Hola a todos, Efectivamente, me temo que tal como trabajan las funciones =HOY() y/o =AHORA() (volátiles), sólo con macros puedes obtener soluciones. Un recurso pedestre podría ser, cada vez que quieras que se fije un dato, te sitúes en esa celda y pulses F2, F9 e INTRO. Pero claro, puede ser un inconveniente si hay que hacerlo repetitivamente en muchas ocasiones,.............. en fin, lo comento sólo como posibilidad. Saludos,1 point
-
Hi, No voy a responder por el maestro porque ha sido claro, pero puedo agregar: Es en un dilema técnico y ético. No es debatir si se puede, simplemente no se debe. El Captcha está diseñado justo para eso, para que sea un humano quien pase la verificación, si lo hace una máquina entonces no sirve. ¿Qué vas a hacer cuando el Captcha te pida seleccionar imágenes? El que muestras puede parecer sencillo pero es posible que verifique el tiempo y la forma en la que se mueve el cursor para dar clic. En resumen, no es un tema de Excel ni de VBA, de mi parte tampoco podré contribuir en este tema. Una mejor opción sería preguntarle al proveedor si tienen una API disponible para acceso automatizado. Saludos.1 point
-
el tema tiene su grado de complejidad por lo siguiente: 1) la propiedad que intentas (.interior.colorindex) no detecta formatos condicionales 2) la propiedad .displayformat (xl-2010+) no se puede usar (directamente) en UDF's llamadas desde celdas 3) por lo mismo es la 'vuelta de tuerca' por procedimiento 'auxiliar' y el metodo 'evaluate' finalmente, no me hables 'de usted', hablame de (us)TU 🫡1 point