Soluciones simples a problemas complejos con Excel - Parte 1

Page 1

Promedio móvil Problema con los decimales Bloqueo automático De Excel a Word Juego con Excel Búsqueda aproximada Celdas vacías Subtotales mensuales Rango autoajustable

Error en BUSCARV Elegir de la lista Número de semana Doble título Macro llama a macro Búsqueda en 3D Recálculo manual Condiciones variables Menú de gráficos



Editorial Esta edición especial de USERS recopila las consultas de los lectores y los proyectos más interesantes que se gestaron en la sección “Superplanilla” de revista USERS. Claudio Sánchez, el mayor especialista en Excel

Promedio móvil Problema con los decimales Bloqueo automático De Excel a Word Juego con Excel Búsqueda aproximada Celdas vacías Subtotales mensuales Rango autoajustable

Error en BUSCARV Elegir de la lista Número de semana Doble título Macro llama a macro Búsqueda en 3D Recálculo manual Condiciones variables Menú de gráficos

de América Latina, publica desde hace años esta sección, que está llena de trucos, secretos y verdaderos tesoros de conocimiento. Algunas de las consultas se resuelven con funciones, para otras hay que utilizar macros, en algunos casos un pequeño truco alcanza para resolver el problema. Pero lo más interesante es que son todos ejemplos prácticos de la vida real, tomados de las necesidades cotidianas de los lectores.

Sumario Promedio móvil .............................. 2 Problema con los decimales ...... 4 Bloqueo automático...................... 6 De Excel a Word ............................ 8 Juego con Excel .......................... 10 Búsqueda aproximada ............... 15 Celdas vacías ............................... 16 Subtotales mensuales ................ 17 Rango autoajustable ................... 19 Error en BUSCARV....................... 20 Elegir de la lista .......................... 22 Número de semana ..................... 23 Doble título ................................... 24 Macro llama a macro ................. 25 Búsqueda en 3D ........................... 26 Recálculo manual ....................... 28 Condiciones variables................ 30 Menú de gráficos ........................ 32


Promedio móvil « En una columna de una planilla Excel cargo los valores, uno debajo del otro. Necesito conocer, en todo momento, el promedio de los últimos cinco valores cargados. Armé una macro que funciona bastante bien, pero me gustaría algo más directo, usando fórmulas. ¿Hay alguna función, o combinación de funciones, para calcular este “promedio móvil”? « Para calcular un promedio móvil o, en general, cualquier cálculo que involucre un rango variable se necesitan dos pasos:

La fórmula de la celda [B1] cuenta cuántos datos hay en la lista. Como la lista comienza en [A1], el resultado es igual a la fila ocupada por el último dato.

O Identificar el rango. O Aplicar la función correspondiente.

Vamos a lo primero. Supongamos que los datos están en la columna [A], a partir de [A1], uno debajo del otro y sin celdas en blanco intermedias. En estas condiciones, la función =CONTARA(A:A) nos dice cuál es la fila de última celda de la lista. Supongamos que calculamos esa fila en la celda [C1]. Con esta información armamos el rango ocupado por los últimos cinco datos de la lista: =”A”&C1-4&”:A”&C1. Esta fórmula concatena cuatro términos: O Una letra A O El número de fila que está cuatro celdas más arriba que el último dato. O Dos puntos, seguidos de otra letra A. O El número de fila del último dato. Por ejemplo si la función CONTARA nos dice que la lista llega hasta la fila 12, la expresión anterior concatenaría A, 8, :A y 12. El resultado sería “A8:A12”, rango de los valores a promediar. Supongamos que hacemos esta concatenación en la celda [C2].

2 > Soluciones simples a problemas complejos con Excel 1


Ahora solamente resta aplicar a este rango la función PROMEDIO. Pero no podemos hacer =PROMEDIO(C2). No queremos promediar el valor de la celda [C2] sin los valores del rango indicado en [C2]. Para eso tenemos que aplicar previamente la función INDIRECTO: =PROMEDIO(INDIRECTO(C2)). Como su nombre lo indica, la función INDIRECTO hace una evaluación indirecta: evalúa el argumento que, en este caso es un rango, y luego le pasa ese rango como argumento a la siguiente función. El resultado será calcular el promedio de los cinco últimos datos de la lista. Estas fórmulas requieren que la lis-

La fórmula de la celda [B2] arma el rango ocupado los cinco últimos datos de la lista de la izquierda. ta tenga, por lo menos, cinco datos para no obtener un rango con coordenadas negativas. Podríamos asegurar el cumplimiento de esta condición con una función SI.

La fórmula de la celda [C3] aplica la función INDIRECTO, dentro de PROMEDIO, para calcular el promedio de los datos del rango armado en [C2]. www.redusers.com > 3


Problema con los decimales « Tengo una lista de importes que redondeo aplicando formato de dos decimales. Cuando calculo el total, aparecen diferencias de uno o dos centavos. No es mucho, pero la suma debe ser exacta. ¿A qué se deben estas diferencias y cómo se resuelve el problema?

« Cuando redondeamos un valor aplicando un formato que limita los decimales, estos quedan escondidos, pero siguen ahí. Por ejemplo, si hacemos 2,3 más 2,3 el resultado será 4,6. Si luego aplicamos formato sin decimales los tres décimos desaparecen de los sumandos pero el 4,6 se convierte en 5. Nos queda-

ría la suma 2 + 2 = 5. Hay distintas formas de resolver esto. Por ejemplo, le podemos pedir a Excel que elimine esos decimales ocultos tras el redondeo. Eso es lo que hace la opción [Precisión de pantalla]: los decimales ocultos a través del formato no participarán en los cálculos. Para activarla: 1. Hacemos clic en la solapa [Archivo] y luego en [Opciones]. 2. Seleccionamos la categoría [Avanzadas]. 3. Dentro del grupo [Al calcular este libro], marcamos la opción [Establecer precisión de pantalla]. 4. Aparecerá un cartel que nos dice

El total calculado en la celda [D6] debería tener siete centavos. Esta diferencia se debe a decimales ocultos tras la aplicación del formato de moneda con dos decimales. En la columna [E] vemos los valores, en formato General. 4 > Soluciones simples a problemas complejos con Excel 1


La fórmula de la celda [D6] redondea los valores del rango [D2:D5] antes de proceder a la suma. que los datos “perderán precisión permanentemente”. Eso significa que los datos fijos que tengan decimales ocultos perderán esos decimales. No así los que sean resultados de cálculos. 5. Aceptamos la advertencia. 6. Hacemos clic en [Aceptar]. Dado que esto elimina los decimales no visibles, desaparece el problema de “decimales escondidos”.

Otra solución consiste en usar una fórmula más compleja para hacer la suma. Por ejemplo, si el rango a totalizar es [D2:D5], la expresión es =SUMA(REDONDEAR(D2:D4;2)). A esta fórmula hay que darle entrada con la combinación <Control+ Shift+Enter>. La fórmula redondea individualmente cada valor, antes de hacer la suma.

Si activamos esta opción Excel elimina los decimales ocultos tras la aplicación de un formato. Solamente participarán de los cálculos los decimales visibles. www.redusers.com > 5


Bloqueo automático « Tengo una hoja Excel donde mis empleados deben escribir ciertos datos en columna. Me gustaría que, una vez que escriben un dato, ese dato ya no pueda modificarse. Sé cómo proteger una celda, pero no sé cómo hacer que esa protección se active automáticamente. ¿Es eso posible?

« Este problema se puede resolver con una macro automática que bloquee las celdas de una columna a medida que se van escribiendo datos en ellas. La cuestión implica varias opciones interesantes. En primer lugar, una celda queda bloqueada (y, por lo tanto, inmodificable) cuando se cumplen dos condiciones:

O La celda tiene activada la opción [Bloqueada] dentro de su formato de celda. O La hoja tiene activada la protección global.

Estas dos opciones deben manejarse a través de una macro automática. Existen macros que se ejecutan automáticamente ante ciertos eventos: se abre un archivo, se imprime, se selecciona una hoja o, en este caso, se modifica una celda. Esta macro se escribe en una ventana de código asociada a la hoja donde se quiere aplicar el bloqueo: 1. Dentro de la ficha [Programador] hacemos clic en el botón [Visual

Esta macro bloquea (y vuelve inmodificables) las celdas de la columna [A] a medida que vamos cargando datos en ellas. Se ejecuta automáticamente cada vez que modificamos el valor de una celda. 6 > Soluciones simples a problemas complejos con Excel 1


Aquí descolgamos los eventos que desencadenan la ejecución de una macro automática. Basic]. Esto abre el editor de macros. 2. Una vez dentro del editor, tomamos las opciones [Ver/Explorador de proyectos]. 3. Dentro del explorador, seleccionamos la hoja donde se aplica el bloqueo. 4. Tomamos las opciones [Ver/Código]. Esto abre la ventana de código asociada a la hoja. En la parte superior aparecen dos listas desplegables. En ellas seleccionamos el evento que desencadenará la ejecución de la macro: 1. En la lista de la derecha seleccionamos [Worksheet]. 2. En la lista de la izquierda seleccionamos [Change]. Con esto obtenemos la primera y la última línea de la macro, que completamos con las siguientes instrucciones:

Private Sub Worksheet_ Change(ByVal Target As Range) If Target.Column = 1 Then ActiveSheet.Unprotect Target.Locked = True ActiveSheet.Protect End If End Sub

En esta macro, la variable Target identifica la celda cuya modificación desencadena la ejecución. La macro, primero, se pregunta si la celda modificada pertenece a la primera columna (Target.Column = 1). En ese caso, desactiva la protección global, bloquea la celda y reactiva la protección. Toda hoja de Excel tiene, por defecto, todas sus celdas bloqueadas. Por este motivo, antes de empezar a usar esta planilla, debemos desbloquear toda la hoja:

www.redusers.com > 7


De Excel a Word 1. Hacemos clic en la esquina superior izquierda de la hoja. Con esto se seleccionan todas las celdas. 2. Oprimimos la combinación <Control+1> (el número uno). Aparece el cuadro de opciones de formato de la celda. 3. Seleccionamos la ficha [Proteger]. 4. Desmarcamos la opción [Bloqueada] y hacemos clic en [Aceptar]. Esto deja todas las celdas desbloqueadas (y, por lo tanto, modificables). A medida que vayamos cargando datos en la columna [A], esas celdas se irán bloqueando y ya no podrán ser modificadas. En el ejemplo, supusimos que el bloqueo debe aplicarse a la columna [A]. Podemos usar las propiedades Target.Column y Target.Row para limitar el bloqueo a otros rangos. Por ejemplo, para bloquear las celdas del rango [A5:F20], la condición sería: If Target.Column < 7 And Target. Row > 4 And Target.Row < 21

La condición Target.Column < 7 limita la protección a las primeras seis columnas, mientras que las otras dos condiciones las limitan a las filas 5 a 20.

« Tengo una serie de datos en una hoja Excel que debo pasar a un documento de Word y se pretende mantener el vínculo dinámico. Es decir que, si modifico el dato en Excel, se actualice automáticamente en el documento. ¿Hay alguna forma de obtener esta vinculación dinámica? « Efectivamente, existe esa forma de vinculación entre Excel y Word: 1. Abrimos el libro de Excel y el documento de Word. 2. Seleccionamos la celda o rango de celdas de Excel que contengan los datos que se van a llevar a Word. 3. Tomamos la opción [Copiar]. 4. Vamos al documento de Word, al punto donde queramos poner los datos del archivo Excel. 5. Dentro de la ficha [Inicio], hacemos clic en la flechita que aparece en el botón [Pegar]. 6. Tomamos la opción [Pegado especial]. 7. Marcamos la opción [Objeto de Microsoft Excel]. 8. Marcamos la opción [Pegar vínculo]. 9. Hacemos clic en [Aceptar].

8 > Soluciones simples a problemas complejos con Excel 1


Estos datos están tomados de una hoja Excel. Se actualizarán cada vez que modifiquemos el valor en la hoja.

Con estas opciones pegamos en Word un vínculo dinámico a los datos copiados desde una hoja de Excel.

Con esta opción forzamos la actualización de datos al modificarlos en la hoja de Excel. www.redusers.com > 9


Juego con Excel « Dicto la materia Informática para alumnos de tercer año y me gustaría enseñarles a programar juegos que funcionen en un archivo Excel. ¿Tienen algunos ejemplos que puedan sugerirme? « Hay muchos ejemplos de juegos que corren sobre archivos de Excel y creados con funciones y macros. El Master Mind es ese juego donde tenemos que adivinar un número pensado por nuestro oponente a partir de pistas que él mismo nos brinda. Por ejemplo, supongamos que él piensa en el número 5831. Nosotros tratamos de adivinar y arriesgamos: “¿es el número 1234?”. A lo que él contesta: “uno bien y uno regular”. Eso significa que una de las cifras de nuestro número está también en el suyo, en la misma posición (en el ejemplo, el tres) y otra está, pero en

