Condividi:        

Ricerca in fogli di dati incrociati

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

Ricerca in fogli di dati incrociati

Postdi socrat3 » 11/06/10 11:04

Prima di tutto salve a tutti... spero che possiate aiutarmi con le vostre capacità a risolvere il mio problema.

Ho un certo numero "variabile" di banche dati (2 o 3 o 4 o 100) che contengono dati di utenti. Vorrei rispetto a un valore o combinazione di valori (es. codice fiscale o/e cognome e/o via) sapere se quel dato (o dati cercati) sono presenti o non presenti nelle restanti banche dati. I dati cercati posso essere numeri o lettere o alfanumerici.

Esempio, ho le seguenti banche dati
DB residenti comune
DB catasto
DB consumatori
DB contratti luce
db contratti gas
db contratti acqua

Voglio poter estrarre rispetto al codice fiscale e/o la via di una banca dati presenti nella prima DB (es. quella dei residenti in un comune) i soggetti che sono presenti e non presenti nelle restanti banche dati. Praticamente mi scorro tutta la lista di tutti gli utenti presenti nel foglio (es. db residenti) che ho scelto e dico controlla se Tizio (scelto nel DB residenti) è presente nel DB catasto, nel DB consumatori, nel DB contratti luce, e non presente in db contratti gas, db contratti acqua. E poi a finire per gli altri utenti del DB residenti. Viene data l'informazione il soggetto è presente non presente. La ricerca e il confronto continua per tutte le altre db. Esempio il DB CATASTO per i consumatori rispetto al DB CONSUMATORI. La ricerca deve avvenire sia per l'affermazione (positiva) se presente e (negativva) non presente anche per una porzione di dati inseriti (es. una porzione di cofice fiscale e una porzione di via).

Difficile....? per me si.... spero non per voi

Ho messo dei file dati in excel 2007
http://rapidshare.com/files/397766802/b ... i.zip.html

Grazie
socrat3
Utente Junior
 
Post: 16
Iscritto il: 06/06/10 10:05

Sponsor
 

Re: Ricerca in fogli di dati incrociati

Postdi Anthony47 » 11/06/10 13:31

Ti fai un foglio di ricerca, in col A scrivi il cf dell' utente, nelle colonne adiacenti tramite Se(val.errore(Cerca.vert(cf;banca-dati1;1;0) metti 0 (se "vero", cioe' errore, cioe' assente) 0 1 (se "falso" cioe' presente); per tutte le banche dati che hai.
Una volta ottenuto nelle col B, C, D, etc il flag di presente / assente hai tutti gli elementi per determinare se quel cf ti interessa o no.
Puoi creare diverse sezioni di formule, una per il cf, una per il cognome, etc e poi usi la sezione relativa alla chiave che ti interessa.

Ma se e' un lavoro di massa forse un dbms sarebbe piu' indicato.

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

Re: Ricerca in fogli di dati incrociati

Postdi socrat3 » 11/06/10 16:32

speravo in qualcuno .... grazie

Ho provato ad utilizzare la formula indicata ma nulla non funge...

cmq preferirei il vba... penso che sia piu' flessibile per i miei successivi usi...
socrat3
Utente Junior
 
Post: 16
Iscritto il: 06/06/10 10:05

Re: Ricerca in fogli di dati incrociati

Postdi socrat3 » 11/06/10 18:07

In questo post trovo una parte della soluzione al mio problema

viewtopic.php?f=26&t=86105
grazie
socrat3
Utente Junior
 
Post: 16
Iscritto il: 06/06/10 10:05

Re: Ricerca in fogli di dati incrociati

Postdi Flash30005 » 11/06/10 22:04

Ciao Socrat3 e benvenuto nel Forum

Suppongo (in quanto non precisato) che stai parlando di fogli excel e non access giusto?
Inoltre quelle banhe dati sono nella stessa cartella (file) di excel e in foglio diversi, oppure sono file diversi?

