none
É possível utilizar Range dentro da uma Function RRS feed

  • Pergunta

  • Olá,

    Estou fazendo uma function, mas além do resultado na célula, gostaria que me retorna-se outra informação obtida ao longo da function e colocá-la em outra célula.

    Isso é possível? O que estou tentando é simplesmente utilizar no meio da Function a função range, mas não estou tendo sucesso.

    Não sendo possivel, teria outra forma?

    Desde já agradeço.

    Function Resultado(dimensao, largura_ref, altura_ref, comprimento_ref, septo_ref, parede_ref, u1, u2, u3, u4, u5, u6, u7, u8, u9, u10, u11, u12, u13, media)

    Dim i As Integer
    Dim rep_individual As Integer
    Dim rep_media As Integer
    rep_individual = 0
    rep_media = 0
    Dim unidades(13) As Double

    unidades(1) = u1
    unidades(2) = u2
    unidades(3) = u3
    unidades(4) = u4
    unidades(5) = u5
    unidades(6) = u6
    unidades(7) = u7
    unidades(8) = u8
    unidades(9) = u9
    unidades(10) = u10
    unidades(11) = u11
    unidades(12) = u12
    unidades(13) = u13

    Select Case dimensao

    Case "Largura [cm]:"

    For i = 1 To 13
        If unidades(i) > (largura_ref + 0.5) Or unidades(i) < (largura_ref - 0.5) Then
        rep_individual = rep_individual + 1
        End If
    Next i

    If media > (largura_ref + 0.3) Or media < (largura_ref - 0.3) Then
        rep_media = rep_media + 1
    End If

    If rep_media > 0 Then
    Resultado = "Reprovado"
    Range("U23") = "Reprovado Média"
        
    ElseIf rep_individual > 2 Then
    Resultado = "Reprovado"
    Range("U23") = "Reprovado Individual"

    Else
        Resultado = "Aprovado"
        
    End If

    End Select

    End Function

    sexta-feira, 9 de fevereiro de 2018 12:23

Todas as Respostas

  • o correto é usar uma sub para chamar a Function chamá-la através de uma fórmula na célula. Para executar uma ação, deve-se usar Sub. A Function deve ser usada para retornar um valor.

    Exemplo:

    Public Function Resultado(Byval rep_media as double )
    
    If rep_media > 0 Then
    Resultado = "Reprovado"
    End If
    
    End Function

    sub teste( )

    dim media as double

    media = 5 if Resultado (media) = "Reprovado" then plan1.range("A1") = "Reprovado Média"

    end if end sub




    A melhor forma de agradecer e votar como util e / ou marcar como resposta. Anderson Diniz diniabr2011@gmail.com



    sábado, 10 de fevereiro de 2018 02:29
  • Boa noite Leo.

    Conceitualmente o que deseja fazer não é correto: se você cria uma UDF para chamar a partir de uma célula você deve retornar um resultado apenas nesta célula. Se deseja o resultado em duas células, você poderia inserir mais um parâmetro na sua Function para dizer qual das informações deseja retornar, inserindo a fórmula nas duas células (a diferença seria apenas neste parâmetro).

    Outra forma (mas não sei se é possível, porque não testei ainda) seria utilizar uma UDF matricial, mas ainda assim tecnicamente a fórmula estaria escrita em ambas as células.

    Uma alternativa ao uso das UDF seria utilizar uma SUb e executá-la por um botão ou evento, aí você poderia escrever onde quiser, mas as células deixariam de conter as fórmulas.

    Espero que tenha entendido.


    Filipe Magno

    sábado, 10 de fevereiro de 2018 22:15