Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

Excel - Normalizzazione dati riempiendo celle vuote

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Excel - Normalizzazione dati riempiendo celle vuote

Postdi Dylan666 » 21/03/11 11:07

Buongiorno,
mi trovo a "normalizzare" una serie di dati Excel fatta in questo modo:
Codice: Seleziona tutto
ID   CODE   NAME
1   54666   Rossi A.
2           Documento
3           Nota
4   85955   Verdi B.
5           Documento
6           Nota
7   74747   Bianchi F.
8           Nota


In pratica il "code" del documento e il "name" invece che essere stati messi in colonna sono stati messi in riga prima di ogni blocco di documenti appartenenti a quella persona.
Quello che io vorrei ottenere alla fine sarebbe questo:

Codice: Seleziona tutto
ID   CODE   NAME      NUOVA_COLONNA
1   54666   Rossi A.   
2   54666   Documento   Rossi A.
3   54666   Nota        Rossi A.
4   85955   Verdi B.   
5   85955   Documento   Verdi B.
6   85955   Nota        Verdi B.
7   74747   Bianchi F.   
8   74747   Nota        Bianchi F.


Quindi, se la colonna "code" (B2) è "piena" copia il valore in tutte le celle sottostanti vuote, finquando non trovi un'altra cella "piena". Per quelle stesse righe si prende anche il valore "NAME" (C2) e lo si incolla nella colonna dopo, cioè in "NUOVA_COLONNA" (D2).
Alla fine potrò anche buttare con dei filtri le righe con ID 1, 4 e 7 che saranno diventate inutili (magari faccio un filtro escludendo le voci con "NUOVA_COLONNA" vuota)

Mi suggerite il codice per farlo?
Grazie in anticipo
Avatar utente
Dylan666
Moderatore
 
Post: 38040
Iscritto il: 18/11/03 16:46

Sponsor
 

Re: Excel - Normalizzazione dati riempiendo celle vuote

Postdi gianc » 21/03/11 11:26

La struttura di questi dati rimarrà sempre uguale o può cambiare?
ovvero, oltre a "Documento" e "Nota", dovrai inserire altri campi?
gianc
Utente Junior
 
Post: 59
Iscritto il: 19/03/11 00:51
Località: Pistoia

Re: Excel - Normalizzazione dati riempiendo celle vuote

Postdi Dylan666 » 21/03/11 11:36

