Pagina precedente | 1 | Pagina successiva
Vota | Stampa | Notifica email    
Autore

MATRICE SOMMA PRODOTTO in VBA

Ultimo Aggiornamento: 07/03/2017 18:16
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 [SM=g27811] ) 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. [SM=x423025] ....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... [SM=g27811] [SM=g27811]

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

Re:
[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
Vota: 15MediaObject5,00215 2
Amministra Discussione: | Chiudi | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 | Pagina successiva
Nuova Discussione
 | 
Rispondi
Cerca nel forum
Tag discussione
Discussioni Simili   [vedi tutte]
Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Tutti gli orari sono GMT+01:00. Adesso sono le 03:41. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com