Tengo una columna llena de # telefónicos, lo que quiero es un macro o un script que me cuente la cantidad de # que tengo, me copie el 5% de esos números a la columna b, pero los números deben de ser aleatorios, no puede copiarme los mismos números si repito el macro... Ejemplo Si en la columna A tengo 100 números, el macro/script debe decirme que hay 100 #, sacar el 5%, que en este caso serán 5 números, y copiarme 5 números a la columna B...
1 respuesta
Respuesta de fejoal
1
1
fejoal, Por falta de tiempo para responder como me gusta hacerlo suspendo...
Interesante desafío. La buena noticia será que no es necesario programar ni una sola línea de macros para resolverlo. Bastará con anidar una serie de funciones standard cd MS Excel: Usaremos: =CONTARA(<rango>) para saber el total de numeros telefónicos que tienes en la columna A =ALEATORIO.ENTRE(<Nro menor>, <Nro Mayor>) para que genere números al azar entre 1 y la cantidad de números telefónicos que obtuviste con la función anterior. Nota: Tener en cuenta que este valor se modifica con cualquier cambio en la hoja donde esté la fórmula o al presionar F9. =INDICE(<rango>,<fila>,<columna>) que tomará un dato de la columna A, en una fila dada por el número aleatorio generado con la función anterior Así, si el rango de teléfonos fuese A5:A1130, la siguiente fórmula, que combina las funciones citadas, dará un teléfono al azar de aquel listado: =INDICE($A$5:$A$1130,ALEATORIO.ENTRE(1,CONTARA($A$5:$A$1130))) [Considera si sueles usar comas o punto y coma para separar argumentos de las funciones. Yo usé ","] Asígnale el formato deseado y, luego, copia esta celda y pégala en las restantes de esta misma columna, tantas como números quieras mostrar. --- Podríamos mejorarla, agregándole un control para que muestre tantos teléfonos como resulte de aplicar el porcentaje al total de números que tengas en ese rango. Asumiré que el porcentaje está en una celda aparte, para que sea sencillo modificarlo a tu gusto. Tal celda será B2. A las funciones explicadas, deberíamos incorporar sólo dos más: =ENTERO(<Numero>) para determinar un valor discreto al aplicar el porcentaje, eliminando decimales. =FILA(<Rango>) devuelve el número de fila del rango indicado o de la fila actual si se omite ese argumento. Con estos ingredientes, dentro de un condicional, la fórmula final sería: =SI(FILA()-FILA($A$5)+1>ENTERO(CONTARA($A$5:$A$1130)*$B$2),"",INDICE($A$5:$A$1130,ALEATORIO.ENTRE(1,CONTARA($A$5:$A$1130)))) Desde luego, tendrás que tener una cantidad de celdas con fórmulas que exceda el porcentaje seleccionado. Las que superen el número resultante no mostrarán nada. Un último comentario: La probabilidad de que un teléfono se repita en la selección es directamente proporcional al porcentaje elegido e inversamente proporcional a la cantidad de números de la lista original. Es decir, si el porcentaje es alto y la lista de números disponibles es escasa, hay muchas posibilidades de que algún número se repita. De todos modos, podrías agregar un control externo para detectar si se producen duplicaciones. Al costado de los números seleccionados al azar coloca esta fórmula: =SI(LARGO(B5)>1,CONTAR.SI($B$5:$B$34,B5),0) Este condicional cuenta la cantidad de veces que aparece el número aleatoriamente elegido en este listado en caso de que haya algún valor para contar. En general, el resultado de esta fórmula tiene que ser 1. Luego, sobre este rango auxiliar, una fórmula del tipo: =MAX(C5:C1130) Te mostrará si algunas de las fórmulas auxiliares es distinta de 1, lo cual significa que hay algún duplicado. Si esto ocurre, presiona F9, hasta que la fórmula de MAX dé 1. Insisto que cualquier recalculo que haya en la hoja hace cambiar el númeo aleatorio y, por tanto, la conformación de este listado. Una vez que te asegures que no hay duplicados, te conviene, copiar el listado y pegarlo como valores en otro rango, para conservarlo inalterable.