Condividi:        

Excel Funzione personalizzata chiarimenti

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

Excel Funzione personalizzata chiarimenti

Postdi Francesco53 » 07/04/14 21:19

Un saluto a tutto il Forum, avrei la necessità di una spiegazione del perchè se creo una Funzione personalizzata,
rispetto alle classiche funzioni, riscontro la necessità di dover inserire i diversi dati separati da ; e non riesco a
utilizzare la classica forma che va da 1° a ultimo separati dai :
inserisco l'esempio classico già presente nelle funzioni excel, è quello simile che ho provato a creare io:
esempio: =Somma(A1:E1) questa è la classica funzione di excel,
io ho provato a ricrearla con il seguente codice:
Codice: Seleziona tutto
Function SommaT(ByVal s1 As Byte, ByVal s2 As Byte, ByVal s3 As Byte, ByVal s4 As Byte, ByVal s5 As Byte) As Integer
        Dim n1 As Byte
        '------- Calcolare Somma -------------------------
        n1 = (s1 + s2 + s3 + s4 + s5)
        SommaT = n1
End Function

nell'utilizzo devo utilizzare la seguente sintassi:
=SommaT(A1;B1;C1;D1;E1)
per cui devo digitare a mano tutte le celle utilizzate.
Vorrei sapere se sbaglio io, oppure è un vincolo delle funzioni personalizzate quando utilizzano più di una cella.
Grazie a chiunque può darmi spiegazioni in merito.
Francesco
S.O. Windows 10 e Office 2007
Avatar utente
Francesco53
Utente Senior
 
Post: 811
Iscritto il: 20/02/10 18:45

Sponsor
 

Re: Excel Funzione personalizzata chiarimenti

Postdi Zer0Kelvin » 07/04/14 22:09

Ciao.
Devo dire che sei piuttosto fuori strada; in Somma(A1:E1), A1:E1 é un intervallo di celle che dal lato VBA é un Range.
LA tua UDF andrebbe scritta così:
Codice: Seleziona tutto
Option Explicit

Public Function SommaT(Area As Range) As Variant
Dim Cella As Range
   SommaT = 0
   For Each Cella In Area
      SommaT = SommaT + Cella
   Next Cella
End Function
[Win7,Office2010]
Condividere la conoscenza aumenta la ricchezza di tutti(Z0°K)
Dai ad un uomo un pesce e lo avrai sfamato per un giorno;insegnagli a pescare e lo avrai sfamato per sempre(Confucio)
Il sonno della ragione genera mostri(Francisco Goya)
Avatar utente
Zer0Kelvin
Utente Senior
 
Post: 388
Iscritto il: 08/04/12 11:23

Re: Excel Funzione personalizzata chiarimenti

Postdi Francesco53 » 07/04/14 22:18

Grazie ZeroKelvin,
stò cercando di imparare da autodidatta, e faccio spesso prove per cercare di capire,
quando non riesco cerco su google e se non trovo chiedo al Forum, sapendo che ci sono
persone in gamba e gentili che aiutano a capire.
Grazie
Francesco
S.O. Windows 10 e Office 2007
Avatar utente
Francesco53
Utente Senior
 
Post: 811
Iscritto il: 20/02/10 18:45

Re: Excel Funzione personalizzata chiarimenti

Postdi Francesco53 » 08/04/14 08:43

Buongiorno, chiedo cortesemente un'altra informazione, volendo estrapolare
i singoli valori del range, come posso fare per poterli esaminare singolarmente?
Spero di essere riuscito a far capire cosa chiedo.
Francesco
S.O. Windows 10 e Office 2007
Avatar utente
Francesco53
Utente Senior
 
Post: 811
Iscritto il: 20/02/10 18:45

Re: Excel Funzione personalizzata chiarimenti

Postdi Anthony47 » 08/04/14 11:51

Codice: Seleziona tutto
For Each Cella In Area / Next Cella
Questo ciclo gia' "lavora" un valore alla volta; dovresti quindi spiegare che elaborazione vorresti fare su quei valori...
Avatar utente
Anthony47
Moderatore
 
Post: 19438
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Excel Funzione personalizzata chiarimenti

Postdi Francesco53 » 08/04/14 13:57

