Obter a última célula não vazia em uma coluna no Planilhas Google


140

Eu uso a seguinte função

=DAYS360(A2, A35)

para calcular a diferença entre duas datas na minha coluna. No entanto, a coluna está sempre em expansão e, atualmente, preciso alterar manualmente 'A35' à medida que atualizo minha planilha.

Existe uma maneira (no Planilhas Google) de encontrar a última célula não vazia nesta coluna e definir dinamicamente esse parâmetro na função acima?


Respostas:


172

Pode haver uma maneira mais eloqüente, mas foi assim que eu vim:

A função para encontrar a última célula preenchida em uma coluna é:

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

Portanto, se você combiná-lo com a sua função atual, ficaria assim:

=DAYS360(A2,INDEX( FILTER( A:A ; NOT( ISBLANK( A:A ) ) ) ; ROWS( FILTER( A:A ; NOT( ISBLANK( A:A ) ) ) ) ))

1
Eu realmente não estou incomodado com eloquência neste caso, desde que funcione como um encanto (o que funciona) - muito obrigado, Sam!
precisa

4
Acabei comparando com a string vazia em vez de usar ISBLANK, que trata algumas células de aparência vazia (por exemplo, fórmulas que retornam em branco como = "" como não em branco. Assim: '= index (filter (A: A, A: A <> ""), linhas (filtro (A: A, A: A <> ""))) ''
circlepi314

Eu também tive problemas com o ISBLANK por causa de fórmulas. Mas usando = INDEX (FILTER (F3: F; F3: F <> "")); ROWS (FILTER (F3: F; F3: F <> "")) resulta em erro de análise de fórmula. Alguma idéia do que está errado?
klor

Questão. Se, em vez de A: A, houver um importrange (), como isso pode ser reescrito sem fazer o mesmo importrange () quatro vezes?
Ruby

4
Ligeiramente simplificado resposta que também lida com espaços em branco, de Doug Bradshaw: =INDEX(FILTER(A1:A,NOT(ISBLANK(A1:A))),COUNTA(A1:A))(pode mudar a partir de linha A1) descrição completa em: stackoverflow.com/a/27623407/539149
Zack Morris

82

Para encontrar a última célula não vazia, você pode usar INDEXe MATCHfunções como esta:

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

Eu acho que isso é um pouco mais rápido e fácil.


1
Isso é mais simples e eu testei isso. Funciona bem.
Ciaran

24
Seu método parece encontrar apenas a última célula se o valor for um número, meu método encontrará a última linha se também for do tipo string. A pergunta original era sobre datas, então isso funcionaria, mas como o artigo ainda chama atenção, vale a pena notar a diferença. Tudo depende das suas necessidades. Se você só precisa de um número, recomendo assim.
Sam Plus Plus

1
Isto assume que a coluna está ordenada #
Andrej Adamenko 18/03/19

Também poderia ser feito como=DAYS360(A2;VLOOKUP(99^99;A:A;1))
vstepaniuk 25/06

56

Se A2: A contiver datas contíguas, INDEX (A2: A, COUNT (A2: A)) retornará a última data. A fórmula final é

=DAYS360(A2,INDEX(A2:A,COUNT(A2:A)))

9
Pessoalmente, acho que essa deve ser a resposta aceita. Conciso e simples.
SwampThingTom

4
Essa é a resposta mais precisa. Embora a resposta do @Poul acima funcione neste caso, eu queria encontrar a última célula real com dados reais e isso indica se os dados estão em ordem ou não.
Chuck Claunch

4
Isto é perfeito. Segundo, a moção de que deve ser a resposta aceita.
shiri

37

Meu favorito é:

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

Portanto, para a necessidade do OP:

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

... embora o "MAX" postado em Poul acima seja mais limpo quando a última data é sempre a mais recente.
31817 Eric Smalling

1
Ele quis dizer +1 não, 1
Newbrict 04/08/19

1
Isso não responde à pergunta - ele escolhe o último valor, mas não o último valor não vazio.
NateS 11/11/19

17

Se a coluna fosse expandida apenas por datas contíguas adicionadas, como no meu caso - usei apenas a função MAX para obter a última data.

A fórmula final será:

=DAYS360(A2; MAX(A2:A)) 

3
Gênio! Simples e eficaz.
Asu

14

Embora a pergunta já esteja respondida, existe uma maneira eloqüente de fazê-lo.

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

Por exemplo:

Se os seus dados estiverem inseridos A1:A100e você desejar adicionar mais alguns dados à coluna A, digamos que possam estar A1:A105ou mais A1:A1234tarde, você poderá usar este intervalo:

A1:A

Amostra

Portanto, para obter o último valor não vazio em um intervalo, usaremos 2 funções:

  • COUNTA
  • ÍNDICE

A resposta é =INDEX(B3:B,COUNTA(B3:B)).

Aqui está a explicação:

COUNTA(range) retorna o número de valores em um intervalo, podemos usar isso para obter a contagem de linhas.

INDEX(range, row, col)retorna o valor em um intervalo na posição rowe col( col=1se não especificado)

Exemplos:

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 a foto acima, nossa gama será B3:B. Então, vamos contar quantos valores existem na gama B3:Bde COUNTA(B3:B)primeira. No lado esquerdo, ele produzirá, 8pois existem 8 valores, enquanto que 9no lado direito. Também sabemos que o último valor está na 1ª coluna do intervalo, B3:Bportanto o colparâmetro de INDEXdeve ser 1 e o rowparâmetro deve ser COUNTA(B3:B).

PS : por favor, responda a resposta de @ bloodymurderlive desde que ele escreveu primeiro, só estou explicando aqui.


1
Eu gosto disso, mas já vi problemas em que, às vezes, ele retorna o penúltimo item em vez do último.
Eric Smalling 31/03

1
@EricSmalling que pode acontecer porque você tem um avanço de linha extra no final de todas as linhas e, quando copia e cola, pode ser considerado uma célula não vazia. Você tem alguma planilha de exemplo expondo esse problema?
Ramazan Polat 31/03

Parece a solução mais inteligente!
MemLeak

Isso não funciona. Onde você conseguiu a cotação da btw? Eu pensei que era da documentação da planilha do Google.
Atul

1
@RamazanPolat: O OP está pedindo uma maneira (no Planilhas Google) de encontrar a última célula não vazia na coluna A1:A não me fornece o último valor da célula não vazia na coluna A
Atul

8

Aqui está mais um:

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

Com a equação final sendo esta:

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

As outras equações aqui funcionam, mas eu gosto dessa porque facilita a obtenção do número da linha, o que acho que preciso fazer com mais frequência. Apenas o número da linha seria assim:

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

Inicialmente, tentei encontrar exatamente isso para resolver um problema de planilha, mas não consegui encontrar nada útil que fornecesse o número da linha da última entrada; portanto, espero que isso seja útil para alguém.

Além disso, isso tem a vantagem adicional de funcionar para qualquer tipo de dados em qualquer ordem, e você pode ter linhas em branco entre as linhas com conteúdo e não conta células com fórmulas que são avaliadas como "". Ele também pode lidar com valores repetidos. Em suma, é muito semelhante à equação que usa max ((G: G <> "") * linha (G: G)) aqui, mas facilita a retirada do número da linha um pouco mais, se é isso que você procura .

Como alternativa, se você quiser colocar um script em sua planilha, poderá facilitar a tarefa, se planeja fazer muito isso. Aqui está esse resumo:

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;
    }
  }
}

