lunes, 25 de marzo de 2013

Cursos Online Excel Avanzado e Iniciación a las Macros... y más. Abril 2013

Presento la edición de Cursos de Excel online de Abril 2013.

Los cursos de Excel abiertos para el proximo Abril son:

Curso Excel Avanzado para versiones 2007/2010

(ver más)

Curso Excel Nivel Medio (Nuevo!!!)

(ver más)

Curso Excel Financiero

(ver más)

Curso Tablas dinámicas en Excel

(ver más)

Curso Macros Iniciación

(ver más)

Curso Macros Medio

(ver más)

Curso preparación MOS Excel 2010 (Examen 77-882)

(ver más)


Esta nueva edición de Cursos de Excel y macros en modalidad elearning (online) dará comienzo el próximo día 1 de Abril de 2013.
Con la confianza de siempre....Anímate!!

También formación Excel a empresas. Explota los recursos a tu alcance (ver más).


Próximamente Curso Microsoft Access.

Informarte sin compromiso en cursos@excelforo.com o directamente en www.excelforo.com.

Recuerda que ahora también imparto clases particulares de Excel en Madrid te interesa?

miércoles, 20 de marzo de 2013

Más de la función HIPERVINCULO de Excel.

Hace algún tiempo escribí una entrada donde explicaba un ejemplo empleando la función HIPERVINCULO (ver).
Pues días atrás se me planteaba un nuevo ejemplo, algo diferente, en el que se hacía necesario emplear de nuevo esta función. En este caso la dificultad radica en no sólo construir el hipervínculo, si no también identificar la ubicación o destino de ese hipervínculo.
La cuestión planteada por un lector fue:

...Tengo en la hoja 1, tengo el rango J13:U22. En la columna J, tengo codigos de productos; En la columna U quiero poner un "buscarv" que valla a buscar a la hoja 2, el codigo ingresado en la columna J y segun ese codigo mostrar un hipervinculo a la ficha del producto...


La idea por tanto es clara, construir un hipervínculo 'dinámico' asociado al valor de una celda.
Partiremos de una tabla origen (Tabla1) que podrá estar en cualquier hoja de nuestro Libro, en mi ejemplo, la veremos en la misma hoja (Hoja1) donde analizaremos nuestra función; en esta Tabla1 encontraremos un listado de productos, que es sobre lo que queremos recaiga el HIPERVINCULO una vez construida nuestra fórmula.
Por otro lado tenemos una segunda tabla (Tabla2) sobre la cual generaremos una fórmula que nos dirija (mediante el hipervínculo) al producto concreto en la Tabla1.

Veamos la disposición de datos:

Más de la función HIPERVINCULO de Excel.



El fin es generar una fórmula en la Tabla2, que nos dirija, mediante hipervínculos a la Tabla1, pero al elemento concreto. La fórmula a añadir en B2:B5 es:
=HIPERVINCULO("#"&"Hoja1!"&DIRECCION(COINCIDIR(A5;Tabla1[Cod];0)+1;COLUMNA(Tabla1);1;1);BUSCARV(A5;Tabla1;2;0))


Procedemos a desglosarla y explicarla.
En primer lugar la función HIPERVINCULO(ubicación; descripción) tiene dos argumentos.
El primero de ellos, por sencillez sería el argumento descripción que es el que muestra el texto del hipervínculo; en nuestro ejemplo he optado por mostrar la Descripción del producto indicado:
BUSCARV(A5;Tabla1;2;0)
con esta fórmula de BUSCARV conseguimos el valor correspondiente a la segunda columna de la Tabla1, es decir, el valor del campo 'Producto'. Es un simple texto, que podríamos cambiar por cualquier otro.



Donde está toda la funcionalidad es en el primer argumento de la función HIPERVINCULO, el argumento Ubicación; en él radica la dirección donde queremos nos lleve nuestro hipervínculo. La fórmula sería:
"#"&"Hoja1!"&DIRECCION(COINCIDIR(A5;Tabla1[Cod];0)+1;COLUMNA(Tabla1);1;1)

Vemos que comenzamos concatenando una almohadilla # al nombre de la hoja destino (en mi ejemplo Hoja1, si la Tabla1 estuviera en la Hoja2, aquí se cambiaría). Recordar que es necesario esa almohadilla o indicar el nombre del Libro entre corchetes!!.
A continuación lo unimos a la función DIRECCION.
Esta función DIRECCION (ya vista en otras entradas del blog) requiere como argumentos la fila y columna de la celda en cuestión, además de un tercer argumento que indicaría el tipo de referencia (absoluta, relativa o mixta), así como el cuarto argumento con el que indicaremos el estilo F1C1 o A1.
Lo interesante de esta función DIRECCION es cómo hemos logrado el número de fila y columna que identifica la celda destino dentro de la Tabla1. La fila la logramos con la función COINCIDIR:
COINCIDIR(A5;Tabla1[Cod];0)+1
que busca en el campo 'Cod' de la Tabla1 la coincidencia del valor buscado. Sumamos +1 para saltar la cabecera de la Tabla.

La columna se localiza con la función COLUMNA aplicada a la Tabla1, lo que nos dirá la posición de la primera columna donde comience la Tabla1:
COLUMNA(Tabla1)


Todo junto nos da el siguiente aspecto, mostrando una celda con una descripción de producto correspondiente al Cod buscado, y sobre todo con la funcionalidad que nos dirije a la celda en cuestión de la Tabla1:

Más de la función HIPERVINCULO de Excel.
haz clic en la imagen


lunes, 18 de marzo de 2013

Curso Excel nivel medio.

Os presento la nueva oferta de Cursos de Excel y Macros en modalidad elearning (online), donde podrás disfrutar y aprender de un nuevo curso que te ofrezco:

Curso Excel Nivel Medio (Nuevo!!!)

(ver más)

El curso ideal para adentrarte en el fascinante mundo de las hojas de cálculo, aprendiendo lo básico y fundamental; con él podrás manejarte en la mayoría de las situaciones más habituales, y desarrollar tu trabajo de una manera más efectiva...

Por supuesto podrás seguir formándote con los demás cursos que imparto...

Curso Tablas dinámicas en Excel

(ver más)

Curso Excel Avanzado para versiones 2007/2010

(ver más)

Curso Macros Iniciación

(ver más)

Curso Macros Medio

(ver más)

Curso preparación MOS Excel 2010 (Examen 77-882)

(ver más)


El programa del nuevo Curso Excel nivel medio es el siguiente, pero puedes informarte sin compromiso en cursos@excelforo.com o directamente en www.excelforo.com:

TEMA 1 - FORMULAS Y FUNCIONES
1. Las fórmulas en excel.
2. Maneras de crear una fórmula.
3. Prioridades en las operaciones.
4. Direccionamiento de celdas.
5. Referencias a celdas y rangos.
6. Las funciones.
7. Importancia de las funciones.
8. Introducir funciones.
9. Biblioteca de funciones.
10. Funciones anidadas.
11. Funciones esenciales.
12. Funciones básicas a conocer.
13. Ejemplos de funciones básicas.
14. Funciones de texto.
15. Ejemplos funciones de texto.
16. Funciones de búsqueda.
17. Ejemplo de funciones de búsqueda.
18. Trabajar con diferentes hojas y libros.
TEMA 2 - AUDITORÍA DE FORMULAS
1. Mensajes de error más frecuentes.
2. Corrigiendo errores.
i. Ventana inspección.
ii. Herramienta de comprobación de errores en fórmulas.
iii. Auditoría de fórmulas.
3. Auditoria de fórmulas.
3.1. Rastrear precedentes y rastrear dependientes.
3.2. Mostrar fórmulas.
3.3. Evaluar fórmula.
3.4. Ventana de inspección.
3.5. Comprobación de errores.
3.6. Referencias circulares.
TEMA 3 - NOMBRES DEFINIDOS
1. Introducción.
2. Formas de crear un nombre.
3. Directrices para los nombres.
4. Utilizar nombres definidos para representar celdas, constantes o fórmulas.
5. Utilizar rótulos de tablas existentes como nombres.
6. El administrador de nombres.
TEMA 4 - GRAFICOS
1. Introducción.
2. Creación de gráficos.
3. Formatos de ejes.
4. Eje principal y secundario.
5. Como se trazan las celdas vacías.
6. Personalización de gráficos.
6.1. Pestaña diseño.
6.2. Pestaña presentación.
6.3. Pestaña formato.
TEMA 5 - ILUSTRACIONES Y OBJETOS
1. Introducción.
2. Ilustraciones.
3. El formato de las ilustraciones.
4. Autoformas.
5. Formato de autoformas.
6. Insertar texto.
7. Gráficos smartart.
TEMA 6 - EXCEL COMO BASE DE DATOS
1. Introducción.
2. Buscar y Reemplazar.
3. Ordenar datos.
4. Filtro de datos.
5. Tablas.
6. Esquemas y Subtotales.
7. Buscar objetivo.
TEMA 7 - ORTOGRAFÍA Y COMENTARIOS
1. La ortografía en nuestras hojas.
2. Los comentarios.


