Archivos de la categoría Trucos

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 para EMB Emblem. Cambiar el nivel base de un factor

Un buen truco que me han descubierto hoy para los usuarios de EMB Emblem, como cambiar el nivel base de un factor de datos sin necesidad de pasar por los datos (habitualmente SAS) o sin hacerlo a posteriori (habitualmente Excel y lo que hacía el ahora escribiente). Cuando se generan los datos se genera el fichero binario *.BID y el fichero que se emplea para leer ese fichero *.FAC; para alterar el nivel base debemos abrir este archivo *.FAC con un block de notas o cualquier editor de texto plano. Al abrirlo tendremos lo siguiente:

XXXXXXXXXX        --> ES EL NOMBRE DEL ARCHIVO
99                                 -->ES EL NÚMERO DE FACTORES
XXXXXXXXXX.Bid --> ES EL NOMBRE DEL ARCHIVO BINARIO CON LOS DATOS
0
99999999                   --> ES EL NÚMERO DE REGISTROS
No. Levels Base         --> ES LA DESCRIPCION DE LO QUE VIENE A CONTINUACIÓN
XXXXXXXXXXXX  --> NOMBRE DE UN FACTOR
999                 99         --> EL PRIMERO ES EL NÚMERO DE NIVELES Y EL SEGUNDO ES EL NIVEL BASE

ASÍ PARA TODOS LOS FACTORES. Si deseamos cambiar el nivel base de un factor sólo tenemos que cambiar ese segundo número que hay tras cada definición de los factores. Un truco muy sencillo y que será de utilidad para aquellos que usáis EMB Emblem. 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 de Argentina con R

Un lector necesita realizar un mapa de Argentina con R. El primer paso es descargar el mapa en formato R de la página web de siempre: http://www.gadm.org/country seleccionamos Argentina y el formato en R. Podéis descargar en otros formatos y trabajar con R, pero eso lo contaré otro día. Para ilustrar el ejemplo me he descargado el mapa de nivel 2, es decir, a nivel de Estado argentino. Una vez descargado el mapa empleamos el código de siempre:

library(sp)
library(RColorBrewer)

ub_argentina="C:\\TEMP\\00 raul\\MAPA\\ARG_adm1.RData"

#Creamos los objetos de R
load(ub_argentina)
argentina=gadm

plot(argentina)

argentina_R

Es sencillo trabajar con el objeto y colorear en función de valores. Un ejemplo simplista:

argentina$NAME_1
datos<-c(1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)

plot(argentina,col=datos)

Pinta de negro el estado de Buenos Aires. A ver si dispongo de más tiempo y puedo desarrollar más esta entrada. Saludos.

Trucos R. El paquete classInt para clasificar variables continuas

El paquete classInt de R últimamente está muy presente en mis programas y me gustaría dedicarle unas líneas para que podáis ver algunas de sus posibilidades a la hora de clasificar variables continuas, además estas posibilidades unidas con RColorBrewer nos permiten crear gráficos muy atractivos. Instalamos y clasificamos un vector de ejemplo:

aleatorio <- abs(rnorm(100,50,30))
summary(aleatorio)
grupos <- 4
clases <- classIntervals(aleatorio, grupos, style="quantile")
clases

style: quantile
one of 156,849 possible partitions of this variable into 4 classes
[1.225299,29.19317) [29.19317,51.55524) [51.55524,72.06471) [72.06471,118.6466]
25                 25                 25                 25

Partimos un vector aleatorio en 4 clases en función de sus cuantiles y creamos un lista clases que contiene nuestra tabla y entre sus atributos destaca brks que indica los puntos de corte, en el caso de los cuantiles tenemos:

clases$brks
quantile(aleatorio)

Coinciden el atributo brks (los cortes de nuestra clasificación) y los cuantiles de nuestro vector. Este paquete lo estoy empleando conjuntamente con RcolorBrewer para la realización de gráficos:

library(RColorBrewer)
paleta <- brewer.pal(grupos,"Reds")

colores = findColours(clases, paleta)
pie(attributes(colores)$table,
main="Ejemplo de classInt",col=colores)

Hay que pararse en el objeto colores que creamos con la función findColours Sigue leyendo Trucos R. El paquete classInt para clasificar variables continuas

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