Estrappolare data univoca



  • 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