Condividi:        

Macro per normalizzare dati

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

Macro per normalizzare dati

Postdi fastbike73 » 30/04/18 09:24

Buongiorno a tutto il forum, mi occorre modificare una macro registrata, salvata su personal.xlsb, che mi permetta di ripulire i file excel che esporto dal programma di statistiche. La macro che ho registrato, la riporto di seguito, al momento fa le seguenti operazioni: seleziona l'intero foglio di lavoro, applica una determinata formattazione al testo, elimina 2 colonne che non servono mai (la seconda e l'ultima) e poi aggiunge una colonna vuota. Vorrei evitare che la macro possa cancellare dati che potrebbero servire e quindi mi occorre renderla più generica... ecco la macro, lateralmente aggiungerò la correzione che vorrei apportare...

Codice: Seleziona tutto
 
Sub Sistema_dati()

' Sistema_dati Macro

    Cells.Select
    Cells.EntireColumn.AutoFit
    With Selection.Font
        .ColorIndex = xlAutomatic
        .TintAndShade = 0
    End With
    With Selection.Interior
        .Pattern = xlNone
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    Selection.Borders(xlEdgeLeft).LineStyle = xlNone
    Selection.Borders(xlEdgeTop).LineStyle = xlNone
    Selection.Borders(xlEdgeBottom).LineStyle = xlNone
    Selection.Borders(xlEdgeRight).LineStyle = xlNone
    Selection.Borders(xlInsideVertical).LineStyle = xlNone
    Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
    Selection.Font.Bold = True
    Selection.Font.Bold = False
    With Selection.Font
        .Name = "Arial"
        .Size = 10
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ColorIndex = xlAutomatic
        .TintAndShade = 0
        .ThemeFont = xlThemeFontNone
    End With
    With Selection.Font
        .Name = "Courier New"
        .Size = 10
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ColorIndex = xlAutomatic
        .TintAndShade = 0
        .ThemeFont = xlThemeFontNone
    End With
    Range("B:B,O:O").Select      'la colonna B andrà sempre rimossa. La colonna O non è detto che sia l'ultima, per questo vorrei che la macro leggesse qual'è l'ultima colonna con valori e la elimini.
    Range("O1").Activate
    Selection.Delete Shift:=xlToLeft
    Range("A2").Select
    Selection.End(xlDown).Select
    ActiveWindow.SmallScroll Down:=18
    Columns("A:A").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    Range("A3").Select
End Sub



Inoltre vorrei che la macro leggesse qual'è l'ultima riga con valori ed eliminasse sia l'ultima riga che la penultima.

Normalmente i dati esportati dal programma occupano le colonne dalla A alla O (prima dell'esecuzione della macro), mentre le righe possono variare ma partono sempre dalla riga 2. E' possibile che all'interno di questo range ci siano delle celle vuote.
Quindi, dopo aver eseguito la formattazione e la eliminazione delle colonne e delle righe che non servono, vorrei, se possibile, inserire nelle celle vuote il valore 0 .
Spero di essere stato abbastanza felice nella spiegazione. Vi ringrazio sin d'ora per il vostro aiuto.

fastbike73
fastbike73
Win 10 & Office365
Filemaker Pro v. 13
fastbike73
Utente Senior
 
Post: 256
Iscritto il: 23/04/14 10:54

Sponsor
 

Re: Macro per normalizzare dati

Postdi Anthony47 » 30/04/18 18:57

La descrizione e' buona, ma sarebbe stato meglio avere anche la descrizione dei dati.

Puoi calcolare quale e' l'ultima Riga utilizzata con questo codice:
Codice: Seleziona tutto
On Error Resume Next
LastR = Range("A:O").Find(What:="*", After:= Range("A1"), _
              SearchOrder:=xlByRows, _
              SearchDirection:=xlPrevious).Row
On Error GoTo 0

Poi per l'ultima colonna:
Codice: Seleziona tutto
    On Error Resume Next
    LastC = Rows("1:" & LastR).Find(What:="*", After:=Range("A1"), _
        Lookat:=xlPart, LookIn:=xlValues, SearchOrder:=xlByColumns, _
        SearchDirection:=xlPrevious, MatchCase:=False).Column
    On Error GoTo 0


Poi nella tua macro:
-calcoli LastR e LastC come detto
-riempi le celle vuote con 0, rimuovi solo la colonna B, cancelli la colonna LastC e cancelli le ultime due righe (poi continui col tuo codice):
Codice: Seleziona tutto
    Range(Range("A2"), Cells(LastR, LastC)).SpecialCells(xlCellTypeBlanks).Value = 0
    Range("B:B").Delete Shift:=xlToLeft
    If LastC > 0 then Columns(LastC).Clear
    Rows(LastR-1 & ":" & LastR).Clear

Queste ultime istruzioni le metterai al posto di
Range("B:B,O:O").Select
Range("O1").Activate
Selection.Delete Shift:=xlToLeft


Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Macro per normalizzare dati

Postdi fastbike73 » 03/05/18 09:57

Buongiorno Anthony ti ringrazio per l'aiuto. Il codice che mi hai suggerito funziona quasi tutto. L'unica cosa che non riesce
è la cancellazione dell'ultima colonna con valori (per intenderci quella che riporta il totale dei valori per ogni singola riga).
Per facilitarti ti allego il file tipo del report che periodicamente estraggo dal programma delle statistiche.

https://www.dropbox.com/s/y55x61tac1gaeoq/Stats.xlsm?dl=0

Ti ringrazio nuovamente per il tuo prezioso aiuto!!!

fastbike73
fastbike73
Win 10 & Office365
Filemaker Pro v. 13
fastbike73
Utente Senior
 
Post: 256
Iscritto il: 23/04/14 10:54

Re: Macro per normalizzare dati

Postdi Anthony47 » 03/05/18 14:58

Grrrr...
E' che l'ordine delle cose da fare è "ovviamente" diverso da quello che ti avevo dato; deve essere:
Codice: Seleziona tutto
    Range(Range("A2"), Cells(LastR, LastC)).SpecialCells(xlCellTypeBlanks).Value = 0
    If LastC > 0 Then Columns(LastC).Clear
    Range("B:B").Delete Shift:=xlToLeft
    Rows(LastR - 1 & ":" & LastR).Clear


Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "Macro per normalizzare dati":


Chi c’è in linea

Visitano il forum: Nessuno e 54 ospiti