| | Post: 15 | Registrato il: 15/02/2009
| Città: GENOVA | Età: 38 | Utente Junior | excel 2010 | | OFFLINE | |
|
29/12/2016 16:28 | |
ciao a tutti,
ho un foglio excel con 15 colonne e 10000 righe.. dovrei calcolare la media (solo se positiva) ogni 24 righe.. sono riuscito prendendo spunto qua e la a scrivere una macro che inserisce una riga vuota ogni 24 ma adesso dovrei trovare un sistema per farci scrivere la media dei valori.. qualche idea su come comporre la macro? grazie mille! |
|
| | Post: 291 | Registrato il: 24/06/2015
| Città: CATANIA | Età: 80 | Utente Junior | Excel2019 | | OFFLINE |
|
29/12/2016 16:37 | |
Ciao
Sarebbe utile:
1) vedere almeno la struttura del tuo file
2) sapere come hai fatto ad inserire una riga vuota ogni 24 (si potrebbe intervenire su questa stessa macro per far fare la media)
Forse occorre il tuo file (senza dati sensibili) e magari un po' ridotto.
Ciao,
Mario |
| | Post: 15 | Registrato il: 15/02/2009
| Città: GENOVA | Età: 38 | Utente Junior | excel 2010 | | OFFLINE | |
|
29/12/2016 16:50 | |
grazie per la risposta!
ti allego un estratto.. in pratica la macro sfrutta la prima colonna e al cambiare del giorno inserisce una riga vuota.. ho anche gia predisposto le colonne a fianco in cui si dovrebbero riportare in automatico i valori delle medie delle varie colonne!
spero cosi sia piu chiaro! |
| | Post: 292 | Registrato il: 24/06/2015
| Città: CATANIA | Età: 80 | Utente Junior | Excel2019 | | OFFLINE |
|
29/12/2016 19:04 | |
Ciao
Devi tener presente che la Funzione Average di VBA si ... impappina quando trova delle celle vuote.
Provvedi tu a dichiarare le variabili.
Prova a sostituire la tua macro con la seguente (a me funziona)
Sub CreaRigaE_Media()
Dim UR As Long, X As Long
Application.ScreenUpdating = False
'inserimento riga al variare della data
UR = Cells(Rows.Count, 1).End(xlUp).Row
For X = 2 To UR
If Cells(X, 1) <> Cells(X + 1, 1) And Cells(X, 1) <> "" Then
Cells(X + 1, 1).EntireRow.Insert Shift:=xlDown
End If
Next X
'media dei valori delle colonne (dalla C alla R)
UR = Cells(Rows.Count, 1).End(xlUp).Row
rg1 = 2
For X = 2 To UR
For j = X + 1 To UR
If Cells(j, 1) = "" Then
rg2 = j - 1
For k = 3 To 18
Cells(j, k) = Application.WorksheetFunction.Average(Cells(rg1, k), Cells(rg2, k))
Next k
End If
Next j
rg1 = rg2 + 1
Next X
Application.ScreenUpdating = True
End Sub
Fai sapere. Ciao,
Mario |
| | Post: 16 | Registrato il: 15/02/2009
| Città: GENOVA | Età: 38 | Utente Junior | excel 2010 | | OFFLINE | |
|
30/12/2016 09:02 | |
ciao,
grazie mille per la risposta,
purtroppo spostando la macro sul file originale mi da un errore:
Errore di run-time '1004':
impossibile trovare la proprietà Average per la classe WhoksheetFunction
cosa può essere? |
| | Post: 3.556 | Registrato il: 13/03/2012
| Città: LIVORNO | Età: 78 | Utente Master | 2010 | | OFFLINE | |
|
30/12/2016 12:09 | |
ti da errore perché ci sono parecchi dati con la divisione per zero, puoi risolvere in questo modo
rg1 = 2
On Error Resume Next
For X = 2 To UR
For j = X + 1 To UR
If Cells(j, 1) = "" Then
.......
[Modificato da patel45 30/12/2016 12:10]
----------
Win 10 - Excel 2010
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta |
| | Post: 17 | Registrato il: 15/02/2009
| Città: GENOVA | Età: 38 | Utente Junior | excel 2010 | | OFFLINE | |
|
30/12/2016 12:43 | |
Grazie mille per l'aiuto! |
|
|