Benvenuto Ospite Cerca | Topic Attivi | Utenti | | Log In | Registra

[Excel 2007]- Confronto di dati di 4 tabelle Opzioni
aetio
Inviato: Wednesday, October 06, 2010 2:59:46 PM

Rank: AiutAmico

Iscritto dal : 5/10/2010
Posts: 723
Ciao,
comincio a sospettare di essere un incontentabile... ma forse la verità, per fortuna, risiede in altra sede: a10n11 è capace di risolvere con eccellente, ma il termine giusto è impareggiabile, abilità tutti, dico tutti, i problemi legati a questo stupendo programma!!
Vengo al sodo: ho 4 tabelle tra loro collegate che devo confrontare, sto quindi cercando un metodo sintetico ma sefficace che restituisca a vista d'occhio il verificarsi o meno di determinate situazioni tra esse legate. Nominando le tabelle rispettivamente tabella1 (dati in col.D:H), tabella2 (dati in col.I:BK), tabella3 (dati in col.BM:BQ), tabella4 (dati in col.BR:CQ) e stabilendo che la tabella-fulcro, su cui fa leva tutta la ricerca e sulla quale andranno evidenziati i confronti, è la tabella1 sarebbe eccellente idea che, premesso che il lavoro è svolto sulla stessa riga (e supponiamo che la cella attiva sia in col.B):
- se i dati contenuti in una colonna di tabella1 sono presenti in una colonna di tabella2 (ma non di tabella 3 e 4) la cella di tabella1 si colora di viola (colore ad esempio)
- se i dati contenuti in una colonna di tabella1 sono presenti in una colonna di tabella2 e 3 (ma non di tabella 4) la cella di tabella1 rimane bianca e si borda di bordo medio
- se i dati contenuti in una colonna di tabella1 sono presenti in una colonna di tabella 4 (ma non di tabella2 e 3) la cella di tabella1 si colora di giallo (colore ad esempio)
- se i dati contenuti in una colonna di tabella1 sono presenti in una colonna di tabella2 e 4 (ma non di tabella 3) la cella di tabella1 si colora di rosso (colore ad esempio)
- se i dati contenuti in una colonna di tabella1 sono presenti solo in tabella1, la cella di tabella1 rimane così com'è... nessun riempimento, nessun colore.
le colonne in cui "parcheggiare" le elaborazioni dei confronti possono tranquillamente partire dalla col.CR
In questo semplice, ma ingegnoso modo, al solo sguardo della tabella1 si ha già immediatamente in evidenza la situazione del rapporto tra le 4 tabelle senza dover di volta in volta scervellarsi a scrivere, osservare, controllare i dati... considerando che dopo mezz'ora di lavoro manuale gli errori sono molto probabili....
Ho provato a lavorare intorno alle istruzioni delle macro che ho già, ma confesso che dopo un bel pò mi sono dovuto arrendere... non conosco le giuste istruzioni per fare lavorare la macro..... |:)))
Grazie infinite per la pazienza e comprensione... e buon pomeriggio,
eZio
Sponsor
Inviato: Wednesday, October 06, 2010 2:59:46 PM

 
a10n11
Inviato: Wednesday, October 06, 2010 4:47:53 PM

Rank: AiutAmico

Iscritto dal : 5/29/2003
Posts: 1,694
aetio ha scritto:

comincio a sospettare di essere un incontentabile...


Salve
più che incontentabile sei sulla strada buona dell'apprendista stregone che applica ad ogni lavoro tutto quello che mano a mano impara.
il rischio è quello di creare dei minestroni indigesti.
Tieni sempre in considerazione che ogni lavoro deve essere il più snello e leggero possibile (sempre nel limite del risultato voluto)



aetio ha scritto:

