Archivos de la categoría Excel

Truco Excel. Función para identificar el color de una celda

En alguna entrada anterior ya vimos como identificar el color de una celda con Excel. Recientemente me trasladaron una duda, se trataba de realizar una acción determinada si el color de la celda era distinto. Algo muy habitual cuando realizas alguna validación visual y marcas celdas con otro color. La solución es sencilla, se trata de crear nuestra propia función que identifique el color de la celda:

Function color_celda(celda As Range)
color_celda = celda.Interior.Color
End Function

En este caso podríamos realizar funciones del tipo =SI(color_celda(A1)<> 16777215; ACCION1; ACCION2) además podemos darle otra vuelta de tuerca y si deseamos ordenar por colores podemos hacer:

Function color_orden(celda As Range)
color_orden = celda.Interior.ColorIndex
End Function

Establecemos un orden de colores y podemos realizar más acciones. Un truco sencillo que puede ayudar a las intervenciones manuales sobre nuestros libros de Excel. Saludos.

Truco Excel. Insertar imágenes con Visual Basic

Si deseáis insertar una imagen en Excel desde Visual Basic mediante una macro tenéis que ejecutar un código similar a este:


Sub inserta_imagen(hoja)
Sheets(hoja).Select
ActiveSheet.Pictures.Insert("C:\grafico.png").Select
With Selection.ShapeRange
.Top = Range("B5").Top
.Left = Range("B5").Left
End With
End Sub

En una hoja de vuestro libro de Excel insertáis el archivo especificado. Luego lo ubicáis donde sea necesario. En el ejemplo que os he puesto en la celda B5. Truco sencillo, saludos.

Truco Excel. Gráficos de dispersión que identifican los puntos

 

Gráfico Dispersión con colores Excel
Gráfico Dispersión con colores Excel

Yo no sé hacer gráficos de dispersión con Excel en los que se identificaran los puntos mediante un color, es necesario programar en visual basic para hacerlo. Imagino que se podrá hacer de forma más elegante pero hoy quería mostraros que esa tarea se puede llevar a cabo mediante macros. Los datos que tenemos tienen un valor para X, un valor para Y y un valor que nos identifica el grupo de cada registro. En el ejemplo que os voy a adjuntar se identifican dentro de la nube de puntos aleatorios 2 grupos marcados con un 0 o un 1, por lo cual tendremos 2 colores para identificar esos puntos. ¿Cómo variamos los colores? Sencillo, una macro recorre punto a punto y pone otro color si pertenece al grupo 1, los que pertenezcan al grupo 0 tendrán el color por defecto. Este color por defecto será el negro y el color para los 1 será el rojo. El código de la macro es:

Sub colores()
'
' colores macro creada por www.analisisydecision.es

On Error GoTo noselecciona

'Establecemos el color inicial
ActiveChart.SeriesCollection(1).Select
Selection.Format.Fill.ForeColor.RGB = RGB(50, 50, 50)

'Modificamos aquellos puntos que tienen un 1
para = 0
fila = 2
Do While para = 0
If Cells(fila, 3) = 1 Then ActiveChart.SeriesCollection(1).Points(fila - 1).Format.Fill.ForeColor.RGB = RGB(250, 50, 0)
If Cells(fila, 1) = "" Then para = 1
fila = fila + 1
Loop

noselecciona:
If Err Then MsgBox ("Ha de seleccionar el gráfico")

End Sub

Descárgate el archivo

Hay un control de errores por si no tenemos ningún gráfico seleccionado. Una vez seleccionado el gráfico damos a toda la serie el color negro, se emplea escala RGB para asignar colores. Después vamos a recorrer punto por punto hasta que no haya datos y si encontramos un 1 en la variable grupo entonces el RGB será de color rojo. Cuando ya no hay más observaciones el proceso se detiene.

Como es habitual, os enseño a pescar, es evidente que se pueden hacer más grupos, que se pueden seleccionar los colores, etc. Creo que es bastante sencillo si buscamos en el blog y si entendemos esta simple macro. Saludos.

Truco Excel. Actualizar los filtros de una tabla dinámica con Visual basic

Imaginad que tenéis que cambiar uno o varios filtros de todas las tablas dinámicas de una hoja y cada una de las tablas dinámicas tiene un nombre distinto o hay un número distinto de tablas dinámicas en cada hoja. Eso dificulta a la hora de crear un bucle para la modificación de filtros. Pues este truco de Excel os permitirá actualizar un filtro de una fecha (o cualquier otro) para todas las tablas dinámicas de una hoja. El código es muy sencillo y no creo necesario subiros a la web algún ejemplo:

