Stellar Blade Un'esclusiva PS5 che sta facendo discutere per l'eccessiva bellezza della protagonista. Vieni a parlarne su Award & Oscar!

Excel Forum Per condividere esperienze su Microsoft Excel

Creare funzioni con VBA - lunghezza array in input

  • Messaggi
  • OFFLINE
    Riccardo(1981)
    Post: 13
    Registrato il: 24/08/2014
    Età: 43
    Utente Junior
    2010
    00 26/07/2015 14:46
    Ciao,
    sto cercando di creare delle funzioni con VBA e non riesco a capire come gestire degli array in input.

    In particolare quando utilizzo la seguente funzione mi da errore #VALORE!:
    Public Function LunghezzaArray(ARR)
    LunghezzaArray = UBound(ARR)
    End Function


    Grazie in anticipo per tutti i contributi
  • OFFLINE
    alfrimpa
    Post: 836
    Registrato il: 21/06/2013
    Città: NAPOLI
    Età: 70
    Utente Senior
    Excel 365
    00 26/07/2015 15:34
    Ciao Riccardo

    Non sono molto esperto di array ma la tua function non mi sembra avere molto senso; tu quando scrivi sul foglio =LunghezzaArray in parentesi cosa metti? Immagino un intervallo di celle ma questo è tutt'altra cosa.

    Tu non dichiari né dimensioni nessun array.

    L'istruzione UBound restituisce il numero dell'ultimo elemento di un array ad esempio questa funzione

    Function mioarray()
    Dim arr(9)
    mioarray = UBound(arr)
    End Function
    


    restituisce il numero 9 perché l'array arr è stato dimensionato con 9 elementi.

    Un altro esempio

    Function mioarray()
    Dim arr(7)
    arr(0) = "Lunedì"
    arr(1) = "Martedì"
    arr(2) = "Mercoledi"
    arr(3) = "Giovedì"
    arr(4) = "Venerdì"
    arr(5) = "Sabato"
    arr(6) = "Domenica"
    mioarray = arr(UBound(arr) - 1)
    End Function
    


    restituisce la stringa "Domenica".

    Se spieghi cosa intendi con "come gestire degli array in input." e chiarisci meglio qual è il tuo obiettivo forse si riesce a darti una mano.

    P.S. Ti consiglio di studiarti un po' di teoria sugli array.
    [Modificato da alfrimpa 26/07/2015 16:32]

    Alfredo
  • OFFLINE
    Riccardo(1981)
    Post: 13
    Registrato il: 24/08/2014
    Età: 43
    Utente Junior
    2010
    00 26/07/2015 17:11
    Ciao Alfredo,

    il mio scopo è creare una funzione che legga in input un intervallo di celle (es. A1:A10 o anche A11:Z20) e che restituisca la "lunghezza" di tali intervalli (es. in entrambi i casi di cui sopra deve restituire 10).

    Grazie,
    ciao
  • OFFLINE
    alfrimpa
    Post: 837
    Registrato il: 21/06/2013
    Città: NAPOLI
    Età: 70
    Utente Senior
    Excel 365
    00 26/07/2015 17:40
    Perdonami Riccardo ma non riesco a capire.

    Una funzione (di Excel o scritta dall'utente) effettua dei calcoli e restituisce un risultato in base ai parametri che le vengono passati.

    Tu quali parametri passi ad un'eventuale funzione?

    Tu dici "il mio scopo è creare una funzione che legga in input un intervallo di celle"; non capisco il significato di questa frase.

    Puoi spiegare meglio magari allegando un file in cui illustri l'obiettivo che vuoi raggiungere?

    Forse più che una function a te occorrerebbe una sub (conosci la differenza?) che ti mostri il numero delle righe selezionate.
    [Modificato da alfrimpa 26/07/2015 17:58]

    Alfredo
  • OFFLINE
    Riccardo(1981)
    Post: 14
    Registrato il: 24/08/2014
    Età: 43
    Utente Junior
    2010
    00 26/07/2015 18:04


    Devo creare una funzione che chiamerò ad es. NumeroRigheDellIntervallo quindi su VBA scriverò una cosa del genere (dove al posto dei puntini ci sarà del codice):
    Public Function NumeroRigheDellIntervallo(IntervalloInInput)
        ...
        NumeroRigheDellIntervallo = ...
    End Function


    Al che quando andrò sul foglio di lavoro di excel userò la nuova funzione creata scrivendo in una cella:
    =NumeroRigheDellIntervallo(B2:C5)

    Al che la funzione dovrebbe restituirmi il numero di righe dell'intervallo di celle immesso come argomento. Se metto B2:C5 mi darà 4, se metto A1:A10 mi darà 10 e così via.

    In ogni caso mi hai fatto capire che è improprio usare la parola array per indicare un intervallo di celle e ora sto trovando qualcosa di utile in rete.

  • OFFLINE
    alfrimpa
    Post: 838
    Registrato il: 21/06/2013
    Città: NAPOLI
    Età: 70
    Utente Senior
    Excel 365
    00 26/07/2015 18:19
    Riccardo mi sfugge l'utilità della cosa ma prova questa funzione


    Public Function NumeroRigheDellIntervallo(IntervalloInInput As Range) As Long
        NumeroRigheDellIntervallo = IntervalloInInput.Rows.Count
    End Function
    


    E comunque esiste anche la funzione RIGHE() che fa la stessa cosa cioè restituisce il numero di righe di un intervallo per cui puoi fare anche a meno del VBA; se scrivi

    =RIGHE(A1:A10) ti verrà restituito 10

    Così come pure esiste la funzione COLONNE() che restituisce il numero delle colonne di un intervallo.
    [Modificato da alfrimpa 26/07/2015 20:26]

    Alfredo
  • OFFLINE
    alfrimpa
    Post: 844
    Registrato il: 21/06/2013
    Città: NAPOLI
    Età: 70
    Utente Senior
    Excel 365
    00 28/07/2015 20:59
    Sarebbe bello se, oltre a porre le domande, si desse anche riscontro - con la stessa sollecitudine - alle risposte ricevute.
    [Modificato da alfrimpa 28/07/2015 21:10]

    Alfredo