Saltar al contenido

Máximos colaboradores

Popular Content

Showing content with the highest reputation since 04/27/24 in all areas

  1. 3 points
  2. Te dejo una función, puedes usarla en macros y formularios o como fórmula. Function Edad(Identidad As String) As Variant Dim Año, Mes, Día '-- If Not IsNumeric(Identidad) Or Not Len(Identidad) = 11 Then Edad = "#Error Identidad" Exit Function End If '-- Año = CInt(Left(Identidad, 2)) If Año > Year(Date) - 2000 Then Año = Año + 1900 Else Año = Año + 2000 End If '-- Mes = CInt(Mid(Identidad, 3, 2)) Día = CInt(Mid(Identidad, 5, 2)) Edad = Year(Date) - Año '-- If Mes > Month(Date) Or _ (Mes = Month(Date) And Día > Day(Date)) Then Edad = Edad - 1 Exit Function End If End Function Cumpleaños Foro.xlsm
    3 points
  3. Hola, una forma es: Private Sub UserForm_Initialize() Me.StartUpPosition = 0 'Establecer posición de forma manual Me.Top = 100 'Desde la parte superior Me.Left = 100 'Desde el margen izquierdo End Sub Lee sobre las propiedades Top y Left del Userform para mejor referencia. Saludos.
    3 points
  4. Abre el adjunto y pulsa sobre el botón. Vale para cualquier cantidad de filas y columnas de Sheet1. copiar color.xlsm
    2 points
  5. Hola, tal cual se plantea, solamente con macros (VBA); en todo caso, hacerlo a mano o con "CTRL + ;". Saludos.
    2 points
  6. 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. Saludos
    2 points
  7. Para esa versión se me ocurre usar otra web y una UDF: Function InsertQRCode(celda As Range) As String Dim mirango As Range Dim QRCodeURL As String Set mirango = Application.Caller QRCodeURL = "https://quickchart.io/qr?text=" & celda.Value With ActiveSheet.Pictures.Insert(QRCodeURL) .Left = mirango.Left .Top = mirango.Top .Width = mirango.Width .Height = mirango.Height End With InsertQRCode = "" End Function
    2 points
  8. Hola a todos, Otra opción podría ser: =BUSCARV(B30;DESREF(A$4;;COINCIDIR(C30;B$2:W$2;)-2;15;3);3;) ...fórmula que, insertada en D30, puede copiarse verticalmente hasta donde sea necesario (archivo adjunto). Nota: He modificado las fórmulas de C26:C27, convirtiéndolas en dinámicas; sólo habrá que revisar si el rango de suma es el que se desea. Sumas con condición (C).xlsx
    2 points
  9. El archivo Propuesta27102024.xlsm
    2 points
  10. 2 points
  11. Y cuando pulse sobre cualquier celda con texto en la columna I de la hoja tablas te muestra el pdf en pantalla completa yo te lo muestro un poco reducido para que quepa en el gif
    2 points
  12. No todos los controles tienen las mismas propiedades: Private Sub Guardar(sh As Worksheet, r As String, ctrl As Control) If ctrl.Visible Then Select Case TypeName(ctrl) Case "Label" sh.Range(r).Value = ctrl.Caption Case "TextBox" sh.Range(r).Value = ctrl.Value End Select End If End Sub
    2 points
  13. Prueba y comenta Private Sub Worksheet_Change(ByVal Target As Range) ' Salir si se seleccionan varias celdas a la vez If Target.Count > 1 Then Exit Sub ' Salir si el cambio está en la fila 1 If Target.Row = 1 Then Exit Sub ' Salir si el cambio está en una columna mayor a la columna 8 If Target.Column > 8 Then Exit Sub ' Intentar redimensionar la tabla dentro de la protección de hoja On Error GoTo ErrorHandler Me.Unprotect Password:="123" ' Redimensiona la tabla a la región actual del Target Me.ListObjects("Tabla1").Resize Target.CurrentRegion ' Proteger de nuevo con configuraciones específicas para permitir edición en la tabla Me.Protect Password:="123", _ AllowSorting:=True, _ AllowFiltering:=True, _ AllowUsingPivotTables:=True, _ AllowInsertingRows:=True, _ AllowDeletingRows:=True ' Restaurar control de errores On Error GoTo 0 Exit Sub ErrorHandler: MsgBox "Ocurrió un error al redimensionar la tabla. Verifica el nombre de la tabla y que los rangos estén correctos.", vbExclamation End Sub
    2 points
  14. El archivo HHE PRUEBA (3).xlsm
    2 points
  15. Hola, creo que Fernando tuvo un problema con su usuario del foro e igual nunca es recomendado titular un post hacia una persona o pedirle solo ayuda a una; recomiendo o que adjuntes tu archivo que tenga los datos tal cual los trabajas y, a mano, los coloques tal cual los necesitas y de ese modo será más fácil entenderte.
    2 points
  16. Hola. La verdad es que, viendo tu lista y tu escueta explicación, pues realmente es casi imposible darte un consejo.
    2 points
  17. Prueba a ver si es esto lo que quieres. CALENDARIO PRUEBA (1).xlsm
    2 points
  18. Hola jues No soy Israel Cassales , pero intentaré darte otra visión del asunto. Estamos hablando de octubre de 2024. Que tiene entre sábados y domingos 8 días. En tu archivo te salen 9. Cuentas como festivo el día 12 de octubre, que es sábado, y por lo tanto no se cuenta, a ti te sale 1. Los días trabajados (laborados) dices que son 21, cuando son 23, contando el día "festivo" que no es, y el sábado o domingo que te sobra. Con ésta fórmula me salen los 23 días: =DIAS.LAB.INTL($D$6;FIN.MES($D$6;0);"0000011";'USUARIOS & PRIVILEGIOS'!$N$5:$N$34) La multiplicación por las 8 horas y por el NTT (que no se lo que es) te lo dejo a tí. Saludos.
    2 points
  19. Que tal a todos, me permito aportar otra posible solución sin alterar la estructura del reporte: =CONTAR(UNICOS(--DIVIDIRTEXTO(A2; ; APILARH(CARACTER(10); "AB-")))) Espero les sea útil. ContarCodigosUnicos (Solucion).xlsx
    2 points
  20. Prueba esta macro, vale para cualquier cantidad de filas/columnas. Const Naranja As Long = 6403322 Const Morado As Long = 11423218 Const Verde As Long = 4896057 Const Rojo As Long = 6709491 '-- Sub Resaltes() Dim Sales As Range, Fcst As Range Application.ScreenUpdating = False '-- For x = 2 To Range("A" & Rows.Count).End(xlUp).Row Step 2 For y = 4 To Cells(1, Columns.Count).End(xlToLeft).Column '-- Set Fcst = Cells(x, y) Set Sales = Cells(x, y).Offset(1) '-- Sales.Interior.ColorIndex = xlNone Fcst.Interior.ColorIndex = xlNone '-- If Sales <> "" Then If Round(Sales) = 0 And Round(Fcst) > 0 Then Sales.Interior.Color = Rojo Fcst.Interior.Color = Rojo End If '-- If Round(Sales) <> 0 And Round(Sales) < Round(Fcst) Then Sales.Interior.Color = Naranja Fcst.Interior.Color = Naranja End If '-- If Round(Sales) = Round(Fcst) Then Sales.Interior.Color = Verde Fcst.Interior.Color = Verde End If '-- If Round(Sales) <> 0 And Round(Fcst) < Round(Sales) Then Sales.Interior.Color = Morado Fcst.Interior.Color = Morado End If '-- End If Next Next End Sub
    2 points
  21. Por la descripción se me ocurren un par de cosas que recomendarte, una podría ser la configuración de la región, así que en donde no se "abre" bien revisa que el separador de listas sea una coma. La otra no mencionas como lo mandas llamar pero se puede deducir que haces doble clic, así que igualmente en la que no abre bien prueba importar "manualmente" el .csv
    2 points
  22. Sub BorrarCobros() With Sheets("Hoja1") Set rango = .Range("A1").CurrentRegion rango.AutoFilter Field:=12, Criteria1:="COBRADA" .Range("A2:A" & .Cells(.Rows.Count, "A").End(xlUp).Row) _ .SpecialCells(xlCellTypeVisible).EntireRow.Delete .AutoFilterMode = False End With End Sub Esta sería la otra variante
    2 points
  23. Buenas, por lo que veo sería: en la función: Function GetDepthFromCSV(csvData As Variant, holeID As String) As Variant cambia la línea done crea el array lineData , el delimitador de esta mal: lineData = Split(csvData(i), ";") ' cambia "," por ";" y la captura del campo, cambia el número de columnas GetDepthFromCSV = lineData(3) ' Asume que la columna 1 es PROF_REC ' cambio por 3 de esta manera parece que funciona como lo quieres. saludos survey_test2_v1.xlsm
    2 points
  24. Saludos totales, Considerando la respuesta del maestro ante la posibilidad de separar el resultado en dos celdas y considerando también que el consultante no desea usar macros. En esa circunstancia si nos ponemos creativos podemos sacar de la celda el resultado de la fórmula a una imagen. Su formula renombrada: =SI(B3=B7,"Resultado1",SI(B3=B8,"Resultado2",SI(B3=B9,"Resultado3"))) Así cuando cambie el resultado, cambiará la imagen que es una copia del resultado que tenemos en el rango inferior. Probablemente con un rango mayor de datos sea laborioso el crearlo pero es solo una idea que se me cruzo al leer la propuesta del Maestro @Victor7 a quien saludo cordialmente con el gusto de coincidir en este tema.
    2 points
  25. Hola a todos, Otra posibilidad, con fórmula única M365, podría ser (no necesita cálculos ni rangos auxiliares): =LET(z;LAMBDA(a;CONTARA(UNICOS(FILTRAR(A2:A14;a>0))));y;C2:C14;APILARH(CONTARA(FILTRAR(y;y>0));EXCLUIR(BYCOL(C2:P14;z)-BYCOL(B2:O14;z);;1))) Al tratarse de una fórmula de matriz derramada, hay que asegurarse de borrar el rango D16:xxx16. De otra forma, aparecerá error #¡DESBORDAMIENTO! Saludos,
    2 points
  26. Saludos totales Es una gran idea @simplifikndo y lamento parecer entrometido en su aporte, me gustan las recomendaciones que hace y por eso con pena de mi parte y sin intención de modificar el total de su idea con el rango auxiliar, vi que en la parte del conteo usa esta fórmula: =SI(CONTAR.SI(U$1:U$7,">"&0)>CONTAR.SI(T$1:T$7,">"&0),CONTAR.SI(U$1:U$7,">"&0)-CONTAR.SI(T$1:T$7,">"&0),0) Usando su mismo rango tal vez le podría interesar algo así: =SUMAPRODUCTO((U1:U7>0)*(T1:T7=0)) Una disculpa por la intromisión estimado @Matías86 Duda Lanzamiento - slp.xlsx
    2 points
  27. Otra forma a partir de las tablas, los nombres de las hojas, el combo bancos y el nombre de las tablas deben ser iguales. Para Foro.xlsm
    2 points
  28. ¡Saludos a todos! @fx.ingenieria revisa el adjunto, donde con una sola fórmula matricial devolvemos los resultados buscados. He agregado un formato condicional para que se sombree la fila dependiendo de si el valor corresponde a un valor sin comas (es un título de grupo). ¡Bendiciones! Suma rangos variables .xlsx
    2 points
  29. Saludos totales @simplifikndo Gran aporte y gusto de coincidir con usted de nuevo en un tema. @fx.ingenieria Hay una parte que me parece (al menos a mí) que no está clara en su consulta y es la siguiente: En los libros que amablemente manda y en sus explicaciones, no ha terminado de exponer cómo es que los rangos pasan de ser fijos a ser variables, así que mi participación se basa solo en deducciones y erróneamente no debería ser así porque está limitada al conocimiento que solo ésta en usted. Además que ya está siendo asistido por el compañero quien hace colaboraciones sobresalientes. Desde mis conjeturas una de las forma en que los rangos sean variables es porque se insertan filas o columnas, esto le debe causar problemas si quien lo hace no inserta dentro del rango, porque de ser así una suma natural de Excel debería servir porque el rango cambia automáticamente. Empero, si esta fila o columna se inserta al final del rango, entonces no se actualiza y las sumas son incorrectas. Una idea sencilla que sirve para evitar esto es combinar SUMA con DESREF ENFATIZO: Es importante señalar cómo pasan de fijos a variables sus rangos considerando que está buscando sumar valores justo dentro de ese rango y las fórmulas no se escriben automáticamente, a menos que se programe un evento que lo ocasione.
    2 points
  30. Private Sub ComBanco_Change() Dim hojabuscada As String Dim ultFila As Long Dim ultCol As Long hojabuscada = ComBanco With Sheets(hojabuscada) ultFila = .Cells(.Rows.Count, 1).End(xlUp).Row ultCol = .Cells(6, .Columns.Count).End(xlToLeft).Column LstDiario.RowSource = .Range(.Cells(6, 1), .Cells(ultFila, ultCol)).Address(External:=True) End With End Sub El saldo inicial no se si quieres que se muestre, en caso contrario modifica la macro, simplemente cambia en la dos ultimas líneas del bloque with el 6 por el 7 Para Foro.xlsm
    2 points
  31. El archivo Prueba de cambio nombre (1).xlsm
    2 points
  32. mucho mejor 👍🫡
    2 points
  33. Revisa el archivo adjunto Indice & Coincidir.xlsx
    2 points
  34. Sub ExportarCSV() Set hojaDatos = ThisWorkbook.Sheets("Datos") Set hojaCSV = ThisWorkbook.Sheets("CSV") ultimaFila = hojaDatos.Cells(hojaDatos.Rows.Count, "B").End(xlUp).Row Dim rangoCodigos As Range Set rangoCodigos = hojaDatos.Range("G1:IB1") rutaArchivoCSV = ThisWorkbook.Path & "\" nombreArchivoCSV = "archivo.csv" archivoCSV = FreeFile Open rutaArchivoCSV & nombreArchivoCSV For Output As archivoCSV For i = 2 To ultimaFila clave = hojaDatos.Cells(i, 2).Value mes = hojaDatos.Cells(i, 5).Value año = hojaDatos.Cells(i, 6).Value For Each celda In rangoCodigos codigo = celda.Value valor = hojaDatos.Cells(i, celda.Column).Value If Not IsEmpty(codigo) Then If IsNumeric(valor) Then valor = CDbl(valor) End If Print #archivoCSV, clave & "," & codigo & "," & valor & "," & mes & "," & año End If Next celda Next i Close archivoCSV MsgBox "Se ha generado el archivo CSV correctamente.", vbInformation End Sub Exportar datos a csv.xlsm
    2 points
  35. @Fernando Reyes Chavarria Es importante seguir la recomendación del Moderador en ampliar los detalles para recibir más posibilidades de ideas. Con lo que describe me parece (o al menos eso entiendo) que busca tener dentro del gráfico dos siluetas donde el relleno se aumente o se disminuya de acuerdo al porcentaje de la operación que viene en su libro, algo como la imagen: Pero con siluetas humanas, creo. De ser así la idea es simple, en su gráfico debe remplazar las formas por las formas humanas transparentes, luego agrupar con las formas que tendrán el relleno auto ajustable que dependerán del resultado de la fórmula. Aunque puedo estar equivocado y queda esperar a que usted de una información más amplia. Saludines
    1 point
  36. Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) If SaveAsUI Then MsgBox "La opción 'Guardar Como' está deshabilitada", vbExclamation Cancel = True End If End Sub Prueba y comenta
    1 point
  37. Buenas, en la hoja donde estan los datos originales, selecciona las celdas, luego, Menú -> datos -> Texto En columnas -> Siguiente .. selecciona el formato texto y finalizar. saludos.
    1 point
  38. Saludos cordiales. Antes de que cierren el tema, algo diferente que me parece oportuno comentar para los diferentes posibles lectores es que antes podías anidar efectivamente hasta 7 IF, ahora pueden ser hasta 64. Aunque no se recomienda pero se puede, y en esos casos es mejor combinar SI() con O() y también con Y()
    1 point
  39. Si, cualquier fórmula que pongas en una celda puede ser replicada desde una macro.
    1 point
  40. No encuentra el valor de la variable prod en esta instrucción: Set pro_d = .Range("A5:A" & ufd).Find(prod)
    1 point
  41. Te propongo ir creando las filas de forma automática a medida que vayas entrando información . Cuando selecciones una celda de la columna A vacía, si hay información en la celda de la fila anterior, las fórmulas se insertarán de forma automática. Abre el adjunto y selecciona la celda A50 para ver el resultado de lo que te acabo de describir. PRUEBA INSERTAR 500 FILAS.xlsm
    1 point
  42. 1 point
×
×
  • 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.