Próximamente Curso Microsoft Access y Curso SQL para Access.

Informarte sin compromiso en cursos@excelforo.com o directamente en www.excelforo.com.

Recuerda que ahora también imparto clases particulares de Excel en Madrid te interesa?

viernes, 15 de marzo de 2013

Compartir un Libro de Excel.

Es una cuestión bastante repetida en el mundo empresarial el poder trabajar varios usuarios simultáneamente sobre el mismo libro de Excel, es decir, compartir un libro de Excel. Sin duda esta utilidad gana fuerza cuando diferentes personas necesitan trabajar al tiempo sobre un mismo libro, que suele estar en una ubicación en la red compartida.
En general sabemos que tal cosa no es posible, ya que Excel nos advierte que el archivo estás siendo usado por otra persona, sin embargo Excel nos ofrece la posibilidad de Compartir libro, y nosotros como propietarios del libro compartido, podremos administrarlo controlando el acceso a éste y resolviendo los cambios que estén en conflicto. Después de incluir todos los cambios, podremos dejar de compartir el libro.

Los pasos para emplear esta herramienta, que tiene algunas limitaciones, como veremos a continuación, son:
En primer lugar abriremos o crearemos un Libro a compartir (cualquiera que tenga interés para varias personas). Con el fichero abierto, y como administradores del futuro Libro compartido, accederemos a la ficha Revisar > grupo Cambios > botón Compartir libro. Esto nos abrirá la ventana diálogo 'Compartir libro':

Compartir un Libro de Excel.


En la pestaña Modificación del cuadro de diálogo Compartir libro, activaremos la casilla Permitir la modificación por varios usuarios a la vez.
En la pestaña de Uso avanzado configuraremos diferentes opciones enfocadas (principalmente) al control de los cambios realizados por los diferentes usuarios del mismo libro compartido:

Compartir un Libro de Excel.


Tras Aceptar se nos abrirá, si es un libro nuevo, la ventana del Explorador para indicar dónde guardar nuestro libro y con qué nombre. En mi ejemplo lo guardaré como 'LibroCompartido.xlsx' en Mis documentos, aunque lo normal será hacerlo en una carpeta de red compartida, y no en un servidor Web:

miércoles, 13 de marzo de 2013

VBA: Funciones de la hoja de cálculo en VBA.

Dedicaré hoy unas líneas para aclarar algo más el uso de funciones en nuestras macros. Es sabido por todos nosotros que podemos generar nuestras propias funciones mediante los procedimientos Function, y que estas UDF (funciones personalizadas) pueden emplearse tanto en la hoja de cálculo como en otros procedimientos. Podemos ver un ejemplo de UDF en ver.
Este aspecto, por lo general suele estar bastante claro.

Sobre lo que voy a hablar en esta entrada es del uso de las funciones estándar de la hoja de cálculo en nuestros procedimientos... hablo de las funciones habituales como COINCIDIR, BUSCAR, PAGO, o cualquier otra de listado de más de 350 funciones existentes en Excel. E igualmente diferenciarlas de las funciones específicas de VBA.


Comenzaremos detallando cómo llamar a las funciones de la hoja de cálculo y la ventaja de usar dichas funciones. En Visual Basic las funciones de hoja de calculo de Excel pueden ejecutarse mediante el objeto WorksheetFunction.
Por ejemplo, para obtener el valor máximo de un rango de celdas, declararíamos una variable 'rng' como un objeto Range y, a continuación, lo estableceríamos como el rango A1:B13 de la hoja 'Hoja1'. Asignamos una segunda variable, 'resp', se asigna al resultado de aplicar la función Max a 'rng'.
Por último, el valor de respuesta se muestra en un cuadro de mensaje.

Sub funcionHojaCalculo()
    Dim rng As Range
    'definimos la variable rng como el rango A1:B13
    Set rng = Worksheets("Hoja1").Range("A1:B13")
    'asociamos una segunda variable 'resp'
    'como el valor máximo del rango anterior
    'empleando la función de hoja de cálculo MAX
    resp = Application.WorksheetFunction.Max(rng)
    'mostramos el resultado en un MsgBox
    MsgBox resp
