Risultati da 1 a 18 di 18

Discussione: Macro Cerca e Rimpiazza in una nuova colonna



  1. #1
    L'avatar di AnnaLioce
    Clicca e Apri
    Data Registrazione
    Mar 2016
    LocalitÓ
    Lecce
    Messaggi
    11
    Versione Office
    2010
    Likes ricevuti
    0
    Likes dati
    0

    Macro Cerca e Rimpiazza in una nuova colonna

    Ciao a tutti,
    e' da un paio di giorni che cerco di risolvere il seguente problema, ma non riesco a trovare una soluzione (ho anche cercato nel forum)

    Ho bisogno che la macro di seguito riportata trovi i valori indicati nella colonna A e li sostituisca con nuovi valori (da me indicati) nella colonna B, lasciando i dati della colonna A inviariati.

    In poche parole:
    Colonna A (valori da lasciare invariati) ---- Colonna B (valori rimpiazzati)
    74111010 -------------------------------------- An2149
    74191070 -------------------------------------- cf4565822
    74191070 -------------------------------------- 105Abcort

    I valori da rimpiazzare sono molti e spesso si ripetono; la macro dovrebbe lavorare in background, senza bisogno di lanciarla manualmente.

    Il seguente codice funziona ma sostituisce i valori nella colonna A, eliminando quindi i dati originali.
    C'e' qualcuno che puo' darmi una mano?
    Grazie in anticipo!


    Codice: 
    Sub Multi_FindReplace()
    Dim sht As Worksheet
    Dim fndList As Variant
    Dim rplcList As Variant
    Dim x As Long
    fndList = Array("74111010", "74191070", "74191070")
    rplcList = Array("An2149", "cf4565822", "105Abcort")
     
    'Loop through each item in Array lists
      For x = LBound(fndList) To UBound(fndList)
        'Loop through each worksheet in ActiveWorkbook
          For Each sht In ActiveWorkbook.Worksheets
            sht.Cells.Replace What:=fndList(x), Replacement:=rplcList(x), _
              LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, _
              SearchFormat:=False, ReplaceFormat:=False
          Next sht
     
      Next x
    End Sub

  2. #2
    L'avatar di Gerardo ZuccalÓ
    Clicca e Apri
    Data Registrazione
    May 2015
    LocalitÓ
    Milano, Italy
    EtÓ
    49
    Messaggi
    4916
    Versione Office
    2013
    Likes ricevuti
    1117
    Likes dati
    1125
    Ciao e benvenuta, prova ad allegare il file (senza dati sensibili) cosi da evitare di riscrivere tutto
    Ciao grazie

  3. #3
    L'avatar di AnnaLioce
    Clicca e Apri
    Data Registrazione
    Mar 2016
    LocalitÓ
    Lecce
    Messaggi
    11
    Versione Office
    2010
    Likes ricevuti
    0
    Likes dati
    0
    Ecco il file di esempio.
    Ho inserito anche la macro che, come potrai vedere, sostituisce i valori della colonna A.
    Anche se faccio "copia e incolla" i valori di A nella colonna B, quando attivo la macro, il VBA mi sostituisce tutti i valori che trova, sia in A che in B (spero di essere stata chiara!)
    File Allegati File Allegati

  4. #4

    L'avatar di scossa
    Clicca e Apri
    Data Registrazione
    Jul 2015
    LocalitÓ
    Verona Provincia
    EtÓ
    57
    Messaggi
    1011
    Versione Office
    .
    Likes ricevuti
    365
    Likes dati
    0
    ... li sostituisca .... lasciando i dati della colonna A inviariati.
    Scusa ma .... o li sostituise o li lascia invariati ????!!!!

    Prova a spiegare meglio quello che vuoi ottenere.

  5. #5
    L'avatar di AnnaLioce
    Clicca e Apri
    Data Registrazione
    Mar 2016
    LocalitÓ
    Lecce
    Messaggi
    11
    Versione Office
    2010
    Likes ricevuti
    0
    Likes dati
    0
    Hai ragione, non e' facile da spiegare.

    In pratica devo:
    - Copiare in B i valori che sono nella colonna A
    - Fare in modo che la macro sostituisca i valori copiati nella sola colonna B
    - lasciare intatta la colonna A

    non so se cosi' e' piu' chiaro

  6. #6

    L'avatar di Rubik72
    Clicca e Apri
    Data Registrazione
    Dec 2015
    LocalitÓ
    Cosenza
    EtÓ
    45
    Messaggi
    2807
    Versione Office
    Excel 2013
    Likes ricevuti
    1020
    Likes dati
    978
    prova cosý se va bene:

    Codice: 
    Sub Multi_FindReplace()
    Dim sht As Worksheet
    Dim fndList As Variant
    'Dim rplcList As Variant
    Dim x As Long
    Dim uRiga As Long, iRow As Long
    
    
    fndList = Array("74111010", "74191070", "74191070")
    'rplcList = Array("An2149", "cf4565822", "105Abcort")
     
    'Loop through each worksheet in ActiveWorkbook
    For Each sht In ActiveWorkbook.Worksheets
        uRiga = sht.Cells(Rows.Count, 1).End(xlUp).Row
        For iRow = 2 To uRiga
            'Loop through each item in Array lists
            For x = LBound(fndList) To UBound(fndList)
                If sht.Cells(iRow, 1).Text = fndList(x) Then
                    sht.Cells(iRow, 2) = sht.Cells(iRow, 1)
                End If
            Next x
        Next iRow
    Next sht
    
    
    Erase fndList
    
    
    End Sub

  7. #7
    L'avatar di AnnaLioce
    Clicca e Apri
    Data Registrazione
    Mar 2016
    LocalitÓ
    Lecce
    Messaggi
    11
    Versione Office
    2010
    Likes ricevuti
    0
    Likes dati
    0
    Provato ma l'unica cosa che fa e' copiare i valori di A in B. Non avviene alcuna sostituizione :(

  8. #8

    L'avatar di Rubik72
    Clicca e Apri
    Data Registrazione
    Dec 2015
    LocalitÓ
    Cosenza
    EtÓ
    45
    Messaggi
    2807
    Versione Office
    Excel 2013
    Likes ricevuti
    1020
    Likes dati
    978
    Citazione Originariamente Scritto da AnnaLioce Visualizza Messaggio
    Provato ma l'unica cosa che fa e' copiare i valori di A in B. Non avviene alcuna sostituizione :(
    GiÓ anche a me sembrava strana come richiesta, ma cosa intendi per "sostituzione". Fai un esempio concreto

  9. #9
    L'avatar di AnnaLioce
    Clicca e Apri
    Data Registrazione
    Mar 2016
    LocalitÓ
    Lecce
    Messaggi
    11
    Versione Office
    2010
    Likes ricevuti
    0
    Likes dati
    0
    Citazione Originariamente Scritto da Rubik72 Visualizza Messaggio
    GiÓ anche a me sembrava strana come richiesta, ma cosa intendi per "sostituzione". Fai un esempio concreto
    Non so come spiegarlo meglio di cosi':

    - nella colonna A ho dei numeri, a cui corrispondono dei codici ben precisi

    Ho bisogno di una macro che mi permetta di inserire i numeri nella colonna A e che faccia apparire automaticamente nella colonna B il codice corrispondente.

    Avevo pensato di fare tutto cio' con la macro find and replace, ma a questo punto non so se sia corretto.

  10. #10

    L'avatar di Rubik72
    Clicca e Apri
    Data Registrazione
    Dec 2015
    LocalitÓ
    Cosenza
    EtÓ
    45
    Messaggi
    2807
    Versione Office
    Excel 2013
    Likes ricevuti
    1020
    Likes dati
    978
    se ho capito bene:
    Codice: 
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim fndList As Variant
    Dim rplcList As Variant
    Dim x As Long
    fndList = Array("74111010", "74191070", "74191070")
    rplcList = Array("An2149", "cf4565822", "105Abcort")
    
    
    Application.EnableEvents = False
    
    
        If Not Intersect(Sheet1.Columns(1), Target) Is Nothing Then
            For x = LBound(fndList) To UBound(fndList)
                If Target.Text = fndList(x) Then
                    Sheet1.Cells(Target.Row, 2) = rplcList(x)
                    Exit Sub
                End If
            Next
        End If
    
    
    Application.EnableEvents = True
    End Sub

  11. #11
    L'avatar di AnnaLioce
    Clicca e Apri
    Data Registrazione
    Mar 2016
    LocalitÓ
    Lecce
    Messaggi
    11
    Versione Office
    2010
    Likes ricevuti
    0
    Likes dati
    0
    Citazione Originariamente Scritto da Rubik72 Visualizza Messaggio
    se ho capito bene:
    Codice: 
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim fndList As Variant
    Dim rplcList As Variant
    Dim x As Long
    fndList = Array("74111010", "74191070", "74191070")
    rplcList = Array("An2149", "cf4565822", "105Abcort")
    
    
    Application.EnableEvents = False
    
    
        If Not Intersect(Sheet1.Columns(1), Target) Is Nothing Then
            For x = LBound(fndList) To UBound(fndList)
                If Target.Text = fndList(x) Then
                    Sheet1.Cells(Target.Row, 2) = rplcList(x)
                    Exit Sub
                End If
            Next
        End If
    
    
    Application.EnableEvents = True
    End Sub

    non so perche' ma non riesco a far partire la macro da te creata. Ho copiato il codice nel foglio corrispondente ma appena premo run, il VBA mi restituisce una finestra popup nella quale si chiede di attribuire un nome. Se lo faccio, mi compare un foglio bianco, oppure inserisce un break dopo il quale, se ricopio il codice, non succede nulla (idem se copio la macro nel workbook e nel modulo).
    Dove sbaglio?
    Perdonatemi ma sono proprio digiuna di queste cose!

  12. #12

    L'avatar di Rubik72
    Clicca e Apri
    Data Registrazione
    Dec 2015
    LocalitÓ
    Cosenza
    EtÓ
    45
    Messaggi
    2807
    Versione Office
    Excel 2013
    Likes ricevuti
    1020
    Likes dati
    978
    Dimenticavo di dire che la routine va copiata nel foglio corrispondente, non in un modulo, e si attiva con l'evento change

    Inviato dal mio GT-I9301I utilizzando Tapatalk

  13. #13
    L'avatar di AnnaLioce
    Clicca e Apri
    Data Registrazione
    Mar 2016
    LocalitÓ
    Lecce
    Messaggi
    11
    Versione Office
    2010
    Likes ricevuti
    0
    Likes dati
    0
    FUNZIONAAAAAA!!!! Grazie mille, sei stato preziosissimo!

    un'ultima cosa: se la colonna corrispondete e' la n. 13 e il foglio il numero 3, mi basta modificare la seguente parte di codice in questo modo?


    Codice: 
     If Not Intersect(Sheet3.Columns(13), Target) Is Nothing Then        
                    For x = LBound(fndList) To UBound(fndList)
                       If Target.Text = fndList(x) Then
                       Sheet1.Cells(Target.Row, 14) = rplcList(x)
                       Exit Sub

  14. #14

    L'avatar di Rubik72
    Clicca e Apri
    Data Registrazione
    Dec 2015
    LocalitÓ
    Cosenza
    EtÓ
    45
    Messaggi
    2807
    Versione Office
    Excel 2013
    Likes ricevuti
    1020
    Likes dati
    978
    Devi cambiare anche Sheets3.cells(target .row, 14)

    Inviato dal mio GT-I9301I utilizzando Tapatalk

  15. #15
    L'avatar di AnnaLioce
    Clicca e Apri
    Data Registrazione
    Mar 2016
    LocalitÓ
    Lecce
    Messaggi
    11
    Versione Office
    2010
    Likes ricevuti
    0
    Likes dati
    0
    Citazione Originariamente Scritto da Rubik72 Visualizza Messaggio
    Devi cambiare anche Sheets3.cells(target .row, 14)

    Inviato dal mio GT-I9301I utilizzando Tapatalk

    grazie mille, avevo provato a cambiare come avevo scritto sopra e nn funzionava.

    Pero' il problema e' che mi funziona una sola volta.

    Per esempio, se nella colonna a inserisco il numero 74111010, ottengo il relativo codice. Se provo a inserirlo nuovamente nelle righe successive, il codice non compare piu'.
    e' possibile mandare in loop il VBA?

  16. #16
    L'avatar di AnnaLioce
    Clicca e Apri
    Data Registrazione
    Mar 2016
    LocalitÓ
    Lecce
    Messaggi
    11
    Versione Office
    2010
    Likes ricevuti
    0
    Likes dati
    0
    Oppure fare in modo che la macro funzioni sempre in background. Con il VBA che mi hai fornito le modifiche avvengono solo se chiudo e riapro il file. Se inserisco piu' di un numero con il file aperto, la macro mi aggiunge il codice solo del primo numero inserito.

  17. #17

    L'avatar di Rubik72
    Clicca e Apri
    Data Registrazione
    Dec 2015
    LocalitÓ
    Cosenza
    EtÓ
    45
    Messaggi
    2807
    Versione Office
    Excel 2013
    Likes ricevuti
    1020
    Likes dati
    978
    ok, trovato il bug.
    Correggi la riga in rosso
    Codice: 
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim fndList As Variant
    Dim rplcList As Variant
    Dim x As Long
    fndList = Array("74111010", "74191070", "74191070")
    rplcList = Array("An2149", "cf4565822", "105Abcort")
    
    
    
    
    Application.EnableEvents = False
    
    
        If Not Intersect(Sheet1.Columns(1), Target) Is Nothing Then
            For x = LBound(fndList) To UBound(fndList)
                If Target.Text = fndList(x) Then
                    Sheet1.Cells(Target.Row, 2) = rplcList(x)
                    Exit For
                End If
            Next
        End If
    
    
    Application.EnableEvents = True
    End Sub

  18. #18
    L'avatar di AnnaLioce
    Clicca e Apri
    Data Registrazione
    Mar 2016
    LocalitÓ
    Lecce
    Messaggi
    11
    Versione Office
    2010
    Likes ricevuti
    0
    Likes dati
    0
    Funziona! Sei un mito, grazie infinite!

Discussioni Simili

  1. Risposte: 9
    Ultimo Messaggio: 30/12/16, 19:41
  2. [Risolto] Macro esporta foglio in una nuova cartella come xps
    Di Antonio1008 nel forum Domande su Excel VBA e MACRO
    Risposte: 3
    Ultimo Messaggio: 13/12/16, 10:57
  3. Risposte: 2
    Ultimo Messaggio: 23/07/16, 18:27
  4. Cerca valori in colonna e restituisci matrice
    Di REMIGIO nel forum Domande su Excel VBA e MACRO
    Risposte: 7
    Ultimo Messaggio: 11/03/16, 16:35
  5. Cerca in colonna
    Di BRAZ66 nel forum Domande su Excel in generale
    Risposte: 5
    Ultimo Messaggio: 11/07/15, 12:55

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •