Lunghezza Vettore da Excel

di il
11 risposte

Lunghezza Vettore da Excel

Ciao a tutti,

io uso visual basic in Excel... avrei bisogno di sapere qual è la funzione che mi restituisce la lunghezza di un vettore che io metto come input in un'altra funzione... (questa prenderebbe poi in excel come ingresso una certa selezione di celle ad esempio A1:A8)

ho provato una cosa di questo tipo:

Function dimensione(Vettore)
dimensione=vettore.length()
end function

ma mi dà errore...

grazie

11 Risposte

  • Re: Lunghezza Vettore da Excel

    Ciao.. per ricavare la lunghezza di un vettore si usa la funzione ubound..

    esempio:

    dim v() as integer

    lunghezza = ubound(v)

    Saluti...
  • Re: Lunghezza Vettore da Excel

    Io ho provato a scrivere una funziona di prova

    Function Lunghezza(vettore)
    Lunghezza=ubound(vettore)
    End Function

    ma mi dà errore... forse perchè eseguo ubound sull'input?
  • Re: Lunghezza Vettore da Excel

    No no.. che tipo di errore ti da??
    cmq una possibile causa potrebbe essere che il vettore è vuoto.. cioè non ha elementi.. o non è inzializzato.. il codice che hai scritto dovrebbe cmq essere così:

    Function Lunghezza(vettore() as integer)
    Lunghezza=ubound(vettore)
    End Function

    l'esempio prende un vettore di interi.. ma potrebbe essere anke string, long, ecc.. a seconda di cosa ci vuoi mettere dentro...

    Saluti...
  • Re: Lunghezza Vettore da Excel

    Neanche così mi funziona...

    dopo aver salvato la funzione Lunghezza in un modulo,
    se io ho ad esempio nella cella A1, A2 e A3 tre interi e in B1 scrivo \"=Lunghezza(A1:A3)\" nella cella non mi compare 3 come dovrebbe ma la sigla #VALORE!
  • Re: Lunghezza Vettore da Excel

    Ciao.. eh no.. le macro non si usano così..
    ora ti dico i passaggi che devi fare...

    1) vai su strumenti -> macro -> nuova macro;
    2) ti compare subito dopo una piccola finestra con un pulsante di stop;
    3) lo clicchi subito e così ottieni un'area di una macro vuota;
    4) vai sul modulo dove hai scritto la function lunghezza e le aggiungi in testa la parola public (quindi sarà: public function Lunghezza ... ecc...);
    5) vai sul modulo della macro e le inserisci:

    dim v() as integer
    dim l as integer
    l = lunghezza(v)

    dove v sarà un vettore che hai precedentemente riempito utilizzando un'altra macro

    6) aggiungi la barra degli strumenti chiamata \"modulo\"
    7) disegni un pulsante di comando;
    clicchi cn il tasto destro sul pulsante di comando e selezioni la voce associa;
    9) ti compare una finestra con il nome della macro che hai fatto, la selezioni e clicchi su ok

    però se vuoi che il valore del vettore venga stampato in una determinata cella lo devi fare dentro la macro utilizzando il comando Range..

    ad es. se scrivi Range(\"A1\").select ti sposti sulla cella A1.. e se scrivi Range(\"A1\").value = 3 scrive nella cella A1 il valore 3..

    cmq se posso darti un consiglio.. per utilizzare le macro devi conoscere bene il visual basic 6.. e quantomeno i fondamenti elementari della programmazione imperativa ed a oggetti..
    il modo migliore per imparare??.. un bel libro di vb6 e uno sulle macro di excell.. anke i tascabili vanno bene.. che sono anke più economici...

    Saluti....
  • Re: Lunghezza Vettore da Excel

    Asimov ha scritto:


    Neanche così mi funziona...

    dopo aver salvato la funzione Lunghezza in un modulo,
    se io ho ad esempio nella cella A1, A2 e A3 tre interi e in B1 scrivo "=Lunghezza(A1:A3)" nella cella non mi compare 3 come dovrebbe ma la sigla #VALORE!
    Scusami,
    ma perché non usi la formula CONTA.VALORI già definita in excel ?
    Questa formula ti restituisce il numero di celle che hanno un valore.
    In input gli dai il range da contare e in output ti restituisce un numero intero.
  • Re: Lunghezza Vettore da Excel

    Ti spiego... a me serve calcolare la lunghezza di un vettore, all'interno di una funzione, di cui costituisce l'input... e vorrei creare un altro vettore della medesima lunghezza...
  • Re: Lunghezza Vettore da Excel

    Ciao.. allora dimmi.. ci sei riuscito??
  • Re: Lunghezza Vettore da Excel

    Non sono riuscito... non funziona la funzione CONTA.VALORI all'interno dela mia personalizzata... ad esempio con

    Sub Provona()
    Dati = Range(\"A1:A5\").Value
    Ris = Prova(Dati)
    End Sub

    Function Prova(vettore)
    a = CONTA.NUMERI(vettore)
    Prova = a
    End Function

    nel momento in cui arriva all'istruzione a=CONTA.NUMERI mi dà errore.
  • Re: Lunghezza Vettore da Excel

    E ma certo... da dove l'hai tirato fuori conta.numeri??.. in vb non esiste.. non puoi scrivere cose che non esistono a meno che non le definisci tu.. stai molto attento a non mischiare le \"funzioncine\" di excell con vb.. è come se volessi mischiare 2 mondi diversi.. in vb usi vb e in excel usi excel... spero di essere stato chiaro....

    intanto ho un paio di cose da dirti.. un vettore non si dichiara come hai scritto tu:

    dim Dati() as Integer

    Sub Provona()
    dim i as integer
    dim n as integer

    for i = 1 to 5
    Dati(i) = cells(1, i).Value
    next

    n = ubound(Dati)

    range(\"A6\").value = n
    End Sub

    dove n contiene la lunghezza del vettore... non è necessario fare una funzione a parte perchè nn avrebbe senso visto che ubound ritorna direttamente la lunghezza del vettore...

    Saluti...
  • Re: Lunghezza Vettore da Excel

    Intel ha scritto:


    e ma certo... da dove l'hai tirato fuori conta.numeri??.. in vb non esiste.. non puoi scrivere cose che non esistono a meno che non le definisci tu.. stai molto attento a non mischiare le "funzioncine" di excell con vb.. è come se volessi mischiare 2 mondi diversi.. in vb usi vb e in excel usi excel... spero di essere stato chiaro....
    Hai ragione Intel, Conta.Numeri è una funzione Excel ma può essere utilizzata da VBA. Ho fatto anche una prova e funziona.

    Sub Prova1()
    Dim Ris1
    Ris1 = Application.WorksheetFunction.Count(ActiveSheet.Range("A1:A7"))
    End Sub
Devi accedere o registrarti per scrivere nel forum
11 risposte