El día de hoy es el día 40,000 Excel. Y no porque Excel tenga 40,000 días en el mercado, sino porque este es el número serial que corresponde al 6 de julio de 2009. Recordemos que el sistema de fechas en Excel comienza el 1 de enero de 1900. Han pasado 40,000 días desde esa fecha.
Para comprobarlo, escribimos la fecha de hoy (Ctrl + Shift + ;) en una celda y posteriormente, aplicamos formato de número a la celda (Ctrl + Shift + 1).
6 de julio de 2009
22 de junio de 2009
Resultado inesperado - resolviendo el misterio
En relación a la nota Resultado inesperado, en la que comentaba algunos resultados aparentemente incomprensibles que Excel me devolvía, ckarlanga me hizo llegar su comentario y análisis de la situación, al que decidí dedicarle su nota propia dada su relevancia. Comenta ckarlanga:
"Hola, me hago llamar ckarlanga, y navegando por los foros di con esta info que me pareció bastante curiosa y sobre todo que alguien la mencionara, siendo un curioso del excel, estuve tratando de abrir la funcion de distribución normal, para ello intenté dar con el complemento que en excel lo contenía y me di la lata de abrir uno por uno los complementos, y por ahí di con el paquete que contiene atpvbes.xla atpvben.xla analisys32.xll funcres.xla y procdb.xla, les saque las claves a estos archivos y en los ATP tanto español como inglés, se encuentra la función networkdays y dias.lab, éste es el código:
Function Networkdays(start_date As Variant, end_date As Variant, Optional holidays As Variant) As Variant
Networkdays = Application.Run(GetMacroRegId("NETWORKDAYS"), start_date, end_date, holidays)
End Function
Cuando uno ejecuta esa function desde el excel va a esta función que ejecuta una función base para todas las creadas dentro de este paquete llamada GetMacroRegId. Esta a su vez, si logras convertir el archivo xla a xls, tiene una descripción de cada una de las funciones hechas dentro del xla:
Private Function GetMacroRegId(FuncText As String) As String
Debug.Print ("[GetMacroRegId] '" & FuncText & "' <") For i = LBound(FunctionIDs) To UBound(FunctionIDs)
If (LCase(FunctionIDs(i, 0)) = LCase(FuncText)) Then
If (Not (IsError(FunctionIDs(i, 1)))) Then
GetMacroRegId = FunctionIDs(i, 1)
Debug.Print ("[GetMacroRegId] '" & FuncText & "' -> '" & GetMacroRegId & "' >")
Exit Function
End If End If Next i
Debug.Print ("[GetMacroRegId] Error while finding '" & FuncText & "' >")
End Function
dentro del xla covertido a xls tienes esto ...
Function table
Labels VBAname Module Procedure Type text Function text Argument text Macro type Category Shortcut text Help topic Help text Arg1 Arg2 Arg3
HEX2DEC Hex2Dec hex2dec PP# HEX.A.DEC número 1 Ingeniería xlmain10.chm!1929
Convierte un número hexadecimal en decimal es el número hexadecimal que desea convertir
(encabezados)
y estos son los datos
NETWORKDAYS Networkdays networkdays PPPP# DIAS.LAB fecha_inicial;fecha_final;festivos 1 Fecha y hora xlmain10.chm!1963 Devuelve el número total de días laborables entre dos fechas es un número de serie que representa la fecha inicial es un número de serie que representa la fecha final.
El código al que haces referencia, 840368184, es el id de la macro que tiene adentro la fórmula de cálculo de los días hábiles, apenas tenga una respuesta específica dentro de que archivo se encuentra ( lo mas probable un dll) te lo informo...
un saludo...
perdona lo enredado de la respuestas... pero a esta hora no pienso más..."
Con esto comenzamos a resolver el misterio. Intentaré reproducir estos pasos en mi equipo para comparar resultados. Te agradezco esta colaboración, ckarlanga. Así mismo, te extiendo una cordial invitación a postear notas en este blog, las cuales, desde luego, llevarían tu firma. Si te gusta la idea, házmelo saber para otorgarte permisos de escritura.
"Hola, me hago llamar ckarlanga, y navegando por los foros di con esta info que me pareció bastante curiosa y sobre todo que alguien la mencionara, siendo un curioso del excel, estuve tratando de abrir la funcion de distribución normal, para ello intenté dar con el complemento que en excel lo contenía y me di la lata de abrir uno por uno los complementos, y por ahí di con el paquete que contiene atpvbes.xla atpvben.xla analisys32.xll funcres.xla y procdb.xla, les saque las claves a estos archivos y en los ATP tanto español como inglés, se encuentra la función networkdays y dias.lab, éste es el código:
Function Networkdays(start_date As Variant, end_date As Variant, Optional holidays As Variant) As Variant
Networkdays = Application.Run(GetMacroRegId("NETWORKDAYS"), start_date, end_date, holidays)
End Function
Cuando uno ejecuta esa function desde el excel va a esta función que ejecuta una función base para todas las creadas dentro de este paquete llamada GetMacroRegId. Esta a su vez, si logras convertir el archivo xla a xls, tiene una descripción de cada una de las funciones hechas dentro del xla:
Private Function GetMacroRegId(FuncText As String) As String
Debug.Print ("[GetMacroRegId] '" & FuncText & "' <") For i = LBound(FunctionIDs) To UBound(FunctionIDs)
If (LCase(FunctionIDs(i, 0)) = LCase(FuncText)) Then
If (Not (IsError(FunctionIDs(i, 1)))) Then
GetMacroRegId = FunctionIDs(i, 1)
Debug.Print ("[GetMacroRegId] '" & FuncText & "' -> '" & GetMacroRegId & "' >")
Exit Function
End If End If Next i
Debug.Print ("[GetMacroRegId] Error while finding '" & FuncText & "' >")
End Function
dentro del xla covertido a xls tienes esto ...
Function table
Labels VBAname Module Procedure Type text Function text Argument text Macro type Category Shortcut text Help topic Help text Arg1 Arg2 Arg3
HEX2DEC Hex2Dec hex2dec PP# HEX.A.DEC número 1 Ingeniería xlmain10.chm!1929
Convierte un número hexadecimal en decimal es el número hexadecimal que desea convertir
(encabezados)
y estos son los datos
NETWORKDAYS Networkdays networkdays PPPP# DIAS.LAB fecha_inicial;fecha_final;festivos 1 Fecha y hora xlmain10.chm!1963 Devuelve el número total de días laborables entre dos fechas es un número de serie que representa la fecha inicial es un número de serie que representa la fecha final.
El código al que haces referencia, 840368184, es el id de la macro que tiene adentro la fórmula de cálculo de los días hábiles, apenas tenga una respuesta específica dentro de que archivo se encuentra ( lo mas probable un dll) te lo informo...
un saludo...
perdona lo enredado de la respuestas... pero a esta hora no pienso más..."
Con esto comenzamos a resolver el misterio. Intentaré reproducir estos pasos en mi equipo para comparar resultados. Te agradezco esta colaboración, ckarlanga. Así mismo, te extiendo una cordial invitación a postear notas en este blog, las cuales, desde luego, llevarían tu firma. Si te gusta la idea, házmelo saber para otorgarte permisos de escritura.
| Mejora este blog: |
27 de mayo de 2009
Formatear el eje y
Supongamos el siguiente gráfico:

Queremos que para facilitar la lectura del mismo, tengamos tres colores en la escala del eje y: el verde para los valores mayores o iguales a 30, negro para los resultados entre -10 y 30 y rojo para los menores de -10, quedando de esta manera:
Para lograrlo seguimos los siguientes pasos:
Clic derecho en el eje y - Formato de ejes..., activamos la ficha Número. Seleccionamos la Categoría Personalizado. En Tipo: escribimos el siguiente formato personalizado:
[verde][>=30]#,##0;[Rojo][<-10]-#,##0;Estándar
Aceptar. Recordemos, sin embargo, lo que vimos en la nota pasada: nuestro principal objetivo es contar una historia con la gráfica, más que impactar visualmente.

Queremos que para facilitar la lectura del mismo, tengamos tres colores en la escala del eje y: el verde para los valores mayores o iguales a 30, negro para los resultados entre -10 y 30 y rojo para los menores de -10, quedando de esta manera:
Clic derecho en el eje y - Formato de ejes..., activamos la ficha Número. Seleccionamos la Categoría Personalizado. En Tipo: escribimos el siguiente formato personalizado:
[verde][>=30]#,##0;[Rojo][<-10]-#,##0;Estándar
Aceptar. Recordemos, sin embargo, lo que vimos en la nota pasada: nuestro principal objetivo es contar una historia con la gráfica, más que impactar visualmente.
| Mejora este blog: |
25 de mayo de 2009
Una buena gráfica
Como lo dice Chandoo en su blog, "una gráfica bién hecha nos cuenta una historia. Tan simple como eso."
Este es un ejemplo de lo que es una buena gráfica, "Tiempo empleado para comer por día vs tasa nacional de obesidad" (clic en la imagen para agrandarla):

x: minutos utilizados para comer por día
y: porcentaje de población con IMC > 30
Se toma unos cinco segundos en entender de qué es la gráfica. Y luego, conoces la historia. Lo más importante, estimula al lector a hacerse preguntas y entender los datos.
En sí misma, la gráfica es sencilla. Nada del otro mundo. Pero yuxtapone brillantemente dos piezas de datos: la tasa de obesidad en los países y el tiempo utilizado para comer, para contar una historia.
El artículo demuestra cabalmente uno de los fundamentos de Excel: el principal objetivo de una gráfica no es impactar visualmente, sino transmitir información clara rápidamente.
La gráfica de nuestro ejemplo dice más que esta otra, que aunque más visual, es más confusa:

Si una gráfica Excel no comunica información más rápidamente que una tabla de datos, podemos decir, con toda justicia, que es una mala gráfica. Sería mejor prescindir de ella y mostrar en su lugar solo los datos fuente.
Este es un ejemplo de lo que es una buena gráfica, "Tiempo empleado para comer por día vs tasa nacional de obesidad" (clic en la imagen para agrandarla):

x: minutos utilizados para comer por día
y: porcentaje de población con IMC > 30
Se toma unos cinco segundos en entender de qué es la gráfica. Y luego, conoces la historia. Lo más importante, estimula al lector a hacerse preguntas y entender los datos.
En sí misma, la gráfica es sencilla. Nada del otro mundo. Pero yuxtapone brillantemente dos piezas de datos: la tasa de obesidad en los países y el tiempo utilizado para comer, para contar una historia.
El artículo demuestra cabalmente uno de los fundamentos de Excel: el principal objetivo de una gráfica no es impactar visualmente, sino transmitir información clara rápidamente.
La gráfica de nuestro ejemplo dice más que esta otra, que aunque más visual, es más confusa:

Si una gráfica Excel no comunica información más rápidamente que una tabla de datos, podemos decir, con toda justicia, que es una mala gráfica. Sería mejor prescindir de ella y mostrar en su lugar solo los datos fuente.
| Mejora este blog: |
Suscribirse a:
Entradas (Atom)


