Condividi:        

Excel - macro elimina allarmi se ravvicinati

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

Excel - macro elimina allarmi se ravvicinati

Postdi lmanca » 15/03/13 17:03

Buongiorno a tutti.
È la prima volta che scrivo in questo forum e prima di scrivere ho cercato se ci fossero soluzioni simili al mio problema ma non ne ho trovato (anche se qualcuna è vicina).
Ho un foglio di excel che nella stessa colonna contiene una descrizione di allarmi che si vengono a generare in alcuni macchinari.
Cosa accade?
Se nella colonna D (descrizione) c'è la scritta Allarme generale, e nella colonna E (messaggio) ho come scritte "Scivolo X pieno" e consecutivamente "Pallet X pieno", devo eliminare entrambe le righe se la loro distanza temporale presente nella colonna F (gg-mm-aaaa hh:mm:ss) è all'interno di 1 minuto. Questo perchè un allarme genera un altro ma può accadere che "Pallet X pieno" si generi anche da solo ed in quel caso deve rimanere come allarme.
"X" può essere variabile: infatti ci sono parecchi scivoli e parecchi pallet.
Chiaramente a disposizione per tutti i chiarimenti del caso e grazie in anticipo per l'aiuto.
lmanca
Newbie
 
Post: 6
Iscritto il: 15/03/13 16:22

Sponsor
 

Re: Excel - macro elimina allarmi se ravvicinati

Postdi Anthony47 » 17/03/13 02:27

Ciao lmanca, benvenuto nel forum.
Non ti daro' mai una macro che cancella un allarme, che e' un' operazione contraria alla mia idea (forse un po' tedesca) che gli allarmi vanno gestiti e non cancellati.
Tuttavia posso aiutarti a identificare le situazioni che hai descritto:
-in col D c' e' l' eventuale segnalazione Allarme generale
-in col E c' e' l' eventuale idicazione Scivolo X pieno / Pallet X pieno
-in col F c'e' il timestamp (data + ora in formato "data" excel, non stringa)
-gli eventi sono riportati in ordine cresente di timestamp
-in I1 ho inserito la distanza temporale che si vuole esaminare, usando la formula
Codice: Seleziona tutto
=Orario(0;1;0)
per indicare 1 minuto
-ipotizzo che l' elenco sia lungo max 1000 linee
In H2 usa la formula
Codice: Seleziona tutto
=SE(E(--(D2="Allarme generale");--(SINISTRA(E2;7)="Scivolo");--(DESTRA(E2;5)="pieno");SOMMA(--(E2:E$1000=SOSTITUISCI(E2;"Scivolo";"Pallet"))*(F2:F$1000<(F2+$I$1)))>0);SOSTITUISCI(E2;"pieno";"");SE(E(--(D2="Allarme generale");--(SINISTRA(E2;6)="Pallet");--(DESTRA(E2;5)="pieno");SOMMA(--(E$1:E2=SOSTITUISCI(E2;"Pallet";"Scivolo"))*(F$1:F2>(F2-$I$1)))>0);SOSTITUISCI(E2;"pieno";"");""))
Formula da confermare con Contr-Maiusc-Enter, non il solo Enter, e poi da copiare fino a riga 1000
In questo modo avrai l' evidenza di quali segnalazioni Allarme generale-Scivolo X pieno e Allarme generale-Pallet X pieno si succedono nell' arco del limite temporale segnato in I1; ad esempio ti troverai in col H l' indicazione, su righe successive (non necessariamente contigue) Scivolo 10 e Pallet 10.
Cosa fare con questi allarmi lo decidi tu.

Se le righe di allarme fossero piu' di 1000, allora cambia nella formula quei 2 "$1000" con qualcosa di piu' appropriato, es "$5000" o "$10000".

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

Re: Excel - macro elimina allarmi se ravvicinati

Postdi lmanca » 17/03/13 08:57

Ciao Anthony47.
Mille grazie, domani lo provo sicuro!
Riguardo il fatto di cancellare gli allarmi, è semplicemente dovuto al fatto che è un falso allarme che ne genera un altro. Questi allarmi vengono registrati ma la gestione è in automatico, cioè il sistema riprende a funzionare.
Per l'elaborazione successiva che io sto provando a fare, occorre però che questi dati non siano presenti.
Poi una volta fatta la scrematura, dovrò importare il file in database di access, ma quello è pronto....
Grazie ancora
lmanca
Newbie
 
