Condividi tramite

macro per cercare id specifico tra due fogli e incollare valori da uno all'altro

Anonimo
2013-08-19T16:19:11+00:00

Ciao,

ho 2 fogli:

foglio1:

col1 col2 col3 col4 col5 <br> --- --- --- --- --- <br> pippo as ss formula dddd <br> pluto asd ddsaa formula dddd <br> papero fgghf klsls formula llskdl <br> topolino gdhjg hjkhk formula khall

dove "formula" indica che in nella cella c'è effettivamente già una formula. Nelle altre celle sono valori

foglio 2:

col1 col2 col3 col4 col5 <br> --- --- --- --- --- <br> pippo 1 2 3 4 <br> pluto 5 6 7 8 <br><br><br> <br><br>la col1 di foglio1 e foglio2 mi funge da identificatore unico (id) <br><br> <br><br>In foglio1 e foglio2 esiste una ed una sola riga per ciascun id. <br><br> <br><br>la col1 di foglio2 contiene un sottoinsieme di identificatori rispetto alla col1 del foglio1 <br><br> <br><br>Quello che vorrei fare è una macro che, per ogni "id" di foglio2, cerchi il rispettivo id in foglio1 e mi riporti in quella riga di foglio1 i valori delle celle presi da foglio2. <br><br>Mi servirebbe inoltre che non toccasse la formula di col4 del foglio1. Quindi in sostanza, Che per la tale riga riportasse i valori delle celle in col2, col3 e col5 <br><br> <br><br>Come posso fare? <br><br> <br><br>Grazie per il supporto
Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

  1. Anonimo
    2013-08-19T18:34:34+00:00

    ...

    nel mio esempio,

    per ogni riga (ID) trovata, le celle di col2, col3 e col5 di foglio2 vanno copiate in foglio1 col2, col3 e col5 :)

    ...

    Ciao Carlo,

    la macro inizia la copia dalla riga 2, presupponendo che la prima riga contenga l'intestazione, se, invece, vuoi iniziare dalla prima, modifica la riga evidenziata mettendo A1.

    Andrea.


    Public Sub copiaCelleTraFogli()

    Dim wsSource As Worksheet, wsTarget As Worksheet

    Dim rSource As Range, rTarget As Range, rFind As Range, rCell As Range

    Dim lLastRow As Long

    '---------- personalizza nome fogli di lavoro

    With ThisWorkbook

    Set wsSource = Worksheets("Foglio2")

    Set wsTarget = Worksheets("Foglio1")

    End With

    '---------- indice ricerca

    lLastRow = wsSource.Cells(Rows.Count, "A").End(xlUp).Row

    Set rSource = wsSource.Range("A2:A" & lLastRow)

    For Each rCell In rSource

    '---------- cerca nel foglio destinazione

    Set rFind = wsTarget.Columns(1).Find(rCell.Value)

    If Not rFind Is Nothing Then

    '---------- copia celle

    Set rSource = wsSource.Range("B" & rCell.Row & ":C" & rCell.Row)

    Set rTarget = wsTarget.Range("B" & rFind.Row & ":C" & rFind.Row)

    rSource.Copy rTarget

    Set rSource = wsSource.Range("E" & rCell.Row)

    Set rTarget = wsTarget.Range("E" & rFind.Row)

    rSource.Copy rTarget

    Else

    MsgBox "Attenzione: " & rCell.Value & " non trovato!", vbCritical + vbOKOnly

    End If

    Next

    '---------- cleanup

    Set wsSource = Nothing: Set wsTarget = Nothing

    Set rSource = Nothing:  Set rTarget = Nothing

    Set rFind = Nothing:    Set rCell = Nothing

    End Sub


    La risposta è stata utile?

    0 commenti Nessun commento

8 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2013-08-19T17:54:03+00:00

    ...

    Cosa ne pensi?

    Grazie. Carlo

    Ciao Carlo,

    spiegata in questi termini hai sicuramente ragione tu, si tratta di aggiornare alcune righe.

    Sarebbe utile, ora, individuare esattamente quali celle di ogni riga del foglio2 devono essere copiate ed in quali celle del foglio1.

    Andrea.

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2013-08-19T17:53:53+00:00

    .....

    ho pensato a una macro che cerca in foglio1 tutti e soltanto gli id presenti in foglio2 e aggiorna le relative righe di foglio1

    .....

    Ciao carloHD,

    nell'attesa di nuove risposte per il tuo problema, prova a vedere se questo Thread ti puo' essere d'aiuto.

    Saluti,

    A.

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2013-08-19T17:02:02+00:00

    Ciao Andrea,

    grazie per la tua risposta.

    In effetti con le formule lo so fare ma ti spiego perchè ho pensato che mi serve una macro, ci terrei a sapere cosa ne pensi ;)

    Il Foglio1 dell'esempio ha già tutte le righe pronte a ricevere i relativi dati.

    Ogni riga come hai già capito si distingue in maniera univoca per l'id di col1.

    Il punto critico è il seguente:

    Alcune righe sono già "pronte così come sono" con tutti i dati aggiornati e al loro posto e non necessitano di modifiche, altre righe invece dovranno essere aggiornate dal foglio2.

    Come so quali righe andranno aggiornate? Proprio in base a quali ID sono presenti in col1 di foglio2.

    Dimmi se ho pensato correttamente: se uso una formula indistintamente in ogni riga di foglio1, cancello anche i dati che invece sono già a posto e che per questo non troverò in foglio2.

    Ecco perchè ho pensato a una macro che cerca in foglio1 tutti e soltanto gli id presenti in foglio2 e aggiorna le relative righe di foglio1.

    Cosa ne pensi?

    Grazie. Carlo

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2013-08-19T16:53:46+00:00
    ... <br><br>Quello che vorrei fare è una macro che, per ogni "id" di foglio2, cerchi il rispettivo id in foglio1 e mi riporti in quella riga di foglio1 i valori delle celle presi da foglio2. <br><br>Mi servirebbe inoltre che non toccasse la formula di col4 del foglio1. Quindi in sostanza, Che per la tale riga riportasse i valori delle celle in col2, col3 e col5 <br><br> <br><br>Come posso fare? <br><br> <br><br>Grazie per il supporto

    Ciao Carlo,

    senza ricorre al vba, quello che chiedi è possibile ottenerlo con un due formule.

    Nella cella F2 (immaginando che la prima riga contenga l'intestazione) del foglio2 scrivi:

    =CONFRONTA(A2;Foglio1!A:A;0)              da trascinare in basso

    questa formula restituisce la riga del foglio1 in cui si trova il valore contenuto nella cella A2 del foglio2.

    Ora potrai fare riferimento all'indice di riga così calcolato, per ritrovare i valori che ti servono, contenuti nelle colonne B, C, D ... Nella cella G2, sempre del foglio2, scrivi:

    =INDICE(Foglio1!B:B;Foglio2!$F2)           da trascinare verso destra e in basso quanto serve.

    Andrea.

    La risposta è stata utile?

    0 commenti Nessun commento