Sub filtros()
'Macro creada por www.analisisydecision.es
Dim pt As PivotTable

For Each pt In ActiveSheet.PivotTables

With pt.PivotFields("fecha")
.PivotItems("Dec-10").Visible = False
.PivotItems("Mar-10").Visible = True
End With
Next pt

End Sub

Para cada tabla dinámica (pivot table) actualiza el campo fecha, quita diciembre de 2010 y pone marzo de 2010. Es importante destacar que el filtro emplea fechas en lengua inglesa aunque vosotros en la tabla dinámica la veáis en lengua española. Esto es importante porque más de uno se ha vuelto loco con ese problema en las macros que modifican tablas dinámicas. También se puede plantear una versión que actualice todas las hojas de un libro. Espero que sea de utilidad. Saludos.

Mapa Excel de Europa

mapa_excel_europa1

Un lector me había pedido disponer en Excel de un mapa de Europa y dicho y hecho. Además en este Excel os muestro como hacer paletas de colores más o menos atractivas y como poder usarlas indistintamente con el mapa. Este Excel además contiene algunas líneas de Visual Basic que considero interesantes y que veremos después. Los shape están sacados de este link, pero se retoca completamente el código Visual Basic para hacerlo (a mi entender) más sencillo. El mapa se controla desde esta zona del Excel:

mapa_excel_europa2

El Dato es lo que vamos a pintar. Evidentemente tenéis que cruzar los datos con los nombres de los 37 países que se pintan en el mapa. Disponéis del nombre en inglés y del código de país para poder hacer este cruce previo. Pero quedaros con lo siguiente, lo único que podéis modificar es el nombre en inglés, por si preferís hacer vuestro VLookp o BUSCARV Sigue leyendo Mapa Excel de Europa

Mapas estáticos municipales para estados de México. Con R y con Excel

mexico_municipios_R_excel

Podemos pintar mapas municipales de México con la ayuda de R y Excel. Esta entrada está en la línea de otra anterior para hacer esta misma tarea con mapas de España. Disponemos de los datos en Excel y tenemos intalado R y la librería sp. El objeto R con los mapas de México lo podemos encontrar en http://www.gadm.org/country seleccionamos Mexico y R Spatial Poligons Data Frame y debemos descargarnos el objeto de nivel 2. Comenzamos el trabajo con R:

library(sp)
library(RColorBrewer)

ub_mexico="C:\\TEMP\\00 raul\\MAPA\\MEX_adm2.RData"

#Creamos los objetos de R
load(ub_mexico)
mexico=gadm

unique(mexico@data$NAME_1)

Esos son los Estados mexicanos que tenemos en el mapa. Para ilustrar el ejemplo vamos a pintar el número de habitantes del estado de México. Por ello creamos un objeto sólo con el estado de México:

mexico = mexico[mexico$NAME_1=="México",]

Ahora es necesario que nos llevemos a Excel el nombre de los municipios para cruzar los datos Sigue leyendo Mapas estáticos municipales para estados de México. Con R y con Excel

Trucos Excel. Repetir filas con DESREF

desref repetir filas excel

En respuesta a una cuestión planteada por una lectora en una entrada muy parecida a esta podemos usar la función de Excel DESREF para repetir registros el número de veces que deseemos. Como sabemos DESREF parte desde una celda referenciada y nos movemos FILAS y COLUMNAS en función de los parámetros. La sintaxis es DESREF(CELDA DE REFERENCIA; FILA; COLUMNA) de modo que si ponemos DESREF(A1;0;1) haremos referencia a la celda B1 o bien si ponemos DESREF(A1;1;0) hará refrencia a la celda A2. Para repetir lo que haremos será algo de este estilo:

=DESREF(A$2;REDONDEAR.MENOS((FILA(A3)-2)/4;0);0)

Fijada la celda de referencia nos movemos por las filas y dividimos por el número de veces que deseamos repetir (ene el ejemplo 4), hacemos un redondear menos para que tengamos valores enteros de la fila y de este modo repetirá 4 veces cada fila. De todos modos tenéis en este enlace el ejemplo utilizado para que os sirva de referencia: ejemplo-de-uso-desref-2

