+ Rispondi al Thread
Visualizzazione dei risultati da 1 a 5 su 5

Discussione: Sostituire valori in colonna con il nome del "gruppo" nel quale rientra il valore.

  1. #1
    sufpolo non è in linea Novello
    Post
    2

    Sostituire valori in colonna con il nome del "gruppo" nel quale rientra il valore.

    Buongiorno, ho sfogliato vari thread nel forum ma non ho ancora trovato uan soluzione "adattabile" al mio caso, spero di non violare le regole del forum.
    Premetto che non ho competenze professionali in termini di vba, tutto cio' che arrivo a fare é dato dall'utilizzo del registratore e dei thread.

    Dunque, la situazione é questa:
    Ho un file "Città", che riporta varie colonne, e supponiamo che "colonna A" sia la colonna su cui voglio lavorare; in questa colonna vengono riportate i nomi delle stazioni di partenza dei viaggiatori, dell'aeroporto etc (milano centrale, malpensa, roma termini, ciampino).
    Quello che dovrei fare é sostituire stazioni, aeroporti etc della stessa città con il nome della città, ad esempio
    Milano Malpensa = Milano
    Milano Centrale = Milano
    Non posso fare un cerca e sostituisci poiché si tratta di troppi casi differenti, quindi avevo pensato di creare un file "Codifica" a parte ove codificare tutte le varie origini possibili con la città di riferimento, dunque due colonne, la prima l'origine, la seconda colonna la città (dunque milano per esempio).
    Fatto questo file pensavo di avviare una macro che, per ogni valore nel file "Città" nella colonna A, controlli nel file "Codifica" colonna A ove si posiziona e, trovata la riga, copi il valore della colonna B (dunque il nome della città ricodificato) nel file "Città", l'obiettivo é ovviamente quello di "pulire" i dati e renderli analizzabili.

    Ho provato una macro, che vi copio di seguito, ove dovevo inserire manualmente i "casi", il problema é che non funzionava con il file in questione, mentre funzionava benissimo con un file da me creato a mano.

    ecco la macro

    codice:
    Sub FindChange()
    
      Dim cella As Range
        For Each cella In Range("BP1:BP3000")
            Dim strCella As String
            strCella = cella.Text
            Dim parole() As String
            parole() = Split(strCella)
            Dim nuovaStr As String
            nuovaStr = ""
            For I = 0 To UBound(parole)
                Select Case parole(I)
                    
                    Case "Tours"
                        parole(I) = "Tours"
                        
                    Case "GARE DU NORD PARIS"
                        parole(I) = "PARIS"
                        
                    Case "LILLE EUROPE"
                        parole(I) = "lille"
                        
                        
                    'Case ...
                    
                End Select
                nuovaStr = nuovaStr & parole(I) & " "
            Next
            cella.FormulaR1C1 = nuovaStr
        Next
    
    End Sub
    Ultima modifica di TheTruster; 07-03-2012 20:13  Motivo: Mancato utilizzo dei tag [CODE][/CODE]

  2. #2
    PaoloTalini non è in linea Scribacchino
    Luogo
    Pontedera (PI)
    Post
    862

    Post

    sufpolo:

    Dopo aver letto il tuo codice ti consiglio:
    1) Leggi / studia il manuale di Excel V BA
    2) Verifica la scrittura e l'uso dell'istruzione 'Select Case'
    Forse volevi scrivere:
    codice:
            Select Case parole(I)
                Case Is = "Tours"
                    parole(I) = "Tours"
                Case Is = "GARE DU NORD PARIS"
                    parole(I) = "PARIS"
                Case Is = "LILLE EUROPE"
                    parole(I) = "lille"
                'Case ...
            End Select
    3) Pensa ad un diverso metodo.

    Quello che dovrei fare é sostituire stazioni, aeroporti etc della stessa città con il nome della città, ad esempio
    Milano Malpensa = Milano
    Milano Centrale = Milano
    Dal mio punto di vista potresti:
    1) Creare un ciclo per trovare il 1° spazio vuoto
    2) Estrarre quindi i dati fino al 1° spazio vuoto
    3) Scrivere i dati estratti in una nuova cella (stessa riga nuova colonna)
    4) Ripetere il punto 1/3 fino alla fine della stringa
    5) Ripetere i punti 1/4 per tutte le righe dell'intervallo scelto.

    Tale procedura necessita di una buona conoscenza di V BA.

    Leggi il regolamento.
    Leggi le discussioni precedenti.
    P. Talini
    __________________________________________________ _______________________________________
    Tutti sanno che una cosa è impossibile da realizzare,
    finché arriva uno sprovveduto che non lo sa e la inventa. (Albert Einstein)

  3. #3
    L'avatar di dodo47
    dodo47 non è in linea Topo di biblioteca
    Post
    3,107
    Ciao
    forse, ribaltando il concetto potresti risolvere nel seguente modo:
    - creare una colonna con il solo nome di tutte le città: Milano, Roma, Napoli ecc ecc
    - poi andare a cercare se tale nome è contenuto nella tua colonna A ed eventualmente sostituirlo.

    Il seguente codice presuppone:
    In col. A (a partire dalla riga 2) le varie stazioni (non ha importanza se il nome della città è all'inizio, in mezzo o alla fine):
    Milano Malpensa
    Milano Centrale
    Roma Termini
    Roma Tuscolana
    ecc...

    in col G (a partire dalla riga 2) le varie città:
    Roma
    Milano
    ecc...

    Tieni presente che il codice riporta in Col "B" il risultato ottenuto, al fine di fare i controlli
    codice:
    Sub FindChange()
    r = 2
    r1 = Range("G2").End(xlDown).Row
    Do Until Cells(r, 1) = ""
        mSearch = Cells(r, 1)
        For x = 2 To Range("G2").End(xlDown).Row
            If InStr(mSearch, Cells(x, 7)) > 0 Then
            Cells(r, 2) = Cells(x, 7)
            Exit For
            End If
        Next
        r = r + 1
    Loop
    End Sub
    saluti

  4. #4
    PaoloTalini non è in linea Scribacchino
    Luogo
    Pontedera (PI)
    Post
    862

    Post

    Domenico:
    Ottimo codice.

    sufpolo :
    Premetto che non ho competenze professionali in termini di vba, tutto cio' che arrivo a fare é dato dall'utilizzo del registratore e dei thread.
    Questo codice ti dà la possibilità di imparare.
    Non ti limitare a copiarlo.
    Domenico ha usato vari metodi e alcune funzioni.
    Leggi il manuale V BA in relazione a quanto scritto.
    P. Talini
    __________________________________________________ _______________________________________
    Tutti sanno che una cosa è impossibile da realizzare,
    finché arriva uno sprovveduto che non lo sa e la inventa. (Albert Einstein)

  5. #5
    sufpolo non è in linea Novello
    Post
    2
    Quote Originariamente inviato da PaoloTalini Visualizza il messaggio
    Domenico:
    Ottimo codice.

    sufpolo :

    Questo codice ti dà la possibilità di imparare.
    Non ti limitare a copiarlo.
    Domenico ha usato vari metodi e alcune funzioni.
    Leggi il manuale V BA in relazione a quanto scritto.
    grazie mille per tutte le risposte, quello che cerco di fare in effetti é di studiare ogni codice che trovo per cercare di capire quali elementi sono stati usati; mi trovo un po' a metà tra 'studiare' e dover trovare delle soluzioni in tempo breve.. insomma pian piano spero di prenderci confidenza.

    Provo il codice e vi faccio sapere

    grazie ancora

+ Rispondi al Thread

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi