array vba



  • array vba
    di francesca (utente non iscritto) data: 28/10/2015 17:41:08

    Salve a tutti, devo scrivere una macro e ho degli enormi problemi per questo chiedo il vostro aiuto. Il mio file excel di partenza rappresenta una serie di movimenti di magazzino di vari codici io devo creare una macro che mi restituisca per ogni codice nel magazzino logico di tipo "CP" o "CS" o "CT" la "SCAFFALATURA", la "POSIZIONE" e il "PIANO" in cui si trova. La scaffalatura, posizione e piano sono nel file espresse da dei numeri del tipo: 001, 005 ecc ecc.
    Il file è del tipo:
    Codice | data iniziale movimento | data finale| Magazzino Logico| Scaffalatura| posizione |piano

    Potete aiutarmi? Credo di dover creare un array ma non so da dove partire. grazie in anticipo



  • di francesca (utente non iscritto) data: 28/10/2015 17:46:34

    Ho allegato anche un esempio del file excel di cui detto sopra.



  • di alfrimpa data: 28/10/2015 17:57:24

    Ciao Francesca

    La tua domanda non è chiara.

    Nel file che hai allegato avresti dovuto mostrare (inserito manualmente) anche il risultato atteso.

    Ad esempio per i cod. idMovimento 1261119 quali valori ti aspetti di ricevere?

    Inizialmente avevo pensato ad un banale CERCA.VERT() ma non credo si questa la soluzione.

    Cerca di spiegarti meglio.

    Alfredo





  • di francesca (utente non iscritto) data: 28/10/2015 18:10:59

    Alfripa scusami ora allego un nuovo file in cui nel foglio 2 ho inserito un esempio della soluzione che vorrei ottenere.



  • di alfrimpa data: 28/10/2015 18:31:17

    Il file non c'è ancora.

    Alfredo





  • di francesca (utente non iscritto) data: 28/10/2015 18:33:49

    sono un disastro ora dovrebbe esserci se non sbaglio!



  • di alfrimpa data: 28/10/2015 18:57:00

    Ciao Francesca

    Prova a guardare il file allegato (Francesca.xls) dove ho inserito sul foglio2 una tabella dove con il CERCA.VERT() vado a recuperare i dati dal foglio 1 in base al l'idMovimento scritto in colonna A.

    Alfredo





  • di francesca (utente non iscritto) data: 28/10/2015 19:03:12

    ti ringrazio ma non è ciò che devo fare se guardi bene il foglio2 nel file cartel1 che ti ho condiviso. comunque grazie lo stesso.



  • di alfrimpa data: 28/10/2015 19:32:28

    Scusami Francesca ma non capisco la logica dei dati posti in foglio2.

    Cioè sul foglio1 di codice articolo PIPPO ce ne sono tre; sul foglio2 ce ne è uno solo con i suoi dati.

    In base a quali criteri vengono fuori questi dati?

    Cerca di spiegare meglio.

    Alfredo





  • di francesca (utente non iscritto) data: 28/10/2015 19:55:23

    scusami, ora provo a spiegarmi meglio.
    Allora inanzi tutto i tre PIPPO che vedi sono lo stesso codice ma che viene movimentato tre volte: partendo da "GT" fino a PR . C'è solamente un codice di nome PIPPO nel foglio2 perchè voglio selezionare per tipologia di magazzino logico ovvero a me interessano solo magazzini logici di tipo: "GT" "CP" "GS" "MC", gli altri due PIPPO erano spostamenti in magazzino logico di tipo "PR" che a me non interessa e quindi non voglio. Una volta fatto questo la macro mi dovrebbe anche restituire lo scaffale,la posizione e il piano corrispondente a quel tipo di codice in quel tipo di magazzino logico.

    spero di essere stata più esauriente così.



  • di alfrimpa data: 29/10/2015 11:14:46

    Ciao Francesca

    Nella speranza che tu non abbia abbandonato la discussione ti allego file (File_Francesca) nel quale ho inserito la sottostante macro (che lanci cliccando sul pulsante "Estrai" sul Foglio2).

    Volevo solo segnalarti che il medesimo risultato lo puoi ottenere bel più facilemente utilizzando il Filtro Dati sul Foglio1 impostando sul campo "Magazzino logico" un valore diverso da "PR"; è è ovvio che il risultato lo potrai visualizzare solo sul foglio1.

    Fai sapere se era questo che volevi.

    Alfredo

    P.S. Come forse potrai capire non ho utilizzato array che sono tutt'altra cosa. 
     
    Sub Estrai()
    Dim ur As Long
    Dim lr As Long
    Dim rng As Range
    Dim cel As Range
    ur = Worksheets("Foglio2").Cells(Rows.Count, 1).End(xlUp).Row
    lr = Worksheets("Foglio1").Cells(Rows.Count, 1).End(xlUp).Row
    Set rng = Worksheets("Foglio1").Range("K1:K" & lr)
    For Each cel In rng
        If cel.Value = "GT" Or cel.Value = "CP" Or cel.Value = "GS" Or cel.Value = "MC" Then
            Worksheets("Foglio2").Range("A" & ur + 1).Value = cel.Offset(0, -6)
            Worksheets("Foglio2").Range("b" & ur + 1).Value = cel.Value
            Worksheets("Foglio2").Range("c" & ur + 1).Value = cel.Offset(0, 1)
            Worksheets("Foglio2").Range("d" & ur + 1).Value = cel.Offset(0, 2)
            Worksheets("Foglio2").Range("e" & ur + 1).Value = cel.Offset(0, 3)
            ur = ur + 1
        End If
    Next cel
    End Sub






  • di francesca (utente non iscritto) data: 29/10/2015 12:22:41

    Grazie mille, no non ho ancora abbandonato.



  • di francesca (utente non iscritto) data: 29/10/2015 12:24:49

    mi sembra che funzioni perfettamente, non come ringraziarti davvero!!



  • di alfrimpa data: 29/10/2015 12:33:33

    Ciao Francesca

    Solo per mia curiosità: ma non potevi usare il filtro dati? Avresti avuto lo stesso risultato.

    Alfredo