23 de diciembre de 2008

Obtener los elementos únicos de una lista

Una tarea común es obtener los elementos únicos de una lista. La siguiente macro permite realizarlo:

Sub elementosunicos()

Dim celda As Range
Dim unicos As Collection
Dim sh As Worksheet
Dim i As Long

'nos aseguramos que la seleccion sea un rango
If TypeName(Selection) = "Range" Then

'inicializamos la coleccion
Set colUnique = New Collection

'loop en todas las celdas y agregarlas a la coleccion
For Each celda In Selection.Cells

'si el elemento existe, se genera un error
, ignorarlo
On Error Resume Next

'una coleccion solo agrega elementos no repetidos

unicos.Add celda.Value, CStr(celda.Value)
On Error GoTo 0
Next celda

'agregar hoja para la lista
Set sh = ActiveWorkbook.Worksheets.Add

'escribir los datos unicos
For i = 1 To unicos.Count
sh.Range("A1").Offset(i, 0).Value = unicos(i)
Next i

'ordenar
sh.Range(sh.Range("A2"), sh.Range("A2").End(xlDown)) _
.Sort sh.Range("A2"), xlAscending, , , , , , xlNo

End If

End Sub

Otras alternativas son generar una tabla dinámica y agregar el campo correspondiente al área de filas, o bién, utilizar el filtro avanzado. El análisis que hagamos del modelo nos dirá cuál método es el mejor.

17 de diciembre de 2008

La entrevista en español

Como lo prometido es deuda, les presento en español la entrevista que el Excel MVP Charley Kyd le concedió al sr. Chandoo en su blog.

-¿Cuáles son tus tres fórmulas favoritas?
-No tengo fórmulas favoritas, pero hay tres funciones que utilizo todo el tiempo:

INDICE
COINCIDIR (con el tercer argumento igual a cero)
SUMAPRODUCTO

-Si soy un principiante en Excel, qué libros o recursos me recomendarías?
-El foro de Mr. Excel.com para hacer preguntas. También los grupos de discusión de Microsoft y el grupo de noticias microsoft.public.excel para preguntar.

-¿Cómo podrían los gerentes y analistas ser más productivos con Excel?
-No actualicen a Excel 2007. Y si lo hacen, mantener una copia de Excel 2003 en sus equipos. (Al instalar Excel 2007 sobre 2003, responder No cuando el programa de instalación pregunte si quieren actualizar a la nueva versión).

Donde sea posible, separar datos de resumenes. Después, utilizar fórmulas para jalar los datos en el resumen. (Mis tres funciones favoritas te ayudarán a hacerlo).

Aprender métodos abreviados con el teclado. En las versiones anteriores a 2007, los comandos Alt... son consistentes. Y 2007 te permite utilizar las combinaciones Alt+tecla de las versiones anteriores.

-¿Qué recursos (libros, sitios web) recomiendas para este tipo de usuarios?
-Estaré hablando más sobre separación de datos y presentaciones en ExcelUser.com en el próximo año. Suscríbete a mi newsletter para estar al tanto de los nuevos desarrollos.

-Piensas que un microempresario puede administrar su negocio utilizando solo Excel y otros programas gratuitos?
-Sí y no. No recomendaría utilizar Excel para llevar la contabilidad. Quicken es muy barato y hace un mucho mejor trabajo. Pero Excel puede ayudar de muchas otras maneras, como en análisis de datos, presupuestos, cálculo de precios y más.

-¿En dónde crees tú que la mayoría de nosotros desperdiciamos más tiempo...?

...importando datos de otros sistemas/fuentes?
-Realizando la misma actividad analítica o de reporteo una y otra vez, pero con diferentes datos. Cuando te descubras haciendo esto, intenta buscar otro método en el que utilices fórmulas para jalar los datos que necesites de otro libro de datos. Así, podrás enfocar tu atención únicamente en la actualización de los datos, en lugar de comenzar de cero cada vez.

...en fórmulas y errores?
-Mucha gente no sabe cómo cambiar al Modo de cálculo manual. (Herramientas - Opciones - Calcular - Manual). Esto nos permite trabajar en libros extensos sin tener que esperar a que recalcule todo el tiempo. Después, cuando queramos calcular, simplemente presionamos F9. Mucha gente elabora hojas y libros mucho más grandes de lo que deberían, y entonces se pierden en ellos. Yo intento mantener mis libros y hojas reducidos, a menos que tenga una razón específica para no hacerlo.

Mucha gente crea demasiados vínculos entre libros. Esto es un problema porque los vínculos pueden dañar o dañarse, o generar errores de referencias circulares. Yo trato de vincular solo de mis datos a mi presentación.

Supongamos que tenemos una columna de datos en el rango A5:A10. Si queremos sumar estos datos, regularmente utilizamos la fórmula =SUMA(A5:A10). Yo en su lugar, formateo las celdas A4 y A11 con borde medio y relleno gris. Después sumo utilizando el rango A4:A11. Esto me permite agregar o eliminar filas entre los bordes grises sin tener que preocuparme por las fórmulas que hacen referencia a este rango. Mientras no toque las filas de límite grises, me siento seguro. (No utilizo este método si voy a imprimir las hojas para alguien más, porque luce mal. Pero esto no es problema la mayor parte del tiempo).

...aplicando formatos?
-Trato de no utilizar nunca el botón Combinar y centrar para centrar rótulos en varias columnas. (De hecho, dudo haber utilizado este comando más de media docena de veces *en mi vida*). En su lugar, utilizo Formato - Celdas - Alineación - Centrar en la selección. Esto proporciona el mismo efecto pero sin obligarme a lidiar con los contratiempos que generan las celdas combinadas.

...en VBA?
-VBA es muy potente, y puede ser muy divertido. Pero hay que tener cuidado, puede volverse una adicción. Muchos usuarios de VBA pasan muchas horas creando macros que les ahorran varios minutos de trabajo. Esto obviamente no es un buen uso de nuestro tiempo. Por otra parte, en lo personal trato fuertemente de comentar mi código detalladamente. Y cuando reviso código viejo, *siempre* he deseado haberlo comentado con más detalle todavía . Cuando estás a mitad de un proyecto, la razón de cada línea de código parece obvia. Pero seis meses después, todo es un misterio. COMENTA TU CÓDIGO.

-¿Cuál es la mejor forma para un no programador de aprender y utilizar VBA en su trabajo cotidiano?
-Continúa con una versión anterior a 2007, por dos razones: no hay buenos libros acerca de macros 2007, y la grabadora de macros no funciona con muchas acciones en 2007.

Consigue un libro para principiantes y comienza a experimentar.

Utiliza la grabadora de macros y mira los resultados.

Haz preguntas en grupos de trabajo y foros.

Familiarízate con el Explorador de objetos. (En el VBE, presiona Ver - Explorador de objetos. O simplemente presiona F2).

16 de diciembre de 2008

Diccionario de funciones en inglés

Navegando por la red, me encontré con un Diccionario de funciones de Excel, propiedad del sr. Peter Noneley. Es una excelente compilación de funciones explicadas y ejemplos de fórmulas.

Las funciones son alrededor de 150.

También tiene numerosos ejemplos de uso.

Finalmente, agrupa las funciones en las categorías que maneja Excel.


Recomiendo ampliamente descargar el archivo y dedicarle unas cuantas horas. Aprenderán bastante. Es un archivo plano, sin macros ni VBA. El único detalle es que está en inglés. Es necesario conocer la traducción de las funciones al español.

15 de diciembre de 2008

Entrevista con Charley Kyd

En su excelente blog Pointy Hairy Dilbert, Chandoo publica la entrevista que sustuvo con Charley Kyd, quien es uno de los escasos 74 Excel MVP (Most Valuable Professional) reconocidos por Microsoft en todo el mundo. Aunque breve, es sumamente ilustrativa. Para ver la entrada original (en inglés) pueden dar clic aqui.

Para quienes no dominan el inglés, intentaré realizar una decente traducción al español, misma que publicaré lo antes posible.

11 de diciembre de 2008

Dividir en múltiplos de 10

Problema:

Dado cierto número, por ejemplo el 123456, obtener una fórmula que devuelva los resultados:

12345
1234
123
12
1

Es decir, dividirlo sucesivamente por 10, 100, 1000 etc.

Para lograrlo utilizamos la función MULTIPLO.INFERIOR. Esta, redondea un número hacia cero, al múltiplo especificado. La sintaxis:

MULTIPLO.INFERIOR(número, cifra_significativa)

Ejemplo:

=MULTIPLO.INFERIOR(2530,100) devuelve 25, ya que divide el número (2530) entre 100 (25.3) y lo redondea hacia abajo a cero.

De vuelta a nuestro caso, construyamos un tabla auxiliar que muestre los resultados (y algunos ejemplos más) como sigue:

Escribimos esta fórmula en la celda B3:

=MULTIPLO.INFERIOR($A3/10^B$2,1)

Copiamos y pegamos al resto del rango y listo.

Introducción a la programación VBA

En lo sucesivo comenzaré a publicar ejemplos y técnicas de programación útiles en el desarrollo de modelos Excel. Así que supondré que el lector tiene conocimientos intermedios en el lenguaje VBA (Visual Basic for Aplications). Si no es así y desean una introducción al tema, les recomiendo el siguiente vínculo del sitio Excel Worker, que además está en español:

http://www.excelworker.virtuabyte.cl/index.php?option=content&task=section&id=3&Itemid=27

En cambio, si tienen conocimientos intermedios - avanzados de inglés, entonces recomiendo Erlandsen Data Consulting o el sitio de Chip Pearson.

Todos contienen material suficiente para iniciarse por lo que no pretenderé reinventar la rueda.

Saludos.

3 de diciembre de 2008

Funciones personalizadas

Excel cuenta con un inmenso número de funciones integradas, de la más diversa índole. Asimismo, hay numerosos complementos (el más famoso es Herramientas para análisis) que agregan todavía más funciones a Excel. Por si fuera poco, podemos crear nuestras propias funciones, lo cual puede ser útil en el (improbable) caso de que no exista una función que haga lo que necesitemos; o bien, para simplificar nuestras fórmulas. Aunque para lograrlo es necesario tener conocimientos más o menos sólidos en programación de macros.

Programar una función es parecido a programar una macro. De hecho, algunos autores llaman también macros a las funciones personalizadas. No obstante, existe una diferencia fundamental entre ambas: una función solo puede devolver un resultado. No puede operar o cambiar el entorno de Excel. (OK, sí puede, pero son excepciones ya muy rebuscadas). Lo siguiente es una macro:

Sub insertahoja()
ActiveWorkbook.Worksheets(1).Copy Before:=ActiveWorkbook.Worksheets(4)
ActiveWorksheet.Name = "Hoja número 3"
End Sub

En cambio, esto es una función:

Private function micalculo(num_1 As Integer, num_2 As Integer) As Integer

Dim j As Integer

If num_1 <= num_2 Then
j = num_2 - num_1
Else
j = num_1 - num_2
End If

micalculo = j

End function

Como vemos, en el primer caso, alteramos el entorno Excel al copiar una hoja en el libro activo, mientras que en el segundo, solo obtuvimos el resultado j (que es la diferencia absoluta entre dos números). No hicimos nada más. Otra diferencia evidente es la forma de declarar y terminar una función con las cláusulas Private function y End function. Por lo demás el lenguaje utilizado es el mismo.

Por otra parte, el resultado que devuelve una función puede no ser (como pudiera pensarse) un número. Puede ser texto, un resultado lógico (FALSO o VERDADERO), un rango, un nombre, entre otros. Por ello, es necesario declarar el tipo de dato del resultado (el último "As Integer").

Una función puede ser utilizada o llamada por una macro, por otra función, o a través de la interfaz de Excel. Para el primer caso veamos este ejemplo:

Sub insertahoja()
ActiveWorkbook.Worksheets(1).Copy Before:=ActiveWorkbook.Worksheets(4)
ActiveWorksheet.Name = "Hoja número 3"

ActiveWorksheet.Range("A3") = micalculo(ActiveWorksheet.Range("A1").Value, ActiveWorksheet.Range("A2").Value)

End Sub

Con esta macro, modificación de la previa, escribiremos en la celda A3 el resultado de la fórmula =micalculo(A1, A2)

Para el segundo caso, veamos:

Private function otrocalculo(num_1 As Integer, num_2 As Integer) As Integer

j = micalculo(num_1 As Integer, num_2 As Integer)

j = j * -1

otrocalculo= j

End function

Esta función simplemente multiplica por - 1 el resultado de micalculo(num_1 As Integer, num_2 As Integer)

Como último caso, si queremos usar esta función desde la interfaz de Excel, simplemente escribimos en una celda:

=MICALCULO(A1, A2)

Si queremos utilizar el Asistente para funciones de Excel, necesitamos dar clic en la categoría Definidas por el usuario, al final de la lista de categorías. Un detalle importante a tener en cuenta es que Excel de alguna manera "recuerda" la forma en que escribimos el nombre de la función la primera vez, es decir, con mayúsculas o minúsculas. Si la primera vez que escribamos la función utilizamos minúsculas, Excel la mostrará siempre así en la barra de fórmulas.

Hemos visto un ejemplo sencillo, pero cuando tenemos necesidad de hacer cálculos complejos o grandes, podemos mejorar la legibilidad de la fórmula simplemente agregando argumentos a una sola función.

18 de noviembre de 2008

Excel on-line

Recientemente, Microsoft anunció el lanzamiento de Microsoft Office Live, una versión on-line de sus productos insignia Word, Power Point, One Note y por supuesto, Excel. MS promete que estas aplicaciones web permitirán crear, editar y compartir con el explorador nuestros documentos. Desde luego que no podrán igualar la funcionalidad de sus contrapartes de escritorio, pero hay que ver las ventajas: nada de actualizaciones periódicas, incompatibilidad de versiones, corre en Firefox, es gratis...

Finalmente, Microsoft ha decidido incursionar en el software de oficina on-line, mercado actualmente dominado por Google (¿alguna objeción?) y su suite Docs.


De acuerdo a Read Write Web, las aplicaciones tendrán los mismos nombres que sus contrapartes de escritorio. La versión Beta estará disponible este mismo año.

Lamentablemente, parece ser que la de Excel será una versión muy parecida a 2007. Como sea, démosle una oportunidad. Si llega a igualar la funcionalidad de una Google Spreadsheet,

bienvenido sea.

12 de noviembre de 2008

Feliz cumpleaños, Excel

El mes pasado, concretamente, el 17 de octubre, se cumplieron 29 años del lanzamiento de VisiCalc, la primera hoja de cálculo comercial y predecesor más antiguo de Excel.

Durante sus primeros cinco años de vida, VisiCorp. (compañía propietaria) fue la mayor vendedora de software, venciendo rotundamente a Microsoft.

El programa original aún corre en las PC's actuales (descargar). A pesar de la simpleza que le dan sus 27KB (es correcta la "K"),

el impacto que tuvo fue enorme. Fue el programa que realmente acercó los PC a la gente común. De no ser por VisiCalc no hubiera sido posible el sueño de Bill Gates de colocar una PC en cada hogar norteamericano. Antes de su lanzamiento, las computadoras solo podían ser utilizadas por programadores experimentados. El resto de la gente solo podía utilizar programas ya elaborados que resolvían problemas muy específicos. VisiCalc le dio a la gente el poder de resolver problemas "personales" sin la necesidad de tener formación como programador. El hecho de poder cambiar un número en cualquier parte de la pantalla, y ver inmediatamente los resultados, brindó formas de análisis nunca antes vistas, y de forma totalmente intuitiva.

Su manual constaba de ocho páginas.


Sus creadores, Dan Bricklin y Bob Frankston:

La competencia responde. El 26 de enero de 1983 Lotus Software presenta el software para computadoras personales Lotus 1-2-3, que llegó a convertirse en el estándar de las hojas de cálculo en los inicios de la computación personal. La primera versión para DOS, desplazó del mercado rápidamente a VisiCalc, que dominaba desde 1980. Su enorme popularidad afianzó el éxito de los PC en las empresas. Fiel al sistema operativo OS/2, fue lento en su migración al sistema Windows, lo que motivó de su debacle.

Desarrollado por estudiantes de doctorado de Harvard, sigue disponible como parte de la suite Lotus SmartSuite, después de mucho tiempo de reusarse a migrar a Windows.

En 1987, Lotus demandó legalmente por separado a Paperback Software y a Mosaic Software, alegando que eran copias de Lotus 1-2-3. Por su parte VisiCorp. demandó a Lotus, aduciendo que 1-2-3 era idéntico a VisiCalc. Lotus ganó todas estas batallas legales, pero perdió la guerra por el mercado con Microsoft.

Otros competidores con más pena que gloria fueron Quatro, Fortran y Multiplan.

Mientras tanto, Microsoft desarrollaba Excel. La primera versión de Excel, la 0.99, fue creada originalmente para Macintosh. Fue uno de los primeros programas en utilizar una interfaz gráfica con menús despleglables así como de un puntero manejado por mouse. Esta interfaz gráfica demostró ser mucho más fácil de usar que las líneas de comandos de DOS. Así, motivó que mucha gente se comprara una Mac con el único objetivo de conocer a Excel.

Apoyado por la gran popularidad que empezó a tener el sistema operativo Windows, ha sido el software de hoja de cálculo líder desde 1985, año en que vio la luz la versión 1.0 para Windows. Durante mucho tiempo, fue la única hoja de cálculo en correr bajo Windows. Fue solo hasta 1992 que otros competidores crearon hojas de cálculo para Windows.

A la fecha han sido lanzadas 11 versiones (Excel 2007 es oficialmente la versión 12, no obstante, no hubo Excel 6.0, ya que a partir de la versión 7 Microsoft decidió estandarizar las versiones de todos los productos de la suite Office).

Actualmente, Excel 2003 es la versión más popular en todo el mundo. La gran mayoría de las entradas de este blog tratan sobre la versión 2003. 2007 no fue bien aceptado debido a los muchos inconvenientes que presenta y a su interfaz muy diferente a la de sus predecesores, tema de una futura nota.

11 de noviembre de 2008

Sofía, asistente personal

Para aquellos usuarios de la versión 2007, Microsoft pone a su disposición a Sofía, la asistente robot. Aparece en la página principal del sitio oficial de MS Excel:


Como vemos, Sofía tiene un rostro y hasta una cuenta de Messenger. Solo hay que dar un par de clics para agregarla a nuestros contactos. O bien, darla de alta con el nombre offibot@hotmail.com.

Siempre he sido víctima de la curiosidad. No tuve más remedio que agregarla a mis contactos y ponerla a prueba. Esta fue la "conversación" que tuve con "ella" (curiosamente, MS envía un mensaje de alerta sobre riesgos de seguridad al dar clic en los enlaces. Enlaces de su propio sitio...):

-Hola
Sofia dice:
-La declaración de privacidad en línea de Microsoft (http://go.microsoft.com/fwlink/?LinkId=74170) se aplica a toda información que proporciones a este agente de Windows Live.
-Para poder darte respuestas más acertadas, ¿me podrías decir en qué país vives? Esto solo lo utilizaré para dirigirte a los sitios más adecuados de acuerdo a tu respuesta. En un futuro puedes cambiar tu selección con sólo poner el nombre del país en nuestra conversación.
Leonel dice:
-México
Sofia dice:
-Entendido, te mostraré las páginas que corresponden a tu nacionalidad
¡Hola! leonel. Me llamo Sofía, y soy un robot de Microsoft. Puedo resolver tus dudas sobre Word, Excel, PowerPoint y Outlook de Office 2007, y también sé algo sobre los problemas más frecuentes de instalación y soporte. Intentaré contestarte siempre con una URL en la que encontrarás la información que buscas. ¿En qué puedo ayudarte?
Leonel dice:
-¿Cómo hago un informe de tabla dinámica en Excel 2007?
Sofia dice:
-Buena pregunta. En el siguiente articulo puedes encontrar como crear una tabla dinámica o Pivote. Un Tip si quieres buscar más información. En el recuadro de busqueda de esa página escribe tabla dinamica, te sorprenderas. http://office.microsoft.com/es-mx/excel/HA010864773082.aspx

-Sofia te está invitando a iniciar Office Online. ¿Deseas Aceptar (Alt+W) o Rechazar (Alt+X) la invitación?

Has aceptado la invitación para iniciar Office Online
Leonel dice:
-Y estudias o trabajas?
Sofia dice:
-No muchas personas saben que al tener Office tienen acceso a usar más de 400,000 imágenes para usarlos en sus documentos. Si quieres ver algunas haz clic aquí: http://office.microsoft.com/es-es/clipart/FX101321033082.aspx


Conclusiones: Sofía no existe. No es real. (¿Por qué Sofía? ¿Por qué no Maricela, o Britney?) Solo es un agente con respuestas predefinidas que lo único que hace es enviarnos vínculos a páginas relacionadas en el sitio de MS. Cuando pasamos algún tiempo sin hablarle, nos comienza a enviar tips diversos. Igualmente, predefinidos. La única ventaja que le veo es que está disponible a través del Messenger.

Supongo que los robots japoneses deben comenzar a preocuparse.

7 de noviembre de 2008

Para los fanáticos de AC/DC

El equipo creativo del grupo de rock AC/DC, Phil Clandillon y Steve Milbourne, ha anunciado el lanzamiento del primer video musical en formato .xls. La canción, Rock N Roll Train. Su objetivo, dijeron, era que el video pudiera superar los firewalls más potentes. A fin de cuentas, a nadie le prohiben recibir un archivo Excel ¿cierto?




El video, en realidad, es una macro (recordemos habilitar las macros antes de abrir el archivo) que copia las "imágenes" (texto en realidad) de la columna Q mientras reproduce un archivo WAV. No imagino la cantidad de trabajo que representó dibujar cada uno de los frames de este archivo.

El código del archivo no está protegido. Para ver las imagenes, primero hay que desactivar el evento Worsheet_SelectionChange de la hoja y mostrar la columna Q.

Descargar.

28 de octubre de 2008

Descargar macros de la red

En la red hay una gran cantidad de sitios que ponen a nuestra disposición macros de la más diversa índole. Ejemplos de estos sitios son Daily Dose of Excel, Erlandsen Data, xltoday entre muchos otros (en la sección Recursos Excel, al margen, encontrarán los enlaces a estos sitios y varios más). Lo más valioso de estas macros es que son open source, es decir, públicas y gratuitas, ahorrándonos gran cantidad de trabajo y tiempo.

Un detalle común a casi todos estos sitios es que no explican al lector cómo descargar las macros a sus equipos (como dicen algunos, "a mi Excel"). ¿Cómo copiar una macro a "nuestro Excel" y ejecutarla? Seguimos los siguientes pasos:

Supongamos que queremos utilizar la siguiente macro de ejemplo (de Daily Dose of Excel):

Sub CreateTest()

Dim rCell As Range
Dim sFname As String
Dim lFnum As Long
Dim sInput As String
Dim sOutput As String

If TypeName(Selection) = "Range" Then
'Pick a name for the test file
sFname = Application.InputBox("Enter test file name to create.", "File Name")

If sFname <> "False" Then 'if inputbox not canceled

'Add file extension if not there
If Right$(sFname, 4) <> ".txt" Then
sFname = sFname & ".txt"
End If

sInput = "[Input]" & vbNewLine
sOutput = "[Output]" & vbNewLine

'Build input and output strings based on selection
For Each rCell In Selection.Cells
If rCell.HasFormula Then
sOutput = sOutput & ActiveSheet.Name & "|" & _
rCell.Address & "|" & rCell.Value2 & vbNewLine
Else
sInput = sInput & ActiveSheet.Name & "|" & _
rCell.Address & "|" & rCell.Value2 & vbNewLine
End If
Next rCell

sOutput = Left$(sOutput, Len(sOutput) - 2) 'delete new line

'Create the test file
lFnum = FreeFile
Open sFname For Output As lFnum

Print #lFnum, sInput
Print #lFnum, sOutput

Close lFnum

End If
Else
MsgBox "Please select one or more cells and try again"
End If

End Sub


Como leemos en Daily Dose... lo que hace esta macro es generar un archivo de texto que lista las referencias ingresadas como argumento, y su correspondiente valor, separadas en entradas de fórmula y fórmulas. Útil para auditar lás fórmulas de nuestros modelos.

El primer paso es seleccionar el texto de la macro y copiarlo.

A continuación, activamos Excel y vamos al editor de Visual Basic (Herramientas - Macro - Editor de Visual Basic, ó Alt + F11).

Una vez aquí, tenemos que determinar algo muy importante: el ámbito de aplicabilidad de la macro. Es decir, si la macro va a ser utilizada sólo en determinado libro o bién, en todos los libros. Esto dependerá del análisis general que hagamos de la situación. En este caso, supongamos que queremos que la macro esté disponible en todos los libros. Por lo tanto, la guardaremos en nuestro libro de macros personal.

En el editor de Visual Basic, en el Explorador de proyectos, damos doble clic en Personal y a continuación, pegamos el código que hemos copiado al final del código existente.



Si queremos pegar la macro en su propio módulo, lo insertamos con Insertar - Módulo.
Finalmente, salimos del editor, con Archivo - Salir y volver a Microsoft Excel (Alt + q). Podemos guardar previamente la macro aunque esto no es estrictamente indispensable.

Procedamos ahora a ejecutar la macro. De acuerdo a las instrucciones de la nota original, primero hay que seleccionar un grupo de celdas con o sin fórmulas. Después vamos a Herramientas - Macro - Macros... (ó Alt + F8). En este punto, podemos elegir asignar una tecla de método abreviado a la macro y/o agregar una descripción a la misma dando clic en el botón Opciones...
Finalmente, seleccionamos el nombre de la macro y hacemos clic en Ejecutar.

En caso de que queramos que la macro solo esté disponible en determinado libro, entonces, damos doble clic en el proyecto correspondiente en el Explorador de proyectos. Acto seguido, damos Insertar - Módulo, y pegamos aquí el código.

21 de octubre de 2008

Functions list

Versión en Español.

Please read this post.

=CONVERT, 638844971
=WORKDAY, 1679294519
=YEARFRAC, 734789689
=WEEKNUM, -601489317
=AMORLINC, 2050949212
=AMORDEGRC, -760479651
=RECEIVED, 1825046605
=COUPDAYS, -1225457601
=COUPDAYBS, -1886650304
=COUPDAYSNC, 85852225
=COUPPCD, 1738735682
=COUPNCD, -2019426237
=COUPNUM, -1858994114
=DURATION, -2027749294
=MDURATION, -2114781101
=ACCRINT, -692060092
=EFFECT, 226623539
=TBILLEQ, -600899503
=TBILLPRICE, -2087911345
=TBILLPRICE, -2087911345
=TBILLYIELD, -2095251376
=DOLLARDE, -2108293060
=DOLLARFR, -2128216003
=CUMIPMT, 1933180986
=CUMPRINC, -1730019269
=PRICE, -1461321658
=PRICEDISC, 1303642186
=ODDFPRICE, -2005663660
=ODDLYIELD, 1307508823
=YIELDMAT, 526319689
=YIELD, 1736245319
=YIELDDISC, -2110848949
=ODDFYIELD, 1206845525
=ODDLYIELD, 1307508823
=YIELDMAT, 526319689
=DISC, -1081081780
=INTRATE, -1046478770
=NOMINAL, 1421541428
=XIRR, -1080295335
=FVSCHEDULE, 1605632050
=XNPV, -841220008
=RANDBETWEEN, 1788346458
=GCD, 1334050856
=LCM, -15466455
=MULTINOMIAL, -164822998
=SQRTPI, 406257673
=MROUND, 147456011
=SERIESSUM, 1365508135
=SERIESSUM, 1365508135
=BESSELI, 571539472
=BESSELJ, 572588046
=BESSELY, 588316687
=BIN2DEC, 908066819
=BIN2HEX, -141557713
=BIN2OCT, -2125463506
=COMPLEX, -1477705690
=CONVERT, 638844971
=DEC2BIN, 908066853
=DEC2HEX, -1690304477
=DEC2OCT, -310378460
=DELTA, -286195700
=FACTDOUBLE, 1382350854
=ERF, 2124677124

Partial list of ATP's functions and returned results when typed without arguments and parenthesis.

15 de octubre de 2008

Unexpected result

Versión en español.

When you type an equal sign and a function name (for example "=SUM") and press Enter, you get the #NAME? error, because Excel "thinks" that you want to work with a name, wich is not defined.

Or not?

A few days ago, I was working on a model involving date calculations. Since I wanted to calculate the number of labor days between two dates, I used the NETWORKDAYS function.
However, while writing the formula, I (accidentally) hit Enter right after the function name (i. e. "=NETWORKDAYS", Enter). Unexpectedly Excel returned:

840368184

Where that number comes from, what does it refers to, or why I got preciselly that number and no other, is something that I completely ignore. Since this behavior was totally unexpected, I wanted to repeat it in other machines. Same result. I wondered if this would happen too with other functions, so I tried with =MAX, =MIN, =OFFSET, =RIGHT, =MID, and some others. In all this cases I got the expected #NAME? However, trying with =CONVERT gave me:

638844971

Other results were:

=WORKDAY, 1679294519

=CONVERT, 638844971

There's even negative results. =WEEKNUM returns -601489317.

I concluded that this is an exclusive behavior of the Analysis Toolpak add-in functions (for a complete list of functions and results, click here).

Continuing with these tests in my lab (sure...), I tested now with other add-ins functions I've downloaded from the web. For example, with =COUNTDIFF I got: 1769668796. With all the functions of my add-ins I watched the same behavior. After this, I tried with some UDF's. In all cases I got #NAME?, so I had to modify my original theory: This behavior ocurrs with any function that belongs to any add-in (ATP or any other), but it doesn't happen nor with built-in neither user defined functions.

Since all this was kind of an oddity to me, I sent an e-mail to John Walkenbach (brief Spanish biography). This was my original message:

Hi John:

I entered this “formula”:

=CONVERT

Notice that I didn’t put the parenthesis. Excel returned:

638844971

That happens only whit add-in’s functions. With any other built-in function Excel returns, as usual, #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.

This was his reply:

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

If any reader have some idea of why Excel returns this mysterious numbers, please post your comments.

14 de octubre de 2008

Lista de funciones

English version.

Por favor lean
esta nota.

=CONVERTIR, 638844971
=DIA.LAB, 1679294519
=FRAC.AÑO, 734789689
=NUM.DE.SEMANA, -601489317
=AMORTIZ.LIN, 2050949212
=AMORTIZ.PROGRE, -760479651
=CANTIDAD.RECIBIDA, 1825046605
=CUPON.DIAS, -1225457601
=CUPON.DIAS.L1, -1886650304
=CUPON.DIAS.L2, 85852225
=CUPON.FECHA.L1, 1738735682
=CUPON.FECHA.L2, -2019426237
=CUPON.NUM, -1858994114
=DURACION, -2027749294
=DURACION.MODIF, -2114781101
=INT.ACUM, -692060092
=INT.EFECTIVO, 226623539
=LETRA.DE.TES.EQV.A.BONO, -600899503
=LETRA.DE.TES.PRECIO, -2087911345
=LETRA.DE.TES.PRECIO, -2087911345
=LETRA.DE.TES.RENDTO, -2095251376
=MONEDA.DEC, -2108293060
=MONEDA.FRAC, -2128216003
=PAGO.INT.ENTRE, 1933180986
=PAGO.PRINC.ENTRE, -1730019269
=PRECIO, -1461321658
=PRECIO.DESCUENTO, 1303642186
=PRECIO.PER.IRREGULAR.1, -2005663660
=RENDTO.PER.IRREGULAR.2, 1307508823
=RENDTO.VENCTO, 526319689
=RENDTO, 1736245319
=RENDTO.DESC, -2110848949
=RENDTO.PER.IRREGULAR.1, 1206845525
=RENDTO.PER.IRREGULAR.2, 1307508823
=RENDTO.VENCTO, 526319689
=TASA.DESC, -1081081780
=TASA.INT, -1046478770
=TASA.NOMINAL, 1421541428
=TIR.NO.PER, -1080295335
=VF.PLAN, 1605632050
=VNA.NO.PER, -841220008
=ALEATORIO.ENTRE, 1788346458
=M.C.D, 1334050856
=M.C.M, -15466455
=MULTINOMIAL, -164822998
=RAIZ2PI, 406257673
=REDOND.MULT, 147456011
=SUMA.SERIES, 1365508135
=SUMA.SERIES, 1365508135
=BESSELI, 571539472
=BESSELJ, 572588046
=BESSELY, 588316687
=BIN.A.DEC, 908066819
=BIN.A.HEX, -141557713
=BIN.A.OCT, -2125463506
=COMPLEJO, -1477705690
=CONVERTIR, 638844971
=DEC.A.BIN, 908066853
=DEC.A.HEX, -1690304477
=DEC.A.OCT, -310378460
=DELTA, -286195700
=FACT.DOBLE, 1382350854
=FUN.ERROR, 2124677124

Parte de las funciones del complemento Herramientas para análisis y resultados obtenidos al tipearlas sin argumentos ni paréntesis.

2 de octubre de 2008

John Walkenbach: Mr. Spreadsheet

John Walkenbach (Mr. Spreadsheet) es considerado la máxima autoridad mundial en hojas de cálculo (léase Excel).
John se dedica de tiempo completo al estudio y desarrollo de productos en Excel. Es autor de The Spreadsheet Page, así como de más de 50 libros de Excel (listados aquí). Ha escrito más de 300 artículos y revisiones en revistas como InfoWorld, PC World, PC/Computing, entre otras. Fue autor durante tres años de la columna mensual de hojas de cálculo de PC World. Asimismo, es autor de The Spreadsheet Page Blog y co-autor de Daily Dose of Excel, dos de los blogs sobre Excel más populares. Desde el 2000, ha sido nombrado Excel MVP por Microsoft por noveno año consecutivo. Ha elaborado numerosos complementos y programas en Excel, la mayoría de ellos gratuitos, y continuamente da conferencias. Recibe las nuevas versiones de Excel seis meses antes que los demás usuarios para evaluarlas. Actualmente reside en Tucson, Arizona, en los Estados Unidos.

El día de ayer, 1 de octubre, recibí un correo del sr. Walkenbach.
En él, Mr. Spreadsheet me da su opinión acerca de un raro comportamiento que observé en Excel 2003, el cual documentaré después, con más calma (por aquello de la piratería, you know...). Esta fue su respuesta tal cual:


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


En lo que a Excel se refiere, el haber encontrado algo sobre lo cual Mr. Spreadsheet no tenía noticia, constituye uno de mis mayores logros.
Es exactamente esto lo que me apasiona de Excel: su absoluta inabarcabilidad. Nadie, ni siquiera John, puede preciarse de conocerlo todo.

Nota: ATP son las iniciales de Analysis Toolpak, nombre en inglés de Herramientas para análisis.

1 de octubre de 2008

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.

25 de septiembre de 2008

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).

24 de septiembre de 2008

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.

9 de septiembre de 2008

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 más ú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, por decir 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 o 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 expresión 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 habilidad del usuario para elaborar expresiones lógicas. 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.

5 de septiembre de 2008

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.

3 de julio de 2008

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.

26 de junio de 2008

La cámara fotográfica

La cámara fotográfica de Excel permite tomar una "fotografía" de un rango de celdas y después insertarla en cualquier otra parte de la hoja o del libro, como si fuera una imagen cualquiera. La principal ventaja de esto es que nuestras fotografías (de 64 megapixeles...) serán dinámicas: cualquier cambio que ocurra en el rango de origen se verá reflejado en la imagen.

Para poder utilizar esta característica, primero debemos sacarla del olvido, personalizando las barras de herramientas. Procedemos como sigue:
Ponemos a Excel en modo Personalizar. Para ello, damos Herramientas - Personalizar. En el cuadro de diálogo Personalizar que aparece, vamos a la pestaña Comandos, seleccionamos la categoría Herramientas y buscamos el icono de la cámara (que se llama, así es, "Cámara"):


Finalmente arrastramos el icono hacia una de nuestras Barras de herramientas y damos clic en Cerrar.

Para empezar a tomar instantáneas, seleccionamos el rango que queremos fotografiar. Luego damos clic en el botón Cámara y seleccionamos con el mouse la zona donde queremos colocar la imagen:


Como sucede con cualquier imagen, podemos ajustar su tamaño y formato (clic derecho - Formato de imagen...):

Incluso, podemos girar la imagen. De lo único que debemos cuidarnos es de no colocar la imagen sobre el mismo rango fotografiado, ya que aparecería "eco" en la imagen:

Indudablemente esta es una herramienta útil. Pero sabiamente, Microsoft decidió ocultarla en el fin del mundo.

24 de junio de 2008

Gráficos velocímetro II

Continúa de la nota anterior.

Procedamos a la parte difícil, la aguja de nuestro velocímetro. Esto se hace con un gráfico de dispersión XY (que es distinto a un gráfico de líneas). Para lograr que la aguja marque la proporción exacta en el disco (i. e. la proporción de circunferencia correcta), necesitamos convertir el alcance (siguiendo el ejemplo, 88%) en radianes para posteriormente, con las funciones SENO y COS, calcular las coordenadas x y y del punto correspondiente. Luego simplemente agregamos el punto (0, 0) para que Excel los una con la línea correspondiente.
Recordemos los datos a graficar y la tabla auxiliar que ya hemos hecho para la elaboración del disco:
Calculemos ahora cúantos grados debe medir cada punto porcentual. Para ello escribimos en la celda B8 la fórmula:

=(B3-D2)/(D5-D2)*PI()
Resultando 1.837571.
Ahora elaboramos en A10:C12 otra tabla auxiliar:

