Pregunta

Tengo una hoja de cálculo con algunos valores de la columna G. Algunas celdas están vacías en el medio, y que necesito para obtener el último valor de esa columna en otra celda.

Algo así como:

=LAST(G2:G9999)

excepto que LAST no es una función.

¿Fue útil?

Solución

Así que esta solución toma una cadena como parámetro. Se encuentra el número de filas están en la hoja. Se pone todos los valores en la columna especificada. Se realiza un bucle a través de los valores desde el final hasta el principio hasta que encuentra un valor que no es una cadena vacía. Finalmente retunrs 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")

EDIT:

En respuesta al comentario pidiendo la función de actualización automática:

La mejor manera que pude encontrar es utilizar esto con el código anterior:

function onEdit(event) {
  SpreadsheetApp.getActiveSheet().getRange("A1").setValue(lastValue("G"));
}

Sería ya no será necesario utilizar la función en una celda como los uso estados. En su lugar, son difíciles de codificación en la celda que desea actualizar y la columna que desea realizar un seguimiento. Es posible que hay una manera más elocuente para implementar este (esperemos que no está codificado), pero este es el mejor que pude encontrar por ahora.

Tenga en cuenta que si se utiliza la función en la célula, como se dijo anteriormente, se actualizará sobre la recarga. Tal vez hay una manera de conectar en onEdit() y la fuerza en las funciones celulares de actualización. No puedo encontrarla en la documentación.

Otros consejos

de Caligari respuesta , pero podemos ordenarlo con sólo especificar el rango de la columna completa:

=INDEX(G2:G, COUNT(G2:G))

En realidad he encontrado una solución más sencilla aquí:

http://www.google. es / support / foro / p / Google + Docs / hilo? tid = 20f1741a2e663bca & hl = es

Se ve así:

=FILTER( A10:A100 , ROW(A10:A100) =MAX( FILTER( ArrayFormula(ROW(A10:A100)) , NOT(ISBLANK(A10:A100)))))
función

ÚLTIMO () no está implementado en este momento con el fin de seleccionar la última celda dentro de un rango. Sin embargo, siguiendo tu ejemplo:

=LAST(G2:G9999)

somos capaces de obtener la última celda utilizando el par de funciones INDICE () y COUNT () de esta manera:

=INDEX(G2:G; COUNT(G2:G))

Hay un ejemplo vivo en la spreedsheet donde he encontrado (y resuelto) el mismo problema (Orzamentos hoja, I5 celular). Tenga en cuenta que funciona perfectamente incluso refiriéndose a otras hojas del documento.

Resumen:

=INDEX( FILTER( G2:G , NOT(ISBLANK(G2:G))) , COUNTA(G2:G) )

detalles:

He mirado a través y trató varias respuestas, y esto es lo que he encontrado: La solución más simple (ver Dohmoose' respuesta ) funciona si no hay espacios en blanco:

=INDEX(G2:G; COUNT(G2:G))

Si tiene espacios en blanco, falla.

Se puede manejar un espacio en blanco con sólo cambiar de COUNT a COUNTA (Ver de user3280071 respuesta ):

=INDEX(G2:G; COUNTA(G2:G))

Sin embargo, esta fallará para algunas combinaciones de espacios en blanco. (1 blank 1 blank 1 no para mí.)

Las siguientes obras de código (Ver respuesta de Nader y Jason comentario ):

=INDEX( FILTER( G2:G , NOT(ISBLANK(G2:G))) , ROWS( FILTER( G2:G , NOT(ISBLANK(G2:G)) ) ) )

pero requiere pensar acerca de si desea utilizar o COLUMNS ROWS para un rango determinado.

Sin embargo, si se reemplaza con COLUMNS COUNT Me parece obtener una aplicación fiable, en blanco a prueba de LAST:

=INDEX( FILTER( G2:G , NOT(ISBLANK(G2:G))) , COUNT( FILTER( G2:G , NOT(ISBLANK(G2:G)) ) ) ) 

Y como COUNTA ha incorporado el filtro en, podemos simplificar aún más utilizando

=INDEX( FILTER( G2:G , NOT(ISBLANK(G2:G))) , COUNTA(G2:G) )

Esto es algo simple y correcta. Y usted no tiene que preocuparse de si para contar filas o columnas. Y a diferencia de las soluciones de script, se actualiza automáticamente con los cambios en la hoja de cálculo.

Y si desea obtener el último valor de una fila, basta con cambiar el rango de datos:

=INDEX( FILTER( A2:2 , NOT(ISBLANK(A2:2))) , COUNTA(A2:2) )

Con el fin de devolver el último valor de una columna de valores de texto es necesario utilizar CONTARA, por lo que tendría esta fórmula:

=INDEX(G2:G; COUNTA(G2:G))

intente lo siguiente: =INDIRECT("B"&arrayformula(max((B3:B<>"")*row(B3:B))))

Supongamos que la columna en la que está buscando el último valor es B.

Y sí, funciona con espacios en blanco.

Parece que Google Apps Script ahora soporta rangos como parámetros de la función. Esta solución acepta un rango:

// Returns row number with the last non-blank value in a column, or the first row
//   number if all are blank.
// Example: =rowWithLastValue(a2:a, 2)
// Arguments
//   range: Spreadsheet range.
//   firstRow: Row number of first row. It would be nice to pull this out of
//     the range parameter, but the information is not available.
function rowWithLastValue(range, firstRow) {
  // range is passed as an array of values from the indicated spreadsheet cells.
  for (var i = range.length - 1;  i >= 0;  -- i) {
    if (range[i] != "")  return i + firstRow;
  }
  return firstRow;
}

También ver la discusión en el foro de ayuda de Google Apps Script: ¿Cómo fuerzo fórmulas para calcular de nuevo?

Miré las respuestas anteriores y parece como que están trabajando muy duro. Tal soporte de scripting ha mejorado simplemente. Creo que la función se expresa de esta manera:

function lastValue(myRange) {
    lastRow = myRange.length;
    for (; myRange[lastRow - 1] == "" && lastRow > 0; lastRow--)
    { /*nothing to do*/ }
    return myRange[lastRow - 1];
}

En la hoja de cálculo que hacemos lo siguiente:

= lastValue(E17:E999)

En la función, consigo una matriz de valores con una por célula referencia y esto sólo itera desde el final de los hacia atrás de la matriz hasta que encuentra un valor no vacío o se queda sin elementos. Referencias Hoja deben interpretarse antes de los datos se pasan a la función. No es lujoso suficiente para manejar múltiples dimensiones, tampoco. La pregunta se pide la última celda de una sola columna, por lo que parece encajar. Probablemente va a morir en caso de que se quede sin datos, también.

Su kilometraje puede variar, pero esto funciona para mí.

function lastRow(column){
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var lastRow = sheet.getLastRow();
  var lastRowRange=sheet.getRange(column+startRow);
  return lastRowRange.getValue();
}

codificación sin disco.

Esta funciona para mí:

=INDEX(I:I;MAX((I:I<>"")*(ROW(I:I))))

Esto nos lleva al último valor y trata los valores vacíos:

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

En una columna con espacios en blanco, se puede obtener el último valor con

=+sort(G:G,row(G:G)*(G:G<>""),)

La respuesta

$ =INDEX(G2:G; COUNT(G2:G))

no funciona correctamente en LibreOffice. Sin embargo, con un pequeño cambio, funciona perfectamente.

$ =INDEX(G2:G100000; COUNT(G2:G100000))

Siempre funciona sólo si el rango es menor que cierto (G2:G10000)

¿Es aceptable para responder a la pregunta original con una respuesta tema estrictamente fuera :) Se puede escribir una fórmula en la hoja de cálculo para hacer esto. Feo, tal vez? pero eficaz en el funcionamiento normal de una hoja de cálculo.