Post: 6
Iscritto il: 15/03/13 16:22

Re: Excel - macro elimina allarmi se ravvicinati

Postdi lmanca » 19/03/13 23:22

Ciao e scusa per il ritardo nella risposta dovuto a problemi di viaggio di lavoro.
Ho provato il tuo codice e ..... FUNZIONA!!!! :) :)
GRAZIE MILLE
Ma, c'è un ma!
Siccome sto comunque facendo una macro, sono arrivato a questo punto:
Codice: Seleziona tutto
Range("H2").Select
       
    Selection.FormulaArray = "=IF(AND(--(RC[-4]=""Allarme gestionale""),--(LEFT(RC[-3],22)=""Scivolo XXXXXXXXXXXXXX""),--(RIGHT(RC[-3],5)=""pieno""),SUM(--(RC[-3]:R1000C[-3]=SUBSTITUTE(RC[-3],""Scivolo XXXXXXXXXXXXXX"",""Pallet XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX""))*(RC[-2]:R1000C[-2]<(RC[-2]+R1C9)))>0),SUBSTITUTE(RC[-3],""pieno"",""""),IF(AND(--(RC[-4]=""Allarme generale""),--(LEFT(RC[-3],46)=""Pallet XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX""),--(RIGHT(RC[-3],5)=""pieno""),SUM(--(R1C[-3]:RC[-3]=SUBSTI" & _
        "-3],""Pallet XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"",""Scivolo XXXXXXXXXXXXXX""))*(R1C[-2]:RC[-2]>(RC[-2]-R1C9)))>0),SUBSTITUTE(RC[-3],""pieno"",""""),""""))"
    Columns("G:G").Select
    Selection.Delete Shift:=xlToLeft
    Range("G2").Select
    With Range("G2")
        .AutoFill Destination:=Range("G2:G" & lRiga), Type:=xlFillDefault
        End With


Per inciso: nel mio primo post ho messo solo le parole Scivolo X pieno e Pallet X pieno, ma le frasi erano più lunghe e quindi qui le ho messe per intero anche se ho comunque nascosto qualcosa.

Il messaggio di errore che mi esce è il seguente:

Errore di run-time '1004':
Impossibile impostare la FormulaArray per la classe Range


Credo sia dovuto al fatto che la FormulaArray ha più di 255 caratteri e quindi per vie normali il sistema non consente di arrivare alla soluzione.
:?:
Ma si può riuscire a scavalcare questo limite di 255?
E se no si può evitare di utilizzare una matrice, utilizzando Formula che non ha limitazioni?
E poi, si può andare in automatico con un .Autofilldestination anche per il numero di righe da considerare o bisogna per forza precisarlo (in questo caso 1000)?[Dico questo perchè i dati vengono prelevati da un file di testo e potrebbero esserci 1000 o più righe ma avendo una macro non posso variare ogni volta.
Una volta fatto questo, cancellare le righe è il problema minore.... ;)
Grazie ancora per l'aiuto e a disposizione per tutti i chiarimenti necessari
Saluti
lmanca
Newbie
 
Post: 6
Iscritto il: 15/03/13 16:22

Re: Excel - macro elimina allarmi se ravvicinati

Postdi Anthony47 » 19/03/13 23:37

255 crt e' un limite di progetto, non si puo' superare.

Puoi valutare di scivere la tua formula a mano in H2, poi copiarla in una cella di servizio.
Quando devi riprenderla nella macro, copierai questa cella (magari assegna un "nome" alla cella) e copiarla in H2:Hxx.

Tipo, se la cella con la formula si chiama "formula":
Codice: Seleziona tutto
Range("formula").copy Destination:=Range("H2").Resize(LastRiga-1,1)

LastRiga contiene l' ultima riga in cui devi inserire la formula; ad esempio, se va bene guardare in colonna A:
Codice: Seleziona tutto
LastRiga=Cells(Rows.count,"A").End(xlup).Row

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

Re: Excel - macro elimina allarmi se ravvicinati

Postdi lmanca » 21/03/13 12:35

Ciao.

Sicuramente sto sbagliando qualcosa ma non riesco a far funzionare la macro anche se credo di aver fatto qualche errore.
Scrivo la formula in H2:
Codice: Seleziona tutto
[b]ActiveCell.FormulaR1C1[/b]= "=IF(AND(--(RC[-4]=""Allarme gestionale""),--(LEFT(RC[-3],22)=""Scivolo XXXXXXXXXXXXXX""),--(RIGHT(RC[-3],5)=""pieno""),SUM(--(RC[-3]:R1000C[-3]=SUBSTITUTE(RC[-3],""Scivolo XXXXXXXXXXXXXX"",""Pallet XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX""))*(RC[-2]:R1000C[-2]<(RC[-2]+R1C9)))>0),SUBSTITUTE(RC[-3],""pieno"",""""),IF(AND(--(RC[-4]=""Allarme generale""),--(LEFT(RC[-3],46)=""Pallet XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX""),--(RIGHT(RC[-3],5)=""pieno""),SUM(--(R1C[-3]:RC[-3]=SUBSTI" & _
        "-3],""Pallet XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"",""Scivolo XXXXXXXXXXXXXX""))*(R1C[-2]:RC[-2]>(RC[-2]-R1C9)))>0),SUBSTITUTE(RC[-3],""pieno"",""""),""""))"


