É possível colocar um intervalo nomeado em uma fórmula como esta?
=ISNUMBER(MATCH(D42,someworksheet!A:A,0))
Especificamente onde diz A:A
?
É possível colocar um intervalo nomeado em uma fórmula como esta?
=ISNUMBER(MATCH(D42,someworksheet!A:A,0))
Especificamente onde diz A:A
?
Você pode usar a
INDIRECT()
função para fazer isso.É muito simples: você simplesmente constrói uma string que corresponde à string literal do endereço/referência desejado. Esta construção de uma corda é feita exatamente como qualquer outra construção de corda que você faz, o que significa que todas as maneiras de reunir as partes também estão disponíveis para você.
Portanto, o conceito seria colocar a
INDIRECT()
função imediatamente após o "D42", naMATCH()
função.Ao usar intervalos nomeados dentro
INDIRECT()
, é muito importante considerar o que é retornado, pois isso determina como fazer referência ao intervalo nomeado na função. EM GERAL, se o Intervalo Nomeado "Refere-se a" texto literal (como o seuA:A
PODERIA ser), então você insere o Intervalo Nomeado como está, sem aspas duplas em torno dele:Neste caso,
SomeName
"Refere-se a"="A:A"
.Se você usar aspas duplas, todos dizem que os Intervalos Nomeados devem ter dentro
INDIRECT()
quando o Intervalo Nomeado "Refere-se a" texto literal, você obterá um #REF! erro. Nada de bom.Se um Named Range se referir a um endereço viável no formato de endereço viável, você DEVE usar as aspas duplas dentro da
INDIRECT()
função. Por exemplo, seSomeOtherName
"Refere-se a"someworksheet!A:A
(sem aspas no valor "Refere-se a" - é um endereço viável, que você pode copiar e colar diretamente em uma fórmula e funcionará exatamente como você o encontrou), então você usaria isso como:Portanto, você pode usar qualquer uma das maneiras para definir seu intervalo nomeado. No entanto, se o intervalo nomeado "referir-se a" um endereço viável, o Excel adicionará a ele o nome da planilha que você ativou ao criar e definir o intervalo nomeado. Tudo muito bem se você quiser que o Named Range inclua ESSA planilha no que ela dá
INDIRECT()
ou se não, mas está feliz em se dar ao trabalho de usar técnicas de string para remover o nome da planilha antes deINDIRECT()
avaliá-la.Se você usar uma string literal (
"A:A"
— note que as aspas duplas a tornam uma string literal, não um endereço viável), então você usaria a seguinte fórmula: (usando os nomes acima)INDIRECT()
juntará o nome da planilha entre aspas duplas e "!" com a string literal deSomeName ("A:A") to get "someworksheet!A:A". What's inside the doublequotes would be a valid address/reference, so
INDIRECT()` retornará o resultado desejado.Se estiver de acordo com o intervalo nomeado retornando o nome da planilha junto com o "A:A", você usaria o seguinte:
Muito importante as aspas duplas em torno do intervalo nomeado. Nesse caso, ele obterá o endereço viável sem nenhuma construção de string após uma etapa e retornará os valores fornecidos como no outro exemplo.
Se você quer exatamente o que mencionou na pergunta, use o primeiro.
Há muitas razões para preferir uma abordagem sobre a outra. Seu uso/necessidades exatas determinarão qual você tomaria. Nenhum deles tem qualquer preferência teórica.
Em geral, sempre que você precisar construir um endereço e usá-lo como um endereço real, não uma string,
INDIRECT()
é seu amigo. Existem etapas entre especificar literalmente um endereço em uma fórmula e se afastar como você faz comINDIRECT()
. Por exemplo,OFFSET()
pode construir um endereço, mas faz isso diretamente a partir de partes que podem ser especificadas de várias maneiras, mas nenhuma delas pode ser texto como "alguma outra folha" - então entre escrever diretamente um endereço e criá-lo completamente de texto.Tem muitos usos. O acima mal toca em todos eles. É tão útil que você deveria procurá-lo em sites de ajuda e entendê-lo.
No passado, para quase tudo, e atualmente para planilhas em que poderia ser usado, digamos, algumas centenas de milhares de vezes ou em que o restante da carga de cálculo fosse igualmente grande, havia uma desvantagem. É uma
volatile function
e qualquer célula com ela é recalculada toda vez que o Excel calcula. Não apenas quando o Excel acha que precisa ser porque algo que o afeta mudou. Com os computadores e os níveis de memória de hoje, isso não é mais uma preocupação, a menos que, como mencionado, alguém tenha uma carga de cálculo massiva ou a use o suficiente para ser uma carga enorme. E massivo significa, digamos, 100.000 ou mais linhas e um número razoável de colunas. Algo a considerar se sua planilha calcula lentamente. Além disso, o Excel moderno tem aLET()
e se seu uso calculou o mesmo endereço mais de uma vez em qualquer célula,LET()
permitirá que você reduza o número de vezes que é calculado para apenas uma vez, não várias vezes. Por isso, está se tornando mais útil a cada dia!