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

ordinare listBox in ordine decrescente

729 views
Skip to first unread message

Giorgio A.

unread,
Aug 26, 2009, 11:11:03 AM8/26/09
to
Questo post rilasciatomi gentilmente da Roberto mi ordina la ListBox1 in
ordine crescente
Come fare per ordinare in ordine decrescente'

Ho provato a modificare la Function modificando LBound con Ubound e
viceversa ma senza risultato.

Option Explicit

*******************
Private Sub CommandButton4_Click()
Me.ListBox1.List = BoobleSort(Me.ListBox1.List, 3)
End Sub
*************************
Private Sub UserForm_Initialize()

Dim v(2, 8)
v(0, 0) = ""
v(0, 1) = ""
Me.ListBox1.List = v
CommandButton4_Click

****************************
Function BoobleSort(ByRef ArrB As Variant, Optional colSort As Long = 0)
Dim i As Long, a As Long, v
Dim f As Long
Dim ArrA
Debug.Print LBound(ArrB)
ArrA = ArrB
For i = 0 To UBound(ArrA) - 1
For a = i To UBound(ArrA)
If ArrA(i, colSort) > ArrA(a, colSort) Then
For f = 0 To UBound(ArrA, 2)
v = ArrA(i, f)
ArrA(i, f) = ArrA(a, f)
ArrA(a, f) = v
Next
End If
Next
Next
BoobleSort = ArrA
End Function

Grazie 1000
--
Distinti saluti

Giorgio

r

unread,
Aug 26, 2009, 11:59:01 AM8/26/09
to
"Giorgio A." ha scritto:

> Questo post rilasciatomi gentilmente da Roberto mi ordina la ListBox1 in
> ordine crescente
> Come fare per ordinare in ordine decrescente'
>
> Ho provato a modificare la Function modificando LBound con Ubound e
> viceversa ma senza risultato.
>

basta modificare > con < ...
ecco comunque la funzione con l'aggiunta di un parametro
che indica se ordinare in modo crescente o decrescente
nell'esempio qui sotto cliccando successivamente sul
commandbutton1 si otterrà l'ordinamento
crescente/decrescente in base alla prima colonna
ad ogni click ...


Option Explicit
'una listbox
'2 commandbutton


Private Sub CommandButton1_Click()
'al primo click ordine crescente
'al secondo decrescente
Static bSort As Boolean
bSort = bSort Xor True
Me.ListBox1.List = BoobleSort(Me.ListBox1.List, , bSort)
End Sub

Private Sub CommandButton2_Click()
Me.ListBox1.List = BoobleSort(Me.ListBox1.List, 1)
End Sub

Private Sub UserForm_Initialize()
Dim v(2, 1)
v(0, 0) = "roberto"
v(0, 1) = 1
v(1, 0) = "nur"
v(1, 1) = 2
v(2, 0) = "bruno"
v(2, 1) = 3
Me.ListBox1.List = v
End Sub
Function BoobleSort( _
ByRef ArrB As Variant, _
Optional ByVal colSort As Long = 0, _
Optional ByVal bSort As Boolean)


Dim i As Long, a As Long, v
Dim f As Long

Dim arrA
Debug.Print LBound(ArrB)
arrA = ArrB
For i = 0 To UBound(arrA) - 1
For a = i To UBound(arrA)
If bSort Then
If arrA(i, colSort) > arrA(a, colSort) Then
For f = 0 To UBound(arrA, 2)
v = arrA(i, f)
arrA(i, f) = arrA(a, f)
arrA(a, f) = v
Next
End If
Else
If arrA(i, colSort) < arrA(a, colSort) Then
For f = 0 To UBound(arrA, 2)
v = arrA(i, f)
arrA(i, f) = arrA(a, f)
arrA(a, f) = v


Next
End If
End If
Next
Next

BoobleSort = arrA
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


Giorgio A.

unread,
Aug 26, 2009, 12:13:37 PM8/26/09
to
Grazie Roberto.
Buona serata

--
Distinti saluti

Giorgio

iaco...@gmail.com

unread,
Jan 3, 2014, 7:55:15 AM1/3/14
to
Salve,
Ho usato il codice sopra per ordinare una listbox contenente numeri da 1 a 50...
il problema è che l'ordine ottenuto è il seguente:
1
10
11
12
13
14
15
16
17
18
19
2
20
21
...

come ovviare al problema?

Norman Jones

unread,
Jan 3, 2014, 8:46:37 AM1/3/14
to
On 03/01/2014 12:55, iaco...@gmail.com wrote:
> Salve,
> Ho usato il codice sopra per ordinare una listbox contenente numeri da 1 a 50...
> il problema � che l'ordine ottenuto � il seguente:
> 1
> 10
> 11
> 12
> 13
> 14
> 15
> 16
> 17
> 18
> 19
> 2
> 20
> 21
> ....
>
> come ovviare al problema?

Ciao iacoiaca,

Purtroppo, non vedo i post precendenti in questo thread da Mozilla
Thunderbird e quindi non vedo il codice.

Tuttavia, a partire da zero, prova il seguente codice:

'=============>>
Private Sub CommandButton1_Click()
Dim i As Long
Dim j As Long
Dim myVal As Variant

With Me.ListBox1
For j = 0 To ListBox1.ListCount - 2
For i = 0 To ListBox1.ListCount - 2
If CInt(.List(i)) > CInt(.List(i + 1)) Then
myVal = .List(i)
.List(i) = .List(i + 1)
.List(i + 1) = myVal
End If
Next i
Next j
End With
End Sub
'<<=============

Per la maggior parte degli scopi normali, questo codice dovrebbe essere
sufficiente. Tuttavia, sei stai manipolando grandi quantit� di dati e
dovessi incontrare dei problemi, ci sono molti algoritmi pi� veloci e
pi� complessi per l'ordinamento dei dati e sar� felice di postare del
codice alternativo.


===
Regards,
Norman



Norman Jones

unread,
Jan 3, 2014, 9:00:08 AM1/3/14
to
Ciao Iacoiaca,

Al fine di gestire anche i numeri non interi, sostituire la riga:

> If CInt(.List(i)) > CInt(.List(i + 1)) Then

con

If CDbl(.List(i)) > CDbl(.List(i + 1)) Then

===
Regards,
Norman
0 new messages