Hola a todos,
Hace unos días recibí una consulta en la que me preguntan si es posible » ir generando columnas sin que se repitan los números entre columnas y filas».
Aunque la pregunta es para VBA, la respuesta la voy a expresar en Typescript y me voy a ceñir a la consulta que me indican (generar columnas sin que existan elementos repetidos tanto a nivel columna como fila.
Para realizar esta tarea, el código en typescript es el siguiente:
function main(workbook: ExcelScript.Workbook) {
var nFilas: number;
var nColumnas: number;
var miMatriz: number[][];
var numero: number;
var fila: number;
var columna: number;
var nRepetido: boolean;
var miHoja = workbook.getWorksheet("Hoja1");
nFilas = +miHoja.getRange("I2").getValue() // filas
nColumnas = +miHoja.getRange("J2").getValue(); // columnas
miMatriz = [];
for (fila = 0; fila < nFilas; fila++) {
miMatriz[fila] = [];
for (columna = 0; columna < nColumnas; columna++) {
nRepetido = true;
while (nRepetido) {
numero = Math.floor(Math.random() * (nFilas * nColumnas)) + 1;
if (!buscaRep(numero, miMatriz)) {
nRepetido = false;
miMatriz[fila][columna] = numero;
}
}
}
}
var miRango = miHoja.getRange("A1").getResizedRange(nFilas - 1, nColumnas - 1);
miRango.setValues(miMatriz);
}
function buscaRep(number: number, arr: number[][]): boolean {
for (let i = 0; i < arr.length; i++) {
for (let j = 0; j < arr[i].length; j++) {
if (arr[i][j] === number) {
return true;
}
}
}
return false;
}
![](https://i0.wp.com/excelsignum.com/wp-content/uploads/2023/06/GENERAR-COLUMNAS-Y-FILAS-SIN-NUMEROS-REPETIDOS-UTILIZANDO-TYPESCRIPT.png?resize=1024%2C495&ssl=1)
El código va generando columnas y filas con números aleatorios que se van añadiendo a una matriz y que comprobamos mediante una función si el número ya existe.
De esta forma generamos filas y columnas sin elementos repetivos.
Si tengo tiempo programaré la misma rutina en VBA.
Espero que sea de utilidad.
¿Te ha resultado de interés?, puedes apoyar a Excel Signum con una pequeña donación.
¡¡Muchas gracias!!
Mediante la suscripción al blog, la realización comentarios o el uso del formulario de contacto estás dando tu consentimiento expreso al tratamiento de los datos personales proporcionados según lo dispuesto en la ley vigente (LOPD). Tienes más información al respecto en esta página del blog: Política de Privacidad y Cookies
Muchas gracias por responder tan rápido. Nunca he probado Typescript pero parece el futuro.
Por ahora me inclino a VBA, pero ya se vera.
Gracias por los aportes, a los aficionados mayorcitos como yo, nos viene fenomenal. Se aprende mucho