End Sub


Es fácil identificar qué funciones de hoja de cálculo podemos emplear, ya que al escribir el objeto WorksheetFunction. aparecerá una etiqueta con un desplegable de todas las funciones...
Ojo por que como siempre en nuestro editor de VB, el nombre de las funciones aparecerán en su versión en inglés!!!.

VBA: Funciones de la hoja de cálculo en VBA.


Una ventaja de emplear estas funciones es que son fáciles de implementar en nuestros procedimientos, y con ellas evitamos ciertos desarrollos personalizados que sobrecargarían nuestras macros. En general, siempre que sea posible, es más óptimo emplear estas funciones que escribir algún código que realice la misma acción.

Otra manera de trabajar con nuestras funciones de Hoja de cálculo en nuestros procedimientos, es la de Insertar una función de hoja de cálculo en una celda.
Para insertar una función de hoja de cálculo en una celda, especificaremos la función como el valor de la propiedad Formula del objeto Range correspondiente.
Podemos ver un ejemplo en la siguiente entrada.
O el siguiente ejemplo, en el que la función ALEATORIO (que genera un número aleatorio - RAND en inglés) se asigna a la propiedad Formula del rango B1:D5 de la Hoja1 del libro activo.

Sub InsertarFormula()
    'insertamos en un rango de la hoja de cálculo
    'la función ALEATORIO - RAND en inglés
    Worksheets("Hoja1").Range("B1:D5").Formula = "=RAND()"
End Sub


Ojo por que como siempre en nuestro editor de VB, el nombre de las funciones aparecerán en su versión en inglés!!!.
Si queremos emplear la notacion en el lenguaje de nuestro sistema, emplearemos la propiedad .formulalocal en vez de .formula:

Sub InsertarFormula()
    'insertamos en un rango de la hoja de cálculo
    'la función ALEATORIO
    Worksheets("Hoja2").Range("B1:D5").FormulaLocal = "=ALEATORIO()"
End Sub



Nos queda por hablar de las funciones de VBA. Las funciones de Visual Basic no usan el calificador WorksheetFunction. Una peculiaridad de las funciones de VB es que puede tener el mismo nombre que una función de hoja de cálculo y, sin embargo, podrían dar otros resultados...
Veamos un ejemplo sencillo, donde hemos empleado algunas funciones de VBA (Rnd, Int, Abs o Sgn):

Sub FuncionVBA()
Dim aleatorio As Long
'definimos los valores del intervalo
sup = Application.Max(Range("A1:A10"))
inf = Application.Min(Range("A1:A10"))
'producimos un entero aleatorio en el intervalo dado
aleatorio = Int((sup - inf + 1) * Rnd + inf)
'mostramos el aleatorio en un MsgBox
MsgBox "1:= " & aleatorio

valor = Application.Average(sup, inf)
'con Sgn determino signo de la media
'y luego multiplico por la parte entera del valor absoluto dicha media
aleatorio2 = Sgn(valor) * Int(Abs(valor))
MsgBox "2:= " & aleatorio2
End Sub