Aqui, basta digitar o seguinte, se você quiser a última linha na mesma folha que está editando no momento:

=LASTROW()

ou se você quiser a última linha de uma coluna específica dessa planilha ou de uma coluna específica de outra planilha, faça o seguinte:

=LASTROW("Sheet1","A")

E para a última linha de uma planilha em geral:

=LASTROW("Sheet1")

Para obter os dados reais, você pode usar indiretamente:

=INDIRECT("A"&LASTROW())

ou você pode modificar o script acima nas duas últimas linhas de retorno (as duas últimas, pois seria necessário colocar a planilha e a coluna para obter o valor real de uma coluna real) e substituir a variável pelo seguinte:

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

e

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

Um benefício desse script é que você pode escolher se deseja incluir equações que sejam avaliadas como "". Se nenhum argumento for adicionado, as equações avaliadas como "" serão contadas, mas se você especificar uma planilha e uma coluna, elas serão contadas. Além disso, há muita flexibilidade se você estiver disposto a usar variações do script.

Provavelmente um exagero, mas tudo possível.


1
"Função desconhecida LASTROW"
Berit Larsen

Deve ser +100 para realmente responder ao título da pergunta: Última linha, sem valor na última linha
Norbert van Nobelen

6

E essa fórmula para obter o último valor:

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

