| | Post: 120 | Registrato il: 13/12/2015
| Città: MILANO | Età: 58 | Utente Junior | 2010 | | OFFLINE | |
|
05/03/2017 16:24 | |
Ciao a tutti,
sono aumentate a dismisura le formule ( fortunatamente anche impianti e addtti ) e alla fine il pc si pianta.
E' possibile a vs. avviso trasformare questa formula in VBA:
=MATR.SOMMA.PRODOTTO((Analisi!$M$2:$M$70000=A8)*(Analisi!$P$2:$P$70000>=Analisi!$D$5)*(Analisi!$P$2:$P$70000<=Analisi!$G$5)*(Analisi!$L$2:$L$70000=$B$6)*(Analisi!$Q$2:$Q$70000>="06:00")*(Analisi!$Q$2:$Q$70000<="14:00")*Analisi!$R$2:$R$70000)
Dove Analisi è il foglio 4 del file e la formula è nel foglio Helper (Foglio2)in posizione B8 ma con piccole differenze arriviamo al mio avviso considerevole numero di 288!!
Dettaglio il tutto:
Analisi!$M$2:$M$70000=A8 -> corrisponde al nome impianto
Analisi!$P$2:$P$70000>=Analisi!$D$5 -> corrisponde alla data iniziale
Analisi!$P$2:$P$70000<=Analisi!$G$5 -> corrisponde alla data finale
Analisi!$L$2:$L$70000=$B$6 -> corrisponde ad una causale impianto
Analisi!$Q$2:$Q$70000>="06:00" -> corrisponde ad inizio turno
Analisi!$Q$2:$Q$70000>="14:00" -> corrisponde al fine turno
Grazie in anticipo per l'eventuale aiuto.
PS Il file contiene troppi dati sensibili ma se necessario allego modificandolo.
[Modificato da BG66 05/03/2017 16:37] BG66
Excel 2010 |
|
| | Post: 3.751 | Registrato il: 13/03/2012
| Città: LIVORNO | Età: 78 | Utente Master | 2010 | | OFFLINE | |
|
06/03/2017 08:36 | |
secondo me dovresti allegare un file di esempio con anche il risultato desiderato e spiegare a parole cosa vuoi ottenere indipendentemente dalla formula attualmente usata.
PS. vedo che sei già assistito da Anthony, sei in buone mani, inutile continuare qui [Modificato da patel45 06/03/2017 08:59]
----------
Win 10 - Excel 2010
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta |
| | Post: 120 | Registrato il: 13/12/2015
| Città: MILANO | Età: 58 | Utente Junior | 2010 | | OFFLINE | |
|
06/03/2017 09:27 | |
Ciao Patel,
allego quanto richiesto.
https://www.dropbox.com/s/lux7eipvgolel6l/Gestione_produzione_Forum.xlsm?dl=0
Il dato atteso è la compilazione del foglio Helper utilizzando i dati presenti nel foglio Analisi
A presto [Modificato da BG66 06/03/2017 09:50] BG66
Excel 2010 |
| | Post: 1.104 | Registrato il: 06/04/2013
| Utente Veteran | 2010 | | OFFLINE |
|
06/03/2017 18:41 | |
Ciao
in definitiva, matr.somma.prodotto, altro non è che l'applicazione di filtri a determinati range.
Pertanto mi sono avvalso, in "Analisi" di 2 colonne di appoggio (col. S e T) inserendo un VERO/FALSO in dipendenza dalla fascia oraria.
Questo perché l'applicazione dei filtri su orari tramite vba è contorta.
La macro scorre il foglio "Helper" acquisendo di riga in riga:
- Macchina
- Causale
- fascia tempo (1,2,3)
oltre naturalmente le due date del foglio "Analisi"
Nota che nell'applicazioni del filtro per tali date ho utilizzato il Format(xxx, "yyyy/mm/dd") in quanto il vba ragiona con tale formato.
E' un po' lentina ma sembra funzionare (ora no so quanti record devi processare, ma tant'è).
Sarebbe da migliorare in quanto una volta applicato i filtri Causale/Macchina è inutile ripeterli per 3 volte....ma sono pigro..
Nel foglio "Helper" c'è il pulsante legato alla macro e sulla destra (fuori dalla tabella) i tuoi valori originali per confronto. Nello stesso foglio ho ripetuto i nomi in riga 6, dagli colore bianco o sistema la macro.
Leggi bene la macro.
saluti
[Modificato da dodo47 07/03/2017 09:22] Domenico
Win 10 - Excel 2016 |
| | Post: 121 | Registrato il: 13/12/2015
| Città: MILANO | Età: 58 | Utente Junior | 2010 | | OFFLINE | |
|
06/03/2017 19:23 | |
Ciao Domenico,
ti ringrazio prima ancora di testarla. ....cosa che peraltro farò immediatamente domattina.
Mi hai tolto da una caterva di casini.
A presto per il RISOLTO.
BG66
Excel 2010 |
| | Post: 1.105 | Registrato il: 06/04/2013
| Utente Veteran | 2010 | | OFFLINE |
|
07/03/2017 09:53 | |
Ciao
[....C U T ....]
EDIT: Ci sono 2 errori:
1) il Field della data è 6 e non 4
2) ho mal interpretato la colonna "Manutenzione", non me ne ero accorto.
Non so se oggi riesco a sistemarla.[Modificato da dodo47 07/03/2017 10:23] Domenico
Win 10 - Excel 2016 |
| | Post: 122 | Registrato il: 13/12/2015
| Città: MILANO | Età: 58 | Utente Junior | 2010 | | OFFLINE | |
|
07/03/2017 10:22 | |
Ciao Domenico,
ho appena finito di testare quella di ieri che tu arrivi con la versione 2...
Un "piccolo" aggiustamento.
Se volessi inserire ed utilizzare le formule in S e T con una apposita macro, io partirei con:
Sub InserisceVeroFalso()
Dim uRiga As Long uRiga = Range("A" & Rows.Count).End(xlUp).Row
'BISOGNA IMPOSTARE UN CICLO PER FARE SCRIVERE LA FORMULA IN OGNI CELLA
For i = 2 To uRiga
..... qui cosa inserire per trasformare le formule??
Next i
End Sub
Grazie se puoi
Per il tuo edit, nel frattempo ci provo io. Entro stasera ti darò riscontro se ci sono riuscito.
Ari-grazie [Modificato da BG66 07/03/2017 10:28] BG66
Excel 2010 |
| | Post: 1.106 | Registrato il: 06/04/2013
| Utente Veteran | 2010 | | OFFLINE |
|
07/03/2017 10:24 | |
Ciao
rileggi il post precedente, è sbagliato. [Modificato da dodo47 07/03/2017 10:25] Domenico
Win 10 - Excel 2016 |
| | Post: 1.107 | Registrato il: 06/04/2013
| Utente Veteran | 2010 | | OFFLINE |
|
07/03/2017 10:38 | |
Ciao
non ti conviene mettere le formule, metti direttamente il risultato.
Ad inizio macro, dopo:
Lr1 = Ws.Range("K" & Rows.Count).End(xlUp).Row
inserisci:
For i = 2 To Lr1
If Cells(i, 17) >= "06:00" And Cells(i, 17) <= "14:00" Then Cells(i, 19) = True Else Cells(i, 19) = False
If Cells(i, 17) >= "14:01" And Cells(i, 17) <= "22:00" Then Cells(i, 20) = True Else Cells(i, 20) = False
Next i
Saluti
[Modificato da dodo47 07/03/2017 10:39] Domenico
Win 10 - Excel 2016 |
| | Post: 345 | Registrato il: 24/06/2015
| Città: CATANIA | Età: 80 | Utente Senior | Excel2019 | | OFFLINE |
|
07/03/2017 11:09 | |
Salve a tutti
@dodo47
scusa Domenico ma non dovrebbe essere così il codice?
For i = 2 To Lr1
If Cells(i, 17) >= "06:00" And Cells(i,18) <= "14:00" Then Cells(i, 19) = True Else Cells(i, 19) = False
If Cells(i, 17) >= "14:01" And Cells(i,18) <= "22:00" Then Cells(i, 20) = True Else Cells(i, 20) = False
Next i
Cioè la parte dopo AND dovrebbe riferirsi alla col.R, o sbaglio
Ciao,
Mario [Modificato da Marius44 07/03/2017 11:10] |
| | Post: 123 | Registrato il: 13/12/2015
| Città: MILANO | Età: 58 | Utente Junior | 2010 | | OFFLINE | |
|
07/03/2017 12:17 | |
Ciao a tutti.
Applicando quanto scritto nel post #9 , ottengo questo:
Cosa sbaglio.
[Modificato da BG66 07/03/2017 12:20] BG66
Excel 2010 |
| | Post: 1.108 | Registrato il: 06/04/2013
| Utente Veteran | 2010 | | OFFLINE |
|
07/03/2017 16:46 | |
Ciao
io sbaglio, ma tu correggi no?....devi fare riferimento al foglio Analisi (Ws).
For i = 2 To Lr1
If Ws.Cells(i, 17) >= "06:00" And Ws.Cells(i, 17) <= "14:00" Then Ws.Cells(i, 19) = True Else Ws.Cells(i, 19) = False
If Ws.Cells(i, 17) >= "14:01" And Ws.Cells(i, 17) <= "22:00" Then Ws.Cells(i, 20) = True Else Ws.Cells(i, 20) = False
Next i
saluti
Domenico
Win 10 - Excel 2016 |
| | Post: 347 | Registrato il: 24/06/2015
| Città: CATANIA | Età: 80 | Utente Senior | Excel2019 | | OFFLINE |
|
07/03/2017 17:15 | |
Buon pomeriggio
Scusa Domenico.
Si, vi sto seguendo ma, evidentemente, in maniera poco attenta. Come sempre, hai ragione tu.
Ciao,
Mario |
| | Post: 1.109 | Registrato il: 06/04/2013
| Utente Veteran | 2010 | | OFFLINE |
|
07/03/2017 17:57 | |
Ciao Mario
in effetti a prima vista, in considerazione che la tabella ha le due colonne, anch'io ho pensato quanto da te detto.
Ma poi guardando la formula di BG66 non ho fatto altro che ripeterla...ora se è giusta o errata lo sa solo lui.
cari saluti
[Modificato da dodo47 07/03/2017 17:58] Domenico
Win 10 - Excel 2016 |
| | Post: 124 | Registrato il: 13/12/2015
| Città: MILANO | Età: 58 | Utente Junior | 2010 | | OFFLINE | |
|
07/03/2017 18:16 | |
[RISOLTO]
Ciao e grazie.
dodo47, 07/03/2017 17.57:
in effetti a prima vista, in considerazione che la tabella ha le due colonne, anch'io ho pensato quanto da te detto.
Ma poi guardando la formula di BG66 non ho fatto altro che ripeterla...ora se è giusta o errata lo sa solo lui.
In merito a quanto sopra, in realtà non ero riuscito ad impostare una formula che tenesse conto che il 3° turno termina alle ore 6.00 del giorno successivo e quindi ho deciso "di girarci intorno", sottraendo al tempo di fermi totali, i tempi di fermo dei turni precedenti.
Alla prossima.
BG66
Excel 2010 |
|
|