O uso de INDIRECT()
obras excelentes para preservar a posição absoluta das referências depois que os destinos foram copiados e colados, mas o problema é que ele também preserva a posição absoluta quando a fórmula é copiada, o que significa que você não pode estender facilmente uma fórmula para cobrir uma grande quantidade alcance ao usá-lo.
A solução é combinar INDIRECT()
com ROW()
, COLUMN()
e ADDRESS()
gerar programaticamente a posição da célula de destino com base na célula da fórmula.
No caso mais simples, como quando a célula de destino tem uma coluna fixa e sempre permanece na mesma linha que a fórmula, isso pode ser feito da seguinte maneira:
INDIRECT("A"&ROW())
Para introduzir deslocamentos dinâmicos da célula da fórmula, você pode usar ADDRESS()
:
INDIRECT(ADDRESS(ROW()-1,COL()-4))
Na captura de tela abaixo, as fórmulas no B1:E1
foram estendidas para as 16 linhas abaixo e, em seguida, a sequência numérica A7:A10
foi cortada e colada em 6 células. Como você pode ver, as fórmulas mais simples foram ajustadas e dessincronizadas automaticamente, enquanto o uso ingênuo de INDIRECT()
não extrapolou corretamente todas as linhas, mas as duas fórmulas usadas INDIRECT()
com a recuperação programática dos locais das linhas e das colunas foram capazes de manter suas referências: