Excel define cuatro tipos de operadores: aritméticos, de comparación, texto y referencia.
Los dos primeros son los más conocidos, como el ya mencionado suma (+) o multiplicación (*) entre los aritméticos y mayor que (>) o menor que (<) entre los de comparación. Existe un único operador de texto, el "&", que nos permite unir cadenas de texto. Los operadores de referencia son los menos conocidos. Incluyen - los dos puntos (":"), el operador de rango que crea una referencia a todas las celdas incluidas entre dos referencias (por ejemplo SUMA(A1:A10) suma todos los valores entre las celdas de referencia, ellas incluidas). - La coma (","), o punto y coma (";") dependiendo de las definiciones del sistema, que es el operador de unión. Este operador combina referencias múltiples en una referencia (por ejemplo SUMA(A1,C1,D1). - El espacio que es el operador de intersección y genera una referencia a celdas comunes a dos rangos. Este último es el menos conocido, y utilizado, de los operadores de Excel. Supongamos esta tabla
La fórmula en la celda A5 es "=B1:B3 A2:C2". La intersección entre ambos rangos, es decir la celda común a ambos, es B2 cuyo valor aparece en la celda A5.
Veamos ahora una aplicación más o menos práctica. Supongamos esta tabla de cotizaciones del peso argentino
Con las funciones INDICE y COINCIDIR podemos construir una tabla de cotizaciones cruzadas
En la celda B9 ponemos la fórmula
=INDICE(cambio,COINCIDIR($A9,monedas,0))/INDICE(cambio,COINCIDIR(B$8,monedas,0))
Que luego copiamos al resto de la tabla. Como pueden ver hemos definidos los distintos rangos como nombres:
cambio =Hoja1!$B$2:$B$5
monedas =Hoja1!$A$2:$A$5
Como se puede ver en la tabla, la relación entre el euro y la libra esterlina aparece en la intersección de los rangos C9:C12 y B11:E11. Es decir, la fórmula
=(C9:C12 B11:E11)
da como resultado 1.4759, la cotización del euro respecto a la libra. El operador de esta fórmula es el espacio entre los dos rangos.
Ahora podemos crear un modelo dinámico que nos ayude a calcular las tasas de cambio entre las distintas monedas. Para ello definimos nombres que contengan los rangos "verticales" y los rangos "horizontales" de cada moneda
Dolar_H =Hoja1!$B$9:$E$9
Dolar_V =Hoja1!$B$9:$B$12
Euro_H =Hoja1!$B$10:$E$10
Euro_V =Hoja1!$C$9:$C$12
Libra_Esterlina_H =Hoja1!$B$11:$E$11
Libra_Esterlina_V =Hoja1!$D$9:$D$12
Real_H =Hoja1!$B$12:$E$12
Real_V =Hoja1!$E$9:$E$12
Creamos esta tabla, donde en las celdas B16 y B17 ponemos una lista desplegable usando Validación de Datos—Lista—monedas
En la celda B18 escribimos esta fórmula:
=INDIRECTO(B16&"_V") INDIRECTO(B17&"_H")
INDIRECTO toma la cadena de texto formada por la moneda escogida a la que le agregamos _V y _H para generar el nombre del rango. Ambas funciones INDIRECTO están separadas por un espacio que funciona como operador de intersección. El resultado es la celda común a los dos rangos definidos por las funciones INDIRECTO.
Ahora podemos agregar una funcionalidad más a nuestro modelo, usando macros de tipo eventos, tal como hicimos en la nota de ayer sobre como ingresar fechas con separadores
.
En este caso queremos que cuando seleccionamos una tasa de cambio en la tabla, esta reciba un fondo de color celeste y los nombres de las monedas (los encabezamientos de la columna y la fila) un fondo de color gris.
Para esto usamos un evento Worksheet_SelectionChange. Abrimos el editor de Vba (Alt+F11). Seleccionamos la Hoja1 (Sheet1) y en el área de código escribimos esta rutina:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim rngTabCurr As Range
Set rngTabCurr = Range("A8:E12")
If Union(Target, rngTabCurr).Address = rngTabCurr.Address Then
Application.EnableEvents = False
rngTabCurr.Interior.ColorIndex = xlNone
Range(Target.Address).Interior.ColorIndex = 20
Cells(Target.Row, 1).Interior.ColorIndex = 15
Cells(8, Target.Column).Interior.ColorIndex = 15
Application.EnableEvents = True
End If
End Sub
Esta técnica puede ser muy útil en tablas de cierto tamaño.
Categorías: Funciones&Formulas_, Varios_
Technorati Tags: Excel
Saludos.
ResponderBorrarMe parece que te faltó incluir un Else en la sentencia.
Hola
ResponderBorrarno creo (de hecho el evento funciona). No se necesita un Else porque el evento sólo funciona si se cumple la condición que la celda activa (Target) pertenece al rango de la tabla.
Si esta condición no se cumple, el evento no se "dispara".
La sentencia
Application.EnableEvents = False
está para impedir una "reacción en cadena"
luego
rngTabCurr.Interior.ColorIndex = xlNone
elimina todos los fondos de las celdas de la tabla
las últimas tres son las que dan el formato a las celdas relevantes.
Muy buena página.. Tengo un problema: tengo una planilla, en una celda por ej. tengo volumen de ventas con un comentario. Cuando esto lo exporto a una tabla dinámica, desaparece el comentario y no me deja agregar ningun otro. La pregunta sería: se pueden utilizar comentarios en las celdas de una tabla dinámica? Gracias...
ResponderBorrarNo, no se pueden incluir comentarios en celdas "ocupadas" por tablas dinámicas.
ResponderBorrarGracias por el comentario.
es todo una maravilla
ResponderBorrar