VBA do Excel - Função definida pelo usuário para transformar a string em fórmula


2

Estou procurando algo semelhante à solução postada aqui:

Função do Excel que avalia uma string como se fosse uma fórmula?

O problema é que isso parece não funcionar com uma função lá.

Esta é a função nesse segmento, conforme enviada por chris neilsen:

Function ev(r As Range) As Variant
    ev = Evaluate(r.Value)
End Function

Aqui está um exemplo de uma string que eu gostaria de transformar em uma fórmula:

=(INDEX(DataV,1,4)/INDEX(DataV,2,4))*100

DataV é um nome dentro da planilha.

Não sei bem como fazê-lo, talvez eu descubra, agora parece que provavelmente não, a menos que leia muito mais sobre VBA.

Qualquer ajuda é apreciada.


Caso você ainda não tenha percebido isso: parece que Evaluate()pode lidar apenas com expressões VBA, e não com as funções da planilha do Excel INDEX(). Se você espera um padrão específico (por exemplo, INDEX(something)/INDEX(something)), pode escrever um código para analisá-lo e emular as funções da planilha com as funções VBA. Mas não tenho ideia de como fazer uma solução geral.
G-Man

Felicidades. Acho que isso explica por que não consegui encontrar nenhum exemplo. Peguei a planilha trabalhando convertendo as fórmulas em apenas referências de células, mas posso desistir dessa função e escolher uma que copie pastas como valores e, em seguida, ative as células.
precisa saber é o seguinte

Oh sim ... isso também não pode ser feito. De alguma forma, o ato de abrir e fechar a célula é lido como uma fórmula completamente nova. O conteúdo original seja danado.
precisa saber é o seguinte

Respostas:


1

Apenas pensei em compartilhar a solução com a qual acabei indo, já que faz o trabalho. Não foi possível criar uma função definida pelo usuário que faça isso, não parece ser possível, por isso fui com uma macro básica.

Sub Formulas()
Dim rng As Range, cell As Range, y As Integer, o As Integer
    y = Range("B1").Value
    o = (y - 3) * 2
Set rng = Range(Cells(3, 4), Cells(3, y))

On Error GoTo ErrHandler
For Each cell In rng
    cell.Activate
    cell.Formula = ActiveCell.Offset(0, o).Value
Next cell
Exit Sub

ErrHandler:
    Msg = "Invalid formula for this Indicator, please re-check in sheet IndDef"
    MsgBox Msg, , "Error!", Err.HelpFile, Err.HelpContext

End Sub

Este foi escrito para ser usado com um botão, se você desejar uma macro de execução automática, procure neste site dicas de uso de interseção.

A parte importante para o problema é a pergunta é:

cell.Activate
cell.Formula = ActiveCell.Offset(0, o).Value

Apenas defina a fórmula da célula como o valor da célula

Range1.Formula = Range2.Value

No meu caso, eu queria que ele fosse executado em várias células, daí a necessidade de ativar o equivalente ao Range1 e usar o ActiveCell.Offset para definir o equivalente ao Range2

Funciona com qualquer string, mas as funções precisam ser escritas em inglês. Espero que isto ajude.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.