Estrappolare data univoca
Hai un problema con Excel? 
Estrappolare data univoca
di Robort data: 04/02/2014 15:42:32
Buon giorno a tutti.
Nel Foglio 1 dalla colonna A dalla cella 3 in poi sto cercando di esportare sempre dalla colonna A e dalla cella 3 in poi ma del Foglio 2, le date contenute nel Foglio 1.
La particolarità è che nel Foglio 1 anche se in ordine cronologico, ci sono delle date che si ripetono. Il mio intento sarebbe quello di estrappolarle nel Foglio 2, una sola volta per data ed in ordine cronologico. Grazie.
di Mister_x (utente non iscritto) data: 04/02/2014 16:29:44
ciao
penso che tu stia usando una versione di excel 2007 o maggiore
allego il file di prova
la sub posta sotto e' da inserire nel foglio2
ciao Mister_x
Sub ordina_da_1()
Dim i As Long
Dim Data As Long
Dim Nrighe As Long
Nrighe = Sheets(1).Cells(Rows.Count, "A").End(xlUp).Row
For i = 3 To Nrighe
Data = Application.Small(Sheets(1).Range("a3:A" & Nrighe), i - 2)
Cells(i, "A") = Format(Data, "dd/mm/yyyy")
Next i
ActiveSheet.Range("A3:A" & Nrighe).RemoveDuplicates Columns:=1, Header:=xlNo
End Sub
|
Mister_x
di Robort data: 04/02/2014 17:47:37
Ciao Mister_x
Grazie per il complesso listato. Fa quello che chiedevo, però ho notato una cosa strana. Ho salvato sul mio desk il file che hai allegato denominato Cartel1. Aprendolo in foglio 2 noto le date che partono da gennaio e finiscono a giugno. Mentre però, nel foglio 1, hai utilizzato esclusivamente date di gennaio. Probabilmente c'è qualche problema. Dovendo rinominare foglio 1 e foglio 2, dove si deve agire? Grazie per la pazienza.
Dimenticavo... Utilizzo Excel di Office 2010
di mb (utente non iscritto) data: 04/02/2014 18:12:18
ciao direi a naso che ha incertito giorno/mese sul foglio2
non so dirti però se è un problema della versione excel utilizzata o un problema di formattazione delle colonne
di Mister_x (utente non iscritto) data: 04/02/2014 19:14:04
ciao
come dice mb e' un problema di formattazione da inglese a italiano
modifica il Format()
da cosi'
Cells(i, "A") = Format(Data, "dd/mm/yyyy")
a cosi'
Cells(i, "A") = Format(Data, "mm/dd/yyyy")
01/01/2014
02/01/2014
04/01/2014
05/01/2014
06/01/2014
ciao Mister_x
di Raffaele_53 (utente non iscritto) data: 04/02/2014 20:31:06
Ci fossero 100.000 date diventa pesantuccio.
Non sarebbe meglio un copia/incolla
Rimuovi duplicati
Ordina dal più basso al più alto
di Mister_x (utente non iscritto) data: 05/02/2014 00:00:24
ciao raffaele
su questo ai pienamente ragione in quanto facendo i passaggi da te descritti li avevo gia memorizzati con il creatore di macro e apportate le varie modifiche in caso la colonna avesse delle righe variabili, poi ho preferito dare un listato di sub() forse piu' leggibile creandolo ex nuovo,
comunque avevo gia' fatto le prove con Timer per vedere la velocita' di esecuzione su 1000 date e' avevo gia notato che il tempo era a favore del tuo metodo proposto
in questo caso ho riscontrato che la sub() proposta dava un valore di 0,4213 contro quella che fatta come dici tu di 0,0625 per 1000 date
comunque posto anche questa per conoscenza da mettere in un modulo, che e' presente sul mio file di prova
ciao Mister_x
Sub Macro1()
tempo = Timer '' verifica tempo
Dim Nriga As Long
Sheets("Foglio1").Select
Nriga = Cells(Rows.Count, "A").End(xlUp).Row
Range("A3:A" & Nriga).Select
Selection.Copy
Sheets("Foglio2").Select
Range("A3").Select
ActiveSheet.Paste
Application.CutCopyMode = False
ActiveWorkbook.Worksheets("Foglio2").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Foglio2").Sort.SortFields.Add Key:=Range( _
"A3:A" & Nriga), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("Foglio2").Sort
.SetRange Range("A3:A" & Nriga)
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
ActiveSheet.Range("$A$3:$A$" & Nriga).RemoveDuplicates Columns:=1, Header:=xlNo
[A1].Select
MsgBox Timer - tempo '' tempo trascorso
End Sub
|
di mb (utente non iscritto) data: 05/02/2014 11:24:20
buongiorno
se desiderassi copiare i dati univoci sul foglio2 inserendo però la prima data in A2 e non in A3 devo modificare
i - 2
con ì - 1
grazie
di mister_x (utente non iscritto) data: 05/02/2014 15:27:51
ciao
devi solo inserire -1 in riporto cella del foglio
Cells(i - 1, "A") = Format(Data, "mm/dd/yyyy")
parte dalla riga 2 dato che il for e' a 3 di partenza
ciao
di mb (utente non iscritto) data: 05/02/2014 15:32:40
1.0000000000000000 di grazie
alla prossima
Vuoi Approfondire?