Resultado inesperado

Cuando ingresamos una función sin argumentos ni paréntesis (por ejemplo, "=PROMEDIO"), al aceptarla, Excel nos devolverá el error #¿NOMBRE?, ya que interpreta que quisimos introducir un nombre, el cual no está definido.

¿O no?

Hace poco, estuve trabajando en un modelo con fechas en Excel. Como necesitaba calcular el número de días hábiles entre dos fechas, me dispuse a utilizar la función DIAS.LAB. Sin embargo, al comenzar a escribir la fórmula, presioné (accidentalmente) Enter justo después de escribir el nombre de la función (es decir "=DIAS.LAB", Enter). Inesperadamente Excel devolvió:

840368184

De dónde viene este número, a qué se refiere o por qué se obtiene precisamente este número y no otro, es algo que ignoro completamente. Como este comportamiento fue completamente inesperado, quise reproducirlo en otros equipos. Mismo resultado. Me pregunté también si esto ocurriría con otras funciones, así que ingresé =SUMA, =MIN, =DESREF, =DERECHA, =EXTRAE, entre otras. En todos estos casos obtuve el resultado esperado #¿NOMBRE?. Sin embargo, al probar con =CONVERTIR Excel devolvió:

638844971.

Otros resultados fueron:

=DIA.LAB devuelve 1679294519

=FRAC.AÑO devuelve 734789689

Incluso hay resultados negativos. =NUM.DE.SEMANA devuelve -601489317.

Concluí que esto es un comportamiento exclusivo de las funciones del complemento Herramientas para análisis (para una lista completa de sus funciones y resultados, clic aquí).

Al continuar con esta "experimentación", probé ahora con funciones de otros complementos que he descargado de la red. Por ejemplo, con =COUNTDIFF obtuve: 1769668796. Similar comportamiento observé con el resto de las funciones de mis complementos. Posteriormente, traté con algunas funciones personalizadas. En todos los casos el resultado fue #¿NOMBRE?. Así pues, tuve que modificar mi teoría original: Este comportamiento ocurre con cualquier función perteneciente a cualquier complemento (Herramientas para análisis o cualquier otro). No ocurre con funciones nativas de Excel ni con funciones definidas por el usuario (FDU o UDF).

Dado que todo esto me pareció muy extraño, envié un correo a John Walkenbach sobre esto. Este fue mi mensaje original:

Hi John:

I entered this “formula”:

=CONVERT

Notice that I didn’t put the parenthesis. The cell shows:

638844971

That happens only whit add-in’s functions. With any other Excel built-in function we get #NAME?

Other examples:

=NETWORKDAYS produces 840368184

=WEEKNUM, -601489317

=UNIQUEVALUES, -1451032386

=WORKDAY, 1679294519

Always the syntax =[add-in function] (no parenthesis)

I think this is kind of an oddity. Or, if you may explain me where those numbers came from…

Thank you.

Esta fue su respuesta:


That's pretty strange. It doesn't happen in Excel 2007 because the ATP functions are now built-in.

I have Excel 2003 installed, but I didn't install the ATP. I'll see if I can find the original CD and install the ATP to check it out.

Regards,
John


Si algún lector tiene idea de por qué se producen estos números misteriosos, por favor háganoslo saber. Entre tanto, veré que obtengo de las distintas discusiones que surjan sobre esto para comentarlo aquí.

Primer año de vida

Este mes se cumple un año desde la publicación de la primera nota de este blog. Estas son las estadísticas del mismo según OneStat.com (gráfica semanal):

OneStat-semanal

Los principales indicadores son (pido una disculpa a los lectores por no utilizar un reporte en Excel):

Total de vistas de página: 14,753

Total de visitas: 8,898

Visitantes únicos por año: 7,802 (hay un discrepancia con lo mostrado por la gráfica de NeoCounter, al margen, debido a que este contador lo agregué ligeramente antes que el de OneStat)

La tercera semana de abril ha sido la más activa con 996 visitas. El día más activo fue el 25 de abril con 255 visitas. Puede verse que las visitas tuvieron un rápido incremento en los primeros meses de vida del blog hasta llegar al máximo observado en abril, así como un descenso menos acelerado, en los siguientes meses. Supongo que esto se debió a la menor frecuencia de publicación de las entradas. No obstante, al retomar una mayor frecuencia de publicación (a partir de agosto), el número de vistas ha vuelto a aumentar. Espero retomar la periodicidad en la publicación mostrada en los primeros meses.

A todos aquellos que han visitado este blog, gracias.

Seleccionar celdas con determinado valor