E essa seria uma fórmula final para sua tarefa original:

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

Suponha que sua data inicial seja no G10.


5

Eu segui uma rota diferente. Como sei que adicionarei algo a uma linha / coluna uma a uma, descubro a última linha contando primeiro os campos que possuem dados. Vou demonstrar isso com uma coluna:

=COUNT(A5:A34)

Então, digamos que retornou 21. A5 é 4 linhas abaixo, então eu preciso obter a 21ª posição da quarta linha abaixo. Eu posso fazer isso usando inderect, da seguinte forma:

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

É encontrar a quantidade de linhas com dados e retornar um número que estou usando como modificador de índice.


1
Observe que não pode haver células vazias. Além disso, COUNTA deve caber mais cenários
Z. Khullah

4

para uma linha:

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

para uma coluna:

=ARRAYFORMULA(INDIRECT(ADDRESS(1, MAX(IF(1:1<>"", COLUMN(1:1), )), 4)))

1
Excelente resposta. Obrigado.
19419 Nick

2

Esta parece ser a solução mais simples que encontrei para recuperar o último valor em uma coluna sempre em expansão:

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

2

Isso funciona para mim. Obtenha o último valor da coluna A na planilha do Google:

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

(Ele também pula linhas em branco no meio, se houver)


1

Calcule a diferença entre a data mais recente na coluna A e a data na célula A2.

=MAX(A2:A)-A2

1

Isso fornecerá o conteúdo da última célula:

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

Isso fornecerá o endereço da última célula:

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

Isso fornecerá a linha da última célula:

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

Talvez você prefira um script. Esse script é bem mais curto que o enorme postado acima por outra pessoa:

Vá para o editor de scripts e salve este script:

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

Feito isso, basta inserir isso em uma célula:

=getLastRow(A:A)

0

A maneira como um amador o faz é "= CONCATENATE (" A ", COUNTUNIQUE (A1: A9999))", em que A1 é a primeira célula da coluna e A9999 está mais abaixo nessa coluna do que eu jamais esperava ter entradas. Esse A # resultante pode ser usado com a função INDIRETO, conforme necessário.


Desculpe. Isso funciona apenas se todas as entradas na coluna forem exclusivas.
Conrad Lindes

1
Embora eu aprecie sua contribuição ao StackOverflow, Conrad, sua resposta tem alguns problemas. Primeiro, ele não especificou que as datas eram únicas; portanto, você deve usar count (), em vez de countunique (). Segundo, usar indir () e concatenar duplica a funcionalidade existente de index (), como você pode ver nas outras respostas. Terceiro, em vez de A1: A9999, por que não usar apenas A1: A?
Sondra.kinsey 16/05

0

Para encontrar o número da última linha não vazia (permitindo espaços em branco entre eles), usei abaixo para pesquisar a coluna A.

=ArrayFormula(IFNA(match(2,1/(A:A<>""))))
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.