Se Dimensioni la matrice a 500 è ovvio che ti restituisce 500 ma se usi il Redim Preserve al momento di aggiungere hai che UBOUND è allineato esattamente con il Numero di Elementi.
Tuttavia è molto più lento, ma anche quì da capire la tua esigenza in termini di prestazioni, quindi un “relativamente” più lento è più adatto.
Come ha suggerito Antonio, in questi casi è più funzionale usare una Collection che, passando come KEY il valore in stringa… es:
Dim i As Integer
Dim c As Collection
Set c = New Collection
For i=1 to 100
c.Add i, cstr(i)
Next
Per sapere quanti sono:
Debug.Print c.Count
Per cercare ad esempio se esiste un elemento:
Dim cItem
cItem=c.Item("1")
Debug.print cItem
Deve restituire 1, ovviamente non confondere la KEY con il Valore dell'Item, Accedendo alla Collection Item dell'oggetto collection passo la KEY e viene restituita la DefaultProperty che è Value.
Le collection, sono estremamente veloci se vengono usate senza la KEY, ma con la KEY si perdono prestazioni in modo significativo in fase di INSERIMENTO, diventa invece estrememamente veloce in fase di Ricerca se si usa la KEY.