Risultati da 1 a 4 di 4

Discussione: excel - "compattazione" celle

  1. #1
    New Member
    Data Registrazione
    26-11-2007
    Messaggi
    28

    excel - "compattazione" celle

    Ho questo tipo di necessità:

    Ho una serie di celle (es. da A1 a A10) che possono avere un valore oppure essere vuote (ciascuna può avere un valore oppure essere vuota a seconda di come valorizzo altre celle).
    Vorrei che in un'altra zona del foglio di lavoro (poniamo da B1 a B10) fossero copiate le stesse celle ma solo quelle che hanno valori e non sono vuote, senza lasciare spazi tra una cella e l'altra.
    Provo ad esemplificare:

    sono in questa situazione

    A1 contiene "ciccio"
    A2 contiene "fa"
    A3 contiene
    A4 contiene
    A5 contiene 2
    A6 contiene "pizze"
    A7 contiene "al"
    A8 contiene
    A9 contiene
    A10 contiene "prosciutto"

    voglio che automaticamente vengano valorizzate le celle B1 : B10 come segue

    B1 contiene "ciccio"
    B2 contiene "fa"
    B3 contiene 2
    B4 contiene "pizze"
    B5 contiene "al"
    B6 contiene "prosciutto"
    B7 contiene
    B8 contiene
    B9 contiene
    B10 contiene

    Grazie molte!

  2. #2
    Member
    Data Registrazione
    31-03-2009
    Località
    Friuli
    Messaggi
    89

    questa magia non e' possibile senza qualche colonna di 'appoggio'.
    Ho inserito le colonne A e B prima delle tue. (casomai le nascondi nella versione finale).
    Ho inserito le seguenti formule
    A1 =SE(C1<>"";1;"")
    A2 =SE(C2<>"";MAX($A$1:A1)+1;0)
    --> e la copi fino ad A10

    B1 =SE(A1>0;1;SE(MAX($A$1:$A$10)>0;1;0))
    B2 =SE(B1>0;SE(B1<MAX($A$1:$A$10);B1+1;0);0)
    --> e la copi fino ad B10

    D1 =SE(B1>0;CERCA.VERT(B1;$A$1:$C$10;3;0);"")
    --> e la copi fino a D10

    ti allego una foto del risultato .... compatta.GIF

    ivan

  3. #3
    New Member
    Data Registrazione
    26-11-2007
    Messaggi
    28
    Ti ringrazio! Funziona perfettamente! (non che ci fossero dubbi su questo, piuttosto sulla mia capacità di copincollare! ).

    Già che sei stato così gentile provo ad approfittare ulteriormente...
    Volendo a questo punto creare una macro che selezioni e copi solo le celle valorizzate... Si può fare?
    Grazie, neh!

  4. #4
    Member
    Data Registrazione
    31-03-2009
    Località
    Friuli
    Messaggi
    89
    copiare le sole celle valorizzate .... dipende.
    Se copi quelle che contengono le formule, si crea un gran 'caos' poiche' verrebbero aggiustati i riferimenti.
    Se vuoi copiare e incollare i 'soli valori' lo fai tramite un incolla speciale ...
    Se vuoi il risultato in un unica cella puoi mettere questa formula

    =SE(D1<>""; D1;"") &SE(D2<>"";" "&D2;"")&SE(D3<>"";" "&D3;"")&SE(D4<>"";" "&D4;"")&SE(D5<>"";&D5;"") &SE(D6<>"";" "&D6;"")&SE(D7<>"";" "&D7;"")&SE(D8<>"";" "&D8;"")&SE(D9<>"";" "&D9;"")&SE(D10<>"";" "&D10;"")

    tutta su una riga.

    Se invece vuoi una macro vera in VBA allora devi riuscire a CAPIRE quale è l'ultima cella valorizzata (il valore massimo di colonna 2 oppure colonna 1), registrare una macro manualmente da D1 a D7 (nel nostro esempio) e poi andare in 'modifica' della macro ad aggiustare il riferimento all'ultima riga sostituendo il valore MAX di cui parlavamo prima. Qualcosa del genere (tenendo conto che incollerò i valori copiati in colonna F).

    Codice:
    '---------------------------------------------------------------------------------------
    ' Procedura : CopiaSoloCelleConValore
    ' Autore    : vanSOFTprojects
    ' Data      : 20/03/2013
    ' Scopo     : supporto forum
    ' eMail     : ivan.casa@tin.it
    ' Usata da  :
    ' Chiamate  :
    ' Inputs    :
    ' Output    :
    ' Tipo      : Sub
    '------------------------------------------- vanSOFTprojects ----------------------------
    Sub CopiaSoloCelleConValore()
        Dim rigaMAX As Long
        
        '------- definisco la riga massima
        rigaMAX = Application.WorksheetFunction.Max(Range("A1:A10"))
        
        '------- sostituisco la rigaMAX nelle coordinate di zona
        '-- ... e seleziono
        Range("D1:D" & rigaMAX).Select
        
        '-- copio
        Selection.Copy
        
        '-- seleziono destinazione
        Range("F1").Select
        
        '-- incollo speciale solo Valori
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
    
    End Sub
    Ivan

Tag per Questa Discussione

Segnalibri

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
  •