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

Discussione: Attivare automaticamente una macro ogni 4 celle.

  1. #1
    Post
    2

    Question Attivare automaticamente una macro ogni 4 celle.

    Salve,
    Innanzitutto vi faccio i complimenti per il Forum e vi ringrazio per l'aiuto che mi avete dato finora.

    Questo è il mio primo post e spero di poter aiutare qualcuno anche io nonostante le mie limitate conoscenze.

    Venendo al dunque... Questo è il mio problema:

    Sto ricopiando all'interno di un file excel dei nominativi presi da internet formattati in questo modo

    CellaA1: Autoxxxx
    CellaA2: indirizzo › Strada Statale xxxx,xx
    CellaA3: comune › Cxxxxx
    CellaA4: telefono › (+39) 0xxxxxxx

    Grazie a questo articolo Unione celle exce senza perdere testo ho risolto il mio problema riguardo alla perdita di dati unendo le celle in un'unica cella.

    Ora, siccome ci sono circa 30.000 nominativi vorrei sapere se c'è un modo di far eseguire la macro sopracitata in maniera automatica

    Ovvero, ad ogni quattro celle, fino alla fine della selezione dei dati, attivare la macro per unire le celle.

    Al momento sto compiendo l'operazione manualmente selezionando 4 celle alla volta e attivando di volta in volta la macro con un comando, capirete da soli che mole di lavoro sia.


    Spero che qualcuno mi possa aiutare o fornire un suggerimento su come poter automatizzare il processo.

    Vi ringrazio

  2. #2
    L'avatar di Zer0Kelvin
    Zer0Kelvin non è in linea Scolaretto
    Luogo
    Teramo - provincia
    Post
    297
    Ciao.
    Tralasciando celle unite e quant'altro, a te serve avere in una cella tutti e 4 i valori che sono in colonna, giusto?
    Se è così questa macro dovrebbe fare al caso tuo
    codice:
    Option Explicit
    
    Sub MettiInFila()
    Dim rigaS As Long, rigaN As Long
    Dim Unione As String
        rigaS = 1
        rigaN = 1
        With ThisWorkbook.Sheets("Foglio1")
            While .Cells(rigaS, 1) <> ""
                With .Cells(rigaS, 1)
                    Unione = ""
                    Unione = Unione & .Offset(0, 0) & " - " & .Offset(1, 0) & " - " & .Offset(2, 0) & " - " & .Offset(3, 0)
                    ThisWorkbook.Sheets("Foglio2").Cells(rigaN, 1) = Unione
                    rigaS = rigaS + 4
                    rigaN = rigaN + 1
                End With
            Wend
        End With
    End Sub
    La macro prende tutti i valori che trova nella colonna A di "Foglio 1", li somma a 4 a 4 e copia la stringa risultante nella colonna A di "Foglio 2".
    Oppure si può facilmente modificare per avere i valori separati in 4 colonne di Foglio 2.
    Ultima modifica di Zer0Kelvin; 17-02-2014 13:03 
    __________________________
    [Excel 2010]
    -Condividere la conoscenza aumenta la ricchezza di tutti. (Z0°K)
    -Dai ad un uomo un e pesce lo avrai sfamato per un giorno; insegnagli a pescare e lo avrai sfamato per sempre. (Confucio)
    -Il sonno della ragione genera mostri. (Francisco Goya)
    -Il sapere non si propaga spontaneamente, l'ignoranza lo fa. (Z0°K)

  3. #3
    genespos non è in linea Scribacchino
    Post
    708
    Ciao Giuseppe,
    innanzi tutto benvenuto nel forum.
    Quanto alla tua richiesta, a prima vista, non pare una cosa complicata come codice.

    Puoi crearti una macro che abbia un ciclo che seleziona partendo dalla cella attiva (così decidi tu dove iniziare) e poi seleziona le celle desiderate.

    Fatto ciò richiami la macro che unisce le celle.

    Per fare questo puoi usare
    codice:
    Cella1 = Activecell.Address
    per avere gli indirizzi delle celle dove ti trovi (ovvero quella iniziale e quella finale) così da comporre il Range da selezionare.

    Per spostarti da una cella all'altra puoi usare
    codice:
    Activecell.Offset(aumenti di Riga, aumenti di Colonna).Activate
    Ricapitolando:
    - parti dalla prima cella che ti interessa e ne estrai l'indirizzo (in una variabile per esempio Cella1)
    Poi in un ciclo For Next:
    - ti sposti fino all'ultima cella da unire con Offset
    - Estrai l'indirizzo dell'ultima cella da unire (in una seconda variabile per esempio Cella2)
    - Selezioni l'intervallo di celle:
    codice:
    Range(Cella1 & ":" & Cella2).Select
    - Richiami la macro che unisce le celle
    - Esegui un nuovo Offset per portatri sulla prima cella del nuovo gruppo
    Qui ripeti il ciclo (next)

    Naturalmente perché funzioni è necessario che gli intervalli siano regolari e, comunque, devi fare un po' di conti per tarare bene gli offset altrimenti viene un pasticcio.

    Comincia a fare qualche prova e rifatti sentire.

    Ciao

    Edit:
    Ciao Zer0Kelvin, scusa scrivevo mentre hai postato.

  4. #4
    Post
    2
    Grazie Zer0Kelvin,
    la soluzione è perfetta per lo scopo.

    Ti ringrazio tanto.

    Grazie Mille anche a genespos per l'aiuto.

    Gentilissimi

  5. #5
    L'avatar di Zer0Kelvin
    Zer0Kelvin non è in linea Scolaretto
    Luogo
    Teramo - provincia
    Post
    297
    Ciao a te e grazie per il riscontro.

    Quote Originariamente inviato da genespos Visualizza il messaggio
    Ciao Zer0Kelvin, scusa scrivevo mentre hai postato.
    Non preoccuparti, succede spesso.


    > Il mio sito <
    __________________________
    [Excel 2010]
    -Condividere la conoscenza aumenta la ricchezza di tutti. (Z0°K)
    -Dai ad un uomo un e pesce lo avrai sfamato per un giorno; insegnagli a pescare e lo avrai sfamato per sempre. (Confucio)
    -Il sonno della ragione genera mostri. (Francisco Goya)
    -Il sapere non si propaga spontaneamente, l'ignoranza lo fa. (Z0°K)

+ 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