otra posición (el uno). Con esta información, intentamos con otro número, y así hasta dar con el número pensado por nuestro oponente. El objetivo es crear una planilla contra la cual jugaremos. La planilla tendrá que hacer dos cosas: O Generar el número para adivinar, manteniéndolo oculto. O Evaluar nuestros intentos por adivinar, en términos de “bien” y “regular”. Comencemos por el primer problema. Para generar el número hay que elegir cuatro dígitos del 0 al 9 y armar con ellos un número que no comience con cero. Una forma sencilla de hacer esto consiste en preparar una tabla de dos columnas y diez filas: O En la primera columna escribimos los números del cero al nueve. O En la segunda columna escribimos la función =ALEATORIO().

Una partida de Master Mind. Después de seis intentos, averiguamos el número oculto en la celda [C1]. 10 > Soluciones simples a problemas complejos con Excel 1


La fórmula de la celda [D1] arma un número con los primeros cuatro dígitos de la columna [A], siempre que el primero no sea cero. Si ordenamos esta tabla según el contenido de la segunda columna, el resultado será, en realidad, desordenarla. Así obtendremos, en las primeras cuatro celdas de la primera columna, cuatro dígitos aleatorios. Con ellos podemos armar el número por adivinar con la fórmula =1000*A1+100*A2+10*A3+A4. Solamente tenemos que asegurarnos de que el número no comience con cero. Es decir, que [A1] (el primer dígito) sea mayor que cero. Para eso escribimos la fórmula dentro de una condicional: =SI (A1>0;1000*A1+100*A2+10*A3+A4; “Otra vez”). Esta fórmula arma el número si el primer dígito es mayor que cero. Si no, muestra el texto que pide ordenar nuevamente la lista para generar otro número. Esta fórmula la escribimos en [D1], con una columna de separación respecto de la tabla anterior. De lo contrario, la fórmula podría moverse al ordenar la

tabla. Más tarde habrá que ocultar las celdas donde estén la tabla y el número generado, para que no las podamos ver mientras tratamos de adivinar. Ahora es el momento de armar algunas fórmulas que comparen el número pensado con cada uno de nuestros intentos y nos informen cuántos dígitos están “bien” y cuántos “regular”. Podemos hacer esta evaluación con funciones estándar de Excel. Pero es bastante complicado. Es más práctico crear funciones específicas en el editor de Visual Basic, con herramientas de programación de macros. Comencemos con la función BIEN: Function BIEN(objetivo, intento) BIEN = 0 For i = 1 To 4 If Mid(objetivo, i, 1) = Mid(intento, i, 1) Then BIEN = BIEN + 1 End If www.redusers.com > 11


La fórmula de la celda [D1] arma un número con los primeros cuatro dígitos de la columna [A], siempre que el primero no sea cero. Next End Function

Esta función recorre los cuatro dígitos de cada número con un ciclo For… Next. Usa la función Mid (equivalente a la función EXTRAE de Excel) para separar cada dígito. Para cada separación hace la comparación entre los dígitos del número por adivinar (objetivo) y los de nuestro intento por adivinarlo (intento). Si la comparación es satisfactoria, quiere decir que ambos números tienen el mismo dígito en la misma posición. Entonces, cuenta ese dígito como “bien”. Para la función REGULAR hay que comparar cada dígito del número objetivo con todos los dígitos de nuestro intento. Para eso necesitamos dos ciclos For… Next. Uno, para recorrer los dígitos del objetivo, y otro, para recorrer los de nuestro intento:

Function REGULAR(objetivo, intento) REGULAR = 0 For i = 1 To 4 For j = 1 To 4 If Mid(objetivo, j, 1) = Mid(intento, i, 1) And (j <> i) Then REGULAR = REGULAR +1 End If Next Next End Function

La comparación entre dígitos es similar a la de la función BIEN, pero agregamos una segunda condición: además de ser iguales los dígitos que se comparan, deben ser distintos los índices de ambos ciclos, que corresponden al orden del dígito dentro de los números.

12 > Soluciones simples a problemas complejos con Excel 1




Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.