En general, en este último uso, habrá que tener especial cuidado en diferenciar propiedades de algún objeto, como por ejemplo, Max, Min o Average, de lo que son estrictamente hablando Funciones de VBA; ya que las primeras requieren la definición del objeto (normalmente Application), frente a las funciones que pueden ser usadas directamente.
Un listado (no completo) de las funciones de Visual Basic más empleadas sería:
FUNCIÓN  DESCRIPCIÓN
Abs Devuelve el valor absoluto de un número
Asc Obtiene el valor ASCII del primer caracter de una cadena de texto
CBool Convierte una expresión a su valor booleano
CByte Convierte una expresión al tipo de dato Byte
CCur Convierte una expresión al tipo de dato moneda (Currency)
CDate Convierte una expresión al tipo de dato fecha (Date)
CDbl Convierte una expresión al tipo de dato doble (Double)
CDec Convierte una expresión al tipo de dato decimal (Decimal)
Choose Selecciona un valor de una lista de argumentos
Chr Convierte un valor ANSI en valor de tipo texto
CInt Convierte una expresión en un dato de tipo entero (Integer)
CLng Convierte una expresión en un dato de tipo largo (Long)
CreateObject Crea un objeto de tipo OLE
CStr Convierte una expresión en un dato de tipo texto (String)
CurDir Devuelve la ruta actual
CVar Convierte una expresión en un dato de tipo variant (Variant)
Date Devuelve la fecha actual del sistema
DateAdd Agrega un intervalo de tiempo a una fecha especificada
DateDiff Obtiene la diferencia entre una fecha y un intervalo de tiempo especificado
DatePart Devuelve una parte específica de una fecha
DateSerial Convierte una fecha en un número serial
DateValue Convierte una cadena de texto en una fecha
Day Devuelve el día del mes de una fecha
Dir Devuelve el nombre de un archivo o directorio que concuerde con un patrón
EOF Devuelve verdadero si se ha llegado al final de un archivo
FileDateTime Devuelve la fecha y hora de la última modificación de un archivo
FileLen Devuelve el número de bytes en un archivo
FormatCurrency Devuelve un número como un texto con formato de moneda
FormatPercent Devuelve un número como un texto con formato de porcentaje
Hour Devuelve la hora de un valor de tiempo
IIf Devuelve un de dos partes, dependiendo de la evaluación de una expresión
InputBox Muestra un cuadro de diálogo que solicita la entrada del usuario
InStr Devuelve la posición de una cadena de texto dentro de otra cadena
InStrRev Devuelve la posición de una cadena de texto dentro de otra cadena pero empezando desde el final
Int Devuelve la parte entera de un número
IsDate Devuelve verdadero si la variable es una fecha
IsEmpty Devuelve verdadero si la variable está vacía
IsError Devuelve verdadero si la expresión es un valor de error
IsNull Devuelve verdadero si la expresión es un valor nulo
IsNumeric Devuelve verdadero si la variable es un valor numérico
Join Devuelve una cadena de texto creada al unir las cadenas contenidas en un arrreglo
LBound Devuelve un tipo Long que contiene el subíndice más pequeño disponible para la dimensión indicada de una matriz.
LCase Devuelve una cadena convertida en minúsculas
Left Devuelve un número específico de caracteres a la izquierda de una cadena
Len Devuelve la longitud de una cadena (en caracteres)
LTrim Elimina los espacios a la izquierda de una cadena
Mid Extrae un número específico de caracteres de una cadena de texto
Minute Devuelve el minuto de una dato de tiempo
Month Devuelve el mes de una fecha
MsgBox Despliega un cuadro de dialogo con un mensaje especificado
Now Devuelve la fecha y hora actual del sistema
Replace Reemplaza una cadena de texto con otra
Space Devuelve una cadena de texto con el número de espacios especidicados
Split Devuelve un arreglo formado for cadenas de texto que formaban una sola cadena
Str Devuelve la representación en texto de un número
Right Devuelve un número especificado de carecteres a la derecha de una cadena de texto
Rnd Devuelve un número aleatorio entre 0 y 1
Round Redondea un número a una cantidad específica de decimales
RTrim Elimina los espacios en blanco a la derecha de una cadena de texto
Second Devuelve los segundos de un dato de tiempo
StrComp Compara dos cadenas de texto
StrReverse Invierte el orden de los caracteres de una cadena
Time Devuelve el tiempo actual del sistema
Timer Devuelve el número de segundos desde la media noche
TimeValue Convierte una cadena de texto a un númer de serie de tiempo
Trim Elimina los espacios en blanco al inicio y final de una cadena de texto
TypeName Obtiene el nombre del tipo de dato de una variable
UBound Devuelve un tipo Long que contiene el mayor subíndice disponible para la dimensión indicada de una matriz.
UCase Convierte una cadena de texto en mayúsculas
Val Devuelve el número contenido en una cadena de texto
Weekday Devuelve un número que representa un día de la semana
WeekdayName Devuelve el nombre de un día de la semana
Year Obtiene el año de una fecha

lunes, 11 de marzo de 2013

VBA: Una función personalizada que muestra el filtro aplicado.

Algunos días atrás un lector preguntaba si existía alguna forma de conocer qué filtros había aplicados en un listado de datos con el Autofiltro aplicado. Obviamente no le servía la visualización directa mediante la etiqueta informativa del Autofiltro, por lo que para obtener dicho dato se hace necesario aplicar algo de código VBA.
En particular trabajaremos con la propiedad Autofilters.Filters.


Partiremos del siguiente listado de datos, con la herramienta Autofiltro ya aplicada:

VBA: Una función personalizada que muestra el filtro aplicado.