=indirect("R"&ArrayFormula(max((G:G<>"")*row(G:G)))&"C"&7)


(G:G<>"") gives an array of true false values representing non-empty/empty cells
(G:G<>"")*row(G:G) gives an array of row numbers with zeros where cell is empty
max((G:G<>"")*row(G:G)) is the last non-empty cell in G

Esto se ofrece como una idea para una serie de preguntas en el área de scripts que podrían ser entregados de forma fiable con las fórmulas de matriz que tienen la ventaja de la frecuencia de trabajo de similares moda en Excel y OpenOffice.

function getDashboardSheet(spreadsheet) {
  var sheetName = 'Name';
  return spreadsheet.getSheetByName(sheetName);
}
      var spreadsheet = SpreadsheetApp.openByUrl(SPREADSHEET_URL);  
      var dashboardSheet = getDashboardSheet(spreadsheet);
      Logger.log('see:'+dashboardSheet.getLastRow());

Yo estaba jugando con el código dado por @tinfini, y pensé que la gente podría beneficiarse de lo que creo que es una solución ligeramente más elegante (nota no creo guiones trabajaron de la misma manera cuando se creó la respuesta original). ..

//Note that this function assumes a single column of values, it will 
//not  function properly if given a multi-dimensional array (if the 
//cells that are captured are not in a single row).

function LastInRange(values) 
{
  for (index = values.length - 1; values[index] == "" && index > 0; index--) {}
  return String(values[index]);
}

En el uso que se vería así:

=LastInRange(D2:D)

En cuanto a @ comentario de Jon_Schneider, si la columna tiene celdas en blanco sólo tiene que utilizar CONTARA ()

=INDEX(G2:G; COUNT**A**(G2:G))

He encontrado otra manera puede ser que le ayudará a

=INDEX( SORT( A5:D ; 1 ; FALSE) ; 1 ) -Will regresar última fila

Más información de anab aquí: https://groups.google.com/forum /? fromgroups = #! tema / How-to-Documentos / if0_fGVINmI

encontrado una ligera variación que trabajó para eliminar los espacios en blanco de la parte inferior de la tabla. = Índice (G2: G, de CONTAR.SI (G2: G, "<>"))

Me sorprende que nadie había dado esta respuesta antes. Pero esto debe ser la más corta y que incluso trabaja en Excel:

=ARRAYFORMULA(LOOKUP(2,1/(G2:G<>""),G2:G))

G2:G<>"" crea una matriz de 1 / verdadero (1) y 1 / falso (0). Desde hace LOOKUP un enfoque de arriba abajo para encontrar 2 y ya que nunca encontrará 2, que llega hasta la última fila en blanco y no da la posición de ello.

La otra manera de hacer esto, ya que otros podrían hemos mencionado, es:

=INDEX(G2:G,MAX((ISBLANK(G2:G)-1)*-ROW(G2:G))-1)

Encontrar el MAX ROWimum de la fila en blanco y no dársela a INDEX

En una matriz cero interrupción en blanco, Usando la notación INDIRECT RC con COUNTBLANK es otra opción. Si V4: V6 está ocupado con las entradas, a continuación,

V18

=INDIRECT("R[-"&COUNTBLANK(V4:V17)+1&"]C",0)

dará la posición del V6.

para obtener el último valor de una columna también se puede utilizar la función MAX con la función IF

=ARRAYFORMULA(INDIRECT("G"&MAX(IF(G:G<>"", ROW(G:G), )), 4)))
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top