Condividi:        

trovare 2 di 3 numeri

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

trovare 2 di 3 numeri

Postdi miko » 03/09/11 16:49

salve,
ancora un piccolo problema;
assegnati 3 numeri, ad esempio posti in 3 celle differenti ho 3 variabili A=1 B=2 C=3, devo verificare-evidenziare se in una stessa riga, da colonna C4 a colonna BE4, almeno si trovano 2 di questi 3 numeri;
ho provato a realizzare qualcosa ma riesco a trovare un numero per volta ma non riesco ad imporre la condizione di trovare almeno 2 di questi numeri.
la variazione della riga avviene tramite un pulsante.
buona domenica a tutti
grazie
windows 10 - office 2013
miko
Utente Senior
 
Post: 521
Iscritto il: 29/12/09 10:44

Sponsor
 

Re: trovare 2 di 3 numeri

Postdi Anthony47 » 03/09/11 18:52

Una formula come questa?
Codice: Seleziona tutto
=E(CONTA.SE(C4:BE4;$A$1)>0;CONTA.SE(C4:BE4;$B$1)>0;CONTA.SE(C4:BE4;$C$1)>0)
Se intendi farlo in vba allora userai WorksheetFunction
Codice: Seleziona tutto
Due = Application.WorksheetFunction.CountIf(Range("C4:EB4"), Range("A1").Value) > 0 And _
Application.WorksheetFunction.CountIf(Range("C4:EB4"), Range("B1").Value) > 0 And _
Application.WorksheetFunction.CountIf(Range("C4:EB4"), Range("A1").Value) > 0

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

Re: trovare 2 di 3 numeri

Postdi miko » 05/09/11 18:22

salve,
sono riuscito ad usare la formula che ,seppur funzionante, non fornisce il risultato che vorrei;
secondo la formula, in una stessa riga devono trovarsi tutti e 3 i numeri di ricerca, in tal caso il risultato della formula è VERO;
se invece si trovano solo 2 dei 3 numeri la formula fornisce FALSO.
non sono riuscito a far funzionare la macro, ma presumo che il ragionamento che hai seguito per realizzarla è identico a quello della formula e quindi identico risultato.
quello che cercavo di realizzare è che devo trovare in una riga, 2 di 3 valori assegnati in partenza, ad esempio 15 - 21- 33, ed una volta trovati 2 di questi numeri, anche se manca il terzo, devo evidenziarli;
in pratica devo trovare le coppie;
sono riuscito, finalmente, a creare questa semplice macro che risolve il problema:
Codice: Seleziona tutto
Sub TROVA_2()
Worksheets("Foglio1").Select
r = 1
A = 15
B = 21
C = 33
For I = 3 To 57
For J = 4 To 57
If Cells(r, I).Value = A And Cells(r, J).Value = B Or _
Cells(r, I).Value = A And Cells(r, J).Value = C Or _
Cells(r, I).Value = B And Cells(r, J).Value = C Then
Cells(r, I).Interior.ColorIndex = 3
Cells(r, J).Interior.ColorIndex = 3
End If
Next J
Next I
End Sub

di più e di meglio per ora non riesco a realizzare.
ora sto cercando di capire come posso modificare la macro per far variare i valori contenuti nelle variabili A,B e C invece di inserirli manualmente ad ogni ricerca, dovendo ricercare più numeri.
ciao e grazie
windows 10 - office 2013
miko
Utente Senior
 
Post: 521
Iscritto il: 29/12/09 10:44

Re: trovare 2 di 3 numeri

Postdi Anthony47 » 10/09/11 23:53

Hai aperto 3 discussioni diverse, ma i suggerimenti per il 2 sono condizionati dall' 1, quelli per il 3 dal 2, quelli dell' 1 dal 3; per il tracciato dati bisogna invece andare a tentoni. Tutto questo ha abbassato il mio interesse a contribuire...

Vediamo quindi di risolvere tutti insiemi i quesiti, seno' facciamo il giro dell' oca.

Trattero' quindi contemporaneamente:
- metodo terzine simmetriche (viewtopic.php?f=26&t=92509)
- isotopia e unione nel lotto (viewtopic.php?f=26&t=92659)
- trovare 2 di 3 numeri (viewtopic.php?f=26&t=92672)
partendo dal terzo: "trovare 2 di 3 numeri" (viewtopic.php?f=26&t=92672).
Mi immagino che il tracciato della tabella dati sia quello pubblicato qui: viewtopic.php?f=26&t=92509#p528299

Altre assunzioni mie in assenza di informazioni:
-vanno cercate le righe dove sono presenti 2 numeri su 3; quindi tralasciando se uno stesso numero e' presente due volte nella riga e ignorando situazioni in cui sono presenti tutti e tre i numeri.
-I numeri da cercare nella tabella dati sono scritti nelle celle A1, B1 e C1 del foglio con i dati.