Buongiorno Anthony, provo a farti un esempio banale, ma penso che possa servire a capire cosa chiedo.
Codice: Seleziona tutto
Public Function SommaT(Area As Range) As Variant
    Dim Cella As Range
    Dim n() As Byte
    Dim conta As Byte
    Dim i As Byte: Dim n1 As Integer: Dim n2 As Integer: Dim n3 As Integer
       conta = 0
       For Each Cella In Area
            conta = conta + 1
            n(conta) = Cella.Value
       Next Cella
       For i = 1 To conta
           n1 = n(i) + n(i + 1)
           n2 = n(i + 2) + n(i + 3)
           n3 = n1 + n2
       Next i
       SommaT = n3
End Function

La funzione dovrebbe restituire il valore n3, solo che mi da errore con #VALORE
Purtroppo le mie conoscenze sono da autodidatta, e non riesco a realizzare la
possibilità una volta letti i valori del range, utilizzare gli stessi per ulteriori
elaborazioni all'interno della funzione.
Ringrazio per l'interessamento,
Francesco
S.O. Windows 10 e Office 2007
Avatar utente
Francesco53
Utente Senior
 
Post: 811
Iscritto il: 20/02/10 18:45

Re: Excel Funzione personalizzata chiarimenti

Postdi Anthony47 » 09/04/14 00:41

Non puoi usare un array non dimensionato ne' il tipo Byte per contenere dei valori numerici.
Inoltre il loop For i = 1 To conta /Next i accede a n() con indici superiori al suo UBound, quindi fallira' anche lui.
Una versione funzionante e' questa:
Codice: Seleziona tutto
Public Function SommaT(Area As Range) As Variant
    Dim Cella As Range
    Dim n() As Double
    Dim conta As Long
    Dim i As Long: Dim n1 As Integer: Dim n2 As Integer: Dim n3 As Integer
    ReDim n(1 To Area.Count)
       conta = 0
       For Each Cella In Area
            conta = conta + 1
            n(conta) = Cella.Value
       Next Cella
       For i = 1 To conta - 3
           n1 = n(i) + n(i + 1)
           n2 = n(i + 2) + n(i + 3)
           n3 = n1 + n2
       Next i
       SommaT = n3
End Function

Che faccia il calcolo che tu hai in mente non ne ho proprio idea, pero'...
Avatar utente
Anthony47
Moderatore
 
Post: 19438
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Excel Funzione personalizzata chiarimenti

Postdi Francesco53 » 09/04/14 09:10

Buongiorno Anthony e grazie per il tuo intervento, ho provato quanto da te suggerito,
i calcoli lì fà anche se non sono quelli postati nel mio esempio, ma comunque era un
esempio, quello di cui ho necessità io è che se voglio conoscere i valori delle celle
facenti parte del range, come utilizzare delle variabili che li contengono, per poi poterli
utilizzare in base ad una mia logica?
Cerco di spiegarmi meglio, se ho un range che va dalla cella A1:A4 ed io volessi assegnare
ad un array n(x) i valori delle celle, per poi essere utilizzati per altri scopi nella funzione,
ho la necessità di riuscire ad estrapolarli singolarmente, ma potendo il range scelto
variare come grandezza, devo riuscire a utilizzare ugualmente i valori singolarmente.
Esempio banalissimo, se cerco la somma di un range(A1:A4), avrò la somma dei valori
n(1) = A1 + n(2) = A2 + n(3) = A3 + n(4) = A4
quindi se voglio sommare solo il 1° con il terzo, avrò la necessità di conoscere i valori di
n(1) e n(3), oppure se il range va da (A1:A10) e volessi sapere i valori di n(3) ed n(6) per
poi sommarli, in poche parole quello che cerco è di poter indipendentemente dalla grandezza
dal range interessato, poter elaborare singolarmente i valori da me scelti, o anche tutti,
importante essere in grado di conoscerne i valori.
Non sò cos'altro aggiungere, ho difficoltà nell'esposizione, ma spero in un aiuto.
Grazie
Francesco
S.O. Windows 10 e Office 2007
Avatar utente
Francesco53
Utente Senior
 
Post: 811
Iscritto il: 20/02/10 18:45

Re: Excel Funzione personalizzata chiarimenti

Postdi Francesco53 » 09/04/14 10:23

Buongiorno Anthony, penso di aver risolto, ti ringrazio.
Il post precedente delle ore 08.10 si può annullare.
Francesco
S.O. Windows 10 e Office 2007
Avatar utente
Francesco53
Utente Senior
 
Post: 811
Iscritto il: 20/02/10 18:45


Torna a Applicazioni Office Windows


Topic correlati a "Excel Funzione personalizzata chiarimenti":


Chi c’è in linea

Visitano il forum: Nessuno e 14 ospiti