Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Array multidimensionali

21 views
Skip to first unread message

Scossa

unread,
Sep 24, 2009, 4:25:36 PM9/24/09
to
Visto che in questi giorni gli array vanno di moda :-) ne approfitto
per porre una domanda.

Per conoscere quanti elementi ci sono in ogni dimensione di un array
si usa UBound:

Sub prova()
Dim MyArray(4, 5, 6) As Variant

Debug.Print UBound(MyArray, 1) '= 4
Debug.Print UBound(MyArray, 2) '= 5
Debug.Print UBound(MyArray, 3) '= 6

End Sub

Ma se volessi conoscere quante "dimensioni" ha l'array (in questo caso
3)?
Esiste una funzione ad-hoc che non ignoro?

Al momento mi viene in mente solo qualcosa del genere:

Sub prova()
Dim MyArray1(4, 5, 6) As Variant
Dim i As Long

Debug.Print UBound(MyArray, 1) '= 4
Debug.Print UBound(MyArray, 2) '= 5
Debug.Print UBound(MyArray, 3) '= 6

i = 0
On Error Resume Next
While Err.Number = 0
i = i + 1
Debug.Print UBound(MyArray, i)
Wend
On Error GoTo 0
Debug.Print i - 1 '= 3

End Sub

Qualche soluzione migliore?

Bye!
Scossa

Maurizio Borrelli

unread,
Sep 24, 2009, 5:43:20 PM9/24/09
to
"Scossa" wrote in message
news:40135aa3-8cef-4383...@g23g2000vbr.googlegroups.com...

> Visto che in questi giorni gli array vanno di moda :-) ne approfitto
> per porre una domanda.
> Per conoscere quanti elementi ci sono in ogni dimensione di un array
> si usa UBound:

[...]


> Ma se volessi conoscere quante "dimensioni" ha l'array (in questo caso
> 3)?
> Esiste una funzione ad-hoc che non ignoro?

[...]

Ciao Scossa.

Un classico:

The number of dimensions of an array
http://www.devx.com/vb2themax/Tip/18265

Gia' che ci sei guarda anche:

Arrays : All
http://www.devx.com/vb2themax/Door/18897?cat=1159&type=1

--
Maurizio Borrelli [Microsoft MVP Office System]
http://www.riolab.org/

r

unread,
Sep 24, 2009, 6:54:04 PM9/24/09
to

"Maurizio Borrelli" ha scritto:

> "Scossa" wrote in message
> news:40135aa3-8cef-4383...@g23g2000vbr.googlegroups.com...
>
> > Visto che in questi giorni gli array vanno di moda :-) ne approfitto
> > per porre una domanda.
> > Per conoscere quanti elementi ci sono in ogni dimensione di un array
> > si usa UBound:
> [...]
> > Ma se volessi conoscere quante "dimensioni" ha l'array (in questo caso
> > 3)?
> > Esiste una funzione ad-hoc che non ignoro?
> [...]
>
> Ciao Scossa.
>
> Un classico:
>
> The number of dimensions of an array
> http://www.devx.com/vb2themax/Tip/18265
>
> Gia' che ci sei guarda anche:
>
> Arrays : All
> http://www.devx.com/vb2themax/Door/18897?cat=1159&type=1

ciao Scossa, ciao Maurizio,
più che altro occasione per salutare ...
una variante sul tema

Function N_Dim(arr As Variant, Optional ByVal l As Long = 1) As Long
On Error Resume Next
ArrayDims = LBound(arr, l)
If Err Then
N_Dim = l - 1
Else
N_Dim = N_Dim(arr, l + 1)
End If
End Function

saluti
r
--
Come e dove incollare il codice:
http://www.rondebruin.nl/code.htm

Il mio ultimo lavoro ...
http://excelvba.altervista.org/blog/index.php/Excel-VBA/UsedRange-eccezioni-e-alternative.html

Scossa

unread,
Sep 25, 2009, 2:18:57 AM9/25/09
to
On 24 Set, 23:43, "Maurizio Borrelli" <maurizio.borre...@freepass.it>
wrote:

Ciao Maurizio,


>
> The number of dimensions of an arrayhttp://www.devx.com/vb2themax/Tip/18265
>

Ok, vedo che, come si dice dalle mie parti "se non l'è suppa l'è pan
bagnà"

nel senso che suggeriscono un ciclo for mentre io utilizzo un loop
while.

Ma comunque non c'è alternativa alla logica "genera errore - gestisci
errore".

> Gia' che ci sei guarda anche:
>
> Arrays : Allhttp://www.devx.com/vb2themax/Door/18897?cat=1159&type=1
>

Interessante! grazie mille.

P.S.: il mitico Francesco Balena non è quello dell'utility KebIT (per
DOS/Win9x)

Bye!
Scossa

Scossa

unread,
Sep 25, 2009, 2:21:31 AM9/25/09
to
On 25 Set, 00:54, r <r...@discussions.microsoft.com> wrote:

> ciao Scossa, ciao Maurizio,
> più che altro occasione per salutare ...

Ciao Roberto

> una variante sul tema
>
> Function N_Dim(arr As Variant, Optional ByVal l As Long = 1) As Long
> On Error Resume Next
> ArrayDims = LBound(arr, l)
> If Err Then
>     N_Dim = l - 1
> Else
>     N_Dim = N_Dim(arr, l + 1)
> End If
> End Function
>

Interssante soluzione, anche se non amo particolarmente la
ricorsività.
Comunque, come detto a Maurizio, non si può evitare la logica
dell'errore.

Bye!
Scossa

0 new messages