En  #GoogleSheets resulta útil en ocasiones repetir una cadena de texto (constante o mediante su correspondiente referencia) en un número N de filas o columnas adyacentes. O quizás entubar el resultado en otras funciones de tipo matricial. Esto se puede conseguir usando de manera astuta estas funciones y operadores:

  • & (concatenar elementos)
  • REPETIR()
  • SPLIT()
  • TRANSPONER()
=TRANSPONER( SPLIT( REPETIR( A3 & "-" ; A4 ) ; "-" )) [A3 = valor, A4 = N]
Añadimos como sufijo un carácter arbitrario (
Añadimos como sufijo un carácter arbitrario (-), que no debe formar parte del elemento a repetir, para trocear (SPLIT) la cadena resultante de la repetición (REPETIR) y disponer cada uno de sus fragmentos en una celda. El resultado es un vector fila, que podemos transformar en columna, si lo deseamos, mediante TRANSPONER().

Pero cuando se construyen fórmulas complejas esto puede suponer un engorro innecesario que reduce la legibilidad de la expresión (small is beautiful). Veamos cómo resolverlo por medio de una función propia creada usando #AppScript que extiende en filas *o* columnas una constante o valor referenciado de cualquier tipo:

=REPETIRFC( A3 ; A4 ; "FIL" ) [A3 = valor, A4 = N, FIL = repetir en FILas]
Fx personalizada REPETIRFC(valor; n_repeticiones; "FIL "| "COL")
Fx personalizada REPETIRFC(valor; n_repeticiones; "FIL "| "COL")

No obstante, podemos generalizar la función GAS anterior y construir una nueva capaz de rellenar tanto filas como columnas situadas abajo y/o a la derecha de la celda en la que se encuentre la fórmula:

=RELLENAR( A3 ; A4 ; 1 ) [ A3 = valor, A4 = nfilas, 1 = ncolumnas]
=RELLENAR( A3 ; A4 ; 5 ) [ A3 = valor, A4 = nfilas, 5 = ncolumnas]
Fx personalizada RELLENAR(valor, nfilas, ncolumnas)
Fx personalizada RELLENAR(valor, nfilas, ncolumnas)

Estas dos funciones, REPETIRFC() y RELLENAR() forman parte de la nueva versión de mi complemento para hojas de cálculo HdC+, cuya actualización espero publicar en breve.

Entretanto, puedes utilizarlas simplemente copiando este código GAS en el editor de código (Herramientas > Editor de secuencias de comandos) de cualquier hoja de cálculo.

/**
* Rellena una rango de celdas con un elemento determinado.
*
* @param {"Calificación"} elemento
* Elemento (número, cadena o referencia a celda única) con el que rellenar rango de celdas.
*  
* @param {5} nfilas
* Nº de filas a rellenar.
*
* @param {3} ncolumnas
* Nº de columnas a rellenar.
*
* @return vector fila, columna o matriz
*
* @customfunction
*
* (c) Pablo Felip @pfelipm GNU GPL v3
*/

function rellenar(elemento, nfilas, ncolumnas) {
 
 var resultadoC = [],
     resultado  = [],
     i;
 
 // Control de parámetros
 
 if (!elemento) {  
   resultado = 'Falta elemento';
 }
 else if (typeof nfilas != 'number') {
   resultado = 'Nº filas no es número';
 }
 else if (nfilas < 1 && typeof nfilas == 'number') {
   resultado = 'Nº filas debe ser > 0';
 }
 else if (typeof ncolumnas != 'number') {
   resultado = 'Nº columnas no es número';
 }
 else if (ncolumnas < 1 && typeof ncolumnas == 'number') {
   resultado = 'Nº columnas debe ser > 0';
 }
 else {
 
   // ¡Adelante!

   for (i = 0; i < ncolumnas; i++) {
     resultadoC.push (elemento);
   }  
   
   for (i = 0; i < nfilas; i++) {          
     resultado.push (resultadoC);
   }
 }
 
 return resultado;  
 
}

/**
* Repite un elemento el nº de veces indicado en filas y columnas contiguas.
*
* @param {"Calificación"} elemento
* Elemento a repetir (numérico, cadena o referencia a celda única).
*  
* @param {5} veces
* Nº de veces a repetir.
*
* @param {"fil" | "col"} modo
*
*
* @return vector fila o columna
*
* @customfunction
*
* (c) Pablo Felip @pfelipm GNU GPL v3
*/

function repetirfc(elemento, veces, modo) {
 
 var resultado;
 var i;
 
 // Control de parámetros
 
 if (!elemento) {  
   resultado = 'Falta elemento';
 }
 else if (veces < 2 && typeof veces == 'number') {
   resultado = 'Repeticiones debe ser > 1';
 }
 else if (typeof veces != 'number') {
   resultado = 'Repeticiones no es número';
 }
 else if (!modo) {
   resultado = 'Falta modo';
 }
 else {
 
   // ¡Adelante!
   
   switch (modo.toLowerCase()) {
 
     // extender en filas
 
     case 'fil':
     
       resultado =[];      
       for (i = 0; i < veces; i++) {          
         resultado.push (elemento);
       }
       break;
     
     // extender en columnas
     
     case 'col':
     
       resultado =[[]];      
       for (i = 0; i < veces; i++) {
         resultado[0].push (elemento);
       }  
       break;
     
     default:
     
       resultado = 'Modo desconocido';    
   }
 }
 
 return resultado;  
 
}