Vengo al sodo: ho 4 tabelle tra loro collegate che devo confrontare, sto quindi cercando un metodo sintetico ma sefficace che restituisca a vista d'occhio il verificarsi o meno di determinate situazioni tra esse legate. Nominando le tabelle rispettivamente tabella1 (dati in col.D:H), tabella2 (dati in col.I:BK), tabella3 (dati in col.BM:BQ), tabella4 (dati in col.BR:CQ) e stabilendo che la tabella-fulcro, su cui fa leva tutta la ricerca e sulla quale andranno evidenziati i confronti, è la tabella1 sarebbe eccellente idea che, premesso che il lavoro è svolto sulla stessa riga (e supponiamo che la cella attiva sia in col.B):
- se i dati contenuti in una colonna di tabella1 sono presenti in una colonna di tabella2 (ma non di tabella 3 e 4) la cella di tabella1 si colora di viola (colore ad esempio)
- se i dati contenuti in una colonna di tabella1 sono presenti in una colonna di tabella2 e 3 (ma non di tabella 4) la cella di tabella1 rimane bianca e si borda di bordo medio
- se i dati contenuti in una colonna di tabella1 sono presenti in una colonna di tabella 4 (ma non di tabella2 e 3) la cella di tabella1 si colora di giallo (colore ad esempio)
- se i dati contenuti in una colonna di tabella1 sono presenti in una colonna di tabella2 e 4 (ma non di tabella 3) la cella di tabella1 si colora di rosso (colore ad esempio)
- se i dati contenuti in una colonna di tabella1 sono presenti solo in tabella1, la cella di tabella1 rimane così com'è... nessun riempimento, nessun colore.
le colonne in cui "parcheggiare" le elaborazioni dei confronti possono tranquillamente partire dalla col.CR
In questo semplice, ma ingegnoso modo, al solo sguardo della tabella1 si ha già immediatamente in evidenza la situazione del rapporto tra le 4 tabelle senza dover di volta in volta scervellarsi a scrivere, osservare, controllare i dati... considerando che dopo mezz'ora di lavoro manuale gli errori sono molto probabili....
Ho provato a lavorare intorno alle istruzioni delle macro che ho già, ma confesso che dopo un bel pò mi sono dovuto arrendere... non conosco le giuste istruzioni per fare lavorare la macro..... |:)))
Grazie infinite per la pazienza e comprensione... e buon pomeriggio,
eZio


ed io aggiungo... se il valore di tabella1 e presente sia sulla 2-3-4 non è da prevedere (io nel caso l'ho prevista)
per la macro che segue non servono aree di appoggio.

questa è la macro:
Code:

Sub confrontaColora()
Dim riga As Long
Dim Cl1, cl2, cl3, cl4 As Variant
Dim X As String
riga = ActiveCell.Row
X = ""
Set col1 = Range(Cells(riga, 4), Cells(riga, 8))
Set col2 = Range(Cells(riga, 9), Cells(riga, 63))
Set col3 = Range(Cells(riga, 65), Cells(riga, 69))
Set col4 = Range(Cells(riga, 70), Cells(riga, 95))
col1.Interior.ColorIndex = xlNone
col1.Borders.LineStyle = xlNone
For Each Cl1 In col1
    For Each cl4 In col4
    If Cl1 = cl4 Then
    X = 4
    Exit For
    End If
    Next cl4
        For Each cl3 In col3
         If Cl1 = cl3 Then
        X = X & 3
        Exit For
        End If
        Next cl3
            For Each cl2 In col2
            If Cl1 = cl2 Then
            X = X & 2
            Exit For
            End If
            Next cl2
Select Case X
    Case 432
    Cl1.Interior.ColorIndex = 39
    Case 2
     Cl1.Interior.ColorIndex = 7
    Case 32
     With Cl1.Borders
     .LineStyle = xlContinuous
    .Weight = xlMedium
    End With
    Case 42
    Cl1.Interior.ColorIndex = 3
    Case 4
    Cl1.Interior.ColorIndex = 6
End Select

X = ""
     Next Cl1
     
Set col1 = Nothing
Set col2 = Nothing
Set col3 = Nothing
Set col4 = Nothing
End Sub



NB. la macro esegue il codice solo per la riga selezionata.
provala e fami sapere se ho azzeccato le condizioni (al limite intervieni nella parte del "Select Case")
saluti
Giap




aetio
Inviato: Wednesday, October 06, 2010 8:41:40 PM

Rank: AiutAmico

Iscritto dal : 5/10/2010
Posts: 723
Ciao,
a10n11 ha scritto:
... sei sulla strada buona dell'apprendista stregone che applica ad ogni lavoro tutto quello che mano a mano impara.
il rischio è quello di creare dei minestroni indigesti.
Tieni sempre in considerazione che ogni lavoro deve essere il più snello e leggero possibile (sempre nel limite del risultato voluto)

Ti do pienamente ragione... Non hai idea di quanto sia frustrante per un appassionato di questa affascinante materia come me il constatare continuamente, con profonda consapevolezza, di non sapere praticamente nulla se non quello che ha imparato da te... la cosa che mi fa più impressione sono appunto l'estrema eleganza, sintesi, precisione chirurgica con cui scrivi le istruzioni... anche quest'ultima macro mi ha fatto letteralmente andare in estasi...
Oltre a risolvermi il problema specifico mi dai l'emozione tipica di chi, estasiato, osserva un'opera d'arte... ma qui forse sto uscendo dai binari, vorrei solo farti ben capire.......
".......Quanto t'invidioooooooooooooo!!" :)))

