Si realmente llevase una estadística de las consultas mas frecuentes, esta y como dectectar valores duplicados, se llevarían los primeros puestos, sin lugar a dudas.
Pero es un desafío interesante: si todas las celdas del rango en cuestion poseen algun valor, la cosa se torna muy sencilla, con la función CONTARA() resuelvo el tema:
contar las celdas ocupadas de la Columna D me permite saber, en este ejemplo, que la tabla llega hasta la fila nro 6
Con el resultado del procedimiento anterior puedo armar un "rango dinámico" y sumar, contar, buscar, etc elementos a medida que se agreguen datos a la tabla:
agregué un nuevo dato (damian) y el resultado de CONTARA() es 7. Con eso "armo" un rango en la celda de abajo y luego utilizo BUSCARV() e INDIRECTO() para buscar un valor dentro de ese rango dinámico.
Hasta aquí vá relativamente sencillo. Pero para que esto funcione correctamente, en la columna D no deben existir celdas sin valores. CONTARA() nos dejaría de ser útil, como se aprecia en la siguiente imágen:
CONTARA() me devuelve 4 (por que son 4 las celdas con valor) y hace que el rango D2:E4 que armo posteriormente se "quede chico", por que en realidad la tabla llega hasta "sabrina", cuyo orden está en la fila 6.
Una de las posibles soluciones es utilizar funciones matriciales, para efectuar la siguiente acción: Ir analizando celda x celda en la columna A hasta encontrar la última que posea un valor y guardar su numero de fila.
En primer lugar haré el "paso a paso" intentando explicarlo, luego aplico las matriciales.
si el valor de la columna A es distinto a nada (o sea, tiene datos) pongo su numero de fila, de lo contrario (si está vacía) cero. Con esto logro crear un rango cuyo valor máximo será la ultima fila ocupada. En este caso 6.
Si quisiera dar por concluído el ejemplo, a estas alturas podría hacerlo sin problemas. Me resulta cómodo ocultar la columna Auxiliar C y utilizar la función MAX(), de la siguiente forma:
listo, ya tengo el rango dinámico armado.
Puedo seguir agregando datos, sin importar si existen valores en blanco en el medio:
agregué a "esteban" luego de "sabrina" (dejando un espacio en blanco) y sin embargo el rango dinámico se armó correctamente.
Pero claro, esto se puede mejorar. Si por algún motivo, en el futuro, debemos llevar los límites de nuestra tablas mas allá de la fila 10, deberíamos: mostrar la columna oculta, extender la función hasta el nuevo límite y finalmente, ocultar nuevamente la columna. Esto se evita utilizando un función matricial, como la siguiente:
={MAX(SI($A1:$A10<>"";FILA(A1:A$10)))}
Entonces: si las filas del rango no están vacias, almaceno su numero de fila., caso contrario, almaceno un 0 (cero). Y una vez que analicé todo el rango... con MAX() obtengo el numero de fila mas alto, que será el de la última celda ocupada.
Y con ese sencillo 9 obtenido en el ejercicio anterior me es posible determinar el rango y aplicar la función que necesite sobre él:
- Obtener enlace
- X
- Correo electrónico
- Otras aplicaciones
Etiquetas
Funciones
Etiquetas:
Funciones
- Obtener enlace
- X
- Correo electrónico
- Otras aplicaciones
MUESTRO UN VALOR DE UN MAXIMO ENTRE 4 NUMEROS HASTA HAI TODO BIEN PERO QUIERO QUE ME MUESTRE EL VALOR QUE HAY EN UNA CELDA EN ESA MISMA FILA DONDE SE ENCUENTRA
ResponderEliminarbueno, yo resolvería el tema de la siguiente forma: supongamos que tus datos estan en A1:A4.
ResponderEliminarEn A10 ingresás la función =MAX(A1:A4) y detectás el mayor valor. Luego, en A11, ponés esta función:
=COINCIDIR(A10,A1:A4,0). Esto te devolverá la posicion de ese valor en el rango y de esa forma obtenés la fila. Ahora bien, vos me decis que el valor está en una celda contigua, por ejemplo en la columna B.
En A12 ingresás: =INDIRECTO("B"&A11). y listo, ya tenés el problema resuelto.
Te hice el "paso a paso"... para evitar el uso de tantas celdas auxiliares, podes hacer lo siguiente en A10, anidando todas las funciones:
=INDIRECTO("B"&COINCIDIR(MAX(A1:A4);A1:A4;0))
por si el ejemplo no te queda en claro, aqui tenés un link a un archivo que te preparé para que puedas observar "en vivo" lo que expliqué.
que tengas suerte, gracias x tu consulta y no olvides avisarme si te sirvió. un abrazo.
https://sites.google.com/site/damianomarsilva2/indirecto.xls?attredirects=0&d=1
hola amigo primero que nada felicitaciones por el blog es exelente . bueno te paso a esribir mi duda. necesito armar una planilla de horarios que muestre de lunes a viernes en cada columna y 5 filas con diferentes mudulos de horarios ej: fila 1 (de 7:30 a 8:30) f2( de 8:30 a 9:30)f3(de 9:30 a 10:30) f4(de 10:30 a 11:30)f5(de 11:30 a 12:30)bueno hasta aca bien ahora necesito que por ejemplo si el lunes tengo ocupado los dos primeros modulos con por ejemplo educacion fisica que muestre en otra columa que esas celdas estan ocupadas y que mustre con color las celdas que estan libres algo asi espero me hayas comprendido y muchisimas gracias!!soy benja de bs as
ResponderEliminarbenjamin: gracias x tu consulta. enviame el archivo a damianexcel@gmail.com, ya que hay algunas cosas que no comprendo.
ResponderEliminarel tema de colorear las celdas vacias (aquellas que no tienen ninguna actividad) se puede lograr con el formato condicional: seleccionás el rango en cuestiòn y luego te vas a "formato / formato condicional", desplegás la lista del formulario emergente: "formula" e ingresas esto: =SI($A$A:$C$5="";1;0)
ahí estás poniendo: si el valor de la celda es igual a "nada" ( "" ), entoces es verdadero y aplicará el formato que hayas seleccionado. de lo contrario (si la celda tiene algun valor) no se aplicará ningún formato.
pasame tu archivo y te mejoro la respuesta, no entendí que querés decirme con que "muestre en otra columna".
espero tu Excel y lo solucionamos enseguida.
Perdoname la demora, pero estoy en un curso de capacitación y recién ahora ingreso a mi mail.
como agregar un numero de filas segun los datos que tenemos y que lo agregado adopte la formula que hemos predeterminado en cada columna,por ejemplo: si tengo 8 datos y escribo en B2=8, aparezcan 8 filas?
ResponderEliminarcreo que lo tuyo se soluciona con una macro.
ResponderEliminarpor favor explicame un poco mas detallado el planteo, por que no lo comprendo del todo.
gracias
damian
Hola Damian, te felicito por tu blog, muy buena info he encontrado.
ResponderEliminarTengo una macro que genera en forma automatica una dinamica, hasta el momento todo bien, pero que pasa si por ejemplo los datos cambian, por ejemplo, la base tiene la misma cantidad de columnas, pero cambia la cantidad de filas. Como logro que la macro discrimine estos cambios sin afectar la dinamica y que no queden datos fuera o se considere las filas vacias. Agradezco desde ya tu ayuda, saludos
Atte
Josemiguel
Gracias por tu mensaje.
ResponderEliminarTe comento: al insertar una tabla dinámica en Excel, este le asigna automaticamente un nombre (generalmente Tabla Dinámica 1, Tabla Dinámica 2, etc, etc). Dicho nombre se puede cambiar, dentro de las propiedades de la TD.
Si quieres saber la ultima fila de una TD este es el código:
ActiveSheet.PivotTables("Tabla dinámica1").PivotSelect "", xlDataAndLabel, True
'aqui muestro la ultima fila, aunque seguro necesitas almacenarla en una variable:
MsgBox Selection.End(xlDown).Row
y listo. primero la seleccionamos y luego le pedimos a Excel que nos diga cual es la última fila de esa selección.
Suerte y cualquier cosa me avisas.