La struttura esiste già, non verrà cambiata, solo normalizzata e poi importata altrove (in mancanza della "coerenza" l'importazione è impossibile).

Certe volte tra un nome e l'altro ci sono 2 documenti (Documento e Nota), altre volte uno solo (Documento) altre volte più di più (Documento, Nota, Pippo,) altrevolte nessuno.

A me interessa che vicino a ogni documento, indipendentemente da quanti siano, compaia il "CODE" che appare subito prima. Tale CODE apparterrà a tutti i documenti che hanno tale cella vuota. Quando la cella CODE cambia, quella deve riempire le celle vuote che ha sotto e così via
Avatar utente
Dylan666
Moderatore
 
Post: 38040
Iscritto il: 18/11/03 16:46

Re: Excel - Normalizzazione dati riempiendo celle vuote

Postdi Dylan666 » 21/03/11 11:53

Diciamo che la prima parte del codice (copia il valore nelle celle vuote sotto) dovrei essere riuscito a scriverlo.
Mi manca la seconda parte: se le cella è piena copia il valore della cella subito a destra; se la cella è vuota incolla il valore due colonne più a destra.

Mi aiutate i questo ultimo passaggio?
Avatar utente
Dylan666
Moderatore
 
Post: 38040
Iscritto il: 18/11/03 16:46

Re: Excel - Normalizzazione dati riempiendo celle vuote

Postdi gianc » 21/03/11 11:59

con una semplice formula risolveresti
ma a quanto ho capito lo vuoi fare tramite codice e purtroppo su quello sono negato
gianc
Utente Junior
 
Post: 59
Iscritto il: 19/03/11 00:51
Località: Pistoia

Re: Excel - Normalizzazione dati riempiendo celle vuote

Postdi Dylan666 » 21/03/11 12:08

Trovato, si usa il parametro Offset

Codice: Seleziona tutto
Range.Offset(0, 1).Select


Così seleziona una colonna più a destra del range dichiarato.
Ora vediamo se riesco a mettere insieme il tutto dato che mi sono reso conto di dover portare 2 valori (NAME e CODE) e farlo col Copia&Incolla richiede un doppio passaggio
Avatar utente
Dylan666
Moderatore
 
Post: 38040
Iscritto il: 18/11/03 16:46

Re: Excel - Normalizzazione dati riempiendo celle vuote

Postdi Dylan666 » 21/03/11 12:47

Dovrei aver risolto, appena ho tempo posto il codice

Ciao!
Avatar utente
Dylan666
Moderatore
 
Post: 38040
Iscritto il: 18/11/03 16:46

Re: Excel - Normalizzazione dati riempiendo celle vuote

Postdi Flash30005 » 21/03/11 14:09

Non so se hai risolto, comunque una macro che "normalizza" quei dati potrebbe essere questa:

Codice: Seleziona tutto
Sub Normalizza()
Ur = Range("A" & Rows.Count).End(xlUp).Row
M_ValN = 0
For RR = 2 To Ur
    ValN = Range("B" & RR).Value
    If ValN = 0 Or ValN = "" Then
        Range("D" & RR).Value = ValS
        ValN = M_ValN
    Else
        ValS = Range("C" & RR).Value
        M_ValN = ValN
    End If
    Range("B" & RR).Value = ValN
Next RR
End Sub


Fai sapere
Ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Excel - Normalizzazione dati riempiendo celle vuote

Postdi Dylan666 » 21/03/11 21:24

Che dono della sintesi!
Io rubacchiando dalla rete non sono riuscito a fare meglio di questo:

Codice: Seleziona tutto
Sub Normalizza()

On Error GoTo RigaErrore

    'dichiaro le variabili
    Dim wk As Workbook
    Dim sh As Worksheet
    Dim rng As Range
    Dim c As Range

    'metto un riferimento al worksbook
    'che contiene il codice
    Set wk = ThisWorkbook

    'metto un riferimento al Foglio1
    With wk
        Set sh = .Worksheets("Foglio1")
    End With

    With sh
        'metto un riferimento al Range
        Set rng = .Range("B1:B26") '
        'ciclo il Range rng
        For Each c In rng
           
            If Len(c.Value) <> 0 Then 'Controlla se la riga non è vuota
            'MsgBox c.Address & " è piena."
              c.Offset(0, 1).Select 'Seleziona il NAME dalla colonna successiva
              Selection.Copy 'Lo copia
              c.Offset(0, 2).Select  'Lo incolla nella NUOVA_COLONNA all'altezza della riga attuale
              ActiveSheet.Paste
              c.Offset(0, 3).Value = "ok" 'scrive OK nella colonna dopo, per poter usare i filtri successivamente               
            Else
            'MsgBox c.Address & " è vuota."
                c.Offset(-1, 0).Select 'Seleziona il CODE della riga precedente
                Selection.Copy 'Taglia il CODE
                c.Select
                ActiveSheet.Paste 'Incolla il CODE
               
                c.Offset(-1, 2).Select 'Seleziona il contenuto di NUOVA_COLONNA della riga precendete
                Selection.Copy
                c.Offset(0, 2).Select  'Lo incolla nella NUOVA_COLONNA all'altezza della riga attuale
                ActiveSheet.Paste

            End If
        Next
    End With

RigaChiusura:
    'Set a Nothing delle variabili oggetto
    Set c = Nothing
    Set rng = Nothing
    Set sh = Nothing
    Set wk = Nothing
    Exit Sub

RigaErrore:
    MsgBox Err.Number & vbNewLine & Err.Description & vbNewLine
    Resume RigaChiusura


End Sub


Grazie per avermi insegnato ancora una volta qualcosa :)
Avatar utente
Dylan666
Moderatore
 
Post: 38040
Iscritto il: 18/11/03 16:46

Re: Excel - Normalizzazione dati riempiendo celle vuote

Postdi Flash30005 » 21/03/11 21:50

La tua macro, non l'ho testata nel suo specifico funzionamento, ma non fa una pecca dal punto di vista della sintassi
sembra uscita da un manuale di informatica (linguaggio VBA)
manuali che non ho mai aperto...
quindi mi devo arrangiare con le poche cose che conosco :D

Ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Excel - Normalizzazione dati riempiendo celle vuote

Postdi Anthony47 » 22/03/11 00:22

Visto che gia' funziona tutto, si puo' ricominciare e fare con formule:
Immagine

Uploaded with ImageShack.us
In E2 e sottostanti =SE(B2="";E1;B2)
In F2 e sottostanti =C2
In G2 e sottostanti =SE(B2="";SCARTO($F$1;CONFRONTA(E2;E:E;0)-1;0);"")

Poi si Copia /Incolla valori in col B-C-D

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13904
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Excel - Normalizzazione dati riempiendo celle vuote

Postdi Dylan666 » 22/03/11 09:22

Le formule vanno bene, il fatto è che dovrei essere io a incollarle manualmente nelle celle vuote e in quelle laterali ma io avevo vari fogli da 2500 righe ciscuno ;)
Avatar utente
Dylan666
Moderatore
 
Post: 38040
Iscritto il: 18/11/03 16:46


Torna a Applicazioni Office Windows


Topic correlati a "Excel - Normalizzazione dati riempiendo celle vuote":


Chi c’è in linea

Visitano il forum: Nessuno e 11 ospiti