confronto celle



  • confronto celle
    di ambra (utente non iscritto) data: 13/03/2013 22:53:26

    buona sera a tutti;
    ho scoperto da poco questo forum, e non sono molto esperto di vba.
    ho cercato argomenti simili al titolo di questa discussione, ma tutti si riferiscono al confronto tra due singole celle.
    quello che invece vorrei realizzare è il confronto tra più celle contemporaneamente.
    precisamente in un foglio ho 4 range, (C-G),(H-L),(M-Q),(R-V)ciascuno costituito da 5 colonne;
    i valori sono disposti su righe a partire dalla cella C5 fino alla V5;
    vorrei confrontare, per ogni riga, le coppie di valori di un range con le coppie di valori dei range successivi, alla ricerca di coppie uguali, e se esistono evidenziarli.
    ad esempio, consideriamo la riga 5:
    confronto i primi due valori, coppia (C5,D5) del primo range, con le coppie degli altri range e quindi con (H5, I5), poi (C5,D5) con (H5, J5), (C5,D5) con (H5, K5), ed infine (C5,D5) con (H5, L5);
    successivamente passo a confrontare (C5,D5) con gli elementi del terzo range e poi con quelli del quarto fino a (U5,V5).
    ripeto il ciclo considerando il confronto tra (C5,E5) e tutti gli elementi degli altri range.
    e cosi via fino a considerare (C5,G5).
    successivamente considero (D5,E5),..(D5,G5) e confronto con gli altri range.
    poi considero (E5,F5) e ripeto il confronto.
    ho provato con dei cicli for ma inutilmente.
    spero nei vostri contributi e vi ringrazio anticipatamente
    ciao



  • di Textomb data: 14/03/2013 00:29:18

    ma se la coppia dei valori fosse uguale a quella di in un altro range ma specchiata, come bisogna considerarla? va evidenziata oppure no?
    cioè per es.
    C5=13 D5=21
    H5=21 I5=13



  • di ambra (utente non iscritto) data: 14/03/2013 00:46:37

    ciao Textomb
    grazie del tuo intervento e per aver sottolineato la coppia specchiata.
    avevo dimenticato questo particolare.
    la coppia specchiata deve essere pure evidenziata.
    buona notte e grazie



  • di totygno71 data: 14/03/2013 11:51:00

    Ciao Ambra o Ambro visto che scrivi al maschile...
    Potresti postare il codiche che hai scritto tu cosi vediamo come modificarlo e renderlo "Operativo"?
    ciao



  • di ambra (utente non iscritto) data: 14/03/2013 12:30:12

    buongiorno,
    grazie anche a te totygno;
    in realtà il codice che sono riuscito a scrivere è ben poca cosa,
    ma lo inserisco così forse sarà più chiaro cosa intendo ottenere.
    inserite dei numeri casuali nella riga 5 a partire dalla cella C5 fino alla V5;
    per testare la macro ho fissato riga e colonna, ma questi valori devono cambiare.
    avviate la macro con F8;
    non riesco a determinare i limiti dei cicli for, e poi ovviamente il resto del codice per completare il confronto.
    ciao e grazie
     
    Sub Cerca()
    Worksheets("Foglio1").Select
    UC = Worksheets("Foglio1") _
        .Range("C" & Rows.Count).End(xlUp).Row
    Range("C5:V" & UC).Interior.ColorIndex = xlNone
    R = 5 'RIGA
    K = 3 'COLONNA
        For Col1 = K To 16
       Cells(R, Col1).Interior.ColorIndex = 3
       A = Cells(R, Col1).Value
         For Col = Col1 + 1 To 7
       Cells(R, Col).Interior.ColorIndex = 3
       B = Cells(R, Col).Value
       C = Val(A & B)
         Cells(R, Col).Interior.ColorIndex = xlNone
          Next Col
        Cells(R, Col1).Interior.ColorIndex = xlNone
        Next Col1
     End Sub
    



  • di totygno71 data: 14/03/2013 14:09:11

    Ambra/o
    ti ho allegato un file
    è solo una parte del codice che avevo pensato ma facilemnte estendibile a tutto il progetto_

    Questa testa le prime due celle (C5:D5) con tutte le possibili combinazioni delle celle nel range(H5:L5)
    tendo conto anche di eventuali coppie a specchio_

    ad estebnderlo anche al range(M5:Q5) ed (R5:V5)
    per poi passare a (d5:E5) etc etc
    Spero di aver capito cosa intendevi_
    Ciao



  • di ambra (utente non iscritto) data: 14/03/2013 20:12:37

    buona sera a tutti,
    ciao totygno, grazie per la macro;
    hai capito cosa intendo ottenere;
    il tuo ragionamento per conseguire il risultato finale è corretto.
    seguendo le indicazioni che hai suggerito ho provato a modificare la macro,
    ma inutilmente non sono ancora in grado per macro complesse.
    invio un file nel quale ho inserito una tabella che forse migliorerà la comprensione.
    anche se è una tabella in realtà è rappresentativa di una sola riga, ad esempio la 5;
    fisso il primo elemento, giallo, del primo range, C-G e faccio variare il secondo;
    trovo se esistono questi elementi ed i loro specchi, nel secondo, terzo e quarto range.
    poi fisso il secondo elemento del primo range, rosso, e faccio variare il terzo;
    ripeto il confronto come prima.
    quando ho terminato con il primo range considero gli elementi del secondo range, nell'identica successione, confrontandoli con il terzo, e quarto range.
    infine confronto, allo stesso modo, gli elementi del terzo range con quelli del quarto.
    nella tua macro è fissata la riga, r1=5, ed io devo far variare questo valore avendo 150 righe.
    così come devono variare le altre costanti per considerare gli altri elementi di uno stesso range e per passare da un range all'altro.
    spero nella chiarezza della mia esposizione.
    credo che dalle spiegazioni che hai inserito nella risposta, hai pensato il codice giusto.
    ciao e grazie



  • di ambra (utente non iscritto) data: 16/03/2013 14:59:26

    buongiorno a tutti,
    sto provando a modificare la macro realizzata da totygno, nel file che ha allegato,
    ma non riesco ad ottenere alcun risultato.
    vi è qualcuno che può suggerirmi come devo procedere?
    grazie dei vostri contributi.
    buon sabato




  • di Textomb data: 16/03/2013 17:22:45

    ho letto tutti i passaggi e devo ammettere di non aver capito cosa vuoi ottenere.
    cioè ho visto l'immagine che hai allegato.
    pare che ci siano ben 7 istanze della stessa riga5. Con le celle con il fondo colorato a coppie uguali, ovviamente con colori di fondo diversi da un'istanza all'altra per maggior comprensione.
    Tra l'altro quelle rappresentate non sono tutte le istanze possibili. Ti sei fermato ad analizzare la coppia giallo-rosso e la coppia rosso-verde.
    Poi si dovrà anche analizzare la coppia verde-nero e poi in ultimo la nero-grigio con altre tre isatnze da aggiungere a quelle già rappresentate.
    Ora, la mia domanda è: cosa dovrebbe fare questa ipotetica macro?
    evidenziarti le singole istanze (che sono dieci in totale) una alla volta. E, ad ogni istanza, cambiare il colore di fondo delle varie coppie di valori?
    In questo caso, come devono susseguirsi le varie istanze? Devono essere intervallate da un msgbox di pausa.
    Quindi lasciare all'utente la scelta di andare avanti sull'istanza successiva. Anche perchè altrimenti non si capirebbe nulla...
    Oppure inquadrare tutte le istanze possibili di ogni singola riga in una list box separata e poi lasciare all'utente la scelta di selezionare le varie coppie di valori e vedere le conseguenze negli altri range.
    Magari in questo caso, visto che si analizzano le istanze uno alla volta, si può ipotizzare sempre lo stesso colore di fondo.
    Tutto questo ragionamento per una riga.
    E come gestire le altre 150 righe?
    Magari si potrebbe pensare di selezionare una riga specifica e chiedere alla macro di analizzare solo quella. E poi passare all'altra.
    E poi in ultimo e non per ultimo.
    Quale deve essere la configurazione finale di ogni singola riga.
    cioè, come devono essere colorate le singole celle dopo lo screening sulla riga i-esima?
    In base alla prima coppia di valori, a all'ultima...
    trovo tutto ciò estremamente complesso se non viene decifrato bene cosa si vuole fare.
    gioia e salute a tutti.



  • di totygno71 data: 16/03/2013 19:20:36

    Il "message in the bottle" non serve, l'ho inserito solo per verifica mentre testavo il codice... indi, può essere tranquillamente Scancellato_

    @ Ambra/o
    ma hai provato ad estendere lo stesso codice alle altre righe?

    Posta il tentativo dai che vedo di incasinare ancora meglio il tutto_ ^_^




  • di ambra (utente non iscritto) data: 20/03/2013 21:00:24

    buonasera a tutti,
    leggendo le vostre ultime risposte vedo che ci sono ancora dubbi sul risultato che vorrei ottenere.
    provo a spiegarmi con un altro esempio.
    ho 4 range che chiamo A, B, C, D;
    ciascun range è composto da 5 colonne e 150 righe;
    considero il range A e la prima riga, ad esmpio la riga 5;
    nelle celle di A ho i seguenti valori 1 2 3 4 5;
    ora prendo tutte le coppie che si formano con questi valori:
    12
    13
    14
    15
    23
    24
    25
    34
    35
    45
    confronto queste coppie con tutte le coppie dei range successivi, B, C, D, appartenenti alla stessa riga 5;
    se in questi range trovo coppie uguali a quelle di A li coloro.
    terminato il confronto di A con gli altri range, considero tutte le coppie del range B e confronto tali coppie con quelle dei range successivi C, D;
    e cosi via fino a considerare il confronto di tutte le coppie di C con D;
    finita la riga 5 passo alla riga 6 nello stesso modo, fino all'ultima riga 150.
    totygno aveva individuato il procedimento e mi aveva suggerito una macro, ma ho provato a modificarla, ma invano;
    nella macro di totygno ho solo introdotto il ciclo for per le righe,
    ma per gli altri cicli non riesco a ricavare alcun risultato utile.
    ciao, grazie


     
    Sub coppiole()
    Dim rng As Range
    Set rng = ActiveSheet.Range("C5:V5")
    Dim x As String, y As String, x1 As String, y1 As String
    rng.Interior.ColorIndex = 0
    For r1 = 5 to 150  '<<<<
    c1 = 3
    c2 = 4
    c1c = 8
    c2c = 9
    ciclo = 4
        For Each c In rng
        If c2c > 22 Then
        ciclo = ciclo - 1
        If ciclo = 0 Then Exit For
        c1c = c1c + 1
        c2c = c1c + 1
        End If
        x = Cells(r1, c1) & Cells(r1, c2)
        y = Cells(r1, c2) & Cells(r1, c1)
        x1 = Cells(r1, c1c) & Cells(r1, c2c)
        y1 = Cells(r1, c2c) & Cells(r1, c1c)
        If x = x1 Or x = y1 Or y = x1 Or y = y1 Then
    Cells(r1, c2c).Interior.ColorIndex = 3
    Cells(r1, c1c).Interior.ColorIndex = 3
    End If
    c2c = c2c + 1
        Next
    Next r1 '<<<<
    End Sub



  • di Vecchio Frac data: 21/03/2013 15:58:07

    @ambra
    Sarà il raffreddore forte ma non ho capito, abbi pazienza :(
    Riesci a postare un pezzo di file con il risultato voluto? anche un'immagine andrebbe bene.