La macro funziona a meraviglia, l'ho solo adattata alle mie tabelle intervenendo con una piccolissima correzione nel Select Case
Grazie infinite per l'ennesimo aiuto risolutivo e buona serata,
eZio

EDIT:
Ti voglio far fare due risate... :))
ecco come avevo preparato il mio minestrone... sicuramente indigesto anche se alla fine funzionava, ma non è così che mi piace operare... sono infatti pienamente d'accordo col tuo ragionamento "che ogni lavoro deve essere il più snello e leggero possibile", d'altronde il VBA ce lo permette


Sub confronta_TUTTO()
Application.Run "confronta_1"
Application.Run "confronta_2"
Application.Run "confronta_3"
ActiveCell.Offset(-1, 0).Range("A1").Select
End Sub


Sub confronta_1()
'
' la 1^ macro da fare girare
'
Dim colonna As Integer
N = ActiveCell.Row
colonna = 102
Set area2 = Range(Cells(N, 9), Cells(N, 63))
Set area1 = Range(Cells(N, 4), Cells(N, 8))
For Each cl In area1
For Each cl2 In area2
If cl = cl2 Then
With cl
.Interior.ColorIndex = 39
.Borders.LineStyle = xlContinuous
.Borders.Weight = xlThin
End With
Cells(N, colonna).Value = cl.Value
colonna = colonna + 1
End If
Next cl2
Next cl
Set area = Nothing
Set area2 = Nothing
Columns("CX:DB").ClearContents
End Sub


Sub confronta_2()
'
'la 2^ macro da fare girare
'
Dim colonna As Integer
N = ActiveCell.Row
colonna = 107
Set area2 = Range(Cells(N, 70), Cells(N, 95))
Set area1 = Range(Cells(N, 4), Cells(N, 8))
For Each cl In area1
For Each cl2 In area2
If cl = cl2 Then
With cl
.Interior.ColorIndex = 27
End With
Cells(N, colonna).Value = cl.Value
colonna = colonna + 1
End If
Next cl2
Next cl
Set area = Nothing
Set area2 = Nothing
Columns("DC:DZ").ClearContents
End Sub


Sub confronta_3()
'
'la 3^ macro da fare girare
'
Dim colonna As Integer
N = ActiveCell.Row
colonna = 97
Set area2 = Range(Cells(N, 65), Cells(N, 69))
Set area1 = Range(Cells(N, 4), Cells(N, 8))
For Each cl In area1
For Each cl2 In area2
If cl = cl2 Then
With cl
.Interior.ColorIndex = none
.Borders.LineStyle = xlContinuous
.Borders.Weight = xlMedium
End With
Cells(N, colonna).Value = cl.Value
colonna = colonna + 1
End If
Next cl2
Next cl
Set area = Nothing
Set area2 = Nothing
Columns("CS:CW").ClearContents
End Sub

Come vedi, ora, con l'ultima macro che mi hai preparato mi hai fatto fare un notevole passo avanti... e passo dopo passo l'homo erectus è diventato homo sapiens :)))
a10n11
Inviato: Wednesday, October 06, 2010 10:13:46 PM

Rank: AiutAmico

Iscritto dal : 5/29/2003
Posts: 1,694
salve
però la logica la stai acquisendo..!
le tre routine fondamentalmente fanno lo stesso lavoro.

ti rimane solo di apprendere come sfrondare il superfluo.
io ho lavorato sempre con tre cicli però legati a cascata fra di loro mantenedo come costante i valori della prima tabella.
saluti
Giap

Utenti presenti in questo topic
Guest


Salta al Forum
Aggiunta nuovi Topic disabilitata in questo forum.
Risposte disabilitate in questo forum.
Eliminazione tuoi Post disabilitata in questo forum.
Modifica dei tuoi post disabilitata in questo forum.
Creazione Sondaggi disabilitata in questo forum.
Voto ai sondaggi disabilitato in questo forum.

Main Forum RSS : RSS

Aiutamici Theme
Powered by Yet Another Forum.net versione 1.9.1.8 (NET v2.0) - 3/29/2008
Copyright © 2003-2008 Yet Another Forum.net. All rights reserved.