Cómo crear un BUSCARV personalizado con Google Apps Script

En este tutorial vamos a aprender a crear una función personalizada en Google Sheets que replica el comportamiento de BUSCARV, pero usando código con Google Apps Script. Esto nos permitirá hacer búsquedas más flexibles y adaptadas a nuestras necesidades, como buscar la última ocurrencia de un valor en lugar de la primera, o buscar valores a la izquierda, algo que la función tradicional no permite. Además, veremos cómo integrar esta función con botones y disparadores para automatizar su ejecución.

Ahora vamos a explicar paso a paso cómo construir esta función personalizada BUSCARV con código, y las ventajas que tiene frente a la función estándar.

¿Por qué crear un BUSCARV con código?

La función BUSCARV que todos conocemos es muy útil, pero tiene limitaciones. Por ejemplo, siempre busca la primera coincidencia y solo puede buscar valores a la derecha de la columna clave. Con código podemos superar esas limitaciones y crear funciones personalizadas que:

  • Busquen la última ocurrencia de un valor en un rango.
  • Permitan buscar valores a la izquierda o en cualquier dirección.
  • Se adapten a rangos dinámicos sin tener que fijar el tamaño.
  • Se integren con botones o eventos para actualizar resultados automáticamente.

Preparando los datos para la función BUSCARV personalizada

Para este ejemplo usaremos una tabla con dos columnas: País y Población. Tendremos una lista desplegable con los países para seleccionar y queremos que, al elegir un país, se muestre su población automáticamente.

PaísPoblación
Indonesia273,523,615
Colombia50,372,424
India1,380,004,385
Japón126,476,461

La idea es que, al seleccionar un país en la celda B2, obtengamos la población en la celda B3 usando la función personalizada que vamos a crear.

Creando la función BUSCARV con Google Apps Script

Para crear nuestro BUSCARV con código, abrimos el editor de secuencias de comandos en Google Sheets (Extensiones > Apps Script) y comenzamos a construir la función paso a paso.

Primero, conectamos con la hoja donde están los datos y leemos el valor del país que queremos buscar (por ejemplo, en B2). Luego, obtenemos toda la tabla de datos donde haremos la búsqueda.

Para entender cómo funcionan los arreglos que obtenemos con getValues(), hacemos un registro (log) para ver la estructura. Esto nos ayuda a detectar que los datos vienen como un arreglo de filas, donde cada fila es un arreglo con las columnas.

Para buscar la posición del país en la tabla, usamos el método map() de JavaScript para crear un arreglo con solo los nombres de países, y luego usamos indexOf() para obtener la posición del país buscado.

function BUSCARV() {
  var hoja = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("BUSCARV");
  var valorBuscado = hoja.getRange("B2").getValue();
  var hojaDatos = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Datos");
  var tablaBusqueda = hojaDatos.getRange("A2:B243").getValues();

  // Crear una lista solo con los países (columna 0)
  var listaPaises = tablaBusqueda.map(function(fila) {
    return fila[0];
  });

  // Buscar la posición del país buscado
  var indice = listaPaises.indexOf(valorBuscado);

  if (indice === -1) {
    return "No encontrado";
  }

  // Obtener la población (columna 1) en la fila encontrada
  var poblacion = tablaBusqueda[indice][1];

  // Poner el resultado en la celda B3
  hoja.getRange("B3").setValue(poblacion);
}

Con esta función básica ya podemos hacer un BUSCARV personalizado que nos trae la población según el país seleccionado.

Ejecutando la función con botón o evento

Podemos ejecutar esta función de varias formas:

  • Con un botón: Insertamos una imagen o botón en la hoja, le asignamos la secuencia de comandos BUSCARV y al hacer clic se ejecuta.
  • Con un disparador onEdit: Creamos una función que detecta cuando se edita la celda B2 y automáticamente ejecuta BUSCARV.
function onEdit(e) {
  var rango = e.range;
  var hoja = rango.getSheet();
  if (hoja.getName() === "BUSCARV" && rango.getA1Notation() === "B2") {
    BUSCARV();
  }
}

Así, cada vez que cambiemos el país en B2, la población se actualizará automáticamente.

Haciendo un BUSCARV para encontrar el último valor

Un caso muy común es querer buscar no la primera ocurrencia sino la última, por ejemplo, para obtener el último precio o la última fecha de compra de un cliente.

Para esto creamos una función similar, pero en lugar de usar indexOf() usamos un método que busca desde el final hacia el principio, llamado lastIndexOf().

function BUSCARV_ULTIMO(valorBuscado, rangoDatos, columna) {
  var hojaDatos = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(rangoDatos);
  var tabla = hojaDatos.getRange("A2:C").getValues();

  // Crear lista con la columna de búsqueda (por ejemplo, clientes)
  var listaBusqueda = tabla.map(function(fila) {
    return fila[0];
  });

  // Buscar la última posición donde aparece el valor
  var indice = listaBusqueda.lastIndexOf(valorBuscado);

  if (indice === -1) {
    return "No encontrado";
  }

  // Retornar el valor en la columna deseada (restamos 1 porque columnas inician en 0)
  return tabla[indice][columna - 1];
}

Esta función la podemos usar para buscar por ejemplo el último valor de compra de un cliente en una tabla de ventas.

Consejos para hacer tu BUSCARV personalizado más robusto

Algunas recomendaciones para mejorar tus funciones personalizadas:

  • Usa rangos dinámicos para que la función se adapte a tablas que crecen o cambian de tamaño.
  • Permite pasar parámetros para que la función sea flexible y pueda usarse en diferentes hojas y tablas.
  • Agrega validaciones para manejar casos donde no se encuentre el valor buscado.
  • Optimiza el código para que sea fácil de mantener y entender.

Conclusión

Hemos visto cómo crear una función BUSCARV personalizada usando Google Apps Script que nos permite superar limitaciones de la función estándar. Aprendimos a buscar un valor en una tabla, a obtener la posición con indexOf() y lastIndexOf(), y a ejecutar la función desde un botón o con un disparador onEdit para automatizar el proceso. También vimos cómo hacer que la función sea más flexible y robusta para distintos escenarios.

Con estas bases, puedes empezar a crear tus propias funciones personalizadas para Google Sheets que se adapten a tus proyectos y necesidades específicas, ahorrándote tiempo y trabajo repetitivo.

Si quieres aprender a usar Google Forms y Google Sheets desde cero, te invito a tomar un curso gratis de 2 horas.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

JuanSGuzman
Resumen de privacidad

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.