Riordino per ordine alfabetico



  • Riordino per ordine alfabetico
    di Mario.Ufficio data: 09/11/2015 11:20:04

    Ho bisogno di una mano! Quando seleziono dei nomi la macro me li riordina per il criterio di ordine alfabetico basandosi sulla colonna della prima tabella più a sinistra del foglio(e fin qui va benissimo). Per la tabella più a destra del foglio invece mi servirebbe che la macro mi riordinasse i nominativi selezionati usando come criterio la "lettera di riferimento" A,B,C,D assegnata a ogni nominativo(sarebbe l'ultima colonna della tabella centrale del file, quella colorata in giallo). Si riesce a fare?
    Allego file, grazie in anticipo



  • di Cucù data: 09/11/2015 11:49:15

    Seleziona tutta la tabella ("I3:P21")
    Poi dal menu scegli "dati"
    poi "ordina"
    e da qui scegli:

    Ordina per : "lettera di riferimento"
    Ordina in base a : "Valori"
    Ordine: "dalla A alla Z"

    Non so se è questo che intendevi.
    Cucù



  • di Mario.Ufficio (utente non iscritto) data: 10/11/2015 10:43:44

    così ero capace anche io volevo il riordino automatico della tabella (quindi bisognerebbe modificare la formula all'interno delle celle)



  • di Cucù data: 10/11/2015 10:54:28

    volevo il riordino automatico della tabella

    Cioè???



  • di cromagno data: 10/11/2015 11:42:46

    Buongiorno a tutti,
    @Mario.Ufficio
    ho visto il file, ma non credo di aver capito come vorresti che avvenisse l'ordinamento...
    La terza tabella (R4:Z11) dovrebbe essere quella interessata (giusto?) che esegue l'ordinamento tramite formule riferendosi all'ultima colonna della seconda tabella (I4:P21), ma in che modo utilizza la lettera di riferimento?
    Essendoci solamente due nomi ("pinco" e "pallino") diventa un pò confusionaria la questione...



  • di Mario.Ufficio data: 10/11/2015 12:03:14

    @cromagno esatto deve utilizzare la lettera di riferimento per ordinare in ordine alfabetico i nominativi.
    Spiego meglio: nella prima tabella (quella più a sinistra guardando lo schermo del pc) tramite una macro io posso selezionare i nominativi che mi interessano. La seconda tabella (quella centrale del file) rappresenta il "database" cioè l'elenco dei nominativi che posso selezionare quindi sostanzialmente è solo una tabella fine a se stessa nella uale non bisogna modificare nulla. Poi c'è la TERZA tabella (quella più a DESTRA dello schermo): in questa tabella bisogna ordinare per ordine alfabetico i nominativi selezionati che quindi compariranno automaticamente nella tabella. Il problema è che i nominativi che seleziono nella prima tabellla vengono riscritti nella terza tabella in ordine alfabetico PER NOME (quindi Pinco o Pallino), mentre a me servirebbe che venissero ordinati per ordine alfabetico PER LETTERA DI RIFERIMENTO (che sarebbe l'ultima colonna della seconda tabella). Esempio: io ho selezionato nel file i primi 4 nominativi e quindi ho nella tabella 3 i nomi nel seguente ordine:

    pallino D
    pinco C
    pallino B
    pinco A

    Mentre io vorrei che fosse in questo modo:

    pinco A
    pallino B
    pinco C
    pallino D


    quindi ORDINATI PER LETTERA DI RIFERIMENTO, spero di essere stata chiara



  • di cromagno data: 10/11/2015 13:23:42

    Ciao,
    sempre se ho capito bene, nella cella "R4" (da copiare poi in basso e a destra) puoi mettere questa formula matriciale (da confermare con CTRL+MAIUSC+INVIO):

    =SE.ERRORE(INDICE(INDIRETTO(INDIRIZZO(1;RIF.COLONNA(H4))&":"&INDIRIZZO(28;RIF.COLONNA(H4)));(PICCOLO(SE($C$4:$C$28;RIF.RIGA($C$4:$C$28)+CODICE($P$4:$P$28)*100);RIGHE(D$1:$E1))-PICCOLO(SE($C$4:$C$28;CODICE($P$4:$P$28)*100;"");RIGHE(D$1:$E1))));"")

    oppure questa che è un pò meno contorta:

    =SE.ERRORE(INDICE($H$1:$P$28;(PICCOLO(SE($C$4:$C$28;RIF.RIGA($C$4:$C$28)+CODICE($P$4:$P$28)*100);RIGHE(D$1:$E1))-PICCOLO(SE($C$4:$C$28;CODICE($P$4:$P$28)*100;"");RIGHE(D$1:$E1)));RIF.COLONNA(A1));"")



  • di Mister_x (utente non iscritto) data: 10/11/2015 13:25:17

    ciao

    non so che versione di excel stai usando
    la prova e' eseguita su versione 2007

    in base al tuo file postato
    seleziono il Range("I3:R21")
    dalla home, ordina e filtra
    ordinamento perso0nalizzato
    scelgo la colonna , lettera di riferimento
    e do l'OK

    ciao






  • di Cucù data: 10/11/2015 13:30:01

    Assodato che non condivido il sistema che vuoi utilizzare, prova il file allegato.
    Cucù



  • di Mario.Ufficio data: 10/11/2015 14:30:27

    Grazie a tutti, funziona! una domanda per @Cucù, è al posto di premere ogni volta il bottone, è possibile aggiornare automaticamente il riordino automatico? grazie



  • di Cucù data: 10/11/2015 14:49:52

    Certo che si... sfruttando l'evento change o selection change ad esempio...
    Cucù



  • di Raffaele_53 data: 10/11/2015 15:38:42

    Ciao a tutti
    Premesso che non ho capito il significato della colonna D/E e la formula in F9

    EDIT >>>Ho cancellato tutte le Tue sub
    Mi corrego non le avevo ancora cancellate,pertanto le Tue SUB fanno intervenire il Worksheet_Change
    Mi piacerebbe trovare il modo di far internire il Worksheet_Change sulle CheckBox<<< EDIT

    Ho eliminato le formule in R4:Zxy
    Da provare  
     
    Option Explicit
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Cells.Count > 1 Then Exit Sub
        If Not Intersect(Target, Range("C:C")) Is Nothing Then
        Application.EnableEvents = False
            Dim Ur, Rg, RgA As Object
            Ur = Range("R" & Rows.Count).End(xlUp).Row + 1
            If Target.Offset(0, 0) = True Then
                Range(Cells(Target.Row, 8), Cells(Target.Row, 16)).Copy
                Cells(Ur, 18).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
                ActiveWorkbook.Worksheets("Foglio1").Sort.SortFields.Clear
                ActiveWorkbook.Worksheets("Foglio1").Sort.SortFields.Add Key:=Range("Z4:Z" & Ur) _
                    , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
                With ActiveWorkbook.Worksheets("Foglio1").Sort
                    .SetRange Range("R4:Z" & Ur)
                    .Header = xlGuess
                    .MatchCase = False
                    .Orientation = xlTopToBottom
                    .SortMethod = xlPinYin
                    .Apply
                End With
            Else
                Set RgA = Range("R3:R" & Ur).Find(Cells(Target.Row, 1), LookIn:=xlValues, LookAt:=xlWhole)
                If Not RgA Is Nothing Then
                    Rg = RgA.Row
                    Range(Cells(Rg, 18), Cells(Rg, 26)).ClearContents
                    ActiveWorkbook.Worksheets("Foglio1").Sort.SortFields.Clear
                    ActiveWorkbook.Worksheets("Foglio1").Sort.SortFields.Add Key:=Range("Z4:Z" & Ur) _
                        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
                    With ActiveWorkbook.Worksheets("Foglio1").Sort
                        .SetRange Range("R4:Z" & Ur)
                        .Header = xlGuess
                        .MatchCase = False
                        .Orientation = xlTopToBottom
                        .SortMethod = xlPinYin
                        .Apply
                    End With
                End If
            End If
        Application.CutCopyMode = False
        Application.EnableEvents = True
        Target.Offset(0, 0).Activate
        End If
    End Sub