Risultati da 1 a 16 di 16

Discussione: Merge celle colonna e Range adiacenti



  1. #1
    L'avatar di jigen
    Clicca e Apri
    Data Registrazione
    Jun 2016
    Località
    Vicenza
    Età
    23
    Messaggi
    30
    Versione Office
    2015
    Likes ricevuti
    0
    Likes dati
    0

    Merge celle colonna e Range adiacenti

    Salve a tutti,

    sono nuovo nell'utilizzo di vb e delle macro excel ma un po' alla volta comincio a prenderci mano.
    Nel mio foglio di calcolo ho la seguente situazione:



    Il codice che ho scritto è il seguente
    Codice: 
    Sub UnisciCelle()
    
        Application.ScreenUpdating = False
        Application.DisplayAlerts = False
    
    
        Dim rngMerge As Range, cell As Range
    
    
        Dim number As Integer
        Dim startRange As Interger
        Dim endRange As Integer
    
    
        Set rngMerge = Range("F1:F3")
        Set rngLeft = Range("A1:E3")
        Set rngRight = Range("G1:L3")
    
    
    MergeAgain:
        For Each cell In rngMerge
            If cell.Value = cell.Offset(1, 0).Value And IsEmpty(cell) = False Then
                Range(cell, cell.Offset(1, 0)).Merge
    
    
                number = cell.Row
    
    
                For Each cellL In rngLeft
                    If cellL.Row = cell.Row And cellL.Row = number And cellL.Value = cellL.Offset(1, 0).Value And IsEmpty(cellL) = False Then
                    Range(cellL, cellL.Offset(1, 0)).Merge
    
    
                    End If
                Next
    
    
                For Each cellR In rngRight
                    If cellR.Row = cell.Row And cellR.Row = number And cellR.Value = cellR.Offset(1, 0).Value And IsEmpty(cellR) = False Then
                    Range(cellR, cellR.Offset(1, 0)).Merge
    
    
                    End If
                Next
    
    
                GoTo MergeAgain
            End If
        Next
    
    
    
    
        Application.DisplayAlerts = True
        Application.ScreenUpdating = True
    
    
    End Sub
    Ciò che sto cercando di fare è controllare ogni cella nella colonna F, se la cella in pos n è uguale a quella in pos n+1 allora fanne il merge, controlla poi se le celle nei range adiacenti (dx/sx) sono uguali (cosa sicura al 100%) e fanne il merge. Così da ottenere le celle unite ed ottenere una riga della stessa altezza, senza intaccare le righe dalla colonna M in poi che dovranno rimanere separate.

    Il risultato è questo:



    Fino a qui sembra funzionare, il problema è quando supero le 200 righe, se il Range è maggiore excel si chiude inaspettatamente.

    Come posso fare?

    Grazie in anticipo.
    File Allegati File Allegati
    Ultima modifica fatta da:jigen; 24/06/16 alle 18:35 Motivo: Allegato

  2. #2
    L'avatar di patel
    Clicca e Apri
    Data Registrazione
    Mar 2016
    Località
    Livorno
    Età
    72
    Messaggi
    1116
    Versione Office
    2010
    Likes ricevuti
    143
    Likes dati
    1

    Re: Merge celle colonna e Range adiacenti

    allega il file

  3. #3
    L'avatar di jigen
    Clicca e Apri
    Data Registrazione
    Jun 2016
    Località
    Vicenza
    Età
    23
    Messaggi
    30
    Versione Office
    2015
    Likes ricevuti
    0
    Likes dati
    0

    Re: Merge celle colonna e Range adiacenti

    Allego il file
    File Allegati File Allegati
    Ultima modifica fatta da:jigen; 24/06/16 alle 18:35 Motivo: Allegato

  4. #4
    L'avatar di patel
    Clicca e Apri
    Data Registrazione
    Mar 2016
    Località
    Livorno
    Età
    72
    Messaggi
    1116
    Versione Office
    2010
    Likes ricevuti
    143
    Likes dati
    1

    Re: Merge celle colonna e Range adiacenti

    le immagini non corrispondono al file allegato

  5. #5

    L'avatar di Rubik72
    Clicca e Apri
    Data Registrazione
    Dec 2015
    Località
    Cosenza
    Età
    45
    Messaggi
    2811
    Versione Office
    Excel 2013
    Likes ricevuti
    1022
    Likes dati
    979

    Re: Merge celle colonna e Range adiacenti

    Ciao a tutti.

    @Patel Le immagini non corrispondono in quanto è già stato usato il Merge e poi tolto quindi rimangono righe vuote in quanto il Merge, unendo le celle, elimina il valore di quella sottostante.

    @jigen non so dirti da cosa dipenda il crash, forse il ciclo entra in loop senza fine e va in crash (ma è solo un ipotesi).
    Ho notato che la routine ha qualche bug in quanto cicla ogni cella ed eventualmente la unisce con quella sottostante se i valori sono uguali, ma se ci sono tre righe con valori uguali la routine ha un difetto in quanto unendo i primi due, cancella il valore della cella sottostante (infatti se si toglie il merge rimane una cella piena e quella sottostante vuota), la seconda volta che controlla i valori vedrà una cella vuota e una piena dunque valori diversi ma in verità sono uguali in quanto cella unita (spero di essermi fatto capire).
    Per questo ho modificato la routine con questa:
    Codice: 
    Sub UnisciCelleRubik()
        Dim i As Integer
        Dim iRow As Long
        Dim aRow As Long
        Dim uRiga As Long
    
    
        Application.ScreenUpdating = False
        Application.DisplayAlerts = False
    
    
    aRow = 1
    iRow = 1
    uRiga = Range("A" & Rows.Count).End(xlUp).Row
    Do Until iRow > uRiga
        Do Until Cells(iRow, 6) <> Cells(iRow + 1, 6)
            iRow = iRow + 1
        Loop
                For i = 1 To 12
                    Range(Cells(aRow, i), Cells(iRow, i)).Merge
                Next
            aRow = iRow + 1
            iRow = iRow + 1
    Loop
    
    
        Application.DisplayAlerts = True
        Application.ScreenUpdating = True
    
    
    End Sub
    prova il file allegato con le due routine (ogni prova su file vale più di mille parole)
    File Allegati File Allegati

  6. I seguenti utenti hanno dato un "Like"


  7. #6
    L'avatar di jigen
    Clicca e Apri
    Data Registrazione
    Jun 2016
    Località
    Vicenza
    Età
    23
    Messaggi
    30
    Versione Office
    2015
    Likes ricevuti
    0
    Likes dati
    0

    Re: Merge celle colonna e Range adiacenti

    @Rubik72

    Ho testato il tuo metodo e funziona egregiamente con la il foglio di lavoro che ho fornito in esempio, ho testato il metodo popolando il foglio con le stesse righe dell'esempio (foo, bar) fino a riempire 4000 righe e funziona egregiamente. Tuttavia ho testato il metodo sul mio foglio di lavoro che funziona con la stessa logica, stessa impostazione di celle e ottengo l'errore:

    Errore di runtime "1004":
    Metodo "Merge" dell'oggetto "Range" non riuscito.

    Preciso che i valori presenti nella colonna F sono nella forma "2016040023", potrebbe essere un valore troppo grande?

    Le uniche differenze con il documento di esempio sono:


    • alcune celle contengono il valore NULL oppure sono vuote
    • le colonne dalla M in poi contengono dei valori (ma queste non devono essere interessate dalla funzione)
    • La prima riga del documento con i dati comincia dalla riga 2 ovvero il primo dato è in posizione A2, questo perché nella riga 1 ho inserito delle intestazioni


    ----------Post unito in automatico----------

    Citazione Originariamente Scritto da Rubik72 Visualizza Messaggio
    Ciao a tutti.

    @Patel Le immagini non corrispondono in quanto è già stato usato il Merge e poi tolto quindi rimangono righe vuote in quanto il Merge, unendo le celle, elimina il valore di quella sottostante.

    @jigen non so dirti da cosa dipenda il crash, forse il ciclo entra in loop senza fine e va in crash (ma è solo un ipotesi).
    Ho notato che la routine ha qualche bug in quanto cicla ogni cella ed eventualmente la unisce con quella sottostante se i valori sono uguali, ma se ci sono tre righe con valori uguali la routine ha un difetto in quanto unendo i primi due, cancella il valore della cella sottostante (infatti se si toglie il merge rimane una cella piena e quella sottostante vuota), la seconda volta che controlla i valori vedrà una cella vuota e una piena dunque valori diversi ma in verità sono uguali in quanto cella unita (spero di essermi fatto capire).
    Per questo ho modificato la routine con questa:
    Codice: 
    Sub UnisciCelleRubik()
        Dim i As Integer
        Dim iRow As Long
        Dim aRow As Long
        Dim uRiga As Long
    
    
        Application.ScreenUpdating = False
        Application.DisplayAlerts = False
    
    
    aRow = 1
    iRow = 1
    uRiga = Range("A" & Rows.Count).End(xlUp).Row
    Do Until iRow > uRiga
        Do Until Cells(iRow, 6) <> Cells(iRow + 1, 6)
            iRow = iRow + 1
        Loop
                For i = 1 To 12
                    Range(Cells(aRow, i), Cells(iRow, i)).Merge
                Next
            aRow = iRow + 1
            iRow = iRow + 1
    Loop
    
    
        Application.DisplayAlerts = True
        Application.ScreenUpdating = True
    
    
    End Sub
    prova il file allegato con le due routine (ogni prova su file vale più di mille parole)
    Ultima modifica fatta da:jigen; 27/06/16 alle 16:22 Motivo: Errore

  8. #7

    L'avatar di Rubik72
    Clicca e Apri
    Data Registrazione
    Dec 2015
    Località
    Cosenza
    Età
    45
    Messaggi
    2811
    Versione Office
    Excel 2013
    Likes ricevuti
    1022
    Likes dati
    979

    Re: Merge celle colonna e Range adiacenti

    Citazione Originariamente Scritto da jigen Visualizza Messaggio
    @Rubik72

    Ho testato il tuo metodo e funziona egregiamente con la il foglio di lavoro che ho fornito in esempio, ho testato il metodo popolando il foglio con le stesse righe dell'esempio (foo, bar) fino a riempire 4000 righe e funziona egregiamente. Tuttavia ho testato il metodo sul mio foglio di lavoro che funziona con la stessa logica, stessa impostazione di celle e ottengo l'errore:

    Errore di runtime "1004":
    Metodo "Merge" dell'oggetto "Range" non riuscito.
    Dovresti aprire l'editor VBA (ALT+F11) e avviare la macro passo/passo (F8) e indicare in quale riga da' l'errore

  9. #8
    L'avatar di jigen
    Clicca e Apri
    Data Registrazione
    Jun 2016
    Località
    Vicenza
    Età
    23
    Messaggi
    30
    Versione Office
    2015
    Likes ricevuti
    0
    Likes dati
    0

    Re: Merge celle colonna e Range adiacenti

    Citazione Originariamente Scritto da Rubik72 Visualizza Messaggio
    Dovresti aprire l'editor VBA (ALT+F11) e avviare la macro passo/passo (F8) e indicare in quale riga da' l'errore
    L'errore è presente in questa riga a quanto pare:

    Codice: 
    For i = 1 To 12
         Range(Cells(aRow, i), Cells(iRow, i)).Merge
    Next
    ----------Post unito in automatico----------

    Citazione Originariamente Scritto da Rubik72 Visualizza Messaggio
    Dovresti aprire l'editor VBA (ALT+F11) e avviare la macro passo/passo (F8) e indicare in quale riga da' l'errore
    Mi correggo dicendo che i valori contenuti nella colonna F sono nella forma 201402210004

    ----------Post unito in automatico----------

    Ti allego il mio file con la macro, così puoi testare tu stesso l'errore
    File Allegati File Allegati

  10. #9

    L'avatar di Rubik72
    Clicca e Apri
    Data Registrazione
    Dec 2015
    Località
    Cosenza
    Età
    45
    Messaggi
    2811
    Versione Office
    Excel 2013
    Likes ricevuti
    1022
    Likes dati
    979

    Re: Merge celle colonna e Range adiacenti

    Ho provato ma a me non da nessun tipo di errore!
    Modifica questa riga e riavvia la macro passo/passo
    Codice: 
                For i = 1 To 12
                    Range(Cells(aRow, i), Cells(iRow, i)).Merge
                    Debug.Print "i=" & i & " aRow="; aRow & " iRow=" & iRow
                Next
    dopo avvia la finestra immediata (CTRL+G) e leggi l'ultima riga di valori

  11. #10
    L'avatar di jigen
    Clicca e Apri
    Data Registrazione
    Jun 2016
    Località
    Vicenza
    Età
    23
    Messaggi
    30
    Versione Office
    2015
    Likes ricevuti
    0
    Likes dati
    0

    Re: Merge celle colonna e Range adiacenti

    Ho provato e non mi esce nulla, (sto utilizzando un macbook).

    Mi sembra molto strano perché proprio quella riga mi causa errore e non riesco a capire a cosa sia dovuto.

    EDIT

    Provando così:

    Codice: 
    For i = 1 To 12
       Debug.Print "i=" & i & " aRow="; aRow & " iRow=" & iRow
       Range(Cells(aRow, i), Cells(iRow, i)).Merge
    Next
    ottengo:

    Codice: 
    i=1 aRow=1 iRow=1
    prima dell'errore

  12. #11

    L'avatar di Rubik72
    Clicca e Apri
    Data Registrazione
    Dec 2015
    Località
    Cosenza
    Età
    45
    Messaggi
    2811
    Versione Office
    Excel 2013
    Likes ricevuti
    1022
    Likes dati
    979

    Re: Merge celle colonna e Range adiacenti

    Forse ci sono. Prova con questa modifica:
    Codice: 
    Sub UnisciCelle()
        Dim i As Long
        Dim iRow As Long
        Dim aRow As Long
        Dim uRiga As Long
    
    
        Application.ScreenUpdating = False
        Application.DisplayAlerts = False
    
    
    aRow = 2
    iRow = 2
    uRiga = Range("A" & Rows.Count).End(xlUp).Row
    Do Until iRow > uRiga
        Do Until Cells(iRow, 6) <> Cells(iRow + 1, 6)
            iRow = iRow + 1
        Loop
        If iRow > aRow Then
            For i = 1 To 12
                Range(Cells(aRow, i), Cells(iRow, i)).Merge
            Next
        End If
        aRow = iRow + 1
        iRow = iRow + 1
    Loop
    
    
        Application.DisplayAlerts = True
        Application.ScreenUpdating = True
    
    
    End Sub

  13. #12
    L'avatar di jigen
    Clicca e Apri
    Data Registrazione
    Jun 2016
    Località
    Vicenza
    Età
    23
    Messaggi
    30
    Versione Office
    2015
    Likes ricevuti
    0
    Likes dati
    0

    Re: Merge celle colonna e Range adiacenti

    @Rubik72 Grazie mille
    Avevo già provato a sostituire i valori di aRow ed iRow settandoli a 2 ma non andava a buon fine lo script. Quel IF ha fatto la differenza.
    Solo per curiosità, non è prioritaria la cosa, la formula Dividi() che utilizzavo prima nello stesso file

    Codice: 
    Sub Dividi()
    Dim myRange As Range
    
    
    Set myRange = Range("A1").CurrentRegion
    With myRange
        .UnMerge
        .SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C"
        .Copy
        .PasteSpecial _
            Paste:=xlPasteValues, _
            Operation:=xlNone, _
            SkipBlanks:=False, _
            Transpose:=False
    End With
    Application.CutCopyMode = False
        
    Set myRange = Nothing
    End Sub
    ora mi sostituisce in tutte le celle in cui era stato fatto il merge proprio il valore "=R[-1]C"

  14. #13

    L'avatar di Rubik72
    Clicca e Apri
    Data Registrazione
    Dec 2015
    Località
    Cosenza
    Età
    45
    Messaggi
    2811
    Versione Office
    Excel 2013
    Likes ricevuti
    1022
    Likes dati
    979

    Re: Merge celle colonna e Range adiacenti

    Bisogna inserire il formato celle a "generale" anziché "testo" e poi avvia la routine

    Inviato dal mio GT-I9301I utilizzando Tapatalk

  15. #14
    L'avatar di jigen
    Clicca e Apri
    Data Registrazione
    Jun 2016
    Località
    Vicenza
    Età
    23
    Messaggi
    30
    Versione Office
    2015
    Likes ricevuti
    0
    Likes dati
    0

    Re: Merge celle colonna e Range adiacenti

    I dati sono importati da un file CSV e quando li importo per evitare errori vari imposto il tutto su testo. Dovrei ricambiarlo dopo l'importazione ma prima del lancio dello script?

  16. #15

    L'avatar di Rubik72
    Clicca e Apri
    Data Registrazione
    Dec 2015
    Località
    Cosenza
    Età
    45
    Messaggi
    2811
    Versione Office
    Excel 2013
    Likes ricevuti
    1022
    Likes dati
    979

    Re: Merge celle colonna e Range adiacenti

    Prima impostare il formato generale (tramite macro, magari avvia il registratore) e poi la routine di "unisci celle"

    Inviato dal mio GT-I9301I utilizzando Tapatalk

  17. #16
    L'avatar di jigen
    Clicca e Apri
    Data Registrazione
    Jun 2016
    Località
    Vicenza
    Età
    23
    Messaggi
    30
    Versione Office
    2015
    Likes ricevuti
    0
    Likes dati
    0

    Re: Merge celle colonna e Range adiacenti

    @Rubik72 Grazie mille, funziona tutto alla perfezione ora

Discussioni Simili

  1. [Risolto] Colorare due celle adiacenti se presente esito in una terza cella.
    Di enzinho nel forum Domande su Excel in generale
    Risposte: 8
    Ultimo Messaggio: 15/03/17, 23:06
  2. [Risolto] Sommare celle adiacenti per gruppo numerosissimo di parole uguali
    Di smiley nel forum Domande su Excel in generale
    Risposte: 6
    Ultimo Messaggio: 06/02/17, 19:27
  3. Risposte: 2
    Ultimo Messaggio: 04/10/16, 19:49
  4. formula su molte celle non adiacenti
    Di bolomanonbolo nel forum Domande su Excel in generale
    Risposte: 5
    Ultimo Messaggio: 25/03/16, 13:59
  5. copia celle dopo un confronto con quelle adiacenti
    Di alex nel forum Domande su Excel in generale
    Risposte: 3
    Ultimo Messaggio: 09/11/15, 13:19

Tag per Questa Discussione

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
  •