Condividi:        

vba excel: ordinare array di struttura

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

vba excel: ordinare array di struttura

Postdi karug64 » 14/09/16 07:41

Salve a tutti.

Ho un array di struttura così composto:
Codice: Seleziona tutto
Public Type new2

    parola As String
    lun_parola As Integer
    or_ve As String
    Riga As Integer
    rig_iniziale As Integer
    rig_finale As Integer
    colonna As Integer
    col_iniziale As Integer
    col_finale As Integer
    testo As String
    pos_parola() As Long
    provata() As String
   
End Type

Public new_cruci2() As new2


C'è modo di ordinarlo su uno dei campi (per esempio su new_cruci2.lun_parola) ?

Grazie
Office 2010
karug64
Utente Senior
 
Post: 746
Iscritto il: 20/11/11 21:22

Sponsor
 

Re: vba excel: ordinare array di struttura

Postdi Anthony47 » 14/09/16 14:54

Si, penso si possa fare una bubble sort anche su questa struttura... Ti chiedo pero' di pubblicare quanto serve per creare un array di quel type per provare e collaudare il codice di dettaglio.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19220
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: vba excel: ordinare array di struttura

Postdi karug64 » 14/09/16 21:43

Ecco il file col codice che popola l'array di tipo struttura:

http://www.filedropper.com/cruci

(tra l'altro è presente lo schema con cui ho provato la routine del post

http://www.pc-facile.com/forum/viewtopic.php?f=26&t=107444)

Dovrei ordinarlo sul campo new_cruci2.lun_parola


Grazie

P.S. non fare caso alla "purezza del codice" ..... l'importante è che funzioni :D :D
Office 2010
karug64
Utente Senior
 
Post: 746
Iscritto il: 20/11/11 21:22

Re: vba excel: ordinare array di struttura

Postdi Anthony47 » 15/09/16 12:07

Ma io devo riuscire a generare un array contenente quella struttura dati, con questo materiale non ci riesco...
Comunque la sort in ordine crescente di lun_parole dovresti poterla farla con questo codice:
Codice: Seleziona tutto
Dim temp As new2
For Increm = LBound(new_cruci2) To UBound(new_cruci2) - 1
    For i = Increm + 1 To UBound(new_cruci2)
        If new_cruci2(Increm).lun_parola > new_cruci2(i).lun_parola Then
            temp = new_cruci2(i)
            new_cruci2(i) = new_cruci2(Increm)
            new_cruci2(Increm) = temp
        End If
    Next i
Next Increm

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19220
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: vba excel: ordinare array di struttura

Postdi karug64 » 15/09/16 17:34

Ciao Anthony.
Ho usato il tuo codice che ovviamente funziona perfettamente.

Per quanto riguarda il codice, quello che ho postato permette, alla pressione del bottone presente sul foglio, di leggere le coordinate delle parole presenti nello schema memorizzandole in new_cruci2 (che poi andava ordinato = tuo suggerimento).

Grazie
Office 2010
karug64
Utente Senior
 
Post: 746
Iscritto il: 20/11/11 21:22

Re: vba excel: ordinare array di struttura

Postdi Anthony47 » 16/09/16 00:08

Ah ah, io credevo che si parlasse della lunghezza delle parole estratte dall'elencone, che proprio non c'era...
Avatar utente
Anthony47
Moderatore
 
Post: 19220
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: vba excel: ordinare array di struttura

Postdi karug64 » 16/09/16 06:26

C'era la lunghezza delle parole da sistemare nella griglia (che poi è il dato su cui la tua routine ordina). Grazie ancora e alla prossima (... Imminente .... )
Office 2010
karug64
Utente Senior
 
Post: 746
Iscritto il: 20/11/11 21:22

Re: vba excel: ordinare array di struttura

Postdi karug64 » 24/09/16 09:50

Anthony47 ha scritto:Comunque la sort in ordine crescente di lun_parole dovresti poterla farla con questo codice:
Codice: Seleziona tutto
Dim temp As new2
For Increm = LBound(new_cruci2) To UBound(new_cruci2) - 1
    For i = Increm + 1 To UBound(new_cruci2)
        If new_cruci2(Increm).lun_parola > new_cruci2(i).lun_parola Then
            temp = new_cruci2(i)
            new_cruci2(i) = new_cruci2(Increm)
            new_cruci2(Increm) = temp
        End If
    Next i
Next Increm



Ciao Anthony.
C'e' modo di modificare questa tua routine per ordinare l'array di struttura su due valori ?

Ordinare per

new_cruci2(Increm).or_ve e per new_cruci2(Increm).lun_parola in modo da avere alle fine l'array ordinato con prima tutte le parole "O" a loro volta ordinate per lunghezza (dalla più lunga alla più corta) e poi tutte le parole "V" dalla più lunga alla più corta ?

Grazie
Office 2010
karug64
Utente Senior
 
Post: 746
Iscritto il: 20/11/11 21:22

Re: vba excel: ordinare array di struttura

Postdi Anthony47 » 24/09/16 16:41

In una situazione normale, ordinando prima per la seconda condizione e poi per la prima condizione si otterrebbe l'ordinamento voluto; prova se funziona anche con il tuo Type. Il codice:
Codice: Seleziona tutto
Dim temp As new2
'Ordina per Lun_parola
For Increm = LBound(new_cruci2) To UBound(new_cruci2) - 1
    For i = Increm + 1 To UBound(new_cruci2)
        If new_cruci2(Increm).lun_parola > new_cruci2(i).lun_parola Then
            temp = new_cruci2(i)
            new_cruci2(i) = new_cruci2(Increm)
            new_cruci2(Increm) = temp
        End If
    Next i
Next Increm
'Ordina per Or_ve
For Increm = LBound(new_cruci2) To UBound(new_cruci2) - 1
    For i = Increm + 1 To UBound(new_cruci2)
        If new_cruci2(Increm).or_ve > new_cruci2(i).or_vw Then
            temp = new_cruci2(i)
            new_cruci2(i) = new_cruci2(Increm)
            new_cruci2(Increm) = temp
        End If
    Next i
Next Increm

Se non funziona vedremo altre soluzioni.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19220
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: vba excel: ordinare array di struttura

Postdi karug64 » 24/09/16 23:55

Ok. Funziona. Grazie
Office 2010
karug64
Utente Senior
 
Post: 746
Iscritto il: 20/11/11 21:22


Torna a Applicazioni Office Windows


Topic correlati a "vba excel: ordinare array di struttura":


Chi c’è in linea

Visitano il forum: Nessuno e 36 ospiti