Concatenare dati da 2 sheet



  • Concatenare dati da 2 sheet
    di DiegoR (utente non iscritto) data: 25/04/2016 01:34:57

    Buongiorno Boys.
    Ho la necessità di unire 2 sheet in un terzo concatenando le informazioni esistenti, riporto la struttura:
    sheet 1
    ColonnaA
    WINDOWS2010
    LINUX SUSE
    LINUX REDHAT
    WINDOWSNT
    ORACLE
    HANA


    sheet2
    Colonne A - B
    AIX - musica.mp3
    WINDOWS2010 - PIPPO
    WINDOWS2012 - Foto.jpg
    LINUX SUSE - PLUTO
    LINUX REDHAT - PAPERINO

    Il desiderato è:
    WINDOWS2010 - PIPPO
    LINUX SUSE - PLUTO
    LINUX REDHAT - PAPERINO

    nel primo sheet ho una serie di server, nel secondo una parte di questi server con determinati files, vorrei fare un terzo foglio che confronti se il server in sheet2 è presente in sheet1 e se c'è riportare sulla stessa riga la colonna B di sheet2
    Help, grazie



  • di patel data: 25/04/2016 10:46:47

    allega il file con anche il risultato desiderato





  • di cromagno data: 25/04/2016 13:23:28

    Ciao a tutti,

    sempre se ho capito bene....
    nella cella A2 del foglio3 ("Riscontri" nel file che allego) inserire la formula matriciale (quindi da confermare con la combinazione di tasti CTRL+MAIUSC+INVIO):

    =SE.ERRORE(INDICE(Foglio2!$A$1:$B$6;PICCOLO(SE(SE.ERRORE(CONFRONTA(Foglio2!$A$2:$A$6;Foglio1!$A$2:$A$7;0);0)>0;RIF.RIGA($A$2:$A$6);"");RIF.RIGA(A1));RIF.COLONNA(A1));"")

    e poi copiare la cella A2 in basso e a destra.

    Se ho capito male, allega il tuo file come suggerito da patel (che saluto).

    Allego file d'esempio...


  • inserito file
    di DiegoR (utente non iscritto) data: 26/04/2016 16:11:11

    nell'esempio reale esiste il foglio Baseline (master dei dati) e foglio 1/2/3/4 con cui fare il merge. Questi 4 potrebbero anche essere uniti in un unico foglio, per comodità di formule :). Il risultato dovrebbe essere quello nel foglio5 ovvero tutte le righe di Baseline e se presenti in uno dei 4 fogli la corrispondente colonna B
    Spero la chiarezza sia stata sufficiente. Grazie



  • di DiegoR (utente non iscritto) data: 26/04/2016 16:13:55

    Inserito il file: la base dati è Baseline, i 4 fogli successivi (1,2,3,4) contengono i dati da cui fare il merge, ma volendo si possono anche unire in un unico foglio, se più comodo per la formula. Il risultato è il foglio 5 che contiene tutte le righe di Baseline e la colonna B dei fogli 1,2,3,4 se presente.
    Grazie



  • di cromagno data: 26/04/2016 18:50:45

    Ciao,
    ho visto il file....
    credo che la strada migliore sia il VBA (inoltre, visto il numero di righe, con le formule il file diventerebbe veramente troppo pesante...per non dire inutilizzabile).
    Più tardi provo a scrivere qualcosa.



  • di cromagno data: 27/04/2016 01:59:55

    Ciao,
    il codice utilizzato è scritto sotto....

    se vuoi verificare anche le righe nascoste, togli il simbolo di apice (') da questa riga:
    uRiga = Wks1.UsedRange.Rows.Count

    e da questa:
    uRigaWks = .UsedRange.Rows.Count

    e metti l'apice nelle rispettive righe precedenti.

    Se ci dovessero essere più righe nella realtà, converrebbe integrare una matrice nel codice.
    Ti riallego il file ("foglio unione")...
     
    Sub Unione()
    Dim Wks1 As Worksheet, Wks2 As Worksheet, uRigaWks As Long, i As Long
    Dim Sh As Worksheet, uRiga As Long, j As Long
    
    Set Wks1 = Worksheets("Baseline")
    Set Wks2 = ActiveSheet
    
    uRiga = Wks1.Range("A" & Rows.Count).End(xlUp).Row       'ultima riga - solo righe visibili
    'uRiga = Wks1.UsedRange.Rows.Count                       'ultima riga - anche righe nascoste
    Wks2.UsedRange.ClearContents
    
    Wks1.Range("A1:A" & uRiga).Copy
    Wks2.Range("A2:A" & uRiga + 1).PasteSpecial xlPasteValues
    Wks2.Range("A2").Select
    Application.CutCopyMode = False
    uRiga = uRiga + 1
    
    For Each Sh In Worksheets
        If Sh.Name <> Wks1.Name And Sh.Name <> Wks2.Name Then
            With Wks2
                uRigaWks = Sh.Range("A" & Rows.Count).End(xlUp).Row
                'uRigaWks = .UsedRange.Rows.Count
                For i = 2 To uRiga
                    For j = 1 To uRigaWks
                        If .Range("A" & i).Value = Sh.Range("A" & j).Value Then
                            .Range("B" & i).Value = Sh.Range("B" & j).Value
                            GoTo prossimo
                        End If
                    Next j
    prossimo:
                Next i
            End With
        End If
    Next Sh
    MsgBox "Done!"
    
    Set Wks1 = Nothing
    Set Wks2 = Nothing
    End Sub



  • di DiegoR (utente non iscritto) data: 28/04/2016 02:23:38

    wuaaaaaaaa
    Grazie