Saltar hasta el contenido principal
Preguntado el mes pasado

¿Aguién sabe si en AppScript hay una manera de contar repeticiones en un array o en una lista? De momento lo que consigo es hacer el conteo directamente en una HdC y luego referenciar la celda con la cuenta en una variable. Gracias

Inscríbete en la comunidad GEG Spain para realizar preguntas y pedir ayuda a la comunidad.

Hola, Michael.

Se puede hacer de muchas maneras, aquí una posible implementación que explota los "mapas" de JavaScript:

/**
* Cuenta el nº de veces que se repite un elemento dentro de un vector
* @param {Array} lista
* @returns {Array} Vector de pares [elemento, nº de repeticiones]
*/
function contarElementosAux(lista) {
  let repeticiones = new Map();
  lista.forEach(elemento => {
    const elementos = repeticiones.get(elemento);
    if (elementos == undefined) {
      repeticiones.set(elemento,1);
    } else {
      repeticiones.set(elemento, elementos + 1);
  }});
  return [...repeticiones];
}

function test() {
  const vector = [1, 2, 3, 4, 2, 5, 6, 2, 1, 4, 5];
  console.info1('Lista de elementos: ', vector);
  console.info1('Resultado: ', contarElementosAux(vector));
}
¿Aguién sabe si en AppScript hay una manera de contar repeticiones en un array o en una lista?  De momento lo que consigo es hacer el conteo directamente en una HdC y luego referenciar la celda con la cuenta en una variable. Gracias

Y con mínimos cambios esto se puede transformar en una función personalizada para hojas de cálculo que cuenta cuántas veces se repiten los elementos de un intervalo de celdas (no necesariamente solo vector fila o columna):

/**
* Función personalizada para hdc:
* Cuenta el nº de veces que se repite un elemento dentro de un intervalo de celdas
* @param {A1:A10} lista de elementos
* @returns Vector de pares [elemento, nº de repeticiones]
* @customfunction
*/
function CONTARELEMENTOS(lista) {
  lista = lista.flat().filter(elemento => elemento != '');
  let repeticiones = new Map();
  lista.forEach(elemento => {
    const elementos = repeticiones.get(elemento);
    if (elementos == undefined) {
      repeticiones.set(elemento,1);
    } else {
      repeticiones.set(elemento, elementos + 1);
    }
  });
  return [...repeticiones];
}
Fx personalizada para hojas de cálculo.
Fx personalizada para hojas de cálculo.