automatizzare unione celle

Versione Completa   Stampa   Cerca   Utenti   Iscriviti     Condividi : FacebookTwitter
alvisian
00mercoledì 7 settembre 2016 11:41
Buongiorno a tutti,
sono alla ricerca del vostro aiuto per non dover utilizzare il tasto "unisci celle e allinea al centro" ma trovare un metodo per far sì che nel foglio di calcolo l'operazione venga automatizzata.
Mi spiego.
Ho una tabella che riporta una serie di anomalie, ogni riga rappresenta:
in colonna A il nome del capoarea del collaboratore;
in colonna B il nome del collaboratore;
nelle successive colonne la data, il tipo di anomalia ed altri dati.

Poichè lo stesso capoarea ha alle sue dipendenze più collaboratori, e ogni collaboratore può commettere più di una anomalia, la tabella sarà con più righe aventi lo stesso capoarea, e potranno esserci più righe con lo stesso collaboratore.
Per migliorare la leggibilità dello schema, manualmente unisco tutte le celle che presentano lo stesso valore (es. nome del capoarea, oppure nome del collab.).
Vorrei un metodo che consenta di unire le celle contenenti lo stesso valore in automatico, senza dover ripetere la procedura a mano.
Purtroppo non posso allegare il file perchè contiene parecchi dati sensibili.
Se può essere utile allego un file "fac-simile" molto semplificato, per dare un'idea.

Grazie mille!!

Luca
peppo55.Excel
00mercoledì 7 settembre 2016 13:29
Ciao alvisian,


potresti usare la Tabella Pivot

Marius44
10giovedì 8 settembre 2016 08:46
Ciao alvisian
Prova a guardare il Foglio2 e vedi se è quello che cercavi.
Clicca sul pulsante.
Se aggiungi una riga - sempre in basso, riclicca sul pulsante.

Ho utilizzato il codice seguente
Public uriga As Long

Sub ordina_unisci()
uriga = Cells(Rows.Count, 3).End(xlUp).Row + 1
ele = "A1:D" & uriga
Cells(uriga, 1) = "zz": Cells(uriga, 2) = "zz"
'divide le celle unite in col.A
cln = "A:A"
Call divide(cln)
'divide le celle unite in col.B
cln = "B:B"
Call divide(cln)
'ordina per capo e per collaboratore
Range(ele).Sort Key1:=Range("A1"), Order1:=xlAscending, Key2:=Range("B1"), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
'unisce per capo
Call unione(1)
'unisce per collaboratore
Call unione(2)
Range(Cells(uriga, 1), Cells(uriga, 2)).ClearContents
Cells(1, 1).Select
MsgBox "Fatto!", 0, "Avviso"
End Sub

Sub divide(ByVal cln As String)
Columns(cln).Select
    Selection.UnMerge
    For i = 2 To uriga
        nom1 = Cells(i, cln)
            For j = i + 1 To uriga
            If Cells(j, cln) = "" Then
                Cells(j, cln) = nom1
            Else
                i = j - 1
                Exit For
            End If
        Next j
    Next i
End Sub

Sub unione(ByVal cln As Integer)
For i = 2 To uriga - 1
    nom1 = Cells(i, cln)
    For j = i + 1 To uriga
        nom2 = Cells(j, cln)
        If nom2 = nom1 Then
            GoTo 1
        ElseIf nom1 <> nom2 Or nom2 = "zz" Then
            Range(Cells(i, cln), Cells(j - 1, cln)).Select
            With Selection
                .ClearContents
                .VerticalAlignment = xlCenter
                .Merge
                For Each c In Selection
                    If c.Value = "" Then c.Value = nom1
                    'mette la riga in basso
                    c.Borders(xlEdgeBottom).LineStyle = xlContinuous
                Next c
            End With
            i = j - 1: nom1 = "": nom2 = "": Exit For
        End If
1   Next j
Next i
End Sub


Clicca qui per il file

Prova e fai sapere. Ciao,
Mario
Questa è la versione 'lo-fi' del Forum Per visualizzare la versione completa clicca qui
Tutti gli orari sono GMT+01:00. Adesso sono le 13:53.
Copyright © 2000-2024 FFZ srl - www.freeforumzone.com