Mapas municipales de España en R, con la ayuda de Excel

municipios extremadura R 1

El escribir sobre el BDT de Madrid me ha hecho recordar mi trabajo con statial data de R. Los mapas de spatial data los podemos obtener de forma gratuita de http://www.gadm.org/country y en este caso vamos a descargarnos para España un SpatialPolygonsDataFrame específico para R de nivel 4 que está a nivel municipal (repito nivel todas las veces necesarias), el archivo que os debéis descargar se llamará ESP_adm4.RData. Si buscáis un poco en google encontraréis documentación acerca de este tipo de archivos de R y veréis que se pueden hacer maravillas. En este caso quiero hacer un ejemplo lo más sencillo posible, muy artesanal y casero. Con un poco de imaginación podréis complicarlo o incluso hacer una herramienta en Excel que hiciera mapas con R Sigue leyendo Mapas municipales de España en R, con la ayuda de Excel

Mapas de la provincia de Madrid con BDT

Mapa Madrid por municipios

JL un lector del blog me ha descubierto esta herramienta muy útil para la creación de mapas de Madrid, se trata de una herramienta pública donde tenemos un gran número de variables para poder representar y además podemos representar nuestras propias variables. La web es:

http://www.madrid.org/bdt/Inicio.icm

El BDT de la Comunidad de Madrid, el Banco de Datos Territorial nos permite plasmar en un mapa un gran número de variables del sistema de información estadística de la Comunidad de Madrid y nuestras propias variables que podemos subir tras darnos de alta en menos de 3 minutos. A partir de ahí en Crear Mapas Propios podemos crear nuestros propios mapas de usuario. En Crear nuevas variables podemos empezar a trabajar con nuestras propias variables que primero definimos y posteriormente podemos editar los datos y subirlos desde Excel. Para subir un Excel yo recomiendo descargar uno de los que tiene datos del BDT y ponerle nuestros datos. Es muy sencillo hacer unos mapas de forma tan sencilla que JL y yo hemos hecho  cosas espectaculares.

Ahora viene una duda que os planteo a vosotros y que también puede ayudar a JL ¿Existen herramientas parecidas en otras comunidades?

 

Truco Excel. Gráfico de puntos con colores

Un gráfico de dispersión en Excel en el que los puntos puedan ser identificados si pertenecen a un grupo. Es una duda que plantearon hace unos días en el blog. Con otras herramientas es bastante sencillo, pero en el caso de Excel la tarea no es tan evidente. Para poder hacer gráficos de este tipo he construido una macro que podéis utilizar si previamente la adaptáis a vuestros datos. El código que podéis adaptar una vez halláis creado vuestro gráfico de dispersión es:

Sub Macro2()
'
' Macro realizada por analisisydecision.es
'
Dim vec As Variant

'
    ActiveSheet.ChartObjects("grafico").Activate
    ActiveChart.SeriesCollection(1).Select
    vec = ActiveChart.SeriesCollection(1).Values
    numpuntos = UBound(vec)

    For i = 1 To numpuntos
    grupo = Cells(i + 2, 3)

    ActiveChart.SeriesCollection(1).Points(i).Select

    If grupo = 1 Then Selection.Format.Fill.ForeColor.RGB = 3969653
    If grupo = 2 Then Selection.Format.Fill.ForeColor.RGB = 255
    If grupo = 3 Then Selection.Format.Fill.ForeColor.RGB = 14922893
    Next i

    ActiveSheet.ChartObjects("grafico").Activate

End Sub

Lo primero tenemos una variable tipo variant que nos permitirá obtener el número de puntos que deseamos colorear. Seleccionamos el gráfico de dispersión y la única serie de datos es la 1, no hay más. Buscamos el número de puntos que tiene nuestra serie y hacemos un bucle que se recorre cada uno de los puntos de la serie que queremos colorear. Evidentemente necesitamos saber a que grupo pertenece cada punto. Después seleccionamos punto por punto y si pertenece a un grupo le ponemos un color con Selection.Format.Fill.ForeColor.RGB, el color le podéis buscar o elegir de la paleta de colores, en este blog ya se ha escrito sobre saber el número de color. Si en vez de grupos usáis formatos condicionales y otras cosas pueden quedar resultados muy buenos. Pero esto me lo guardo para otro día. Espero que os sea útil el truco. Saludos.