Unire celle adiacenti con valore uguale (VBA per Excel)

di il
5 risposte

Unire celle adiacenti con valore uguale (VBA per Excel)

Ciao a tutti,
sto lavorando su un foglio excel (generato da un db di access) che riproduce un semplice grafico Gantt delle attività in corso. In pratica il db analizza gli intervalli di data inizio e fine di ogni attività e, partendo dalla riga (4)del foglio xls , genera "barre" colorate dove ogni cella rappresenta la durata di una settimana. Sulla riga (3) del foglio viene generato il numero di settimana corrispondente ad ogni cella (es. 1;2;3;;;52), mentre sulla riga (2) una stringa contenente il mese e l'anno relativi alla settimana (es. 01/2012;02/2012;03/2012;;;).

Fin qui tutto ok, ma per questioni puramente estetiche e di spazio, vorrei poter unire le celle della riga (2) del foglio xls che hanno lo stesso valore "mese/anno".
La mia difficoltà sta nel fatto che il grafico viene generato da intervalli di date variabili su più anni e che ovviamente i mesi non hanno tutti lo stesso numero di settimane..
Grazie a chiunque saprà darmi suggerimenti.

5 Risposte

  • Re: Unire celle adiacenti con valore uguale (VBA per Excel)

    Vedi se questo esempio ti può aiutare...:

    Scaricalo rinominandolo con estensione ZIP... è un MIRROR...
    in sostanza fa una cosa simile... dentro trovi molto codice... nel tuo caso dei solo gestire il MERGE delle CELLE.
    Il numero di Settimana si ricava dalla data... quindi è indipendente dal mese...!!!!
  • Re: Unire celle adiacenti con valore uguale (VBA per Excel)

    [quote="@Alex"]Vedi se questo esempio ti può aiutare...:

    Scaricalo rinominandolo con estensione ZIP... è un MIRROR...
    in sostanza fa una cosa simile... dentro trovi molto codice... nel tuo caso dei solo gestire il MERGE delle CELLE.
    quote]

    Grazie Alex per la tua risposta, in verità ho utilizzato proprio questa demo adattandola ai miei scopi. So anche quale quale è il comando merge, ma il mio problema è utilizzarlo nel modo giusto, ovvero costruire la condizione che verifica quali settimane rientrano nello stesso mese ( e anno) per poi unire la celle contenenti lo stesso mese.

    [quote="@Alex]Il numero di Settimana si ricava dalla data... quindi è indipendente dal mese...!!!!quote]

    Grazie per la precisazione ma anche questo mi è già chiaro, ho utilizzato appunto le date per estrarre settimana, mese e anno per poi poterli utilizzare come stringhe composte.

    Proverò a lavorare ancora un po' sulle condizioni, nel frattempo grazie ancora
  • Re: Unire celle adiacenti con valore uguale (VBA per Excel)

    Allora non ho capito dove sia il problema...
  • Re: Unire celle adiacenti con valore uguale (VBA per Excel)

    Grazie Alex,
    il problema è che non riesco ad organizzare la costruzione della condizione che, analizzando il range di celle interessato, verifichi se le celle hanno valore uguale e quindi le unisca:
     With .Range(.Cells(2, 3), .Cells(2, TotaleGG)) 'TotaleGG è il numero di colonne 
    
                ' condizione che verifica le celle --da costruire
     
                 .merge 

    Spero che ora il problema sia più chiaro,non ho neppure idea se sia fattibile, nel caso tu avessi qualche idea e volessi condividerla te ne sarei grato.
    Grazie
  • Re: Unire celle adiacenti con valore uguale (VBA per Excel)

    Non ho capito nemmeno ora quale sia la condizione che vorresti applicare... ho riletto il 1° post... provo a proporti una mia idea.

    Vorresti sostanzialmente ottenere l'effetto di Project nella riga del Mese ed ottenere un MERGE sulle celle(che hanno lo stesso MESE/ANNO)

    Se vuoi unire le Celle non puoi ragionare come pensi tu...
    Devi definire a monte il criterio in quanto quando vai a fare il CICLO lo compili a monte il MERGE...
    per questo ti dicevo di vedere bene l'esempio.
    nelle prime righe del codice alla Sub [cmdOpenXLS_Click()] trovi una chiamata al MERGE per creare la RIGA iniziale
    
            With .Range(.Cells(ActRow, 1), .Cells(ActRow, LastColumn))
                .Merge
       .....
            End With
    Come vedi questa riga crea una CELLA in MERGE dalla colonna 1÷ULTIMA
    Ora se tu esegui un CICLO per disegnare le celle ed hai definito che l'unità più piccola è la SETTIMANA, ti sei fregato da solo... perchè una settimana può essere a cavallo di 2 mesi...!

    Devi usare sempre come unità minima il giorno, in quel modo se vuoi aggregare per mese ad ogni STEP del Ciclo, controlli se sei al 1° del mese, ed in quel caso(e solo in quel caso) vai a fare un MERGE nella RIGA(Mesi la 3°) per N celle quanti sono i gg di quel mese...

    questa è la stessa logica con la quale ho disegnato i gg di ferie all'interno del calendario...!
Devi accedere o registrarti per scrivere nel forum
5 risposte