Allora... Ci ho provato a trovare query e sottoquery e sembra funzionare
Ovviamente essendo le mie conoscenze in access ancora troppo approssimative forse farò qualche passaggio in più.
Lo faccio per Pippo
Questa è la tabella tab_excel
INDICE VAL VALORE
Pippo 1 Rosso
Pippo 1 Blu
Pippo 2 Sax
Pippo 2 Corno
Pippo 3 Mare
Pippo 3 Collina
Pippo 3 Montagna
Paperino 1 Giallo
Paperino 1 Viola
Paperino 2 Violino
Paperino 3 Mare
Paperino 3 Montagna
Topolino 1 Giallo
Topolino 1 Blu
Topolino 2 Flauto
Topolino 2 Sax
Topolino 2 Violino
Topolino 3 Mare
Poi una tabella tab_Dati con i campi
ID-INDICE-VAL1-VAL2-VAL3
con ID chiave primaria
Filtro Tab_Excel con Pippo e i tre Valx.
Chiamerò le query rispettivamente per i 3 Valx
Sql_ExcelPippo1-Sql_ExcelPippo2-Sql_ExcelPippo3
SELECT Tab_Excel.INDICE, Tab_Excel.VALORE, Tab_Excel.Val AS VAL1
FROM Tab_Excel
WHERE (((Tab_Excel.INDICE)="pippo") AND ((Tab_Excel.Val)=1));
SELECT Tab_Excel.INDICE, Tab_Excel.VALORE, Tab_Excel.Val AS VAL2
FROM Tab_Excel
WHERE (((Tab_Excel.INDICE)="pippo") AND ((Tab_Excel.Val)=2));
SELECT Tab_Excel.INDICE, Tab_Excel.VALORE, Tab_Excel.Val AS VAL3
FROM Tab_Excel
WHERE (((Tab_Excel.INDICE)="pippo") AND ((Tab_Excel.Val)=3));
Filtro da tab_dati "pippo", la query si chiama sql_datiPippo
SELECT Tab_Dati.ID, Tab_Dati.INDICE, Tab_Dati.val1, Tab_Dati.val2, Tab_Dati.val3
FROM Tab_Dati
WHERE (((Tab_Dati.INDICE)="pippo"));
Ora cerco i dati che ci sono in tab_dati ma non ci sono in tab_excel, le query si chiamano
rispettivamente Pippo1-Pippo2-Pippo3
SELECT Sql_datiPippo.ID, Sql_datiPippo.INDICE, Sql_datiPippo.val1
FROM Sql_datiPippo LEFT JOIN sql_ExcelPippo1 ON Sql_datiPippo.val1 = sql_ExcelPippo1.VALORE
WHERE (((sql_ExcelPippo1.VALORE) Is Null));
SELECT Sql_datiPippo.ID, Sql_datiPippo.INDICE, Sql_datiPippo.val2
FROM Sql_datiPippo LEFT JOIN sql_ExcelPippo2 ON Sql_datiPippo.val2 = sql_ExcelPippo2.VALORE
WHERE (((sql_ExcelPippo2.VALORE) Is Null));
SELECT Sql_datiPippo.ID, Sql_datiPippo.INDICE, Sql_datiPippo.val3
FROM Sql_datiPippo LEFT JOIN sql_ExcelPippo3 ON Sql_datiPippo.val3 = sql_ExcelPippo3.VALORE
WHERE (((sql_ExcelPippo3.VALORE) Is Null));
Adesso ricostruisco il formato ID-INDICE-VAL1-VAL2-VAL3 dei risultati ottenuti, sempre per pippo.
Dapprima unisco gli ID di pippo1-pippo2-pippo3, la query si chiama "UnionePippo123"
SELECT ID, indice
FROM pippo1
UNION
SELECT ID, indice
FROM pippo2
UNION SELECT ID, indice
FROM pippo3;
Poi con tre join sugli ID ricreo la struttura completa
SELECT UnionePippo123.ID, UnionePippo123.indice, Pippo1.val1, Pippo2.val2, Pippo3.val3
FROM ((UnionePippo123 LEFT JOIN Pippo2 ON UnionePippo123.ID = Pippo2.ID) LEFT JOIN Pippo1 ON UnionePippo123.ID = Pippo1.ID) LEFT JOIN Pippo3 ON UnionePippo123.ID = Pippo3.ID;
Il risultato è questo