lunes, marzo 10, 2014

Hojas Excel con traducción automática

Recientemente tuve que crear una hoja que incluyera la posibilidad de presentar el contenido en distintos idiomas.
La idea era usar una única hoja, de hecho un dashboard, pero que el usuario pudiera elegir en qué idioma presentar los textos de las celdas y demás objetos en la hoja/dashboard.

Este ejemplo muestra el funcionamiento

captura de pantalla


Como puede apreciarse, cuando el usuario elige un idioma apretando alguno de los botones de opción, los titulas de los cuadros de datos y del gráfico cambian.

La traducción se puede hacer fácilmente usando la función INDICE, pero la técnica varía si se trata de una celda o de un objeto. Esto es lo que mostraré en esta nota.

Para hacerlo empezamos por crear un glosario, una tabla con los textos de las palabras que queremos traducir en los distintos idiomas. En nuestro caso creamos un glosario con Castellano, Inglés e Italiano

glosario

En la hoja del dashboard agregamos los botones de opción para la elección de los idiomas. En las definiciones del botón lo asociamos a una celda. Es una buena práctica usar las columnas de la izquierda como columnas auxiliares, de manera que podamos ocultarlas. En nuestro caso vinculamos los botones a la celda A3

Definicion del boton de opcion
Otra buena práctica en Excel es definir un nombre que se refiera a la celda; en nuestro caso definimos el nombre "cel_Idioma" que se refiere a la celda A3

nombre definido

También es recomendable enmarcar los botones de opción en un cuadro de grupos.

Cuando el usuario elige el Castellano, el valor de "cel_Idioma" es 1; si elige English, será 2 y si elige Italiano será 3.

En la celda F3 de la hoja dashboard ponemos esta fórmula:

=INDICE(glosario!B6:D6,cel_Idioma)
formula para traducir

Esta fórmula usa el valor de "cel_Idioma" para extraer el texto en el idioma correspondiente en la tabla Glosario.

Pregunta con premio (copia gratuita totalmente funcional del Planificador de Proyectos) a las primeras tres respuestas correctas:

¿Que tiene de particular la fórmula en la celda F3 del ejemplo?

 La misma técnica empleamos para todas las celda cuyo contenido queremos traducir.

Si nos fijamos en el título de la lista desplegable del gráfico, veremos que se trata de un cuadro de texto "montado" sobre una celda.

cuadro de texto

No podemos ligar un cuadro de texto, o cualquier otra forma gráfica, a una fórmula pero si podemos hacerlo a una referencia. El rodeo para lograr el efecto de traducción consiste en poner la fórmula con la función INDICE que extrae la traducción del Glosario en una celda de la columna A (de manera que luego podamos ocultarla).

Creamos un cuadro de texto (o cualquier otra forma) y la superponemos en la celda adecuada (K2 en nuestro ejemplo). Luego seleccionamos el cuadro de texto y en la barra de las fórmulas ponemos =A9 (o ponemos = y luego hacemos un clic en la celda A9)

ligar forma a celda

La celda A9 contiene la fórmula

=INDICE(glosario!B14:D14,cel_Idioma)

Otra situación es si usamos tablas dinámmicas. A pesar que las tablas ocupan celdas, no podemos introducir fórmulas en los encabezamientos de las áreas (si podemos cambiar el texto).
Para superar este problema usamos nuevamente cuadros de texto ligados a celdas ocultas que contienen la fórmula con la función INDICE. Para mimetizar los cuadros de texto con el resto de la tabla le damos un relleno sólido con el mismo color que la tabla

tabla dinamica

En este video podemos ver el dashboard en funcionamiento



