codice:
Function ordinaArrayNumerico(arrayDaOrdinare, tipoOrdinamento)
	
	ReDim arrayOrdinato(UBound(arrayDaOrdinare))
	
	If LCase(tipoOrdinamento)="desc" Then
		ordinamentoArray = 1
	Else
		ordinamentoArray = 0
	End If
	
	For i = LBound(arrayDaOrdinare) to UBound(arrayDaOrdinare)
		
		puntatore = (UBound(arrayDaOrdinare)+1)
		valoreDaControllare = arrayDaOrdinare(i)
		
		For z = LBound(arrayDaOrdinare) to UBound(arrayDaOrdinare)
			
			If InStr(CStr(valoreDaControllare),".") or InStr(CStr(valoreDaControllare),",") Then 
				controlloPadre = CDbl(valoreDaControllare)
			Else
				controlloPadre = CLng(valoreDaControllare)
			End If
		
			If InStr(CStr(arrayDaOrdinare(z)),".") or InStr(CStr(arrayDaOrdinare(z)),",") Then 
				controlloFiglio = CDbl(arrayDaOrdinare(z))
			Else
				controlloFiglio = CLng(arrayDaOrdinare(z))
			End If
			
			Select Case ordinamentoArray
				Case 0
					If controlloPadre<=controlloFiglio Then
						puntatore=puntatore - 1
					End If
				Case 1
					If controlloPadre>=controlloFiglio Then
						puntatore=puntatore - 1
					End If
			End Select
		Next
		
		If arrayOrdinato(puntatore)="" Then
			arrayOrdinato(puntatore) = valoreDaControllare
		Else
			controlUguali = 0
			For p = LBound(arrayOrdinato) to UBound(arrayOrdinato)
				If arrayOrdinato(p) = vloreDaControllare Then
					controlUguali = controlUguali +1		
				End If
			Next
			arrayOrdinato(puntatore+controlUguali) = valoreDaControllare
		End If
	Next
	
	ordinaArrayNumerico = arrayOrdinato
	
End Function
ovviamente testatela e fatemi sapere come va!!!
esempio di chiamata:

mioArray = ordinaArrayNumerico(mioArray,"desc")