Condividi:        

Excel Macro per ordinare con scelta colonne

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

Excel Macro per ordinare con scelta colonne

Postdi boman » 01/02/11 12:21

avrei bisogno di creare una macro per ordinare un range di celle A50:P1500 la quale una volta avviata mi chieda i 3 campi o meglio le 3 colonne sulla quale ordinare ("ordina per" "quindi per" "quindi per").
Ho provato a registrare un macro ma naturalmete l'esecuzione della stessa restituisce sempre l'ordinamento registrato.
Io avrei bisogno invece che quei campi (D50, E50 e F50) fossero richiesti all'avvio della macro cosichè possa ad esempio ordinarli per A50 quindi per F50 quindi per P50
Codice: Seleziona tutto
Sub ORDINA()
    Range("A50:P1500").Select

    Selection.Sort Key1:=Range("D50"), Order1:=xlAscending, Key2:=Range("E50" _
        ), Order2:=xlAscending, Key3:=Range("F50"), Order3:=xlAscending, Header _
        :=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom _
        , DataOption1:=xlSortNormal, DataOption2:=xlSortNormal, DataOption3:= _
        xlSortNormal
End Sub
boman
Utente Junior
 
Post: 35
Iscritto il: 18/12/10 19:18

Sponsor
 

Re: Excel Macro per ordinare con scelta colonne

Postdi Flash30005 » 01/02/11 15:56

Se la sequenza di ordinamento è sempre la stessa
es.
A, F, P
oppure
F, A, P
oppure
P, A, F
(volendo puoi cambiare la sequenza agendo sulla macro puoi usare questo codice da inserire nel foglio, non nel modulo

Codice: Seleziona tutto
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
CheckAreaA = "A1"
CheckAreaF = "F1"
CheckAreaP = "P1"
Application.ScreenUpdating = False
Application.Calculation = xlManual
If Not Application.Intersect(Target, Range(CheckAreaA)) Is Nothing Then

URG = Cells(Rows.Count, 1).End(xlUp).Row
    Range(Cells(50, 1), Cells(URG, 16)).Select
    Selection.Sort Key1:=Cells(51, 1), Order1:=xlAscending, Key2:=Cells(51, 6) _
        , Order2:=xlAscending, Key3:=Cells(51, 16), Order3:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
        False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2 _
        :=xlSortNormal
        Range("A1").Select


End If
If Not Application.Intersect(Target, Range(CheckAreaF)) Is Nothing Then
URG = Cells(Rows.Count, 1).End(xlUp).Row
    Range(Cells(50, 1), Cells(URG, 16)).Select
    Selection.Sort Key1:=Cells(51, 6), Order1:=xlAscending, Key2:=Cells(51, 1) _
        , Order2:=xlAscending, Key3:=Cells(51, 16), Order3:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
        False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2 _
        :=xlSortNormal
        Range("A1").Select

End If
If Not Application.Intersect(Target, Range(CheckAreaP)) Is Nothing Then
URG = Cells(Rows.Count, 1).End(xlUp).Row
    Range(Cells(50, 1), Cells(URG, 16)).Select
    Selection.Sort Key1:=Cells(51, 16), Order1:=xlAscending, Key2:=Cells(51, 1) _
        , Order2:=xlAscending, Key3:=Cells(51, 6) _
        , Order3:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
        False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2 _
        :=xlSortNormal
        Range("A1").Select
End If
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub


Ora è sufficiente che clicchi due volte consecutive nella cella A1, F1 o P1
(selezione che puoi cambiare agendo sul checkareaA, ..F, ..P inserendo la riga 50)


Fai sapere
Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Excel Macro per ordinare con scelta colonne

Postdi boman » 01/02/11 17:00

Grazie intanto..l'ho provata..ma purtroppo non fa per me. Le sequenze non sono sempre le stesse, le colonne A F P erano di esempio. Per il range A50:P1500 una volta potrei aver bisogno di ordinarlo per la colonna A B C e magari dopo 5 minuti per B E O ecc ecc.. non mi posso permettere di cambiare continuamente la macro anche perchè dovra essere usata da persone ancora meno esperte di me!
Ritornado all'esigenza avrei bisogno di una macro che mi selezioni il range A50:P1500 (da A49 invece se si comprende anche l'intestazione) e mi apra la classica mascherina di excel di ordinamento ("ordina per" "quindi per" "quindi per") o qualcosa di simile. Voi dite ma perchè non lo fai con quello che ti offre già excel?? Sempre per il motivo detto sopra cioè che andando in mani inesperte possano far guai magari non selezionando tutte le celle o qualcuna in più o chissà cos'altro! Allorche ho pensato di proteggere il foglio anche dall'ordinamento da comando ma non da macro.
boman
Utente Junior
 
Post: 35
Iscritto il: 18/12/10 19:18

Re: Excel Macro per ordinare con scelta colonne

Postdi Anthony47 » 01/02/11 17:24

Magari questa variante:
Codice: Seleziona tutto
Sub ORDINA()
ABC = InputBox("Inserisci le colonne da ordinare separate da ""virgola""")
If ABC = "" Then Exit Sub
KABC = Split(Replace(ABC, " ", ""), ",")
If UBound(KABC, 1) <> 2 Then
    MsgBox ("Il numero di colonne immesso, " & UBound(KABC, 1) + 1 & ", e errato")
    Exit Sub
End If
    Range("A50:P1500").Select

    Selection.Sort Key1:=Range(KABC(0) & "50"), Order1:=xlAscending, Key2:=Range(KABC(1) & "50" _
        ), Order2:=xlAscending, Key3:=Range(KABC(2) & "50"), Order3:=xlAscending, Header _
        :=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom _
        , DataOption1:=xlSortNormal, DataOption2:=xlSortNormal, DataOption3:= _
        xlSortNormal
End Sub

Visto l' obiettivo di una macro "fool prooof" dovresti pero' aggiungere qualche controllo per evitare run time errors dovuti a input errati.

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


Torna a Applicazioni Office Windows


Topic correlati a "Excel Macro per ordinare con scelta colonne":


Chi c’è in linea

Visitano il forum: Marius44 e 46 ospiti