Sostituzione



  • Sostituzione
    di starlet data: 31/08/2016 12:15:40

    Salve a Tutti, sono nuovo, dilettante,anzi di più!
    Far risolvere il proprio problema nei forum non è elegante, ma sono datato negli anni e Vi chiederò solo una volta di aiutarmi grazie. Posto un esempio. La colonna A (1;1;2;3;3;3) e la colonna B (6;7;8). Vorrei sostituire il valore 1 con 6; il Valore 2 con 7; il valore 3 con 8. Nella realtà la colonna A è formata da 2000 celle e la colonna B di 700. Ho provato con sostituisci + filtri ma mi sembra macchinoso. Si può fare con una funzione ?
    Ancora saluti e grazie



  • di Vecchio Frac data: 31/08/2016 13:58:04

    Con una funzione incorporata non so.
    Propongo due righe di codice.
     
    Option Explicit
    
    Sub find_replace()
    Dim ur As Long, r As Range, v As Variant, s As String, vect() As Variant, i As Long
        ur = Cells(Rows.Count, 1).End(xlUp).Row
        Set r = Range("A1:A" & ur)
        
        ReDim vect(0 To ur - 1)
        For Each v In r.Cells
            vect(i) = v
            i = i + 1
        Next
        
        s = Join(vect, ";")
        
        '-------------------------------------------------
        ' scrivere tutti i replacement che si desiderano
        s = Replace(s, "1", "6")
        s = Replace(s, "2", "7")    
        s = Replace(s, "3", "8")
        '-------------------------------------------------
        
        Range("A1").Resize(ur, 1).Value = Application.Transpose(Split(s, ";"))
    End Sub






  • di totygno71 data: 31/08/2016 19:06:54

    Complimenti VF
    la soluzione di fare una unica stringa per poi manipolarla è sempre molto efficiente... ^_^

    Mi ricordo ancora quel giorno in cui ho perso delle ore per spiegartelo... U_U

    Cucù



  • di scossa data: 31/08/2016 20:57:44

    Ciao,

    propongo una semplificazione al codice di VF (elimino il ciclo For...Next per popolare l'array) ma anche una complicazione per evitare eventuali sostituzioni non volute, in caso di presenza di numeri a più cifre (p.e. sostiture il 2; presente in 12;).

    Resta il fatto che da quello che dice l'o.p.
    cit. starlet: "Nella realtà la colonna A è formata da 2000 celle e la colonna B di 700"

    mi sa che per effettuare 700 sostituzioni nelle 2000 celle bisogna modificare un po' il codice


    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee.
    (George Bernard Shaw)



     
    Sub find_replace()
        Dim ur As Long, r As Range, v As Variant
        Dim s As String, vect As Variant, i As Long
        
        ur = Cells(Rows.Count, 1).End(xlUp).Row
        Set r = Range("A1:A" & ur)
     
        vect = Application.Transpose(r)
        
        s = "#" & Join(vect, "##") & "#"
        
        '-------------------------------------------------
        ' scrivere tutti i replacement che si desiderano
        s = Replace(s, "#1#", "#6#", 1, -1, vbTextCompare)
        s = Replace(s, "#2#", "#7#", 1, -1, vbTextCompare)
        s = Replace(s, "#3#", "#8#", 1, -1, vbTextCompare)
        s = Mid(s, 2, Len(s) - 2)
        '-------------------------------------------------
    
        r.Value = Application.Transpose(Split(s, "##"))
        Set r = Nothing
    End Sub



  • di Vecchio Frac data: 31/08/2016 21:06:37

    cit. "vect = Application.Transpose(r)"
    ---> Uffah ma sì lo sapevo ma non me ne ricordo mai che per appiattire i range devo fare così ^_^

    cit. "bisogna modificare un po' il codice "
    ---> LOL, ma mica bisogna sempre dire tutto... lasciamo il gusto della scoperta anche a chi è "datato negli anni" (cit.) ^_^





  • di Tinco (utente non iscritto) data: 01/09/2016 12:38:41

    Grazie delle risposte,
    Purtroppo non sono in grado di capire e Vi ringrazio sentitamente. Pensavo che ci fosse una formula che inserita nella prima cella delle 2000 e poi trascinata fino alla 2000 potesse risolvere il problema ma mi sembra di capire che bisogna agire su ciascuna cella. Grazie ancora a Tutti.
    Saluti
    Roberto



  • di Raffaele_53 data: 01/09/2016 14:34:20

    Ciao a tutti

    Era meglio se allegavi un file con maggiori spiegazioni
    >>>Vorrei sostituire il valore 1 con 6; il Valore 2 con 7; il valore 3 con 8.
    OK
    >>>Nella realtà la colonna A è formata da 2000 celle e la colonna B di 700.
    OK per la colonna A, invece per la colonna B non capisco
    Ammettiamo che la colonna siano tutte le Opzioni che desideri.
    Ora inserisco due colonne tra A e B
    In C1 metto 1 (se nella cella D1, ex B1) c'è scritto 6
    Altro esempio in C2 metto 2 (se nella cella D2, ex B2) c'è scritto 7
    Altro esempio in C3 metto 3 (se nella cella D3, ex B3) c'è scritto 8
    ecc
    ecc

    A questo punto in cella B1=SE.ERRORE(CERCA.VERT(A1;C$1:D$3;2;FALSO);A1) e trascino giù. Certo che l'area in C:D dovrai modificarla in C$1:D$700 (credo)



  • di tinco (utente non iscritto) data: 01/09/2016 20:18:59

    Salve ho provato a mettere in pratica quello suggerito senza risultato per cui confortato dalla Vs disponibilità
    Vi invio file. Vorrei inserire i valori della colonna L nella colonna F.
    Saluti



  • di Raffaele_53 data: 01/09/2016 20:44:58

    >>>ma sono datato negli anni
    Credo di essere più datato di Te

    Comunque l'esempio l'ho fatto, ora se da colonna A+B passi ad L+F
    Ci può stare, l'unica cosa è spostare un allegato senza fornire ulteriori spiegazioni utili con le "nuove impostazioni"
    Sono vecchio, se mi fai un piccolo esempio "TENTO DI RISPONDERE, COME AL PRIMO POST", dato che NON desideri VBA

    Ps. Desideri cambiare (Prodotti.ID in F) con ???
    Oppure (Prodotti.ID in F) con (Prodotti.ID in K)???
    Magari altro, stà a te la domanda.



  • di Tinco (utente non iscritto) data: 02/09/2016 02:09:51

    Salve e cavolinci , ai proprio ragione, la mia richiesta dire che è poco chiara è un complimento. Allego un secondo file nel quale ho copiato la colonna K in colonna N e quest’ultima l’ho ordinata dal più piccolo solo per far notare che le colonne L e N hanno lo stesso numero di righe ma L (1-749) ha la serie completa mentre N (1-797) mancano dei numeri.
    A questo punto ritornando al mio desiderio è possibile sostituire i valori di F (1911 celle) con quelli di L (749 celle)
    PS nella prossima vita sostituirò il nick in …il contorsionista …per come mi spiego.
    Grazie notte
    Roberto



  • di Raffaele_53 data: 02/09/2016 04:03:27

    Scusami, qualcuno Ti ha richiesto di copiare K in N (ordinandola)

    Comunque post fatto da starlet , risposta da Tinco (io rinuncio nel capire)

    >>>Tinco, sei per caso falso? *****sei, e NOI ci sbattiamo (diletto) per questi



  • di marziotullio (utente non iscritto) data: 02/09/2016 08:25:25

    Buon Giorno

    Ho allegato il file VLscontrini

    Spero che sia quanto richiesto .

    Saluti





  • di tinco (utente non iscritto) data: 02/09/2016 09:49:28

    Mi spiace che Ti abbia fatto credere che sono...
    Peccato, sono autodidatta e uso il PC da pochi anni mi ero lanciato in access e avevo creato 2 tabelle ; scontrini e prodotti. Prodotti era formata da 749 record e 797 ID (cancellati) . Volevo solo esportare la tabella prodotti per eseguire quello che con la Tua Santa pazienza hai risolto.
    Sono stato portato a chiedere ulteriori richieste dalla Tua disponibilità
    Grazie ancora
    Roberto

    PS ho già cliccato il pulsante già risolto non so se ho fatto bene



  • di tinco (utente non iscritto) data: 02/09/2016 09:54:40

    Grazie marziotullio