Aplicaremos sobre nuestros dos campos algunos criterios de filtro, por ejemplo sobre el Campo1 mostraremos el elemento 'aa' o el 'cc' y en el Campo2 los valores mayores a 250.
Recordemos, como se ve en la imagen, que pasando el cursor por encima del desplegable del campo filtrado, aparece una etiqueta informando del filtro aplicado:

VBA: Una función personalizada que muestra el filtro aplicado.



Sin embargo queremos algo menos 'temporal', algo que se pueda ver en todo momento y sobre todos los campos filtrados al tiempo. Por ello construiremos una función personalizada en VBA (UDF).
Por tanto accederemos al Editor de VBA (alt+F11) e insertaremos un Módulo, y dentro de él el siguiente código:

Function MuestraCriterio(Campo As Range) As String
Dim criterio1 As String
Dim criterio2 As String
'actualizamos la función para cada cambio en la hoja
Application.Volatile

With Campo.Parent.AutoFilter
    'Analizamos el filtro en la columna filtrada
    With .Filters(Campo.Column - .Range.Column + 1)
        'si el campo no tiene filtro, salimos de la función
        If Not .On Then Exit Function
        'si tiene filtro, asignamos el criterio (criteria1) a nuestra variable
        criterio1 = .Criteria1
        'si el operador es AND(Y) entonces componemos una cadena de texto
        If .Operator = xlAnd Then
        criterio2 = " AND(Y) " & .Criteria2
        'si el operador es OR(O) entonces componemos una cadena de texto
        ElseIf .Operator = xlOr Then
        criterio2 = " OR(O) " & .Criteria2
        End If
    End With
End With
'finalizamos uniendo los criterios obtenidos...
MuestraCriterio = Campo & ": " & criterio1 & criterio2
End Function


Observamos su funcionamiento introduciendo en las celdas B14 y C14 nuestra función. En B14:
=MuestraCriterio(B1)
y en C14
=MuestraCriterio(C1)
Haciendo referencia a las celdas de la cabecera o rótulo de nuestro listado de datos sobre el que hemos aplicado el Autofiltro.
Notemos como la función sólo admite un máximo de dos criterios por campo filtrado, puesto que esta es la limitación de la herramienta Autofiltro.
Vemos en la imagen el resultado:

viernes, 8 de marzo de 2013

Formación Excel a empresas.

Cursos de Excel para empresas programados de todos los niveles.
Destinados a aquellos departamentos con necesidades de explotar las hojas de cálculo.
• Cursos personalizados: donde tú decides qué es lo que necesitas.
• o Cursos estándar o general: para aprender diferentes aspectos de Excel.

Puedes informarte y leer más en Formación Excel para empresas por Excelforo.


Por supuesto, puedes optar por la oferta de Cursos de Excel y Macros en modalidad elearning (online):

Curso Excel Financiero

(ver más)

Curso Tablas dinámicas en Excel

(ver más)

Curso Excel Avanzado para versiones 2007/2010

(ver más)

Curso Excel Medio 2007/2010

(ver más)

Curso Macros Iniciación

(ver más)

Curso Macros Medio

(ver más)

Curso preparación MOS Excel 2010 (Examen 77-882)

(ver más)


Con la confianza de siempre....Anímate!!

Exige tu factura... es tu derecho.

jueves, 7 de marzo de 2013

Gráfico combinado de Barras y Columnas en Excel.

Me plantearon recientemente un problema para un ejercicio de unas oposiciones, el problema consistía en llegar a un gráfico donde se cruzaban dos series de datos (una con tipo de gráfico Barras y otra con tipo de gráfico de columnas). Lo que inicialmente parecería algo sencillo, pronto se convirtió en uno de esos problemas que 'tocan' tu amor propio. Además para complicarlo un poco más el ejercicio propuesto para dicha oposición era en la versión de Excel 2003.

Explicaré los pasos para la versión Excel 2003 y en otro post para Excel 2007/2010 (ya que difieren en bastante).
Os mostraré en primer lugar el gráfico al que llegaremos:

Gráfico combinado de Barras y Columnas en Excel.


Observemos las peculiaridades de este gráfico. La imagen corresponde a un gráfico de dos series de datos, una representada por barras y la otra por columnas, además tenemos datos para todos los ejes posibles en un gráfico (Eje vertical y eje vertical secundario, Eje horizontal y Eje horizontal secundario), además con un sentido concreto de orden.

