Estou tentando obter um endereço de intervalo absoluto de entrada única. Algo assim.
Formula
=SOME.MAGIC(A1:B10)
Output (string)
"$A$1:$B$10"
Tentativa 1
Eu sou capaz de obter esse resultado, mas usando uma abordagem significativamente complexa com a seguinte fórmula (array).
{=ADDRESS(MIN(ROW(A1:B10)),MIN(COLUMN(A1:B10)),1,1)&":"&ADDRESS(MAX(ROW(A1:B10)),MAX(COLUMN(A1:B10)),1,1)}
Onde (como você pode ver) a string é A1:B10
usada quatro vezes.
Tentativa 2
Minha outra tentativa foi usar function FORMULATEXT
. O link para um intervalo existe apenas uma vez, mas é uma solução desagradável usar mais uma célula e funciona relativamente bem apenas para endereços relativos. Não funciona para intervalos nomeados.
C1=$A$1:$B$10
C2=MID(FORMULATEXT(C1),2,LEN(FORMULATEXT(C1))-1) //Returns string "$A$1:$B$10" ✓
But
C1=A1:B10
C2=MID(FORMULATEXT(C1),2,LEN(FORMULATEXT(C1))-1) //Returns string "A1:B10" ✘
And
C1=Named_range
C2=MID(FORMULATEXT(C1),2,LEN(FORMULATEXT(C1))-1) //Returns string "Named_range" ✘
Tentativa 3
O próximo passo é a combinação da tentativa 1+2. Funciona, mas não estou feliz com isso.
C1=A1:B10
C2=MID(FORMULATEXT(C1),2,LEN(FORMULATEXT(C1))-1)
C3{=ADDRESS(MIN(ROW(INDIRECT(C2))),MIN(COLUMN(INDIRECT(C2))),1,1)&":"&ADDRESS(MAX(ROW(INDIRECT(C2))),MAX(COLUMN(INDIRECT(C2))),1,1)}
Existe uma maneira mais fácil (fórmula menos complexa) com a mesma saída?
Considere a função definida pelo usuário:
As Funções Definidas pelo Usuário (UDFs) são muito fáceis de instalar e usar:
Se você salvar a pasta de trabalho, a UDF será salva com ela. Se você estiver usando uma versão do Excel posterior a 2003, salve o arquivo como .xlsm em vez de .xlsx
Para remover a UDF:
Para usar a UDF de uma célula do Excel:
Para saber mais sobre macros em geral, consulte:
http://www.mvps.org/dmcritchie/excel/getstarted.htm
e
http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx
e para detalhes sobre UDFs, veja:
http://www.cpearson.com/excel/WritingFunctionsInVBA.aspx
As macros devem estar habilitadas para que isso funcione!
Esta seria outra forma:
E se você tiver o Office 365, use LET para fazer referência ao intervalo apenas uma vez
Na verdade, sua tentativa nº 1 é exatamente a maneira de fazê-lo. Se você está procurando uma maneira de fazê-lo parecer mais com uma função (menos repetições da referência/uso único do endereço "argumento"), a melhor maneira é usar LAMBDA no Office 365. Com LAMDA, você pode fornecer argumentos para um intervalo nomeado, definindo MAGIC como
em seguida, usando =MAGIC(A1:B10) na planilha.