Pergunte aqui
0

Converter texto concatenado em fórmula

perguntadas 2013-12-10 15:34:34 +0200

imagem do gravatar de Beto

updated 2016-02-04 13:02:52 +0200

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...

editar alterar tag assinalar como ofensivo fechar mesclar Excluir

Comentários

Poderia dar um exemplo do que queres alcançar?

imagem do gravatar de OlivierOlivier ( 2013-12-10 16:39:32 +0200 )editar

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!

imagem do gravatar de BetoBeto ( 2015-09-24 12:57:29 +0200 )editar

2 Respostas

1

respondidas 2013-12-10 21:50:58 +0200

imagem do gravatar de Olivier

updated 2013-12-12 20:19:29 +0200

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

editar assinalar como ofensivo Excluir Link mais

Comentários

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.

imagem do gravatar de BetoBeto ( 2013-12-11 14:11:10 +0200 )editar

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

imagem do gravatar de BetoBeto ( 2013-12-12 13:23:12 +0200 )editar

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

imagem do gravatar de BetoBeto ( 2013-12-12 21:44:56 +0200 )editar

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.

imagem do gravatar de BetoBeto ( 2013-12-17 20:11:48 +0200 )editar

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.

imagem do gravatar de BetoBeto ( 2015-11-27 19:10:00 +0200 )editar
1

respondidas 2013-12-14 01:52:04 +0200

updated 2018-04-12 20:21:51 +0200

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.

editar assinalar como ofensivo Excluir Link mais

Comentários

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.

imagem do gravatar de Gilberto SchiavinattoGilberto Schiavinatto ( 2013-12-14 02:01:23 +0200 )editar

É 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.

imagem do gravatar de BetoBeto ( 2013-12-16 12:51:19 +0200 )editar

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?

imagem do gravatar de amkochakiamkochaki ( 2018-04-11 19:20:24 +0200 )editar

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

imagem do gravatar de Gilberto SchiavinattoGilberto Schiavinatto ( 2018-04-12 01:41:55 +0200 )editar
Login/Registrar para responder

Ferramentas de perguntas

1 seguidor

Estatísticas

Perguntadas: 2013-12-10 15:34:34 +0200

Lidas: 12,159 vezes

Última atualização: Apr 12 '18