suddividere celle unite



  • suddividere celle unite
    di brucosta (utente non iscritto) data: 30/09/2012 17:39:13

    Ho una grossa tabella con molte celle singole, ma alcuni gruppi (solo in orizzontale) di celle unite, distribuiti irregolarmente nella tabella stessa. Ciascun gruppo andrebbe diviso e il valore originale incollato in tutte le celle risultanti dalla suddivisione ( non solo la prima)
    Tute le celle sono ottenute da formule di riferimento ad altri fogli, ma posso trasformarle in stringhe con un "Copia-incolla-valori"
    Pensavo di esplorare tutta la tabella con un ciclo for...next in i e j, ma non so come procedere, tra "selection","mergecells" , "unmerge", etc...



  • di HarryBosch data: 01/10/2012 10:30:06

    Ciao Brucosta
    io farei così:
    - converto tutte le celle in valori (ma non sarebbe necessario)
    - assegno la tabella con "Set rng"
    - passo ogni cella della tabella e divido con "Unmerge"
    - se trovo una cella vuota significa che deriva da una precedente divisione, per cui la riempo con il valore della cella precedente

    Ho già preparato una routine di poche righe che fa proprio questo..
    Ma intanto era interessante sapere se avevi provato qualcosa :)



  • di brucosta (utente non iscritto) data: 01/10/2012 13:23:43

    In realtà ci sono già parecchie celle vuote, che però devono restare tali.
    Avevo pensato di inserire, in una prima parte della routine, un riempimento di queste con una voce tipo "vuota", poi splittare quelle unite, riempiendo le vuote risultanti col contenuto delle precedenti, ed infine svuotare quelle con la voce "vuota". Un po' laborioso, ma semplice.
    Essendo però io veramente all'ABC del VBA, saresti così gentile da stilarmi un codice per quanto detto Grazie



  • di HarryBosch data: 01/10/2012 13:59:55

    Se ci sono delle celle vuote, quello che avevo pensato non va più bene, altrimenti ti copia il valore su tutte le vuote che trova.. allora contiamo l'"area" del Merge per determinare da quante celle è composta l'unione...
    Prova il codice sotto, dove ti ho inserito anche i commenti, in modo da renderlo più chiaro
     
    Sub dividi_e_copia()
        Dim rng As Range, cella As Range
        Dim i As Integer, x As Integer
        
        'converto tutte le celle in valori (non necessario)
        With Cells
            .Copy
            .PasteSpecial Paste:=xlPasteValues
        End With
        Application.CutCopyMode = False
    
        Set rng = Range("A1").CurrentRegion
        'per ogni cella della tabella
        For Each cella In rng
            'determino quante celle sono unite
            x = cella.MergeArea.Count
    
            'se la cella è unita allora...
            If cella.MergeCells = True Then
                'divido
                cella.UnMerge
    
                For i = 1 To x - 1
                    'ripoto il valore su tutte le celle divise
                    cella.Offset(0, i) = cella.Value
                Next i
            End If
        Next cella
    End Sub
    



  • di brucosta (utente non iscritto) data: 01/10/2012 14:54:41

    2 sole parole :
    perfetto - grazie



  • di Vecchio Frac data: 01/10/2012 15:19:39

    Per curiosità, provate anche il mio codice, dovrebbe fare la stessa cosa ma ha la pretesa di essere più compatto :)
     
    Sub un_merge()
    Dim c As Range, s As String, r As Range, v As Range
        
        For Each c In ActiveSheet.UsedRange
            If c.MergeCells Then
                s = c.MergeArea(1)
                Set r = c.MergeArea
                c.MergeArea.unmerge
                For Each v In r
                    v = s
                Next
            End If
        Next
    
    End Sub






  • di HarryBosch data: 01/10/2012 23:11:15

    Funzia bene anche quest'ultimo :)