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?


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

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.


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

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

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

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


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.


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.


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.


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

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)

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)


1

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

=MAX(A2:A)-A2

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)

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.


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<>""))))
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.