Poi suppongo che ci sia un elenco generale che contiene tutti i contribuenti o nomi
perché solo così potrai assegnare ad ognuno il/i tipo/i di contratto/i
(altrimenti bisognerà realizzare una macro che compili l'elenco generale)

Con il VBA è fattibile ciò che cerchi ma dovresti inviare il/i file
Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Ricerca in fogli di dati incrociati

Postdi socrat3 » 12/06/10 10:22

Speravo in una tua risposta perchè grazie agli interventi dei moderatori sto imparando ed affinando molto del vba per excel.

Stiamo parlando di excel. Anche se access (o database relazionale) sarebbe piu' indicato. Cmq ho excel!

I dati delle banche dati sono in file diversi, ma potrei inserire tutte le banche dati anche nello stesso file excel ma in fogli diversi.
Preferirei usare file diversi per il seguente motivo (prestazioni): la scelta di file diversi è nel non voler far caricare in memoria un file unico grande. Per effettuare il confronto devo utilizzare sempre 2 banche dati la cui dimensione è sempre inferiore rispetto alla sommatoria delle banche dati.

Avevo inserito un file in rapidshare nel primo post con tutti gli esempi.

Tutte le banche dati hanno come elemento unico il CODICE FISCALE o il COGNOME e NOME (attenzione che sono in 2 celle diverse). In pratica in excel devo realizzare quello che in access di realizza con un JOIN (nelle sue tre diverse configurazioni). La scelta è di farlo in excel 2007, poichè ci saranno banche dati superiori a 70.000 righe.

spero di essere stato chiaro nelle specifiche, che riassumo:
1) excel 2007
2) confronto tra tutte le banche dati per codice fiscale o altri campi (cod fiscale e cognome)

spero in voi. grazie
socrat3
Utente Junior
 
Post: 16
Iscritto il: 06/06/10 10:05

Re: Ricerca in fogli di dati incrociati

Postdi socrat3 » 12/06/10 10:27

Flash30005 ha scritto:Ciao Socrat3 e benvenuto nel Forum

Poi suppongo che ci sia un elenco generale che contiene tutti i contribuenti o nomi
perché solo così potrai assegnare ad ognuno il/i tipo/i di contratto/i
(altrimenti bisognerà realizzare una macro che compili l'elenco generale)


Il mio problema è individuare i soggetti che sono presenti e non presenti in una banca dati
socrat3
Utente Junior
 
Post: 16
Iscritto il: 06/06/10 10:05

Re: Ricerca in fogli di dati incrociati

Postdi Anthony47 » 12/06/10 17:53

socrat3 ha scritto:cmq preferirei il vba... penso che sia piu' flessibile per i miei successivi usi...

In questo post trovo una parte della soluzione al mio problema

Questo forse dimostra che per un utente medio e' piu' difficile fare gli aggiustamenti sul vba che non sulle formule.

Ho provato ad utilizzare la formula indicata ma nulla non funge...
Io ti ho solo dato uno spunto; in che formula l' hai tradotto e che risultato hai ottenuto?

Il mio problema è individuare i soggetti che sono presenti e non presenti in una banca dati
Col mio metodo, questo si ottiene applicando il filtro automatico (Menu /Dati /Filtro automatico) all' elenco nuovo contenente i flag 1/0, e filtrando la colonna che vuoi per il valore "0".

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

Re: Ricerca in fogli di dati incrociati

Postdi socrat3 » 13/06/10 22:31

Voglio utilizzare il VBa perchè lo reputo piu' flessibile per il lavoro che voglio sviluppare e poi ritengo che così miglioro la mia tecnica nella programmazione.

In ogni caso ho cercato in lungo e largo per l'impostazione efficace di una formula che potesse permettermi di sapere:

I codici fiscali unici sia di a
=SE(INDIRETTO(INDIRIZZO(RIF.RIGA();RIF.COLONNA(Range1)))="";"";SE(CONTA.SE( INDIRETTO(INDIRIZZO(RIF.RIGA(Range1);RIF.COLONNA(Range1);2)&":"&INDIRIZZO(RIF.RIGA();RIF.COLONNA(Range1);4));SCARTO(Range1;RIF.RIGA()-RIF.RIGA(Range1);0))>1;"";SCARTO(Range1;RIF.RIGA()-RIF.RIGA(Range1);0)))

e di b
=SE(INDIRETTO(INDIRIZZO(RIF.RIGA();RIF.COLONNA(Range2)))="";"";SE(CONTA.SE( INDIRETTO(INDIRIZZO(RIF.RIGA(Range2);RIF.COLONNA(Range2);2)&":"&INDIRIZZO(RIF.RIGA();RIF.COLONNA(Range2);4));SCARTO(Range2;RIF.RIGA()-RIF.RIGA(Range2);0))>1;"";SCARTO(Range2;RIF.RIGA()-RIF.RIGA(Range2);0)))


I codici fiscali presenti in a e b
=SE(E(CONTA.SE(INDIRETTO(INDIRIZZO(RIF.RIGA(Range2);RIF.COLONNA(Range2);2)&":"&INDIRIZZO(RIF.RIGA();RIF.COLONNA(Range2);4));INDIRETTO(INDIRIZZO(RIF.RIGA();RIF.COLONNA(Range2);4)))=1;CONTA.SE(Range1;INDIRETTO(INDIRIZZO(RIF.RIGA();RIF.COLONNA(Range2);4)))>0);INDIRETTO(INDIRIZZO(RIF.RIGA();RIF.COLONNA(Range2);4));"")

I codici fiscali presenti in a e non presenti in b
=SE(INDIRETTO(INDIRIZZO(RIF.RIGA();RIF.COLONNA(Range1)))="";"";SE(CONTA.SE(Range2;INDIRETTO(INDIRIZZO(RIF.RIGA();RIF.COLONNA(Range1);4)))=0;INDIRETTO(INDIRIZZO(RIF.RIGA();RIF.COLONNA(Range1);4));""))

I codici fiscali non presenti in a e presenti b
=SE(INDIRETTO(INDIRIZZO(RIF.RIGA();RIF.COLONNA(Range2)))="";"";SE(CONTA.SE(Range1;INDIRETTO(INDIRIZZO(RIF.RIGA();RIF.COLONNA(Range2);4)))=0;INDIRETTO(INDIRIZZO(RIF.RIGA();RIF.COLONNA(Range2);4));""))

I range1 e range2 sono un insieme di celle che individuano unicamente a e b

Mi date uno spunto col VBA?
socrat3
Utente Junior
 
Post: 16
Iscritto il: 06/06/10 10:05

Re: Ricerca in fogli di dati incrociati

Postdi Flash30005 » 14/06/10 02:00

Ho realizzato questa macro:

Codice: Seleziona tutto
Sub CompilaElenco()
Application.ScreenUpdating = False
Application.Calculation = xlManual
URE = Worksheets("Elenco").Range("A" & Rows.Count).End(xlUp).Row
If URE < 2 Then URE = 2
Worksheets("Elenco").Range("A2:I" & URE).ClearContents
For Each ws In Worksheets
    If ws.Name <> "Elenco" Then
        URF = Sheets(ws.Name).Range("A" & Rows.Count).End(xlUp).Row
        For RR = 2 To URF
            CF = Sheets(ws.Name).Range("A" & RR).Value
            URE = Worksheets("Elenco").Range("A" & Rows.Count).End(xlUp).Row
            Trovato = 0
            For RE = 1 To URE
                CFE = Worksheets("Elenco").Range("A" & RE).Value
                If CFE = CF Then
                Trovato = 1
                GoTo salta
                End If
            Next RE
            Worksheets(ws.Name).Range("A" & RR & ":E" & RR).Copy Destination:=Worksheets("Elenco").Range("A" & URE + 1)
If Trovato = 0 Then
For CC = 6 To 9
    If Cells(1, CC).Value = ws.Name Then
        Cells(RE, CC).Value = "SI"
    End If
Next CC
End If
salta:
If Trovato = 1 Then
For CC = 6 To 9
    If Cells(1, CC).Value = ws.Name Then
        Cells(RE, CC).Value = "SI"
    End If
Next CC
End If
        Next RR
    End If
Next ws
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub

Che prevede tutti i dati in un unico file
Con 5 fogli (ELENCO, CATASTO, RESIDENTI, LUCE, ACQUA)
Inoltre, nel foglio "Elenco", nella riga 1 (testata) delle colonne F, G, H, I dovranno essere scritti rispettivamente i seguenti nomi
"CATASTO", "RESIDENTI", "LUCE", "ACQUA"

invio anche questo file

Fai sapere
Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Ricerca in fogli di dati incrociati

Postdi socrat3 » 14/06/10 10:07

Mi viene da piangere. grazie se fai delle video lezioni batti un colpo!

Funziona funziona funziona!!!!! :D

Uffa sono disoccupato! Il mio datore di lavoro se becca questa script mi manda a casa! :) :D :lol: :roll: :undecided:
socrat3
Utente Junior
 
Post: 16
Iscritto il: 06/06/10 10:05


Torna a Applicazioni Office Windows


Topic correlati a "Ricerca in fogli di dati incrociati":


Chi c’è in linea

Visitano il forum: Nessuno e 36 ospiti