Condividi:        

vba funzione che restituisce tre valori dandone uno

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

vba funzione che restituisce tre valori dandone uno

Postdi Francesco53 » 24/02/20 12:22

Buongiorno a tutto il Forum, vorrei sapere se esiste la possibilità di creare una funzione a cui si passa un valore e ne restituisce, dopo fatti i calcoli tre.
Faccio un esempio:
Codice: Seleziona tutto
Function Risultato(ByVal n As Byte) As Byte
        Dim n1 As Byte
        Dim n2 As Byte
        Dim n3 As Byte
        If n < 10 Then n1 = n + 10
        If n1 < 20 Then n2 = n1 + 20
        If n2 < 30 Then n3 = n2 + 30
End Function


Dovrei poter riportare i valori di n1, n2, n3.
Ringrazio chi può darmi un aiuto,
Francesco
S.O. Windows 10 e Office 2007
Avatar utente
Francesco53
Utente Senior
 
Post: 811
Iscritto il: 20/02/10 18:45

Sponsor
 

Re: vba funzione che restituisce e valori dandone uno

Postdi wallace&gromit » 24/02/20 15:18

Il tuo esempio è molto strano: con valori inferiori a 10 restituirà sempre n1 = x +10 e N2 = x + 30,
con valori superiori a 10 darà sempre esclusivamente n1 = 0, n2 = 20 e n3 = 50.

Anche il titolo è strano, quanti risultati deve restituire la funzione? Dalla spiegazione capisco 3, nel titolo c'è scritto uno!

Infine non capisco (ma questo è un limite mio) come si lavora con delle variabili in formato Byte.

Aggiungo che per creare una funzione che restituisce risultati in più celle devi selezionarle tutte quando inserisci la funzione e confermare con Ctrl+Maiusc+Enter. Il formato deve essere "Variant", la funzione deve creare un array con tanti elementi quante sono le celle selezionate.
Se è questo che vuoi vediamo assieme come fare.
Office2016 + 2019 su win11
Avatar utente
wallace&gromit
Utente Senior
 
Post: 2174
Iscritto il: 16/01/12 14:21

Re: vba funzione che restituisce e valori dandone uno

Postdi Francesco53 » 24/02/20 20:29

Ciao i risultati dovrebbero essere:
If n < 10 Then n1 = n + 10
If n1 < 20 Then n2 = n1 + 20
If n2 < 30 Then n3 = n2 + 30

ipotizzando n = 3
n1 = 13
n2 = 33 (mio errore di digitazione, non + 20 ma +10) per cui n2 = 23
n3 = 53
Scusa l'errore,
Francesco
S.O. Windows 10 e Office 2007
Avatar utente
Francesco53
Utente Senior
 
Post: 811
Iscritto il: 20/02/10 18:45

Re: vba funzione che restituisce e valori dandone uno

Postdi Francesco53 » 24/02/20 21:57

Un saluto a tutti ho risolto, posto il codice per poter essere utilizzato da chi può avere la stessa difficoltà:
Codice: Seleziona tutto
Sub ProvaDati()
n1 = Cells(7, 6)
    Cells(7, 7) = Dati(n1, "A")
    Cells(7, 8) = Dati(n1, "B")
    Cells(7, 9) = Dati(n1, "C")
End Sub
Function Dati(ByVal num As Byte, Optional Risultato As String = "") As Byte
    Dim Radio(1 To 3) As Byte
        If num < 10 Then
            n1 = num + 10
        End If
            If n1 < 20 Then
                n2 = n1 + 10
            End If
                If n2 < 30 Then
                    n3 = n2 + 30
                End If
      Radio(1) = n1
      Radio(2) = n2
      Radio(3) = n3
      Select Case Risultato
        Case "A"
          Dati = Radio(1)
        Case "B"
          Dati = Radio(2)
        Case "C"
          Dati = Radio(3)
        Case Else
          Dati = Radio
      End Select
    End Function


Francesco
S.O. Windows 10 e Office 2007
Avatar utente
Francesco53
Utente Senior
 
Post: 811
Iscritto il: 20/02/10 18:45

Re: vba funzione che restituisce tre valori dandone uno

Postdi Anthony47 » 25/02/20 01:13

Se hai risolto il tuo problema allora va bene così

Pero' tu hai aggirato la domanda risolvendo il problema in altro modo; per chi e' invece interessato alla soluzione della domanda posta (come creare un funzione che restituisce piu' valori) aggiungo le mie considerazioni.

Innanzitutto il dato restituito dalla Function deve essere dichiarato Variant
Codice: Seleziona tutto
Function Dati(ByVal num As Byte) As Variant


Poi i risultati vanno posizionati in una matrice monodimensionale, come hai ben fatto tu:
Codice: Seleziona tutto
Dim Radio(1 To 3) As Byte


Il codice della Function deve compilare le singole celle di questa matrice (come hai ben fatto tu)
Infine alla Function deve essere assegnata la matrice:
Codice: Seleziona tutto
Dati = Radio


Quindi il codice completo potrebbe essere:
Codice: Seleziona tutto
Function Dati(ByVal num As Byte) As Variant
Dim Radio(1 To 3) As Byte
    If num < 10 Then
        n1 = num + 10
    End If
        If n1 < 20 Then
            n2 = n1 + 10
        End If
        If n2 < 30 Then
            n3 = n2 + 30
        End If
  Radio(1) = n1
  Radio(2) = n2
  Radio(3) = n3
'Esponi i risultati:
Dati = Radio
End Function


Potrai poi usarla come formula, tipo
Codice: Seleziona tutto
=dati(B1)

O richiamarla da una macro, tipo
Codice: Seleziona tutto
myVariant = Dati(Range("B1").Value)



Se usi una versione Excel che gestisce "matrici dinamiche" (vedi viewtopic.php?f=26&t=111058) la formula scritta in una cella singola ti compilera' anche le due celle a destra della formula.

Altrimenti devi scriverla tu come formula a matrice:
-selezioni tre celle in orizzontale;
-scrivi nella barra della formula =dati(B1)
-confermi con Contr-Maiusc-Enter

Se vuoi che i risultati si sviluppino in verticale allora userai
Codice: Seleziona tutto
=MATR.TRASPOSTA(dati(B1))


Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "vba funzione che restituisce tre valori dandone uno":


Chi c’è in linea

Visitano il forum: Nessuno e 48 ospiti