Eu tenho uma planilha com alguns valores na coluna G. Algumas células estão vazias no meio e preciso obter o último valor dessa coluna para outra célula.
Algo como:
=LAST(G2:G9999)
exceto que LAST
não é uma função.
fonte
Eu tenho uma planilha com alguns valores na coluna G. Algumas células estão vazias no meio e preciso obter o último valor dessa coluna para outra célula.
Algo como:
=LAST(G2:G9999)
exceto que LAST
não é uma função.
Portanto, esta solução usa uma string como parâmetro. Ele descobre quantas linhas existem na planilha. Ele obtém todos os valores da coluna especificada. Ele percorre os valores do final ao início até encontrar um valor que não seja uma string vazia. Finalmente, retorna o valor.
Roteiro:
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:
Em resposta ao comentário solicitando a atualização automática da função:
A melhor maneira que encontrei é usar isso com o código acima:
function onEdit(event) {
SpreadsheetApp.getActiveSheet().getRange("A1").setValue(lastValue("G"));
}
Não seria mais necessário usar a função em uma célula como os estados da seção Uso . Em vez disso, você está codificando a célula que deseja atualizar e a coluna que deseja rastrear. É possível que haja uma maneira mais eloquente de implementar isso (espero que não seja codificada), mas esta é a melhor que pude encontrar por enquanto.
Observe que se você usar a função na célula como afirmado anteriormente, ela será atualizada ao recarregar. Talvez haja uma maneira de conectar onEdit()
e forçar a atualização das funções da célula. Simplesmente não consigo encontrar na documentação.
Tools -> Scripts -> Script editor...
Resposta semelhante à resposta de caligari , mas podemos organizá-la apenas especificando o intervalo completo da coluna:
fonte
FILTER()
gama ed, semelhante à resposta da @ Geta .COUNT(G2:G)
retorna 0. Em vez disso, useCOUNTA(G2:G)
isso que conta apenas o número de valores em um conjunto de dados.COUNTA
só é útil quando combinado comINDEX
para obter o último valor se não houver um único espaço em branco entre seus valores.COUNTA
.COUNT
só conta valores numéricos: ele retornará 0 quando fornecido, por exemplo, células de texto.Na verdade, encontrei uma solução mais simples aqui:
http://www.google.com/support/forum/p/Google+Docs/thread?tid=20f1741a2e663bca&hl=en
Se parece com isso:
fonte
ROW
retorna o número da linha, entãoFILTER( ROW(A10:A100), NOT(ISBLANK(A10:A100) )
retorna uma matriz de todos os números de linha não em branco (não seus valores), por exemplo [1,2, 3, 7, 12, 14]. Em seguida,MAX
nos dá o número da última linha. Um segundoFILTER
é então aplicado para filtrar todas as linhas onde o número da linha não corresponde ao valorMAX
(ou seja, o valor da última linha não vazia).A função LAST () não está implementada no momento para selecionar a última célula dentro de um intervalo. No entanto, seguindo seu exemplo:
somos capazes de obter a última célula usando o par de funções INDEX () e COUNT () desta forma:
Há um exemplo ao vivo na planilha onde encontrei (e resolvi) o mesmo problema (planilha
Orzamentos
, célulaI5
). Observe que funciona perfeitamente mesmo se referindo a outras planilhas do documento.fonte
COUNTA
nesse caso se tiver certeza de que não há um único espaço em branco entre os valores da coluna. Veja meus comentários para a resposta de dohmoose.:G
denota o último elemento? Isso está documentado?Resumo:
Detalhes:
Procurei e tentei várias respostas e aqui está o que descobri: A solução mais simples (veja a resposta de Dohmoose ) funciona se não houver espaços em branco:
Se você tiver espaços em branco, ele falhará.
Você pode lidar com um espaço em branco apenas mudando de
COUNT
paraCOUNTA
(consulte a resposta do usuário 3280071 ):No entanto, isso falhará para algumas combinações de espaços em branco. (
1 blank 1 blank 1
falha para mim.)O código a seguir funciona (veja a resposta de Nader e o comentário de Jason ):
mas requer pensar se você deseja usar
COLUMNS
ouROWS
para um determinado intervalo.No entanto, se
COLUMNS
for substituído porCOUNT
, pareço obter uma implementação confiável e à prova de branco deLAST
:E como
COUNTA
o filtro está embutido, podemos simplificar ainda mais usandoIsso é um tanto simples e correto. E você não precisa se preocupar em contar linhas ou colunas. E, ao contrário das soluções de script, ele é atualizado automaticamente com as alterações na planilha.
E se você quiser obter o último valor em uma linha, basta alterar o intervalo de dados:
fonte
Para retornar o último valor de uma coluna de valores de texto, você precisa usar CONT.valores, portanto, você precisaria desta fórmula:
fonte
COUNTA
combinado comINDEX
não retornará o último valor da coluna.tente isto:
=INDIRECT("B"&arrayformula(max((B3:B<>"")*row(B3:B))))
Suponha que a coluna na qual você está procurando o último valor seja B.
E sim, funciona com espaços em branco.
fonte
Parece que o Google Apps Script agora oferece suporte a intervalos como parâmetros de função. Esta solução aceita um intervalo:
Veja também a discussão no fórum de ajuda do Google Apps Script: Como faço para forçar o recálculo das fórmulas?
fonte
Eu olhei para as respostas anteriores e elas parecem estar trabalhando muito. Talvez o suporte a scripts simplesmente tenha melhorado. Acho que a função é expressa assim:
Em minha planilha, eu uso:
Na função, obtenho uma matriz de valores com um por célula referenciada e isso apenas itera do final da matriz para trás até encontrar um valor não vazio ou ficar sem elementos. As referências da planilha devem ser interpretadas antes que os dados sejam passados para a função. Não é sofisticado o suficiente para lidar com dimensões múltiplas. A pergunta era feita para a última célula em uma única coluna, então parece caber. Provavelmente morrerá se você ficar sem dados também.
Sua milhagem pode variar, mas isso funciona para mim.
fonte
sem codificação rígida.
fonte
Este funciona para mim:
fonte
Isso obtém o último valor e lida com valores vazios:
fonte
=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()))) ) ) )
Em uma coluna com espaços em branco, você pode obter o último valor com
fonte
A resposta
não funciona corretamente no LibreOffice. No entanto, com uma pequena mudança, funciona perfeitamente.
Sempre funciona apenas se o intervalo verdadeiro for menor que
(G2:G10000)
fonte
É aceitável responder à pergunta original com uma resposta estritamente fora do tópico :) Você pode escrever uma fórmula na planilha para fazer isso. Feio, talvez? mas eficaz no funcionamento normal de uma planilha.
Isso é oferecido como uma reflexão para uma série de questões na área de script que podem ser entregues de forma confiável com fórmulas de matriz que têm a vantagem de muitas vezes funcionar de maneira semelhante no Excel e no openoffice.
fonte
fonte
Eu estava brincando com o código fornecido por @tinfini e pensei que as pessoas poderiam se beneficiar do que considero uma solução um pouco mais elegante (note que não acho que os scripts funcionem da mesma forma quando ele criou a resposta original) ...
Em uso, ficaria assim:
fonte
Em relação ao comentário de @Jon_Schneider, se a coluna tiver células em branco, use CONT.valores ()
fonte
Eu encontrei outra maneira que pode te ajudar
=INDEX( SORT( A5:D ; 1 ; FALSE) ; 1 )
- retornará a última linhaMais informações da anab aqui: https://groups.google.com/forum/?fromgroups=#!topic/How-to-Documents/if0_fGVINmI
fonte
Encontrou uma ligeira variação que funcionou para eliminar os espaços em branco da parte inferior da mesa. = índice (G2: G, CONT.SE (G2: G, "<>"))
fonte
Estou surpreso que ninguém nunca tenha dado essa resposta antes. Mas este deve ser o mais curto e até funciona no excel:
G2:G<>""
cria uma matriz de 1 / verdadeiro (1) e 1 / falso (0). Uma vez queLOOKUP
faz uma abordagem de cima para baixo para encontrar2
e Como nunca encontrará 2, chega à última linha não em branco e fornece a posição dela.A outra maneira de fazer isso, como outros podem ter mencionado, é:
Encontrar o
MAX
índiceROW
da linha não em branco e alimentá-loINDEX
Em uma matriz de interrupção em branco zero, Usar
INDIRECT
RC
notação comCOUNTBLANK
é outra opção. Se V4: V6 estiver ocupado com entradas, então,V18 :
dará a posição de V6.
fonte
para obter o último valor de uma coluna, você também pode usar
MAX
função comIF
funçãofonte