ordinare array



  • ordinare array
    di Gianca (utente non iscritto) data: 02/06/2013 15:15:08

    Ciao a tutti
    come da titolo dovrei ordinare un array da cosi a cosi

    da cosi.....a.....cosi
    oc..............cp
    oo..............oc
    cp..............oc
    oo..............oe
    oc..............oo
    oe..............oo
    oo..............oo
    oo..............oo

    il metodo di ordinamento segue questo criterio
    cp: se presente va messo al primo posto possono esser piu di uno
    oc: se presente va messo dopo cp possono esser piu di uno
    oq: se presente va messo dopo oc possono esser piu di uno
    oe: se presente va messo dopo oq possono esser piu di uno
    oo: se presente va messo per ultimo possono esser piu di uno

    queste sigle sono antecedenti ad un nominativo sarebbero le qualifiche
    Grazie per i graditi consigli...
    buona a tutti



  • di Vecchio Frac data: 02/06/2013 20:37:19

    Un metodo rapidissimo:
    - sostituisci le occorrenze di "cp" con "1-cp", di "oc" con "2-oc" e così via assegnando un progressivo numerico sempre più alto man mano che ti allontani dalle prime posizioni;
    - effettua l'ordinamento di tipo testo in senso discendente di tutto il range (dal più piccolo al più grande);
    - risostituisci "1-cp" con "cp" e così via.





  • di Gianca (utente non iscritto) data: 02/06/2013 23:41:34

    non male.....
    la provo subito
    thanks old...



  • di Gianca (utente non iscritto) data: 03/06/2013 02:50:56

    fatto....
    Grazie
     
    Sub Ordina()
    Dim Qual(6) As String
    Qual(1) = Cells(1, 2).Value
    Qual(2) = Cells(2, 2).Value
    Qual(3) = Cells(3, 2).Value
    Qual(4) = Cells(4, 2).Value
    Qual(5) = Cells(5, 2).Value
    n = 1
    Cells(1, 3).Select
    For y = 0 To 5
        For i = 1 To 25
          If ActiveCell.Value = Qual(n) Then
             ActiveCell.Value = n
          End If
             ActiveCell.Offset(1, 0).Select
        Next
        n = n + 1
       Cells(1, 1).Select
    Next
    Range("C1:C8").Sort Key1:=Range("C1"), Order1:=xlAscending, Header:= _
        xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
      n = 1
      Cells(1, 1).Select
    For x = 0 To 5
        For z = 1 To 25
          If ActiveCell.Value = n Then
             ActiveCell.Value = Qual(n)
          End If
             ActiveCell.Offset(1, 0).Select
        Next
        n = n + 1
       Cells(1, 1).Select
    Next
    End Sub



  • di Gianca (utente non iscritto) data: 03/06/2013 02:52:56

    dimenticavo di spuntare risolto



  • di Vecchio Frac data: 03/06/2013 14:33:44

    Non intendevo che utilizzassi due cicli For annidati ma il metodo Find dell'oggetto range. Forse potevi ottimizzare meglio il codice.
    All'interno del ciclo For più esterno anche l'istruzione ActiveCell.Offset(1, 0).Select è inutile e la dovresti eliminare (per velocizzare).