Comenzaremos por los pasos a seguir con Excel 2003.
En primer lugar, tras seleccionar el rango A1:C5, insertaremos un Gráfico tipo Barras.
A continuación señalaremos la Serie de datos llamada 'Vacantes' (serie Roja) y la cambiaremos a Tipo Columnas.
Este será nuestro punto de partida. Fundamental tener localizados cada uno de los ejes:

Gráfico combinado de Barras y Columnas en Excel.


Los siguientes pasos son importantes seguirlos en el orden correcto.
El paso tercero será seleccionar el Eje de valores secundario y acceder a la ventana diálogo de Formato de ejes, donde desmarcaremos la opción Eje de categorías (X) cruz en el valor máximo.
En el cuarto paso seleccionaremos el Eje de Categorías, y accederemos a la ventana diálogo de Formato de ejes, donde marcaremos la opción Categorías en orden inverso.
Esta es nuestra situación ahora mismo:

lunes, 4 de marzo de 2013

Rangos transpuestos: las funciones TRANSPONER y DESREF.

En el último mes me han llegado bastantes consultas sobre la manera de transponer rangos en nuestras hojas de Excel. Claro está que Microsoft Office Excel nos ofrece una forma rápida de trabajar y transponer rangos, con su función TRANSPONER, lógicamente función matricial (para ejecutar presionando Ctrl+Mayusc+Enter).

En esencia el funcionamiento de nuestra función es muy sencillo, sólo es necesario tener presente que TRANSPONER devuelve un rango de celdas vertical como un rango horizontal o viceversa. Recordar en todo momento que TRANSPONER debe especificarse como una fórmula matricial y que el rango 'destino' tenga el mismo número de filas o columnas que el rango de origen.


Por ejemplo, si queremos transponer el rango en columna A1:A10 (de diez filas x una columna), podremos hacerlo matricialmente seleccionando el rango C1:L1 y en la celda activa C1 escribir:
=TRANSPONER(A1:A10)
y presionar Ctrl+Mayusc+Enter en lugar de Enter.


Esta función nos puedes ser útil en diferentes ocasiones. En el ejemplo de hoy construiremos un informe resumen basado en datos de diferentes hojas de un mismo libro de trabajo de Excel. En este informe completaremos, en función a un dato de periodicidad (Mensual, Trimestral o Anual) y al mes correspondiente, datos de servicios a prestar.
Para esta tarea empelaremos las funciones TRANSPONER, DESREF, INDIRECTO y Nombres definidos.


Veamos los datos con que contamos. Tenemos un Libro con cuatro hojas: Resumen, Mensual, Trimetral, Anual. En las hojas 'Mensual', 'Trimetral' y 'Anual' tenemos los listados por mes a prestar según la periodicidad contratada:

Rangos transpuestos: las funciones TRANSPONER y DESREF.


He asignado diferentes Nombres definidos para distintas partes de esas hojas:
ene_Anual =Anual!$B$2
ene_Mensual =Mensual!$B$2
ene_Trimestral =Trimestral!$B$2
feb_Anual =Anual!$B$6
feb_Mensual =Mensual!$B$8
feb_Trimestral =Trimestral!$B$7
mar_Anual =Anual!$B$11
mar_Mensual =Mensual!$B$13
mar_Trimestral =Trimestral!$B$11

Fijémosnos que los Nombres hacen referencia a una sola celda, la primera de cada grupo de mes en las tres hojas de periodicidad. Esto lo hemos hecho así para poder conseguir, mediante el uso de DESREF, un rango dinámico (aunque hay formas más sencillas de conseguirlo, por ejemplo, trabajando con Tablas).


Además disponemos de la hoja principal 'Resumen' donde completaremos con los valores anteriores:

Rangos transpuestos: las funciones TRANSPONER y DESREF.


El objetivo es completar los rangos D3:G8, H3:K8 y L3:O8 con sus valores correspondientes por Periodicidad, según la hoja del Libro donde se encuntre, y según el mes dentro de cada hoja.

La función buscada es:
=TRANSPONER(DESREF(INDIRECTO(D$2&"_"&$C3);;;CONTAR.SI(INDIRECTO($C3&"!$A:$A");D$2);1))
que aplicaremos por rangos horizontales de cuatro columnas de ancho, esto es, al rango D3:G3, D4:G4, etc.


Tras copiar y pegar en nuestro informe esto es lo que vemos: