Invertire intervallo celle



  • Invertire intervallo celle
    di Simone91 (utente non iscritto) data: 16/10/2013 07:28:08

    Buongiorno. Ho un foglio di lavoro dove nell'intervallo D2:L600 inserisco dei dati, precisamente nella colonna D inserisco la data. In questo foglio i dati sono inseriti in ordine crescente nel senso che D2 c'è la data più vecchia mentre in D600 c'è la data più recente. A me servirebbe copiare questo intervallo di celle in un foglio di un altra cartella di lavoro al contrario e cioè che che in D2 ci deve essere la data più recente mentre in D600 quella più vecchia, naturalmente tutto l'intervallo cioè D2:L600. Esiste un modo per farlo in maniera veloce? Grazie


  • invertire ordine
    di canapone data: 16/10/2013 08:21:19



    Ciao.

    Faccio un tentativo con una formula, spero sia d'aiuto.

    =INDICE(Foglio1!$D$2:$D$600;CONTA.VALORI(Foglio1!$D$2:$D$600)-RIGHE($A$1:$A1)+1)

    Saluti



  • di Grograman (utente non iscritto) data: 16/10/2013 08:46:12

    Senza nulla togliere alla formula di Canapone che ne sforna una più bella dell'altra, ma un filtro per data?



  • di Simone91 (utente non iscritto) data: 16/10/2013 11:02:41

    Grazie per la formula. Io però i dati in ordine dal più vecchio al più recente c'è l'ho in un foglio di una cartella di lavoro, li devo inserire in un foglio di un altra cartella di lavoro; quella formula come la devo adattare? Per il filtro non ha senso in quanto a me serve vederli tutti i record dal più giovane al più vecchio e poi devo anche stamparli.


  • formula
    di canapone (utente non iscritto) data: 16/10/2013 12:06:27


    Ciao,

    apri i due file.

    Se copi la formula nella prima colonna libera del file contenente le date per ottenere
    l'ultima data

    =INDICE($D$2:$D$600;CONTA.VALORI($D$2:$D$600)-RIGHE($A$1:$A1)+1)

    Basta poi selezionare la cella con la formula e con maiusc+canc tagliare e copiare la formula nel secondo file per ottenere l'elenco al contrario.

    Potresti anche nidificare la formula dentro un se.errore, se servisse

    =se.errore(INDICE($D$2:$D$600;CONTA.VALORI($D$2:$D$600)-RIGHE($A$1:$A1)+1);"")

    Spero sia d'aiuto



  • di Simone91 (utente non iscritto) data: 16/10/2013 19:26:57

    Ciao. Può darsi non mi sono spiegato bene, ho allegato un file come esempio ridotto all'osso perché così è più chiaro. Anche se le cartelle nel mio caso sono 2 per l'esempio va bene anche una, poi faccio un copia e incolla.



  • di Raffaele_53 (utente non iscritto) data: 16/10/2013 22:36:02

    Un saluto a tutti

    Alla formula di canapone devi mettere il nome del foglio
    =SE.ERRORE(INDICE('Foglio attuale'!$D$2:$D$600;CONTA.VALORI('Foglio attuale'!$D$2:$D$600)-RIGHE($A$1:$A1)+1);"")
    Naturale che ricopiando la formule nelle celle di destra, dovrai modificarla per ottenere il dato giusto. Ex

    Cognome =SE.ERRORE(INDICE('Foglio attuale'!$E$2:$E$600;CONTA.VALORI('Foglio attuale'!$D$2:$D$600)-RIGHE($A$1:$A1)+1);"") e cambiata in $E$2:$E$600
    Nome =SE.ERRORE(INDICE('Foglio attuale'!$F$2:$F$600;CONTA.VALORI('Foglio attuale'!$D$2:$D$600)-RIGHE($A$1:$A1)+1);"") e cambiata in $F$2:$F$600 ecc ecc

    In poche parole le formule vanno bene se Vuoi vedere due fogli uguali, uno con date a salire, l'altro a scendere.

    Se invece ti servono come Archivio, devi Copiare l'area e incollarla dove vuoi, selezioni ordina scegli la colonna D e metti dal più basso al più alto.

    Questo codice lo fà già (da inserire in un modulo)
     
    Option Explicit
    Sub copia()
    Dim F1 As Worksheet, F2 As Worksheet, Uriga As Long
    Set F1 = Sheets("Foglio attuale") 'cambia nome se desideri
    Set F2 = Sheets("Foglio come lo vorrei") 'cambia nome se desideri
    F2.Range("D2:L600") = ""
    Uriga = F1.Range("D" & Rows.Count).End(xlUp).Row
    F1.Range(F1.Cells(2, 4), F1.Cells(Uriga, 12)).Copy
    F2.Select
    F2.Cells(2, 4).PasteSpecial
    Application.CutCopyMode = False
    F2.Range("D2:L" & Uriga).Select
        F1.Sort.SortFields.Clear
        F2.Sort.SortFields.Add Key:= _
            F2.Range("D2:D" & Uriga), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
            xlSortNormal
        With F2.Sort
            .SetRange F2.Range("D2:L" & Uriga)
            .Header = xlGuess
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
    Set F1 = Nothing
    Set F2 = Nothing
    End Sub



  • di Simone91 (utente non iscritto) data: 17/10/2013 20:53:47

    Ok risolto. Grazie per la collaborazione