Puoi identificare le righe contenenti "2 su 3 numeri" usando una macro come questa (N°1):
Codice: Seleziona tutto
Sub Cerca2()
Dim Due As Boolean
VUno = Range("A1")
VDue = Range("B1")
VTre = Range("C1")
'
Range("C4:BE10000").Interior.ColorIndex = xlNone
For I = 4 To Range("E" & Rows.Count).End(xlUp).Row
    Present = (Application.WorksheetFunction.CountIf(Range("C1:BE1").Offset(I - 1, 0), VUno) > 0) + _
        (Application.WorksheetFunction.CountIf(Range("C1:BE1").Offset(I - 1, 0), VDue) > 0) + _
        (Application.WorksheetFunction.CountIf(Range("C1:BE1").Offset(I - 1, 0), VTre) > 0)
    If Abs(Present) = 2 Then Due = True Else Due = False '<<<
'spazio per altre istruzioni
Next I
End Sub
La condizione e' data dal flag Due=True, come gestito nella riga marcata <<<

Successivamente hai precisato che volevi anche evidenziare i numeri presenti, se la situazione "2 su 3" si verifica; quindi modifichiamo un pezzo della macro e aggiungiamo questa prestazione in "spazio per altre istruzioni" (N° 2):
Codice: Seleziona tutto
'    If Abs(Present) = 2 Then Due = True Else Due = False '<<< Eliminata
    If Abs(Present) = 2 Then   
        For J = 3 To 57
        If Cells(I, J) = VUno Then Cells(I, J).Interior.ColorIndex = 3  'Rosso
        If Cells(I, J) = VDue Then Cells(I, J).Interior.ColorIndex = 4  'Verde
        If Cells(I, J) = VTre Then Cells(I, J).Interior.ColorIndex = 5  'Blu
        Next J
    End If
Se vuoi colorare con in una sola tonalita' metti gli indici uguali sulle tre istruzioni.

Nel topic "isotopia e unione nel lotto" (viewtopic.php?f=26&t=92659) hai pero' precisato che vuoi colorare questi famosi "2 su 3" solo se sono Isotopi o Uniti; allora non serve trovare le righe che hanno i "2 su 3" e quindi cercare i presenti; bisogna cercare le coppie (A), escludere che facciano parte di un ménage a trois (B), e determinare se rispondono a queste importantissime definizioni (C).
Optiamo per cercare prima la condizione "2 su 3" usando la macro N.1; solo se Due = True allora partiamo alla ricerca delle coppie con questo codice (N° 3)
Codice: Seleziona tutto
'    If Abs(Present) = 2 Then Due = True Else Due = False '<<< Eliminata
    If Abs(Present) = 2 Then
    For J = 3 To 56
        For K = J + 1 To 57
            If (Cells(I, J) = VUno Or Cells(I, J) = VDue Or Cells(I, J) = VTre) And _
            (Cells(I, K) = VUno Or Cells(I, K) = VDue Or Cells(I, K) = VTre) And _
            (Cells(I, J) <> Cells(I, K)) Then Coppia = True Else Coppia = False
            If Coppia Then
                'SOLO PER PROVA:
                Cells(I, J).Interior.ColorIndex = 3
                Cells(I, K).Interior.ColorIndex = 4
                '
            End If
        Next K
    Next J
    End If

Le istruzioni sotto If Coppia Then sono solo per provare che questo criterio porta agli stessi risultati che la macro N° 2; esse vanno sostituite da altre che testano se si tratta di isotopi o di uniti.
I criteri per determinare queste due condizion furono descritti qui: viewtopic.php?f=26&t=92659#p529560

Utilizzando quanto lì detto, ad esempio per gli isotopi, lo traduciamo in questo codice (N° 4)
Codice: Seleziona tutto
            If Coppia Then    '<< Esistente
                Isotopo = (Cells(I, J).Column Mod 5 = Cells(I, K).Column Mod 5)
                If Isotopo Then
                    Cells(I, J).Interior.ColorIndex = 3
                    Cells(I, K).Interior.ColorIndex = 4
                End If
                '
            End If


Infine, all' interno del topic "metodo terzine simmetriche", hai chiesto di riuscire a identificare il 3° mancante nel caso si verifichi "2 su 3".
Il criterio per questo calcolo era stato dato qui: viewtopic.php?f=26&t=92509#p529559
Traduciamolo nel contesto del codice N° 4, immaginando che il risultato si voglia mettere in col A, e otteniamo questo codice addizionale (N° 5)
Codice: Seleziona tutto
            If Coppia Then  '<< Esistente
                Manca = Abs(VUno * (Application.WorksheetFunction.CountIf(Range("C1:BE1").Offset(I - 1, 0), VUno) = 0) + _
                    VDue * (Application.WorksheetFunction.CountIf(Range("C1:BE1").Offset(I - 1, 0), VDue) = 0) + _
                    VTre * (Application.WorksheetFunction.CountIf(Range("C1:BE1").Offset(I - 1, 0), VTre) = 0))
                    Cells(I, "A") = Manca
                '
                Isotopo = (Cells(I, J).Column Mod 5 = Cells(I, K).Column Mod 5)   '<< Esistente


Spero che ti sia agevole produrre le variazioni al codice per allinearlo alle tue condizioni e non alle mie assunzioni.

Comunque, come sai, siamo qua.

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

Re: trovare 2 di 3 numeri

Postdi Anthony47 » 20/09/11 13:55

Per curiosita', e' stato poi utile?
Avatar utente
Anthony47
Moderatore
 
Post: 19222
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "trovare 2 di 3 numeri":


Chi c’è in linea

Visitano il forum: Nessuno e 75 ospiti