Macro trova sostituisci e seleziona



  • Macro trova sostituisci e seleziona
    di Blackysan (utente non iscritto) data: 12/12/2015 13:06:05

    Ciao a tutti,

    Sto cercando di creare una macro su excel che all'interno di una colonna trovi e sostituisca il valore punto(".") con il valore slash ("/"), in modo che excel riconosca che è una data, e io successivamente possa applicare un filtro per data maggiore di oggi.

    Con il registratore di macro ero riuscito ad arrivare ad una soluzione, mi pareva, ma mi sono accorto che alcune dati non li processa come vorrei, per esempio se ho una data 30/11/2015, non la riconosce come il 30 di Novembre ma come l'11 del mese 30. Anche impostandogli il formato della cella come (dd/mm/yyyy) non lo processa come vorrei.
    Facendo a mano la procedura funziona tutto perfettamente...

    Nella macro allegata, dopo aver cambiato il formato e indentato tutto a SX, trova e sostituisce il "." con lo "/" in due colonne (B e H). successivamente dovrebbe farmi il filtro sulla colonna H per data > di oggi.

    Qualcuno è in grado di aiutarmi?

    Grazie mille
     
    Sheets(1).Select
        Range("B:B").Select
        Range("B1").Activate
        Application.CutCopyMode = False
        Selection.NumberFormat = "dd/mm/yyyy"
        Application.CutCopyMode = False
        With Selection
            .HorizontalAlignment = xlLeft
            .VerticalAlignment = xlBottom
            .WrapText = False
            .Orientation = 0
            .AddIndent = False
            .IndentLevel = 0
            .ShrinkToFit = False
            .ReadingOrder = xlContext
            .MergeCells = False
        End With
        Selection.Replace What:=".", Replacement:="/", LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
            ReplaceFormat:=False
        Range("H:H").Select
        Range("H1").Activate
        Application.CutCopyMode = False
        Selection.NumberFormat = "dd/mm/yyyy"
        Application.CutCopyMode = False
        With Selection
            .HorizontalAlignment = xlLeft
            .VerticalAlignment = xlBottom
            .WrapText = False
            .Orientation = 0
            .AddIndent = False
            .IndentLevel = 0
            .ShrinkToFit = False
            .ReadingOrder = xlContext
            .MergeCells = False
        End With
        Selection.Replace What:=".", Replacement:="/", LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
            ReplaceFormat:=False
        ActiveSheet.Range("$B$1:$AC$999").AutoFilter Field:=7, Criteria1:= _
            ">" & Date, Operator:=xlAnd



  • di patel data: 12/12/2015 14:21:17

    se alleghi il file sarà più facile testare la macro e le modifiche





  • di Blackysan (utente non iscritto) data: 12/12/2015 14:30:06

    File aggiunto.

    Grazie mille



  • di patel data: 12/12/2015 16:11:30

    vuoto, non potevi togliere solo gli iban ?





  • di Blackysan (utente non iscritto) data: 12/12/2015 16:25:19

    te lo ricarico come prova1.zip

    Scusa, ho sbagliato file da caricare



  • di patel data: 12/12/2015 18:42:25

    2 errori
    1) il Field corrispondente alla colonna H è 8 e non 7
    2) le date che hai cercato di trasformare con le sostituzioni non sono vere date e quindi il filtro non funziona, purtroppo vado di fretta e non sono in grado di dirti come risolvere, comunque è li che devi lavorare





  • di Blackysan (utente non iscritto) data: 12/12/2015 19:08:58

    Intanto grazie mille.

    1) l'ho messo a posto grazie.
    2) Si lo so che non sono vere date, infatti quando importo i dati da un gestionale esterno sono nel formato 20.12.2015, facendo manualmente il find&replace di "." con "/" automaticamente vede quel contenuto della cella come data 20/12/2015. A questo punto il filtro mi estrae correttamente i dati ricercati.
    Mi chiedo come mai se eseguo il find & replace a mano funziona perfettamente, se invece lo faccio con una macro mi legge le date come se fossero mm/dd/yyyy per cui la data 20/12/2015 giustamente non la rileva.
    Ho anche provato ad impostare il formato cella come Date(dd/mm/yyyy) ma non ha avuto alcun effetto.



  • di patel data: 13/12/2015 09:06:46

    prova queste soluzioni
    h t t p s://www.google.it/search?q=vba+text+to+date&ie=utf-8&oe=utf-8&gws_rd=cr&ei=miZtVpuuBMvca9T5scgI





  • di isy data: 13/12/2015 09:58:12

    Ciao patel

    Cit: Prova queste soluzioni
    Con un testo in colonne ad esempio
     
    Sub Macro1()  'Testo in colonne
        Columns("B:B").TextToColumns Destination:=Range("B1"), DataType:=xlDelimited, _
            TextQualifier:=xlSingleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
            Semicolon:=True, Comma:=False, Space:=False, Other:=False, FieldInfo _
            :=Array(1, 4), TrailingMinusNumbers:=True
    End Sub



  • di Blackysan (utente non iscritto) data: 13/12/2015 14:29:18

    Grazie mille sia a Patel che a te isy.
    sono riuscito a farlo con la tua macro isy.

    Ho solo un problema quando lancio la macro per filtrare dopo la data di oggi non trova nulla, devo andare a reimpostare il filtro manualmente con data maggiore di oggi ed allora mi estrae i dati correttamente. Qualcuno sa il motivo per caso? e se si che cosa aggiungere/modificare nel testo della macro?


     
    Sheets(1).Select
    
    ActiveSheet.Range("$b$1:$ac$999").Autofilter  Field=7, Criteria1:= _
    ">" & Date, Operator:=xlAnd



  • di patel data: 13/12/2015 15:54:44

    strano, oggi mi funziona, ti allego il file





  • di Blackysan (utente non iscritto) data: 13/12/2015 16:41:15

    Per la parte di sostituzione ho usato il codice allegato, adattandolo alle 2 colonne che mi servivano (B e H).

    Per il problema del filtro, se ho un range dalla colonna B alla colonna AC il Field della colonna "Due Date" è 7.
    il conto delle colonne parte dalla colonna B, non da A. infatti il filtro viene applicato correttamente, ma non estrae nessun dato ( e io so per certo che almeno un caso da estrarre c'è). Ma se dopo aver lanciato la macro vado a reimpostare i criteri del filtro con la data, in pratica seguo il percorso già impostato dal filtro, estrae tutto correttamente.

    La mia domanda è come mai con il filtro impostato dalla macro non funziona, con il filtro manuale si?
     
    Sub Macro1()  'Testo in colonne
        Columns("B:B").TextToColumns Destination:=Range("B1"), DataType:=xlDelimited, _
            TextQualifier:=xlSingleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
            Semicolon:=True, Comma:=False, Space:=False, Other:=False, FieldInfo _
            :=Array(1, 4), TrailingMinusNumbers:=True
    End Sub
    



  • di patel data: 13/12/2015 17:32:57

    prova il file allegato(prova2.xlsm)





  • di Blackysan (utente non iscritto) data: 13/12/2015 18:02:55

    Patel , ho provato la tua macro in prova2.xml
    non ha sortito alcun effetto.

    Ti scrivo il codice attualmente che sto usando:
    ho due macro:
    1 per trasformare il testo in colonne
    2 per fare i filtri: in questa seconda ho problemi con la data di filtro, qualunque data imposti esce un'estrazione vuota. Ma se provo ad impostare il filtro manualmente estrae correttamente tutto.

    Intanto ti ringrazio per il tuo aiuto.

     
    1)
    sub Trasforma_Testo
    dim H
    dim B
    sheets(1).Select
    Set H = Range("H1:H999")
    Set B = Range ("B1:B999")
    H.Select
    Selection.TextToColumns Destination:=Range("H1"), DataType:=xlDelimited, _
            TextQualifier:=xlSingleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
            Semicolon:=True, Comma:=False, Space:=False, Other:=False, FieldInfo _
            :=Array(1, 4), TrailingMinusNumbers:=True
    B-Select
    Selection.TextToColumns Destination:=Range("B1"), DataType:=xlDelimited, _
            TextQualifier:=xlSingleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
            Semicolon:=True, Comma:=False, Space:=False, Other:=False, FieldInfo _
            :=Array(1, 4), TrailingMinusNumbers:=True
    sheets(2).Select
    Set H = Range("H1:H999")
    Set B = Range ("B1:B999")
    H.Select
    Selection.TextToColumns Destination:=Range("H1"), DataType:=xlDelimited, _
            TextQualifier:=xlSingleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
            Semicolon:=True, Comma:=False, Space:=False, Other:=False, FieldInfo _
            :=Array(1, 4), TrailingMinusNumbers:=True
    B-Select
    Selection.TextToColumns Destination:=Range("B1"), DataType:=xlDelimited, _
            TextQualifier:=xlSingleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
            Semicolon:=True, Comma:=False, Space:=False, Other:=False, FieldInfo _
            :=Array(1, 4), TrailingMinusNumbers:=True
    End Sub
    
    2)
    Sub Filtra_AT_DE
    dim Data
    Data = Date
    Sheets (1).Select
    ActiveSheet.Range("$B$1:$AC$999").AutoFilter Field:=13, Criteria1:="=102", _
            Operator:=xlOr, Criteria2:="=103"
    ActiveSheet.Range("$B$1:$AC$999").AutoFilter Field:=9, Criteria1:="+"
    ActiveSheet.Range("$B$1:$AC$999").AutoFilter Field:=7, Criteria1:= _
            ">" & Data, Operator:=xlAnd
    Sheets (2).Select
    ActiveSheet.Range("$B$1:$AC$999").AutoFilter Field:=13, Criteria1:="=102", _
            Operator:=xlOr, Criteria2:="=103"
    ActiveSheet.Range("$B$1:$AC$999").AutoFilter Field:=9, Criteria1:="+"
    ActiveSheet.Range("$B$1:$AC$999").AutoFilter Field:=7, Criteria1:= _
            ">" & Data, Operator:=xlAnd
    End Sub



  • di Blackysan (utente non iscritto) data: 13/12/2015 18:13:46

    Ti allego il file Prova_AT.xml con le macro aggiornate all'ultima modifica.
    Nello sheet Foglio 1 ci sono i dati con cui provare la macro Filtra_AT_DE.

    Grazie ancora



  • di patel data: 13/12/2015 19:11:15

    prova così 
     
    Data  = Format(Date, "mm/dd/yyyy") ' all'inglese
    






  • di Blackysan (utente non iscritto) data: 13/12/2015 19:58:13

    Grazie mille Patel!

    con la tua aggiunta sulla formattazione della data quando setto la variabile Data, funziona perfettamente.




  • di patel data: 14/12/2015 08:26:54

    la conversione in date può essere ridotta così

     
          Selection.TextToColumns Destination:=Range("H1"), DataType:=xlDelimited, _
            FieldInfo:=Array(1, 4) ' 1 = la prima colonna (H), 4 = tipo Data
    






  • di blackysan (utente non iscritto) data: 15/12/2015 15:52:27

    Grazie mille per il supporto Patel!