Hay ocasiones en las que necesitamos seleccionar todas las celdas de una hoja que contienen determinado valor, para borrarlas o editarlas de algún modo.

Normalmente utilizaríamos el Autofiltro. Supongamos la siguiente lista:
Queremos seleccionar todas las celdas que contienen el valor 1,000 para cambiar su formato a "#,##0.00".

Desplegamos el Autofiltro, y en una de las listas desplegables seleccionamos el valor que buscamos (1,000):

Finalmente editamos las celdas. Sin embargo, existe la posibilidad de que el valor que buscamos esté disperso en varias columnas, como en el presente ejemplo. Además, debemos editar las celdas una a una. No debemos editar toda la columna filtrada, ya que al editarla estaremos modificando también las celdas ocultas.

La mejor manera de lograrlo es utilizando el comando Buscar (Edición - Buscar... o Ctrl + B). Podemos aprovechar el hecho de que al seleccionar uno de los resultados de búsqueda, Excel selecciona también la celda respectiva. Retomando el ejemplo, procedemos como sigue:

Vamos a Edicion - Buscar...

Establecemos el valor a buscar (1,000) y damos clic en el botón Buscar todo.

Seleccionamos todos los resultados de búsqueda

y presionamos Esc para cerrar el cuadro Buscar.

Finalmente, procedemos a cambiar el formato. Formato - Celdas... (o Ctrl + 1), ficha Número, valor "#,##0.00", Aceptar (o clic dos veces en el botón Aumentar decimales de la Barra de herramientas formato).

El símbolo de promedio

Recientemente, estuve trabajando con una columna que indicaba los promedios de ciertos valores. Dado que el título que utilizaba (así es, "Promedio") era sustancialmente más lago que los valores mostrados, quise reemplazar el título y poner únicamente el símbolo de promedio.

Los lectores seguramente sabrán que dicho símbolo es una "X", con una barra horizontal encima. Como consideré que este era un símbolo especial, ejecuté Insertar - Símbolo... para buscarlo.

Cuál va siendo mi sorpresa al descubrir que este símbolo no existe en este cuadro (gracias, Bill). Así que me puse a buscar otras formas de lograr mi objetivo. Lo primero que se me ocurrió fue escribir el caracter "_" y, en otro renglón de la misma celda (lo cual se logra con Alt + Enter, en modo edición) la letra "X". El resultado fue aceptable.

En su sitio Contextures, Debra Dalgleish propone esta solución:

1. Cambiar la fuente a Symbol.
2. Tipear el caracter de acento grave (`)
3. Cambiar la fuente a la que utilizaremos para la "X" y tipearla.

Aunque no obtuve buenos resultados en pantalla, Debra sostiene que la impresión sí debe verse bién.

Formato condicional avanzado III

Continúa de la nota anterior.

Hasta ahora, solo hemos utilizado la opción "Valor de la celda" de la primera lista desplegable del cuadro Formato condicional. Como recordarán, la segunda opción de esta lista se llama Fórmula. Es con esta opción, con la que se pueden establecer condiciones de formato mucho más complejas y por lo tanto útiles, ya que podremos valernos de cualquier función Excel integrada y/o referirnos a cualquier otra celda del libro.

Supongamos que tenemos una columna con fechas, y queremos aplicar formato a las que tengan una semana o menos de antigüedad. Seleccionamos entonces el rango, pongamos A2:A150, damos Formato - Formato condicional... y seleccionamos la opción Fórmula:

En la sección Fórmula: escribimos:

=A2>(HOY()-7)

Cualquier fórmula que ingresemos en esta sección deberá ser, en realidad, una expresión lógica; es decir, una expresión cuyos únicos resultados posibles sean VERDADERO o FALSO. En nuestro caso, si en la celda A2 tenemos la fecha del día de ayer, la fórmula devolverá VERDADERO. Y si tenemos una fecha de hace más de un mes, devolverá FALSO. Cada vez que el resultado de la fórmula sea VERDADERO, Excel aplicará el formato que hayamos especificado.

Observemos ahora que la referencia que hacemos a la celda A2 es una referencia relativa. Al hacerlo, estamos forzando a Excel a ajustar las referencias al resto de las celdas (recordemos que hemos seleccionado un rango: A2:A150), tal y como sucede cuando copiamos una fórmula normalmente. De esta forma, si revisamos las condiciones de cada celda, veremos que son:

=A2>(HOY()-7)
=A3>(HOY()-7)
=A4>(HOY()-7)
...
=A150>(HOY()-7)

Por el contrario, si el caso fuera comparar todas las celdas contra la fecha de la celda B2, entonces utilizaríamos una referencia absoluta para la celda B2 (y relativa para A2):

=A2>$B$2

De esta forma, Excel ajustará las condiciones como sigue:

=A2>$B$2
=A3>$B$2
=A4>$B$2
...
=A150>$B$2

Para cambiar el tipo de referencia, se puede usar F4 o escribir directamente los signos $ en la fórmula. Téngase presente que la celda utilizada como primer argumento (A2) debe ser la celda activa. De lo contrario, Excel podría ajustar erróneamente las referencias.

Una vez comprendido lo anterior, las condiciones que pueden elaborarse para formatos condicionales solo están limitadas por la imaginación del usuario. Algunos ejemplos:

=A2=MAX($A$2:$A$101). Formatea el valor máximo del rango.

=ESERROR(B2). Esta condición aplica formato a las celdas que contengan resultados de error en el rango. Puede utilizarse para ocultar dichos resultados, aplicando color de fuente blanco.

=CONTAR.SI($A$2:$A$100,A2)>1. Formatea valores duplicados en el rango. Para encontrar los no duplicados, cambiamos el signo > por =.

=ESTEXTO(A2). Señala los valores no numéricos en el rango.

=RESIDUO(FILA(),2). Formatea las filas del rango alternadamente. Por ejemplo, para colorear las filas impares.

=A1>PROMEDIO($A$2:$A$17). Muestra los valores numéricos que están por arriba del promedio del rango.

=RESIDUO(SUBTOTALES(3,$A$1:$A2),2). Formatea alternadamente las filas de un rango filtrado. Nótese la referencia mixta a la celda A2: columna absoluta, fila relativa.

Entre muchos otros. Toca al lector definir los formatos a aplicar.

Link.

Formato condicional avanzado II

Continúa de la nota anterior.

Veamos ahora algunas consideraciones a tomar en cuenta al utilizar formatos condicionales.

Tal como vimos en la nota previa, podemos establecer un máximo de tres condiciones, cada una con su correspondiente formato. Las condiciones que establecimos fueron:

Valor de la celda igual a 0
Valor de la celda menor o igual que 30,000
Valor de la celda mayor o igual que 70,000

Cuando ninguna de las condiciones se cumpla (es decir, cuando el valor de la celda esté entre 30,001 y 69,999) Excel no aplicará ningún formato, manteniendo el formato original de la celda. Ahora bien, si hubiéramos aplicado condiciones incluyentes, es decir, condiciones que pudieran ser cumplidas simultáneamente por un mismo valor, entonces Excel aplicaría el formato de la primera condición satisfecha. Supongamos que trabajamos con las siguientes condiciones:

Valor de la celda igual a 10
Valor de la celda menor o igual que 30
Valor de la celda entre 25 y 40

Si ingresamos el valor 10, entonces se satisfarían las condiciones 1 y 2. Por tanto, Excel aplicará el formato de la condición 1. Si ingresamos el valor 28, entonces se satisfarían las condiciones 2 y 3. Por tanto, Excel aplicará el formato de la condición 2. Debemos determinar cuidadosamente el orden en que establecemos las condiciones, sobre todo si son incluyentes.

Cuando copiamos una celda (o rango) que no contiene formato condicional, y lo pegamos en una celda (o rango) que sí tiene formato condicional, Excel eliminará este sin advertencia alguna. No estaría mal un mensaje de alerta advirtiendo al usuario la posibilidad de perder los formatos. (Gracias Bill). En estos casos, si queremos conservar los formatos condicionales del rango de destino, debemos usar Pegado especial - Valores. Si, por el contrario, queremos conservar los formatos del rango de origen, usamos Pegado especial - Formatos, o simplemete, Pegar, ya que al copiar una celda, Excel copia también su formato condicional. Así pues, hay que tener cuidado al copiar y pegar de o en celdas formateadas.

Para borrar el formato condicional, abrimos el cuadro Formato condicional, y damos clic en el botón Eliminar... Selecionamos las condiciones que queremos eliminar y aceptamos el cuadro. Este cuadro siempre presenta cuadros de selección para tres condiciones, incluso si el rango solo contiene una o dos. Otro error de los genios de Microsoft. Alternativamente, podemos usar Edición - Borrar - Formatos. No obstante, esto eliminará también los formatos no condicionales del rango.


Si queremos seleccionar las celdas a las que hemos aplicado formato condicional, podemos usar el cuadro Ir a Especial. Damos Edición - Ir a... (o F5), clic en Especial...:

Activamos la opción Celdas con formatos condicionales. Tenemos dos opciones: para seleccionar todas las celdas con formatos condicionales, activamos las opción Todos. Para seleccionar solo aquellas celdas con los mismos formatos condicionales de la celda activa, seleccionamos Iguales a celda activa.

Habrá ocasiones en que surja la necesidad de usar referencias a otras hojas. Pero si indicamos la referencia directamente en el cuadro Formato condicional, Excel responderá con un mensaje de error, diciendo que esto es imposible.


Para solucionar esto, simplemente establecemos la referencia en una celda de la hoja en la que aplicaremos el formato, por ejemplo:

=Hoja2!A2

Luego, usamos esta celda en el cuadro Formato condicional. Alternativamente, podemos definir un nombre que haga referencia a la otra hoja, y escribir este nombre en dicho cuadro.

Continuamos en la siguiente nota.

Formato condicional avanzado

El formato condicional es una de las características más útiles con que cuenta Excel. Desafortunadamente no es algo que el usuario normal aproveche al máximo. En efecto, es posible elaborar condiciones de formato que buena parte de los usuarios ni siquiera imagina. Conforme avancemos en este tema se irá haciendo cada vez más evidente el poder de esta característica.

Básicamente, el formato condicional nos permite aplicar determinado formato a las celdas, basado en el contenido de las mismas. Por ejemplo, podemos indicarle a Excel que nos resalte con color rojo celdas con valor igual a cero, con verde aquellas cuyo valor sea menor o igual a 30,000, y con azul las que tengan valores mayores o iguales a 70,000, ningún formato con cualquier otro valor. Este formato cambiará automáticamente según cambie el valor de las celdas analizadas. Así, podremos identificar fácilmente las celdas que cumplan con cualesquiera de las condiciones. Si nos tocó trabajar con una lista de 3,000 datos, es indudable la utilidad que pueden tener los formatos condicionales. Además del color de celda (tramas) podemos especificar color y tipo de borde y estilo y color de fuente, así como el tipo de subrayado.
Procedamos ahora a aplicar los formatos de nuestro ejemplo. Suponiendo que tenemos los siguientes datos:

Comencemos seleccionando el rango al cual aplicaremos el formato condicional (tercera columna). Ejecutamos Formato - Formato condicional... para abrir el siguiente cuadro:

Excel está listo para aceptar la primera condición ("Condición 1"). La primera lista desplegable solo tiene dos valores: "Valor de la celda" y "Fórmula". Seleccionamos el primero. Esta opción sirve para basarnos única y exclusivamente en el contenido de la celda a formatear. La segunda lista (la cual solo veremos si seleccionamos Valor de la celda) sirve para especificar el operador que utilizaremos para evaluar el contenido de la celda. Este operador puede ser uno de los siguientes ocho:

entre (predeterminado)
no está entre
igual a
no igual a
mayor que
menor que
mayor o igual que
menor o igual que
Lógicamente, si seleccionamos el primer o el segundo operadores, deberemos especificar dos valores, los límites entre, mientras que si seleccionamos cualquier otro operador, solo necesitaremos especificar un solo valor. Retomando nuestro ejemplo, seleccionamos "igual a" y en el cuadro de texto a continuación escribimos 0. El siguiente paso es especificar el formato que utilizaremos. Para ello damos clic en el botón Formato..., que nos lleva a este cuadro, versión modificada del cuadro Formato de celdas "normal":

De aquí podemos ver que el formato condicional no permite cambiar ni la protección ni la alineación ni el formato numérico de la celda.

Activamos la pestaña Tramas, seleccionamos el color rojo y damos Aceptar. Si queremos ver en este momento el efecto de esta primera condición, damos clic en Aceptar:
de otra forma damos clic en el botón Agregar>>, con lo cual Excel agrega otro apartado para que especifiquemos la Condición 2:


Para esta segunda condición (siempre según nuestro ejemplo), seleccionamos el operador menor o igual a en la segunda lista desplegable, y ponemos 30,000 en el cuadro de texto. Clic en el botón Formato..., pestaña Tramas y seleccionamos el color verde. Clic en Aceptar.

Solo nos resta especificar la tercera condición. Presionamos Agregar>> y repetimos los pasos anteriores, pero esta vez especificando los valores Valor de la celda, Mayor o igual a, 70,000, color azul, Aceptar:

Volvemos a dar clic en Aceptar y obtenemos:

Si cambiamos los valores de las celdas, veremos que el color de la misma se ajustará automáticamente de acuerdo a las condiciones que especificamos.

Continuamos en la siguiente nota.