Pagina precedente | 1 | Pagina successiva
Vota | Stampa | Notifica email    
Autore

ordinamento con range dinamico

Ultimo Aggiornamento: 28/11/2016 16:08
Post: 77
Registrato il: 09/04/2015
Età: 45
Utente Junior
2013
OFFLINE
28/11/2016 10:43

Ciao a tutti,

ho inserito questo codice per l'ordinamento di un range piuttosto ampio in base ad una data, quello che non capisco è:

- alcune date non me le riordina correttamente, nonostante tutte le formattazioni siano corrette ed uguali in tutta la colonna;

Range(Cells(4, 1), Cells(iRR - 1, 24)).Select
Selection.Sort Key1:=Range("D3"), Order1:=xlAscending, _
Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:= _
xlTopToBottom

per lanciare l'ordinamento, bisogna entrare in VBA e lanciare il modulo2

In allegato il file:
- foglio ELENCO: risultato dopo l'ordinamento,
- foglio1: elenco originale prima ordinamento,
- foglio2: comparazione dei 2 elenchi

Grazie mille
[Modificato da shadi1978 28/11/2016 10:43]
Post: 1.913
Registrato il: 21/03/2008
Città: LOCATE VARESINO
Età: 76
Utente Veteran
2007 / 13
OFFLINE
28/11/2016 12:16

ciao

devi prendere in considerazione tutte e due le colonne

io ho modificato in foglio2 le colonne D:E con prima le date dal piu' piccolo al piu' grande
dopo TFA Rif colonna D da A a Z
utilizzato il creatore di macro


Sub Macro1()

Range("D3:E304").Select
ActiveWorkbook.Worksheets("Foglio2").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Foglio2").Sort.SortFields.Add Key:=Range("E4:E304" _
), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Foglio2").Sort.SortFields.Add Key:=Range("D4:D304" _
), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Foglio2").Sort
.SetRange Range("D3:E304")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub




Ciao da locate
excel 2007 / 13
Post: 77
Registrato il: 09/04/2015
Età: 45
Utente Junior
2013
OFFLINE
28/11/2016 14:28

Intanto grazie mille:
Di seguito il risultato con la tua modifica proposta:
# 1702 05/02/2016
# 1902 05/02/2016
# 2101 07/02/2016
# 2101 08/01/2016
# 1901 07/02/2016
# 1901 08/01/2016
# 1402 09/02/2016
# 1502 09/02/2016
# 3402 09/02/2016

ho controllato tutte le date e mi ha ordinato correttamente tranne le 2 scritte in grassetto.

Sinceramente cmq non capisco perchè facendo solo con l'ordinamento crescente sulle Date non funzioni... addirittura 4 delle date più vecchie (04/01) me le mette in fondo...

Il problema è che ora sto testando con 300 righe, a codice finito devo importare circa 3000 righe e devo essere assolutamente certo che l'ordinamento funzioni.

Riuscite ad aiutarmi?

Grazie mille
Post: 1.914
Registrato il: 21/03/2008
Città: LOCATE VARESINO
Età: 76
Utente Veteran
2007 / 13
OFFLINE
28/11/2016 15:03

ciao

la tua sub() per il foglio(ELENCO) deve essere la seguente tenendo conto dalla colonna A alla colonna X riga4:304


Sub ColD_ColA()

Range("A3:X304").Select
ActiveWorkbook.Worksheets("ELENCO").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("ELENCO").Sort.SortFields.Add Key:=Range("D3:D304") _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("ELENCO").Sort.SortFields.Add Key:=Range("A3:A304") _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("ELENCO").Sort
.SetRange Range("A3:X304")
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub




# 1602 05/02/2016
# 1702 05/02/2016
# 1802 05/02/2016
# 1902 05/02/2016
# 3002 05/02/2016
# 3802 05/02/2016
# 1901 07/02/2016
# 2101 07/02/2016
# 1402 09/02/2016
# 1502 09/02/2016
# 3402 09/02/2016
# 3902 11/02/2016
# 4002 11/02/2016



come vedi i valori sono esatti


Ciao da locate
excel 2007 / 13
Post: 78
Registrato il: 09/04/2015
Età: 45
Utente Junior
2013
OFFLINE
28/11/2016 15:34

fatto copia incolla del tuo codice e questo è il risultato:

# 5411 10/11/2016
# 5511 10/11/2016
# 4011 11/11/2016
# 0501 04/01/2016
# 0601 04/01/2016

# 4111 11/11/2016
# 7211 14/11/2016

non so che dire.... le righe che prima davano problemi sono a posto e sono sballate queste...
Post: 1.916
Registrato il: 21/03/2008
Città: LOCATE VARESINO
Età: 76
Utente Veteran
2007 / 13
OFFLINE
28/11/2016 16:03

ciao


controlla bene perché quelle due celle sono a TESTO, non mi chiedere come mai, ma e' cosi'

riscrivi la data da tastierino numerico scrivendo solo 04/01/16 e non 2016 e conferma con invio
dopo esegui la sub() e vedrai che tutto va al suo posto


Ciao da locate
excel 2007 / 13
Post: 80
Registrato il: 09/04/2015
Età: 45
Utente Junior
2013
OFFLINE
28/11/2016 16:08

[SM=x423047] [SM=x423047] [SM=x423069] [SM=x423048] [SM=x423030]

GRAZIE MILLE!
Vota:
Amministra Discussione: | Chiudi | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 | Pagina successiva
Nuova Discussione
 | 
Rispondi
Cerca nel forum
Tag discussione
Discussioni Simili   [vedi tutte]
Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Tutti gli orari sono GMT+01:00. Adesso sono le 00:34. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com