› Excel e gli applicativi Microsoft Office › come confrontare 6 campi e restituire un valore o una stringa
-
AutoreArticoli
-
Le combinazioni della tua matrice sono gia' tutte previste.
Il programma pero' deve sapere il mezzo che fa rifornimento, identificato dalla targa, che tipo di carburante puo' ricevere.
Per questo nel Foglio2 del mio file ho abbinato, a caso, alle targhe il tipo di alimentazione.
Adesso bisogna sostituire i dati del foglio2 con i dati reali, che possono risiedere nello steso file nel FoglioXXXXX, o anche in un file separato.
Capisco che non puoi allegare tale file per motivi di privacy, ma non serve, mi basta sapere la struttura, quindi mi alleghi il file senza dati ma solo con le intestazioni delle colonne, cosi' so', per esempio, che nella colonna A c'e la targa nella colonna B c'e la data di immatricolazione ........ nella colonna Z il tipo di almentazione.
In base a questo modifico i riferimenti nel codice.
Spero di essere stato chiaro, altrimenti chiedi pure.
Ti ringrazio tantissimo Aldo,
in allegato il template su dove io carico il flusso di dati, avendo da controllare circa 10.000 righe al mese mi serve un riscontro immediato per cercare di segnalare le anomali sui rifornimenti tracciati, partendo dall’assioma che ogni motore endotermico è alimentato con un proprio combustibile tranne per i mezzi bi-fuel, ho generato la matrice che ho già pubblicato, tieni presente che il primo foglio quello dove carico il flusso prende il nome di: Rifornimenti il secondo è il vero DB che si collega dinamicamente ad un data base generato in Access chiamato DB.
Allegati:
You must be logged in to view attached files.Scusa ma il file che hai allegato adesso e' completamente diverso da quello con cui ho fatto le prove, qui' e' presente solo una colonna dove viene indicato il tipo di carburante, e non una colonna per ogni tipo di rifornimento, quindi la logica che avevo adoperato non va piu' bene.
Inoltre il template mi sembra di capire che viene popolato in automatico caricando un altro file e non manualmente, quindi va fatto un controllo a posteriori ma non vedo dove scrivere il risultato.
Il primo file che hai postato quindi a cosa serve?
Per favore siamo chiari a descrivere lo scenario di lavoro e quello che si vuole ottenere altrimenti si lavora per niente, tenuto conto che lo facciamo nei ritagli di tempo.
Se puoi spiegarti meglio vedo cosa posso fare.
Scusami Aldo,ti ho caricato il template per farti vedere come vengono incollati i dati scaricati dal portale in formato excel, il file postato in precedenza è il risultato della pivot dei dati importanti e/o incollati. Perdonami, per averti creato confusione, mi va benissimo il controllo eseguito sullo schema che stai utilizzando!
Il file che abbiamo fatto presuppone che tu ridigiti, mezzo per mezzo, tutti i rifornimenti del giorno.........
Avendo gia' un file popolato automaticamente non ha senso rimettersi a ridigitare, anche solo targa e prodotto, per il numero di movimenti che hai.
Si tratta solo sapere con esattezza come lavori e di come sono strutturati i dati per fare quello che serve.
Abbiamo due strade secondo me:
Prima strada:
Utilizzare il file che abbiamo creato come controllo facendoli leggere i dati dal tuo file, che mi devi dire se:
1 E' un file mensile chiamato sempre Rif-MESE-ANNO
oppure hai un unico file con i rifornimenti dell'anno che si chiama .......
2 Nel foglio RIFORNIMENTI il nome prodotto viene scritto sempre nello stesso modo? Se no non saprei come identificare con precisione il prodotto e allora dovremmo passare all'inserimento manuale, se ne vale la pena.
Se si indicami come vengono scritti gli altri prodotti ( metano e GPL sia servito che self e eventualmente le combinazioni per i bifuel).
3 Nel foglio DB come vengono indicate le alimentazioni bifuel Gasolio+Metano e Gasolio+GPL
Per il periodo che scegli di controllare farei scrivere nel file una riga per ogni rifornimento relativo alla targa in cui ci sono dei prodotti non conformi con Data Targa Prodotto Motivo
Seconda Strada:
Se si puo Aggiungerei una colonna CONTROLLO al tuo file e ci inserisco il codice. Aggiungo un pulsante CONTROLLA che avvia il codice.
I punti 2 e 3 mi servono anche in questo caso.
Fammi sapere se ho ben inquadrato le tue esigenze e come vorresti lavorare.
Buonasera Aldo,
ci possiamo scrivere in privato con la promessa che poi renderemo pubblico tutto il lavoro fatto, perché potremmo inserire questa macro in un tool che ho creato, utility di questo tipo sono ricercate e difficile da customizzare?
Ciao,
scusa se ti rspondo solo ora ma ho avuto diversi impegni.
Per quanto riguarda la tua proposta non ci sono problemi, l'unica cosa e' che almeno anche per tutta la prossima settimana avro' poco tempo da dedicare al progetto.
Se non e' un cosa impellente...... SI PUO' FARE (Cit.)
Perfetto Aldo,
Ci aggiorniamo per i primi di ottobre, se in privato mi mandi la tua mail ti comincio a condividere il mio progetto e il flusso tipo.
Scusate ma non trovo piu' i messaggi privati. E' cambiato qualcosa?
Il sistema di messaggistica privata è stato disattivato diverso tempo fa perché risultava oneroso per il sistema o impattava sulle prestazioni. Abbiamo già sollevato ad Admin la questione, vediamo se si riesce a trovare un modo (magari implementando un meccanismo di mailto).
OK Grazie Francesco.
Allora la indico qui la mia mail, tanto non c'e' niente da nascondere:
Abbiamo completato il lavoro che consistito in:
Aggiungere al Foglio DB (L'anagrafico automezzi) i campi relativi ai prodotti che quel specifico automezzo puo' acquistare con la carta.
Per semplicita' d'uso abbiamo inserito, sempre nel foglio DB, un campo Alimentazione collegato ad una tabella collocata nel foglio Legenda. Selezionando il tipo di alimentazione si riempiono i campi tipo prodotto.
Abbiamo fatto una macro che controlla che il prodotto acquistato da un determinato mezzo sia tra quelli consentiti e se non e' conforme colora di giallo la riga relativa al rifornimento.
Il controllo viene fatto in coda agli altri che sono gia' presenti e, tramite apposito pulsante, anche manualmente.
Posto solamente il codice in quanto il foglio e' pieno di dati sensibili, ma e' di facile comprensione.
'--------------------------------------------------------------------------------------------------------------------------------------- ' CONTROLLA SE IL RIFORNIMENTO EFFETTUATO E' CONFORME AI CARBURANTI ABILITATI PER QUEL SPECIFICO MEZZO ' Dim X As String, PrimoIndirizzo As String Dim C As Object Dim T As Object Dim uriga As Long, uriga2 As Long uriga = Sheets("Controllo").Cells(Rows.Count, "C").End(xlUp).Row uriga2 = Sheets("DB").Cells(Rows.Count, "B").End(xlUp).Row For Each C In Sheets("Controllo").Range("C2:C" & uriga) X = C.Value Sheets("DB").Activate Set T = Range("B2:B" & uriga2).Find(X, LookIn:=xlValues, LookAt:=xlWhole) If Not T Is Nothing Then PrimoIndirizzo = T.Address Do T.Cells.Select Set T = Range("B2:B" & uriga2).FindNext(T) Loop While Not T Is Nothing And T.Address <> PrimoIndirizzo Else MsgBox "Targa non Trovata " & C.Value Exit For End If If C.Offset(0, 13).Value = T.Offset(0, 4).Value _ Or C.Offset(0, 13).Value = T.Offset(0, 5).Value _ Or C.Offset(0, 13).Value = T.Offset(0, 6).Value _ Or C.Offset(0, 13).Value = T.Offset(0, 7).Value Then 'C.EntireRow.Interior.Color = RGB(0, 255, 0) Else Sheets("Controllo").Range("A" & C.Row & ":P" & C.Row).Interior.Color = RGB(255, 255, 0) End If Next End Sub Sub ControllaProdotto() Dim X As String, PrimoIndirizzo As String Dim C As Object Dim T As Object Dim uriga As Long, uriga2 As Long Application.ScreenUpdating = False uriga = Sheets("Controllo").Cells(Rows.Count, "C").End(xlUp).Row uriga2 = Sheets("DB").Cells(Rows.Count, "B").End(xlUp).Row Sheets("Controllo").Range("A2:A" & uriga).EntireRow.Interior.ColorIndex = xlNone For Each C In Sheets("Controllo").Range("C2:C" & uriga) X = C.Value Sheets("DB").Activate Set T = Range("B2:B" & uriga2).Find(X, LookIn:=xlValues, LookAt:=xlWhole) If Not T Is Nothing Then PrimoIndirizzo = T.Address Do T.Cells.Select Set T = Range("B2:B" & uriga2).FindNext(T) Loop While Not T Is Nothing And T.Address <> PrimoIndirizzo Else MsgBox "Targa non Trovata " & C.Value Exit For End If If C.Offset(0, 17).Value = T.Offset(0, 4).Value _ Or C.Offset(0, 17).Value = T.Offset(0, 5).Value _ Or C.Offset(0, 17).Value = T.Offset(0, 6).Value _ Or C.Offset(0, 17).Value = T.Offset(0, 7).Value Then 'C.EntireRow.Interior.Color = RGB(0, 255, 0) Else Sheets("Controllo").Range("A" & C.Row & ":P" & C.Row).Interior.Color = RGB(255, 255, 0) End If Next Application.ScreenUpdating = True Sheets("Controllo").Select Range("A2").Select End Sub Private Sub Worksheet_Change(ByVal Target As Range) Dim T As Object Dim uriga As Long, uriga2 As Long Dim PrimaOccorrenza As String, X As String Application.ScreenUpdating = False uriga = Cells(Rows.Count, "A").End(xlUp).Row uriga2 = Sheets("Legenda").Cells(Rows.Count, "F").End(xlUp).Row If Intersect(Target, Range("J2:J" & uriga)) Is Nothing Then Exit Sub End If X = Target.Value Set T = Sheets("Legenda").Range("F2:F" & uriga2).Find(X, LookIn:=xlValues, LookAt:=xlWhole) If Not T Is Nothing Then PrimaOccorrenza = T.Address Sheets("Legenda").Select Do T.Cells.Select Set T = Sheets("Legenda").Range("F2:F" & uriga2).FindNext(T) Loop While Not T Is Nothing And T.Address <> PrimaOccorrenza Else Target.Offset(0, -4).Value = "" Target.Offset(0, -3).Value = "" Target.Offset(0, -2).Value = "" Application.ScreenUpdating = True Sheets("DB").Select Exit Sub End If Target.Offset(0, -4).Value = T.Offset(0, 1).Value Target.Offset(0, -3).Value = T.Offset(0, 3).Value Target.Offset(0, -2).Value = T.Offset(0, 5).Value Application.ScreenUpdating = True Sheets("DB").Select End Sub -
AutoreArticoli
