import codici



  • import codici
    di Gianni (utente non iscritto) data: 14/12/2014 16:36:23

    Salve a tutti! Ho un file in excel dove:
    - nel primo figlio ho due colonne, nella colonna a il codice del prodotto (costituito solo da numeri), nella colonna b i rispettivi prezzi dei prodotti

    - nel secondo foglio invece ho: nella prima colonna il codice prodotto (però in ordine diverso da quello del primo foglio) e nella colonna b ho la descrizione del prodotto

    Vorrei avere in un unico foglio il codice prodotto, il prezzo, e la descrizione.
    Faccio un esempio:

    Foglio 1
    Colonna a------- colonna b
    98769............... 89,00
    25364............... 7,89

    Foglio 2
    Colonna a ...... Colonna b
    25364........... Pennarello
    98769........... Stampante

    Il risultato che vorrei
    Colonna a.....colonna b....colonna c
    25364..... Pennarello......7,89
    98769..... Stampante.....89,00

    P.s. i codici dei prodotti non hanno lo stesso ordine tra i due fogli e inoltre ho circa 60000 prodotti quindi una macro credo che sarebbe l ideale


    Grazie a tutti



  • di lepat (utente non iscritto) data: 14/12/2014 16:56:33

    allega un file di esempio con i dati ed il risultato desiderato



  • di Gianni (utente non iscritto) data: 14/12/2014 17:30:39

    Ti allego un esempio, il risultato è il foglio 3

    ti ho fatto un piccolo estratto, ovviamente troverai dei codici nel foglio 1 dove nel foglio 2 non ci sono allo ra in questo caso non bisogna considerararli

    grazie



  • di lepat (utente non iscritto) data: 14/12/2014 18:24:50

    prova questa
     
    Sub a()
    Dim c As Range
    Sheets(1).Select
    LR = Cells(Rows.Count, "A").End(xlUp).Row
    For r = 1 To LR
      codice = Cells(r, 1)
      With Sheets(2)
        Set c = .Range("A1:A" & LR).Find(codice, LookIn:=xlValues)
        If Not c Is Nothing Then
          riga = c.Row
          Cells(r, 3) = .Cells(riga, 2)
        End If
      End With
    Next
    End Sub



  • di Gianni (utente non iscritto) data: 16/12/2014 00:19:13

    la macro funziona, però per un file di 12000 o 24000 righe ci impiega tanto tempo, non si può velocizzare e inoltre se volessi spostare oltre la descrione anche altre colonne come posso fare?

    grazie



  • di lepat (utente non iscritto) data: 16/12/2014 07:46:05

    il tempo dipende dalle dimensioni del file, per il resto hai due alternative
    1) cercare di capire come funziona la macro
    2) spiegare esattamente cosa vuoi



  • di Mimakinu (utente non iscritto) data: 16/12/2014 21:55:15

    Cosa intendi per ci impiega tanto tempo? Ore o minuti?
    Ho risolto lo stesso problema con una soluzione diversa fermo restando che le soluzioni di Lepat
    a mio avviso sono sempre geniali.
    Ciao



  • di Gianni (utente non iscritto) data: 17/12/2014 00:44:57

    Grazie ancora per l aiuto.
    Mi spiego meglio. Io ho due fogli diversi tra loro, ma che li accomuna solo il codice del prodotto , posti purtroppo iin ordine diverso tra i due fogli.
    Nel primo foglio ho il codice del prodotto (colonna a) e il prezzo (colonna b)
    Nel secondo foglio ho il codice del prodotto (colonna A) descrizione (colonna B), link immagine (colonna c), titolo (colonna D) fino alla colonna E che rappresenta la disponibilità.

    Io vorrei in un unico foglio il codice prodotto (colonna a)/ prezzo (colonna b) / descrizione (colonna c) / link immagine (colonna d).....

    Questo risultato si potrebbe ottenere con una macro che mi aggiungerebbe il prezzo del foglio 1 nel foglio 2 tenendo conto del codice di prodotto di appartenenza del foglio 1.
    Ovviamente il prezzo deve essere aggiunto in una nuova colonna del foglio 2.

    Non so se questa volta mi sono spiegato meglio di ciò che vorrei.

    Grazie ancora



  • di Mimakinu (utente non iscritto) data: 19/12/2014 01:22:25

    Scusa se mi inserisco nuovamente nella discussione, ti avevo chiesto cosa significava per te il troppo tempo.
    Come gia' ti ho evidenziato, ho risolto lo stesso problema in modo diverso (lungo ma perfetto).
    Quindi, conoscere le tue valutazioni sul tempo mi permettono di proporre una soluzione al tuo problema.
    Ciao



  • di Raffaele_53 (utente non iscritto) data: 19/12/2014 13:24:57

    Il codice di Lepat è il più veloce possibile, un ulteriore vantaggio si potrebbe avere se uno dei due fogli avesse meno record.

    Ho notato che nei due fogli ci sono codici differenti. Come hai scritto la soluzione migliore era di scrivere il prezzo nel foglio2 però come hai richiesto nel 1° post ho preferito ricreare un elenco univoco nel foglio "Risultato"
    Questo codice (più lento) elabora 10000 righe in 15 secondi
    Codice-Prezzo-Descrizione-link.....e siccome non sapevo quante altre colonne ho scritto 10 in due righe del codice(casomai cambiali)

    Da mettere in un MODULO
     
    Sub cerca()
    Dim sh1 As Worksheet: Set sh1 = Worksheets("Foglio1") ' da cambiare casomai
    Dim sh2 As Worksheet: Set sh2 = Worksheets("Foglio2") ' da cambiare casomai
    Dim sh3 As Worksheet: Set sh3 = Worksheets("Risultato") ' da cambiare casomai
    Dim Riga As Long, Lr As Long, R As Long, RR As Long, Area As Range, Dove As Object
    
    Lr = sh3.Cells(Rows.Count, "A").End(xlUp).Row
    If Lr > 1 Then sh3.Range(sh3.Cells(2, 1), sh3.Cells(Lr, 10)).Clear
    
    Lr = sh2.Cells(Rows.Count, "A").End(xlUp).Row
    Set Area = sh2.Range("A1:A" & Lr)
    
    Lr = sh1.Cells(Rows.Count, "A").End(xlUp).Row
    RR = 2
    
    For R = 1 To Lr
        Set Dove = Area.Find(sh1.Cells(R, 1), LookIn:=xlValues)
        If Not Dove Is Nothing Then
          Riga = Dove.Row
          sh1.Range(sh1.Cells(R, 1), sh1.Cells(R, 2)).Copy
          sh3.Cells(RR, 1).PasteSpecial
          sh2.Range(sh2.Cells(Riga, 2), sh2.Cells(Riga, 10)).Copy
          sh3.Cells(RR, 3).PasteSpecial
          RR = RR + 1
        End If
    Next R
    
    MsgBox "Fatto"
    Set Area = Nothing
    Set sh1 = Nothing
    Set sh2 = Nothing
    Set sh3 = Nothing
    End Sub