Tengo una hoja de cálculo con algunos valores en la columna G. Algunas celdas están vacías en el medio, y necesito obtener el último valor de esa columna en otra celda.
Algo como:
=LAST(G2:G9999)
excepto que LAST
no es una función.
Tengo una hoja de cálculo con algunos valores en la columna G. Algunas celdas están vacías en el medio, y necesito obtener el último valor de esa columna en otra celda.
Algo como:
=LAST(G2:G9999)
excepto que LAST
no es una función.
Entonces, esta solución toma una cadena como parámetro. Encuentra cuántas filas hay en la hoja. Obtiene todos los valores de la columna especificada. Recorre los valores desde el final hasta el principio hasta que encuentra un valor que no es una cadena vacía. Finalmente devuelve el valor.
Guión:
function lastValue(column) {
var lastRow = SpreadsheetApp.getActiveSheet().getMaxRows();
var values = SpreadsheetApp.getActiveSheet().getRange(column + "1:" + column + lastRow).getValues();
for (; values[lastRow - 1] == "" && lastRow > 0; lastRow--) {}
return values[lastRow - 1];
}
Uso:
=lastValue("G")
EDITAR:
En respuesta al comentario que solicita que la función se actualice automáticamente:
La mejor manera que pude encontrar es usar esto con el código anterior:
function onEdit(event) {
SpreadsheetApp.getActiveSheet().getRange("A1").setValue(lastValue("G"));
}
Ya no sería necesario utilizar la función en una celda como los estados de la sección Uso . En su lugar, está codificando de forma rígida la celda que le gustaría actualizar y la columna que le gustaría rastrear. Es posible que haya una forma más elocuente de implementar esto (con suerte, una que no esté codificada), pero esta es la mejor que pude encontrar por ahora.
Tenga en cuenta que si usa la función en la celda como se indicó anteriormente, se actualizará al recargar. Tal vez haya una manera de conectarse onEdit()
y forzar la actualización de las funciones de la celda. Simplemente no puedo encontrarlo en la documentación.
Tools -> Scripts -> Script editor...
Respuesta similar a la respuesta de caligari , pero podemos arreglarla simplemente especificando el rango de columna completo:
fuente
FILTER()
rango ed, similar a la respuesta de @ Geta .COUNT(G2:G)
devuelve 0. En su lugar, useCOUNTA(G2:G)
que cuente solo el número de valores en un conjunto de datos.COUNTA
solo es útil combinado conINDEX
para obtener el último valor si no hay un solo espacio en blanco entre sus valores.COUNTA
.COUNT
solo cuenta valores numéricos: devolverá 0 cuando se le proporcione, por ejemplo, celdas de texto.En realidad, encontré una solución más simple aquí:
http://www.google.com/support/forum/p/Google+Docs/thread?tid=20f1741a2e663bca&hl=es
Se parece a esto:
fuente
ROW
devuelve el número de fila, por lo queFILTER( ROW(A10:A100), NOT(ISBLANK(A10:A100) )
devuelve una matriz de todos los números de fila que no están en blanco (no sus valores), por ejemplo [1, 2, 3, 7, 12, 14]. LuegoMAX
nos da el último número de fila.FILTER
Luego se aplica un segundo para filtrar todas las filas en las que el número de fila no coincide con el valorMAX
(es decir, el valor de la última fila que no está en blanco).La función LAST () no está implementada en este momento para seleccionar la última celda dentro de un rango. Sin embargo, siguiendo tu ejemplo:
podemos obtener la última celda usando el par de funciones INDEX () y COUNT () de esta manera:
Hay un ejemplo en vivo en la hoja de cálculo donde encontré (y resolví) el mismo problema (hoja
Orzamentos
, celdaI5
). Tenga en cuenta que funciona perfectamente incluso haciendo referencia a otras hojas dentro del documento.fuente
COUNTA
en ese caso si está seguro de que no hay un solo espacio en blanco entre los valores de la columna. Vea mis comentarios a la respuesta de dohmoose.:G
denota el último elemento? ¿Está esto documentado?Resumen:
Detalles:
Revisé y probé varias respuestas, y esto es lo que encontré: La solución más simple (ver la respuesta de Dohmoose ) funciona si no hay espacios en blanco:
Si tiene espacios en blanco, falla.
Puede manejar un espacio en blanco simplemente cambiando de
COUNT
aCOUNTA
(consulte la respuesta de user3280071 ):Sin embargo, esto fallará para algunas combinaciones de espacios en blanco. (
1 blank 1 blank 1
me falla)El siguiente código funciona (vea la respuesta de Nader y el comentario de jason ):
pero requiere pensar si desea usar
COLUMNS
oROWS
para un rango determinado.Sin embargo, si
COLUMNS
se reemplaza conCOUNT
I parece que obtengo una implementación confiable y a prueba de espacios en blanco deLAST
:Y dado que
COUNTA
tiene el filtro integrado, podemos simplificar aún más el usoEsto es algo simple y correcto. Y no tiene que preocuparse por contar filas o columnas. Y, a diferencia de las soluciones de secuencias de comandos, se actualiza automáticamente con cambios en la hoja de cálculo.
Y si desea obtener el último valor de una fila, simplemente cambie el rango de datos:
fuente
Para devolver el último valor de una columna de valores de texto, debe usar COUNTA, por lo que necesitaría esta fórmula:
fuente
COUNTA
combinado conINDEX
no devolverá el último valor de la columna.prueba esto:
=INDIRECT("B"&arrayformula(max((B3:B<>"")*row(B3:B))))
Suponga que la columna en la que busca el último valor es B.
Y sí, funciona con espacios en blanco.
fuente
Parece que Google Apps Script ahora admite rangos como parámetros de función. Esta solución acepta un rango:
Consulte también el debate en el foro de ayuda de Google Apps Script: ¿Cómo fuerzo el recalculado de fórmulas?
fuente
Miré las respuestas anteriores y parece que están trabajando demasiado. Quizás el soporte de secuencias de comandos simplemente ha mejorado. Creo que la función se expresa así:
En mi hoja de cálculo utilizo:
En la función, obtengo una matriz de valores con uno por celda referenciada y esto solo itera desde el final de la matriz hacia atrás hasta que encuentra un valor no vacío o se queda sin elementos. Las referencias a hojas deben interpretarse antes de que los datos se pasen a la función. Tampoco es lo suficientemente elegante como para manejar múltiples dimensiones. La pregunta solicitó la última celda en una sola columna, por lo que parece encajar. Probablemente desaparecerá si te quedas sin datos también.
Su kilometraje puede variar, pero esto funciona para mí.
fuente
sin codificación rígida.
fuente
Esta funciona para mí:
fuente
Esto obtiene el último valor y maneja valores vacíos:
fuente
=INDEX( FILTER( 88:88 , NOT(ISBLANK(88:88))) , columns( FILTER( 88:88 , NOT(ISBLANK(88:88)) ) ) )
=INDEX( FILTER( indirect(row()&":"&row()) , NOT(ISBLANK(indirect(row()&":"&row())))) , columns( FILTER( indirect(row()&":"&row()) , NOT(ISBLANK(indirect(row()&":"&row()))) ) ) )
En una columna con espacios en blanco, puede obtener el último valor con
fuente
La respuesta
no funciona correctamente en LibreOffice. Sin embargo, con un pequeño cambio, funciona perfectamente.
Siempre funciona solo si el rango real es menor que
(G2:G10000)
fuente
¿Es aceptable responder a la pregunta original con una respuesta estrictamente fuera de tema? Puede escribir una fórmula en la hoja de cálculo para hacer esto. ¿Feo quizás? pero eficaz en el funcionamiento normal de una hoja de cálculo.
Esto se ofrece como una idea para una variedad de preguntas en el área de scripts que podrían entregarse de manera confiable con fórmulas de matriz que tienen la ventaja de funcionar a menudo de manera similar en Excel y Openoffice.
fuente
fuente
Estaba jugando con el código proporcionado por @tinfini, y pensé que la gente podría beneficiarse de lo que creo que es una solución un poco más elegante (tenga en cuenta que no creo que los scripts funcionen de la misma manera cuando creó la respuesta original) ...
En uso, se vería así:
fuente
Con respecto al comentario de @ Jon_Schneider, si la columna tiene celdas en blanco, simplemente use COUNTA ()
fuente
Encontré otra forma, puede ser que te ayude
=INDEX( SORT( A5:D ; 1 ; FALSE) ; 1 )
-volverá la última filaMás información de anab aquí: https://groups.google.com/forum/?fromgroups=#!topic/How-to-Documents/if0_fGVINmI
fuente
Encontré una ligera variación que funcionó para eliminar los espacios en blanco de la parte inferior de la mesa. = índice (G2: G, COUNTIF (G2: G, "<>"))
fuente
Me sorprende que nadie haya dado esta respuesta antes. Pero este debería ser el más corto e incluso funciona en Excel:
G2:G<>""
crea una matriz de 1 / verdadero (1) y 1 / falso (0). Dado queLOOKUP
hace un enfoque de arriba hacia abajo para encontrar2
y Dado que nunca encontrará 2, llega a la última fila que no está en blanco y da la posición de eso.La otra forma de hacer esto, como otros podrían haber mencionado, es:
Encontrar el
MAX
imumROW
de la fila no en blanco y alimentarlo aINDEX
En una matriz de interrupción en blanco cero, usar la
INDIRECT
RC
notación conCOUNTBLANK
es otra opción. Si V4: V6 está ocupado con entradas, entonces,V18 :
dará la posición de V6.
fuente
para obtener el último valor de una columna, también puede usar la
MAX
función con laIF
funciónfuente