10 comentarios:

  1. Jorge, con respecto a tu pregunta ¿Que tiene de particular la fórmula en la celda F3 del ejemplo?, pues no estoy muy seguro pero creo que es que no hayas usado el argumento "numero de columna" no?

    ResponderBorrar
  2. Hmmm, estás muy cerca pero no exactamente en el lugar. Veremos si hay otras respuestas.

    ResponderBorrar
  3. Buenos, días:
    Creo que la respuesta es lo contrario. No se ha usado el argumento "número de fila". Supongo que como la referencia es una sola fila, la función toma el argumento automáticamente como el número de columna.

    ResponderBorrar
  4. Hola:
    La función INDICE se está usando en el modo vectorial.
    Saludos

    ResponderBorrar
  5. Hola Jorge.

    Respecto de tu pregunta:
    ¿Que tiene de particular la fórmula en la celda F3 del ejemplo?

    =INDICE(glosario!B6:D6,cel_Idioma)

    La celda $A$3 (nombrada como cel_Idioma) da la referencia de columna (castellano, ingles o italiano), y el rango glosario!B6:D6 hace referencia a otra hoja que contiene el glosario, ya tiene fija la fila, es decir la # 6. con esto se logra tener fija la palabra "vendedor" en los diferentes idiomas.

    Entonces, cuando se elige el botón de opción "castellano", tras cortinas está dando la referencia "1" para que la función devuelva la referencia de columna 1, es decir "castellano"; y como mencioné anteriormente, la fila ya se encuentra fijada (6= vendedor, salesman o venditore).

    Espero haber sido claro. Debo mencionar que la función Indice es una de mis favoritas

    Un saludo...















    ResponderBorrar
  6. En la sintaxis Forma de Referencia (no matricial) de la función INDICE, el parámetro Ref es obligatorio, y puede hacer referencia a uno o varios rangos de celdas como en el caso que Jorge esta utilizando señalando a la hoja glosario rango B6:D6 y una de las opciones par Ref, es que si el área del argumento Ref (desde donde devolverá los valores o resultados buscados o esperados ), es una SOLA FILA -como es en este caso-, el parámetro num_fila es opcional, por lo que si probamos escribir la fórmula de la siguiente manera:
    =INDICE(glosario!B6:D6;;cel_idioma) -;; representa la misma fila para los 3 valores- excel sigue funcionando perfectamente bien.
    Igualmente se pueden ensayar:
    =INDICE(glosario!B2:D2;0;cel_idioma)
    =INDICE(glosario!B2:D2;1;cel_idioma) ...
    y notarán que aun asi es correcto el uso de la fórmula.
    Jorge usa la forma mas sencilla, que Excel la reconoce perfectamente bien devolviendo alguno de los tres valores indicados por el nombre cel_idioma al pasar como argumento los valores 1,2,3 de las casillas de selección.

    No se está usando la forma matricial en vista de que no se "ven" los corchetes { }.

    ResponderBorrar
  7. Perdón.. se me escapó el B2:D2 ... siempre es B6:D6 , disculpen.

    ResponderBorrar
  8. OK, en relación a la pregunta:

    Nelson dio en el clavo, al referirse a un rango "horizontal", INDICE interpreta el argumento como indicador de columna.

    Mauricio dió una descripción del funcionamiento más que una explicación, pero la acepto como respuesta.

    Alfredo: creo que falta mostrar que se puede prescindir totalmente del argumento fila, sin señalarlo como ;;. Pero también acepto la respuesta.

    Juan estuvo muy cerca pero no lo suficiente.

    Nelson, Mauricio y Alfredo se hacen acreedores al premio.Serán mencionados en la nota que estoy preparando sobre la función INDICE y recibirán su premio en cuanto reciba las direcciones de mail (mandarlas a la dirección que figura en el enlace Ayuda en la parte superior de la plantilla).

    ResponderBorrar
  9. ¿Mi respuesta no fue acertada? La funcion INDICE usada en modo vectorial es lo que se está usando en este caso.

    ResponderBorrar
  10. Hola Roger, más que equivocada la consideré imprecisa. En la ayuda en línea de Excel puedes ver que la función está definido en dos formas de uso: matricial y referencia. No se menciona la forma vectorial, que es un caso particular de la forma matricial. Hubiera aceptado tu respuesta como correcta si hubieras agregado explicado el concepto de "vectorial".

    ResponderBorrar

Nota: sólo los miembros de este blog pueden publicar comentarios.