| | Post: 29 | Registrato il: 06/02/2017
| Utente Junior | 2016 | | OFFLINE | |
|
02/02/2019 21:08 | |
Salve, chiedo ancora un aiuto, volevo sapere se è possibile utilizzare una macro VBA al posto della funzione per contare numeri pari e dispari e alcune formule di combinazioni di numeri e darne il risultato di fianco alla colonna della combinazione stessa. Per poche righe ho utilizzato le funzioni
=MATR.SOMMA.PRODOTTO((RESTO(A2:E2;2)=0)+0) numeri pari
=MATR.SOMMA.PRODOTTO((RESTO(A2:E2;2)<>0)+0) numeri dispari
formule
=MATR.SOMMA.PRODOTTO((A2:E2>=1)*(A2:E2<17)) numeri inferiori a 17
=MATR.SOMMA.PRODOTTO((A2:E2>=17)*(A2:E2<34)) numeri inferiori a 34
=MATR.SOMMA.PRODOTTO((A2:E2>=34)*(A2:E2<51)) numeri inferiori a 51
esempio: 28 5 12 6 49 3,2 (pari,dispari) 2.1.2 (formula)
ma essendo le righe circa 1 milione che cambiano da settimana a settimana farlo con la funzione si perde molto tempo.
Ringrazio anticipatamente |
|
| | Post: 3.236 | Registrato il: 03/04/2013
| Utente Master | Excel 2000 - 2013 | | OFFLINE | |
|
03/02/2019 07:07 | |
Buona giornata, Antonio; potresti provare con il "Registratore di Macro" oppure potresti utilizzare la Funzione VBA FormulaLocal. Per maggiori dettagli, allega un File (senza Dati sensibili) con alcuni Record significativi già inseriti e chiarisci ciò che desideri ottenere. Buon fine settimana. Giuseppe
Windows XP - Excel 2000
Windows 10 - Excel 2013 |
| | Post: 29 | Registrato il: 06/02/2017
| Utente Junior | 2016 | | OFFLINE | |
|
03/02/2019 17:30 | |
Salve Giuseppe e grazie dell'interessamento ti allego il file di prova, che sono solo 100 righe ma che potrebbero arrivare al 1.000.000. Ho provato con una macro ma mi da errore 13 [Modificato da Antonio Romano.2017 03/02/2019 21:18] |
| | Post: 3.237 | Registrato il: 03/04/2013
| Utente Master | Excel 2000 - 2013 | | OFFLINE | |
|
03/02/2019 21:37 | |
Buona sera, Antonio; domani vedo di fornirti una possibile soluzione. Quello che non ho capito è il risultato in Colonna "J"; da cosa ricavi quel risultato? Buona serata. Giuseppe
Windows XP - Excel 2000
Windows 10 - Excel 2013 |
| | Post: 3.239 | Registrato il: 03/04/2013
| Utente Master | Excel 2000 - 2013 | | OFFLINE | |
|
04/02/2019 08:02 | |
Buona giornata, Antonio;
dai tuoi Codici VBA fedo che la tua intenzione è quella di gestire i calcoli su 1.000.000 di righe, considera che per calcolare i 11.000 Record che ho sintetizzato il tempo di esecuzione è di circa 15 secondi.
Presumo che il tempo di esecuzione rapportato a 1.000.000 di Record sia incredibilmente impegnativo.
Considera che per la gestione di un numero di Record superiore ai 1.500 ÷ 2.000 Record, senza indugio propendo per ACCESS ma questa è una mia scelta molto personale e, come tale, opinabile.
In ogni caso il Codice VBA che ho utilizzato è il seguente:
Sub Elabora_L()
Application.ScreenUpdating = False
Dim Rcd As Long, x As Long
Dim y As Byte
Application.Calculation = xlCalculationManual
Rcd = Range("A" & Rows.Count).End(xlUp).Row
Range(Cells(3, 7), Cells(Rcd, 13)).ClearContents
For x = 3 To Rcd
For y = 1 To 5
Cells(x, 7).Value = Cells(x, 7).Value + Cells(x, y).Value
If Cells(x, y).Value / 2 - Int(Cells(x, y).Value / 2) = 0 Then
Cells(x, 8).Value = Cells(x, 8).Value + 1
Else
Cells(x, 9).Value = Cells(x, 9).Value + 1
End If
If Cells(x, y).Value >= 1 And Cells(x, y).Value < 17 Then Cells(x, 11).Value = Cells(x, 11).Value + 1
If Cells(x, y).Value >= 17 And Cells(x, y).Value < 34 Then Cells(x, 12).Value = Cells(x, 12).Value + 1
If Cells(x, y).Value >= 34 And Cells(x, y).Value < 51 Then Cells(x, 13).Value = Cells(x, 13).Value + 1
Next y
Next x
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Cells(3, 1).Select
End Sub
Buon lavoro.
Giuseppe
Windows XP - Excel 2000
Windows 10 - Excel 2013 |
| | Post: 30 | Registrato il: 06/02/2017
| Utente Junior | 2016 | | OFFLINE | |
|
05/02/2019 17:56 | |
Giuseppe, ti ringrazio della macro, funziona perfettamente e con delle appropriate modifiche l'ho adattata al file originale. Grazie al Forum per dare l'opportunità a chi non è un esperto di poter comunque far fronte alle avvenute esigenze. |
|
|