Converter texto concatenado em fórmula

Como concatenar células e transformar o resultado da concatenação texto em fórmula? Tem alguma função para isso no Calc?
Quero transformar o texto resultado final de uma concatenação em fórmula. Por exemplo: se coloco em uma célula =CONCATENAR("=SOMA("&A1&")") , tendo digitado na célula A1 "B1+B2"o resultado será : =SOMA(B1+B2) em forma de texto e não o resultado da soma das células B1 e B2…

1 Like

Poderia dar um exemplo do que queres alcançar?

Resolvi postar um vídeo desse experimento: aqui em meu blog e lá (no blog) também tem um arquivo para quem quiser baixar o exemplo. Obrigado!

Numa situação tão simples, eu usaria a função INDIRETO(). Ponha em b1 o primeiro valor, em b2 o segundo valor. em A1 coloque “b1”, em A2 coloque “b2”. a soma seria =INDIRETO(a1)+INDIRETO(a2), i.e. fará a soma B1+B2.

Em situações mais elaboradas, faríamos uma função especifica para isso (dá pra fazer em 5 linhas) que teria

Function Beto (aFormula as String, aLocal as String)

REM O local da célula que vai receber a nova formula não pode ser o local de onde esta função é chamada

oPlanilha = ThisComponent.CurrentController.ActiveSheet
oCelula = oPlanilha.getCellRangeByName(aLocal)
oCelula.Formula = aFormula

Beto=0
End Function

Na planilha coloque algo assim:

Descrição da imagem

1 Like

Caro, Olivier, obrigado por tão pronta resposta, mas eu quis exemplificar de maneira simples que eu queria uma fórmula como resultado. O indireto seria perfeito no caso de somas. No caso de strings, não dá certo… dá um erro #REF. Eu quero “puxar” um resultado de um arquivo (criado a posteriori) cujo nome deveria ser digitado numa célula (A1) para compor ao restante da fórmula que deverá estar digitada na célula (B2) e “zas” na célula B2 aparecerá este resultado!
É possível fazer uma função para isso? Pode me dar mais dicas? Obrigado.

Olivier, pode explicar como fazer esta função de cinco linhas? não entendi e não sei como fazer uma função.
Obrigado,
Beto

Obrigado, Olivier, entendi a aplicação da coisa, mas (veja o tamanho da minha ignorância) onde eu crio a função no libreoffice?

Ok, para os obtusos como eu: pode-se criar uma macro usando apagando o sub Beto pelo Function Beto como o Olivier ensina acima e logicamente o end sub pelo End Function. Não se bota para rodar pois vai dar erro. Usa-se direto na planilha. DÁ CERTO INCLUSIVE PARA STRINGS…Obrigado, Olivier.

Olá, caro Olivier. Esta função agora não transforma, uma concatenação de Strings em fórmula. será que vc sabe o porquê. Vou postar uma outra pergunta para poder colocar o print.

Vamos lá para o desafio:

em (A1) b1+b2 , em (B1) 1 , em (B2) 2

em (A4) =CONCATENAR("=SOMA("&A1&")")

Gravei a seguinte Macro:

sub teste
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$A$4"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())
rem ----------------------------------------------------------------------
dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "ToPoint"
args3(0).Value = "$A$15"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args3())
rem ----------------------------------------------------------------------
dim args4(5) as new com.sun.star.beans.PropertyValue
args4(0).Name = "Flags"
args4(0).Value = "SDNT"
args4(1).Name = "FormulaCommand"
args4(1).Value = 0
args4(2).Name = "SkipEmptyCells"
args4(2).Value = false
args4(3).Name = "Transpose"
args4(3).Value = false
args4(4).Name = "AsLink"
args4(4).Value = false
args4(5).Name = "MoveMode"
args4(5).Value = 4
dispatcher.executeDispatch(document, ".uno:InsertContents", "", 0, args4())
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:SetInputMode", "", 0, Array())
rem ----------------------------------------------------------------------
dim args6(0) as new com.sun.star.beans.PropertyValue
args6(0).Name = "StringName"
args6(0).Value = "==SOMA(b1+b2)"
dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args6())
end sub

Ai você completa com Enter.
E o resultado na célula deu 3.

Ops! tem algo errado, em (A1) alterai para b1+b3 e em (B3) coloquei 3. Até antes do Enter final esta certo, mostra a formula com a alteração, porém o resultado continua 3 e grava a fórmula ==SOMA(B1+B2). Alguém sabe como alterar na macro (antepenultima linha) args6(0).Value = “==SOMA(b1+b2)”, para acertar esta fórmula.

É só retirar um dos sinais de “=” e a fórmula dá certo: , args6(0).Value = “=SOMA(b1+b2)”

Gilberto. Obrigado também.
Achei muito legal os desafios resolvido por você e Olivier.

Boa tarde
Não estou conseguindo fazer funcionar a função Beto acima, tenho o office 2016. A função é chamada na celular mas não esta funcionando, preciso converter texto em formula. Alguem poderia me ajudar?

Ops, Office 2016 é Excel, esta pagina de ajuda é para Calc do LibreOffice…