Obtenga la última celda no vacía en una columna en Hojas de cálculo de Google

140

Yo uso la siguiente función

=DAYS360(A2, A35)

para calcular la diferencia entre dos fechas en mi columna. Sin embargo, la columna siempre se está expandiendo y actualmente tengo que cambiar manualmente 'A35' a medida que actualizo mi hoja de cálculo.

¿Hay alguna manera (en Hojas de cálculo de Google) de encontrar la última celda no vacía en esta columna y luego establecer dinámicamente ese parámetro en la función anterior?

MichaelS
fuente
2
Pregunta similar: stackoverflow.com/questions/4169914/…
Jon Schneider

Respuestas:

172

Puede haber una forma más elocuente, pero esta es la forma en que se me ocurrió:

La función para encontrar la última celda poblada en una columna es:

=INDEX( FILTER( A:A ; NOT( ISBLANK( A:A ) ) ) ; ROWS( FILTER( A:A ; NOT( ISBLANK( A:A ) ) ) ) )

Entonces, si lo combina con su función actual, se vería así:

=DAYS360(A2,INDEX( FILTER( A:A ; NOT( ISBLANK( A:A ) ) ) ; ROWS( FILTER( A:A ; NOT( ISBLANK( A:A ) ) ) ) ))
Sam Plus Plus
fuente
1
Realmente no me preocupa la elocuencia en este caso, siempre y cuando funcione como un encanto (lo que hace), ¡muchas gracias Sam!
MichaelS
44
Terminé comparándolo con la cadena vacía en lugar de usar ISBLANK, que trata algunas celdas de aspecto vacío (por ejemplo, fórmulas de retorno en blanco como = "" como no en blanco. Por lo tanto: '= índice (filtro (A: A, A: A <> ""), filas (filtro (A: A, A: A <> ""))) '
circlepi314
También tuve problemas con el ISBLANK debido a las fórmulas. Pero usando = INDEX (FILTER (F3: F; F3: F <> "")); ROWS (FILTER (F3: F; F3: F <> "")) da como resultado un error de análisis de fórmula. ¿Alguna idea de lo que está mal?
klor
Pregunta. Si en lugar de A: A, hay un rango de importación (), ¿cómo puede reescribirse sin hacer el mismo rango de importación () 4 veces?
Ruby
44
Respuesta ligeramente simplificada que también maneja espacios en blanco, por Doug Bradshaw: =INDEX(FILTER(A1:A,NOT(ISBLANK(A1:A))),COUNTA(A1:A))(puede cambiar la fila inicial A1) descripción completa en: stackoverflow.com/a/27623407/539149
Zack Morris
82

Para encontrar la última celda no vacía, puede usar INDEXy MATCHfunciones como esta:

=DAYS360(A2; INDEX(A:A; MATCH(99^99;A:A; 1)))

Creo que esto es un poco más rápido y fácil.

xxxbence
fuente
1
Esto es más simple y lo he probado. Funciona genial.
Ciaran
24
Parece que su método solo encuentra la última celda si el valor es un número, mi método encontrará la última fila si también es de tipo cadena. La pregunta original era sobre las fechas, por lo que esto funcionaría, pero dado que el artículo aún llama la atención, vale la pena notar la diferencia. Todo depende de tus necesidades. Si solo necesita un número, lo recomiendo de esta manera.
Sam Plus Plus
1
Esto supone que la columna está ordenada
Andrej Adamenko
También podría hacerse como=DAYS360(A2;VLOOKUP(99^99;A:A;1))
vstepaniuk
56

Si A2: A contiene fechas contiguas, entonces INDICE (A2: A, COUNT (A2: A)) devolverá la última fecha. La fórmula final es

=DAYS360(A2,INDEX(A2:A,COUNT(A2:A)))
Rubén
fuente
9
Personalmente, creo que esta debería ser la respuesta aceptada. Conciso y simple.
SwampThingTom
44
Esta es la respuesta más precisa. Si bien la respuesta anterior de @Poul funciona para este caso, quería encontrar la última celda real con datos reales y esto me da si los datos están en orden o no.
Chuck Claunch
44
Esto es perfecto. Segundo, la moción de que debería ser la respuesta aceptada.
shiri
37

Mi favorito es:

=INDEX(A2:A,COUNTA(A2:A),1)

Entonces, para la necesidad del OP:

=DAYS360(A2,INDEX(A2:A,COUNTA(A2:A),1))
Eric Smalling
fuente
... aunque el "MAX" publicado Poul arriba es más limpio en el caso cuando la última fecha es siempre la última.
Eric Smalling
1
Se refería a +1 no, 1
Newbrict
1
Esto no responde la pregunta: selecciona el último valor, pero no el último valor no vacío.
Nates
17

Si la columna se expandió solo por fechas agregadas contiguas como en mi caso, utilicé solo la función MAX para obtener la última fecha.

La fórmula final será:

=DAYS360(A2; MAX(A2:A)) 
Poul
fuente
3
¡Genio! Simple y efectivo.
Asu
14

Aunque la pregunta ya está respondida, hay una forma elocuente de hacerlo.

Use just the column name to denote last non-empty row of that column.

Por ejemplo:

Si sus datos están dentro A1:A100y desea poder agregar más datos a la columna A, digamos que puede ser A1:A105o incluso A1:A1234más tarde, puede usar este rango:

A1:A

Muestra

Entonces, para obtener el último valor no vacío en un rango, utilizaremos 2 funciones:

  • COUNTA
  • ÍNDICE

La respuesta es =INDEX(B3:B,COUNTA(B3:B)).

Aquí está la explicación:

COUNTA(range) devuelve el número de valores en un rango, podemos usar esto para obtener el recuento de filas.

INDEX(range, row, col)devuelve el valor en un rango en la posición rowy col( col=1si no se especifica)

Ejemplos:

INDEX(A1:C5,1,1) = A1
INDEX(A1:C5,1) = A1 # implicitly states that col = 1
INDEX(A1:C5,1,2) = A2
INDEX(A1:C5,2,1) = B1
INDEX(A1:C5,2,2) = B2
INDEX(A1:C5,3,1) = C1
INDEX(A1:C5,3,2) = C2

Para la imagen de arriba, nuestro rango será B3:B. Así que vamos a contar cuántos valores hay en el rango B3:Bde COUNTA(B3:B)primera. En el lado izquierdo, producirá 8ya que hay 8 valores, mientras que producirá 9en el lado derecho. También sabemos que el último valor está en la primera columna del rango, B3:Bpor lo que el colparámetro INDEXdebe ser 1 y el rowparámetro debe estar COUNTA(B3:B).

PD : por favor vota la respuesta de @ bloodymurderlive ya que la escribió primero, solo la estoy explicando aquí.

Ramazan Polat
fuente
1
Me gusta esto, pero he visto problemas en los que a veces devuelve el penúltimo elemento en lugar del último.
Eric Smalling
1
@EricSmalling puede suceder porque tiene un salto de línea adicional al final de todas las filas y cuando copia y pega, puede considerarse como una celda no vacía. ¿Tiene alguna hoja de cálculo de muestra que exponga este problema?
Ramazan Polat
¡Parece la solución más inteligente!
MemLeak
No funciona ¿De dónde sacaste la cita de BTW? Pensé que era de la documentación de la hoja de Google.
Atul
1
@RamazanPolat: OP está preguntando (en Hojas de cálculo de Google) para encontrar la última celda no vacía en la columna A1:A no me da el último valor de celda no vacía en la columna A
Atul
8

Aqui hay otro más:

=indirect("A"&max(arrayformula(if(A:A<>"",row(A:A),""))))

Con la ecuación final siendo esto:

=DAYS360(A2,indirect("A"&max(arrayformula(if(A:A<>"",row(A:A),"")))))

Las otras ecuaciones aquí funcionan, pero me gusta esta porque facilita la obtención del número de fila, lo que creo que necesito hacer con más frecuencia. Solo el número de fila sería así:

=max(arrayformula(if(A:A<>"",row(A:A),"")))

Originalmente intenté encontrar esto para resolver un problema de hoja de cálculo, pero no pude encontrar nada útil que solo diera el número de fila de la última entrada, así que espero que esto sea útil para alguien.

Además, esto tiene la ventaja adicional de que funciona para cualquier tipo de datos en cualquier orden, y puede tener filas en blanco entre filas con contenido, y no cuenta las celdas con fórmulas que evalúan "". También puede manejar valores repetidos. En general, es muy similar a la ecuación que usa max ((G: G <> "") * row (G: G)) aquí, pero hace que extraer el número de fila sea un poco más fácil si eso es lo que buscas .

Alternativamente, si desea poner un guión en su hoja, puede facilitarlo si planea hacerlo mucho. Aquí está ese resumen:

function lastRow(sheet,column) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  if (column == null) {
    if (sheet != null) {
       var sheet = ss.getSheetByName(sheet);
    } else {
      var sheet = ss.getActiveSheet();
    }
    return sheet.getLastRow();
  } else {
    var sheet = ss.getSheetByName(sheet);
    var lastRow = sheet.getLastRow();
    var array = sheet.getRange(column + 1 + ':' + column + lastRow).getValues();
    for (i=0;i<array.length;i++) {
      if (array[i] != '') {       
        var final = i + 1;
      }
    }
    if (final != null) {
      return final;
    } else {
      return 0;
    }
  }
}

Aquí puede escribir lo siguiente si desea que la última fila esté en la misma hoja que está editando actualmente:

=LASTROW()

o si desea la última fila de una columna particular de esa hoja, o de una columna particular de otra hoja, puede hacer lo siguiente:

=LASTROW("Sheet1","A")

Y para la última fila de una hoja en particular en general:

=LASTROW("Sheet1")

Luego, para obtener los datos reales, puede usar indirectamente:

=INDIRECT("A"&LASTROW())

o puede modificar el script anterior en las últimas dos líneas de retorno (las dos últimas ya que tendría que colocar tanto la hoja como la columna para obtener el valor real de una columna real), y reemplazar la variable con lo siguiente:

return sheet.getRange(column + final).getValue();

y

return sheet.getRange(column + lastRow).getValue();

Una ventaja de este script es que puede elegir si desea incluir ecuaciones que evalúen "". Si no se agregan argumentos, se contarán las ecuaciones que evalúen "", pero si especifica una hoja y una columna, ahora se contarán. Además, hay mucha flexibilidad si está dispuesto a usar variaciones del guión.

Probablemente exagerado, pero todo lo posible.

Mearg
fuente
1
"Función desconocida LASTROW"
Berit Larsen
Debería ser +100 para responder el título de la pregunta: última fila, no valor en la última fila
Norbert van Nobelen
6

¿Qué pasa con esta fórmula para obtener el último valor?

=index(G:G;max((G:G<>"")*row(G:G)))

Y esta sería una fórmula final para su tarea original:

=DAYS360(G10;index(G:G;max((G:G<>"")*row(G:G))))

Suponga que su fecha inicial está en G10.

Andrew Anderson
fuente
5

Fui por una ruta diferente. Como sé que agregaré algo en una fila / columna uno por uno, descubro la última fila contando primero los campos que tienen datos. Lo demostraré con una columna:

=COUNT(A5:A34)

Entonces, digamos que devolvió 21. A5 está 4 filas hacia abajo, así que necesito obtener la posición 21 desde la 4ta fila hacia abajo. Puedo hacer esto usando inderect, así:

=INDIRECT("A"&COUNT(A5:A34)+4)

Es encontrar la cantidad de filas con datos y devolverme un número que estoy usando como modificador de índice.

Tamir Nadav
fuente
1
Tenga en cuenta que no puede haber celdas vacías. Además, COUNTA debería ajustarse a más escenarios
Z. Khullah
4

por una fila:

=ARRAYFORMULA(INDIRECT("A"&MAX(IF(A:A<>"", ROW(A:A), ))))

para una columna:

=ARRAYFORMULA(INDIRECT(ADDRESS(1, MAX(IF(1:1<>"", COLUMN(1:1), )), 4)))
jugador0
fuente
1
Excelente respuesta Gracias.
Nick
2

Esta parece ser la solución más simple que he encontrado para recuperar el último valor en una columna en constante expansión:

=INDEX(A:A,COUNTA(A:A),1)
bloodymurderlive
fuente
2

Esto funciona para mi. Obtenga el último valor de la columna A en la hoja de Google:

=index(A:A,max(row(A:A)*(A:A<>"")))

(También omite filas en blanco entre si hay alguna)

Atul
fuente
1

Calcule la diferencia entre la última fecha en la columna A con la fecha en la celda A2.

=MAX(A2:A)-A2
pajaro feliz
fuente
1

Esto le dará el contenido de la última celda:

=indirect("A"&max(ARRAYFORMULA(row(a:a)*--(a:a<>""))))

Esto le dará la dirección de la última celda:

="A"&max(ARRAYFORMULA(row(a:a)*--(a:a<>"")))

Esto le dará la fila de la última celda:

=max(ARRAYFORMULA(row(a:a)*--(a:a<>"")))

Quizás prefieras un guión. Este script es mucho más corto que el enorme publicado anteriormente por otra persona:

Vaya al editor de guiones y guarde este guión:

function getLastRow(range){
  while(range.length>0 && range[range.length-1][0]=='') range.pop();
  return range.length;
}

Una vez hecho esto, solo necesita ingresar esto en una celda:

=getLastRow(A:A)
michaeldon
fuente
0

La forma en que lo hace un aficionado es "= CONCATENATE (" A ", COUNTUNIQUE (A1: A9999))", donde A1 es la primera celda de la columna, y A9999 está más abajo de esa columna de lo que espero tener alguna entrada. Este A # resultante se puede usar con la función INDIRECTA según sea necesario.

Conrad Lindes
fuente
Lo siento. Esto solo funciona si todas las entradas de la columna son únicas.
Conrad Lindes
1
Si bien agradezco su contribución a StackOverflow, Conrad, su respuesta tiene algunos problemas. Primero, no especificó que las fechas fueran únicas, por lo que debe usar count (), en lugar de countunique (). En segundo lugar, el uso de indirecto () y concatenado duplica la funcionalidad existente de index (), como puede ver en las otras respuestas. Tercero, en lugar de A1: A9999, ¿por qué no usar A1: A?
sondra.kinsey
0

Para encontrar el último número de fila no vacío (permitiendo espacios en blanco entre ellos), utilicé a continuación para buscar en la columna A.

=ArrayFormula(IFNA(match(2,1/(A:A<>""))))
usuario34612
fuente