Ir al contenido principal

combinaciones sencillas en excel

He dedicado una entrada bastante compleja, hace un tiempo atrás, sobre la forma de obtener combinaciones en base a distintos caracteres, para, por ejemplo, romper una contraseña. Y digo mal "combinación", ya que una contraseña o password o clave es, en realidad, una "permutación". ¿La diferencia? en una combinación el orden de los elementos no importa: es lo mismo mezclar tomates, cebollas y lechuga que cebollas, lechugas y tomates. Pero en una permutación no es igual "abc" que "bca". Aquí el orden sí posee importancia, y mucha. Si alguien tiene alguna duda, que la proxima vez ingrese los caracteres de su contraseña al webmail en el orden que le plazca, y verá como el ingreso será rechazado.

Un lector que no está ducho en la implementación de macros, y que a su vez posee unos pocos números a combinar, me solicita otra solución, mas sencilla. Le remiten 5 o 6 cheques por día, de distintos valores, junto a una o dos facturas de compra. El sabe que esa factura se pagó con algunos de los cheques, pero no sabe cuales. Manualmente (y con calculadora en mano) debe "mezclar" esos cheques hasta dar con los que forman el importe de la factura, que pueden ser dos, cuatro, seis, etc. La solución no es complicada (hay otra forma de solucionarlo con la herramienta "solver", pero es mas difícil) y viene de la mano de lo que autodenominé "tabla binaria". Realmente no se si se llama así, pero la bauticé de esa forma por que nunca me enteré de su verdadero nombre.
la tan "mentada" tabla binaria... o como se llame.
[+/-] Ver el resto / Ocultar

Comentarios

  1. Hola buenas, yo tengo una duda. Necesito hace un Floyd de 6x6. Tengo 3 letras, K ; I ; J, y tengo que darle un valor de 1 a 6 sin que se repitan. Se que son 120 combinaciones pero me gustaría saber si se puede hacer automáticamente con excel o acces

    ResponderEliminar
  2. la verdad que es la primera vez que veo el término "floyd". quizás lo conozca bajo otra denominación, pero por ahora no me doy cuenta.

    te comento: pasame un archivo a la direccion de mail que figura debajo del formulario, así veo bien lo que necesitas y armo una entrada al respecto. con visual basic es muy sencillo generar aleatorios entre dos valores, sin repetir. quedo al aguardo de tus noticias.

    ResponderEliminar
  3. estimado: aquí te dejo un pequeño código que genera 3 aleatorios (todos distintos entre si, entre 1 y 6) y los coloca dentro de un rango al que llamé "cuadro". es muy sencillo de modificar, por si el día de mañana necesitaras ampliar la cantidad de aleatorios o entre que valores deben moverse los resultados:

    Sub TresAleatorios()
    Dim Alea, Cont As Byte

    Cont = 0
    Randomize
    Range("cuadro").ClearContents

    'el bucle se ejecutará mientras el valor
    'de Cont sea menor a 3. si necesitas generar
    'mas aleatorios, solamente modifica este
    'valor por otro (ej: 10, 15, 7, etc)
    While Cont < 3
    deNuevo:
    'genero el aletorio:
    Alea = Int((6 * Rnd) + 1)
    'ahora busco en el rango si ese
    'aleatorio existe:
    On Error Resume Next
    f = Range("cuadro").Find(Alea).Row
    'si arroja un error quiere decir que
    'el valor NO está, así que lo coloco:
    If Err.Number <> 0 Then
    Cont = Cont + 1
    Range("cuadro").Cells(Cont).Value = Alea
    Err.Clear
    Else
    'si no hay error, el valor ya se generó,
    'así que repito las acciones:
    GoTo deNuevo
    End If
    Wend
    End Sub


    aqui el link al archivo:
    https://sites.google.com/site/damianomarsilva2/aleatorios_1-6.xls

    ResponderEliminar
  4. perdona la ignorancia de mi primer comentario, seguro estás haciendo referencia al algoritmo de "floyd-warshall", el que te permite encontrar el camino mínimo.

    ResponderEliminar

Publicar un comentario

Entradas populares de este blog

funciones: convertir numeros a letras con excel

En realidad hace tiempo que vienen consultándome sobre esto... quizás cinco o seis años . Debe ser una de las funciones mas buscadas de Excel, por lejos: la posibilidad de escribir: 1.534,63 y que en una celda aparezca magicamente "un mil quinientos treinta y cuatro c/15/100". Aquí les dejo una solución, basada en funciones , sin utilizar macros, la cual preparé exclusivamente para este Blog. A pesar de los millones de usuarios que requieren esta herramienta, no viene incorporada en Excel, debemos armarla nosotros mismos .  Luego de la imagen irá la explicación de como llegué a lograr esto, dado que es un proceso medianamente complejo , que utiliza tres o cuatro funciones básicas y requiere de varios pasos. así quedará nuestra planilla y siempre devolverá en letras el valor que ingresemos en A1 [+/-] Ver el resto / Ocultar Desde ya aclaro: esta no es " la forma " de hacerlo, simplemente es una mas, evitando el uso de macros. Sobre esta base, comencemos: 1) El núme

macros: como enviar mails desde Excel (vba)

Un gran amigo "on-line", Johan Moreno, de Colombia , me hizo llegar la inquietud de cómo enviar mails desde Excel . Si bien contaba con algunas líneas de código sobre el particular, decidí retomar mi ejemplo y adaptarlo mejor a las circunstancias. Hace unos minutos termino de remitirle un correo con la solución a Johan... desde Excel y con un archivo adjunto, mismo que transcribo a continuación para ayudar a todos con esta tarea. Veamos primero las dos formas principales de enviar mails: mediante Outlook o nuestro Web Mail ( yahoo, gmail, hotmail, etc, etc ) No soy usuario de Outlook en lo absoluto: no confío en los agujeros de seguridad que continuamente aparecen y, por otro lado, t eniendo a mi alcance una herramienta tan poderosa (y gratuita) como Gmail, la cual ahora también permite sincronizar los mensaje con la Pc para verlos offline (deben activarlo en "google labs") ... no creo que me haga usuario ni hoy ni mañana. Igualmente mas adelante daré una solució

buscarv con varios resultados

Es de las preguntas mas recurrentes que he tenido: ¿se puede lograr que la función BUSCARV() devuelva varios resultados? Si recordamos el uso de esta función, sabremos que la misma buscar en valor en el rango especificado, retornando un solo resultado. Si en la tabla tenermos varios registros iguales BUSCARV() solo nos devolverá el primero de ellos, omitiendo el resto. Entonces ¿se puede? Bueno, aplicando otra técnica sencilla que se me ocurrió al intentar solucionar el planteamiento de un lector... si, puedo hacerlo.... pero sin usar BUSCARV(). la idea es que coloquemos en E1 el código del producto a buscar y a partir de E2 nos devuelva todas las coincidencias de la tabla. [+/-] Ver el resto / Ocultar Vamos a necesitar una columna "auxiliar" para llevar a buen término este proyecto. Con macros el tema sería mas sencillo, pero aquí la cuestión es resolverlo con las funciones de Excel, sin VBA. Paso a paso: Como primer medida chequeamos que valores de la columna A coincide co