Range("H2").Select
   
    Selection.Cut Destination:=Range("U2")
    Range("U2").Select
    ActiveWorkbook.Names.Add Name:="formula", RefersToR1C1:="=Foglio1!R3C21"
    Application.Goto Reference:="formula"
    Range("U2").Select
    Range("formula").Copy Destination:=Range("H2").Resize(LastRiga - 1, 1)
    LastRiga = Cells(Rows.Count, "A").End(xlUp).Row



Ma con la macro ho sempre lo stesso errore 1004. Dove sto sbagliando?
Grazie ancora.
Ciao
lmanca
Newbie
 
Post: 6
Iscritto il: 15/03/13 16:22

Re: Excel - macro elimina allarmi se ravvicinati

Postdi Anthony47 » 21/03/13 12:55

Invece di farti incrociare gli occhi a capire dove hai sbagliato le virgolette registrati una macro mentre inserisci in H2 la formula che ti interessa, otterrai direttamente il codice che ti serve.

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

Re: Excel - macro elimina allarmi se ravvicinati

Postdi lmanca » 21/03/13 13:55

Il codice che ho inserito " ActiveCell.FormulaR1C1 =" è proprio quello che ho ricavato dalla registrazione della macro utilizzando la formula che avevi scritto tu.
Però mi da errore quando poi applico la macro. :(
lmanca
Newbie
 
Post: 6
Iscritto il: 15/03/13 16:22

Re: Excel - macro elimina allarmi se ravvicinati

Postdi Anthony47 » 21/03/13 22:13

La formula pero' e' palesemente monca, ad esempio la prima riga termina con SUM(--(R1C[-3]:RC[-3]=SUBSTI" & _; probabilmente e' un limite del registratore di macro cosi' come c' e' il limite inverso di soli 255 caratteri.
Pero' se stai seguendo il mio suggerimento, io ho detto di inserire la formula in H2 da tastiera, non da vba (e probabilmente l' hai anche fatto mentre registravi quel codice, a parte che non vedo Contr-Maiusc-Enter); poi fai Contr-C /Contr-V e la copi in una posizione di servizio; da qui poi la macro la prelevera' e la copiera' nell' intervallo che serve.
Probabilmente basta addirittura lasciarla in H2 e poi la copi da li verso il basso con
Codice: Seleziona tutto
Range("H2").copy Destination:=Range("H3").Resize(LastRiga-2,1)


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

Re: Excel - macro elimina allarmi se ravvicinati

Postdi lmanca » 22/03/13 13:58

Scusa. Stavo commettendo un errore ma ora è perfetto.
Grazie mille
lmanca
Newbie
 
Post: 6
Iscritto il: 15/03/13 16:22


Torna a Applicazioni Office Windows


Topic correlati a "Excel - macro elimina allarmi se ravvicinati":


Chi c’è in linea

Visitano il forum: Nessuno e 75 ospiti