Pagina precedente | 1 | Pagina successiva
Vota | Stampa | Notifica email    
Autore

Creare funzioni con VBA - lunghezza array in input

Ultimo Aggiornamento: 28/07/2015 20:59
Post: 13
Registrato il: 24/08/2014
Età: 42
Utente Junior
2010
OFFLINE
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
Post: 836
Registrato il: 21/06/2013
Città: NAPOLI
Età: 70
Utente Senior
Excel 365
OFFLINE
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
Post: 13
Registrato il: 24/08/2014
Età: 42
Utente Junior
2010
OFFLINE
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
Post: 837
Registrato il: 21/06/2013
Città: NAPOLI
Età: 70
Utente Senior
Excel 365
OFFLINE
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
Post: 14
Registrato il: 24/08/2014
Età: 42
Utente Junior
2010
OFFLINE
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.

Post: 838
Registrato il: 21/06/2013
Città: NAPOLI
Età: 70
Utente Senior
Excel 365
OFFLINE
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
Post: 844
Registrato il: 21/06/2013
Città: NAPOLI
Età: 70
Utente Senior
Excel 365
OFFLINE
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
Vota:
Amministra Discussione: | Chiudi | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 | Pagina successiva
Nuova Discussione
 | 
Rispondi
Cerca nel forum
Tag discussione
Discussioni Simili   [vedi tutte]
Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Tutti gli orari sono GMT+01:00. Adesso sono le 11:55. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com