En B12 escribimos la fórmula:

=-COS(B8), y en C12:

=SENO(B8)

Con esto tenemos ya las coordenadas de los dos puntos que necesitamos: (0, 0) y (0.2636, 0.9646). El siguiente paso es copiar estas dos puntos en la gráfica. Para ello seleccionamos el rango A10:C12, y damos Edición - Copiar (o Ctrl + Insert). Seleccionamos los datos de la gráfica (el "disco") y damos Edición - Pegado especial... (no clic derecho - Pegado especial...). Excel mostrará el siguiente cuadro de diálogo:

Seleccionamos los valores mostrados y damos Aceptar. La gráfica queda:


Evidentemente no es lo que buscábamos. Seleccionamos la segunda serie de datos (la exterior), y damos clic derecho - Tipo de gráfico - Dispersión XY subtipo Dispersión - Aceptar.

Seleccionamos el Eje Y, clic derecho - Formato de ejes... Escala. En valor mínimo escribimos -1, en valor máximo 1 y en Eje de valores (X) cruza en: establecemos 0. Repetimos los mismo con el eje X:

Damos clic derecho en la nueva serie de datos, Formato de serie de datos... y en Tramas - línea seleccionamos Personalizada y el estilo, color y grosor preferido. En Marcador seleccionamos Ninguno. Aceptar.

Si queremos reducir el tamaño de la aguja entonces aumentamos la escala de ambos ejes. Finalmente eliminamos ambos ejes y sus etiquetas:
Para obtener los colores exactos de Sales Force, necesitamos modificar la paleta de colores de Excel, tema de otra futura nota.
Creative Commons License
Esta obra está bajo una licencia de Creative Commons.
Excel, Excel 2003, Excel 2007 y el logo XL son marcas registradas de Microsoft Corporation.