You are here:--[RISOLTO] Matrice a più intervalli
[RISOLTO] Matrice a più intervalli 2018-09-06T14:59:27+00:00

Home Forum Domande su Formule e Funzioni [RISOLTO] Matrice a più intervalli

  • Autore
    Articoli
  • giorgioantonio
    Partecipante
      Post totali: 191
      #6482 |

      https://www.dropbox.com/s/dkgjnyuh3dbd2oo/Cartel1.xlsx?dl=0

      Salve a tutti e buona giornata.

       

      Nel file postato c’è una formula matriciale che non riesco a correggere per

      il suo funzionamento.

      intervallo: m10:q10 i numeri da trovare in

      intervallo1: c11:g20; oppure in

      intervallo2: h11:L20.

      Cioè i numeri che si trovano in m10:q10

      se ci sono in intervallo1 oppure intervallo2 indicarli in r10.

      Grazie

      • Questo argomento è stato modificato 3 mesi, 3 settimane fa da sid sid.
    • BySalvBySalv
      Amministratore del forum
        Post totali: 337

        Ciao Giorgioantonio, in R10 cosa dovrebbe riportare?

        Ciao By Sal :bye:

      • giorgioantonio
        Partecipante
          Post totali: 191

          Salve Bay – Sal,

          in R10 va 2 perchè

          in rigo C11:G11 45-74 =1

          in Rigo C27:G27  02-74 = 1

          quindi 1 + 1 = 2 cioè 2 coppie dei 3 numeri;

          se trova un numero non va contato;

          nell’intervallo H11:L30 = non ci sono 2 o 3 dei numeri

          quindi non va contato niente ma se ci fosse

          esempio 2-45 in rigo H15:L15 andrebbe contato 1

          e quindi 1+1+1 = 3

        • BySalvBySalv
          Amministratore del forum
            Post totali: 337

            Ciao Quindi una specie di conta Ambi o terni nelle due matrici

            Vedo cosa posso proporti.

            Ciao By Sal :bye:

          • giorgioantonio
            Partecipante
              Post totali: 191

              Si,

              se vuoi in fondo alla formula c’è >1 portalo a =2

              salve

            • BySalvBySalv
              Amministratore del forum
                Post totali: 337

                Ciao Giorgio, è risaputo che con le formule non sono capace, ci starei delle ore a cercare di comporla ed alla fine nemmeno un risultato soddisfacente perche si sarebbe potuta fare in modo più sintetico e funzionale.

                per cui la solita funzione da dimenticare poi, l’ho chiamata “Ricer” non devi fare altro che scriverla come una formula, nella cella dove vuoi il risultato scrivi:

                "=Ricer(primo range"C11:g27";secondo Range "H11:L27";range della ricerca "$M$10:$Q$10" bloccandolo nel caso;Numeri da trovare 2-Ambo,3-Terno, Etc..)

                ti allego un file, per la ricerca sulle ruote, sullo stesso principio, se ti serve, il file già l’avevo creato ho solo accorpato i dati del tuo foglio, per la tua ricerca, per far partire la ricerca basta premere sulla freccia verde(pulsante), per il tuo foglio “Giorgio” invece non devi lanciare niente, se cambi i dati si aggiorna da sola, insomma come una formula.

                i numeri in giallo che vedi aggiunti l’ho inseriti io per fare le prove, vedi che la prima ricerca in “R11” ricerca gli ambi e più mentre quella in “R12” dal Terno e più, basta modificare l’ultimo parametro.

                la ricerca sull’archivio inserisci i numeri per la ricerca e scegli il numero di elementi usciti, al solito, 2-Ambo, 3-terno, etc…, e ti riporta da data e la ruota dell’uscita.
                l’archivio è aggiornato alla estrazione di sabato.

                In N2 puoi scegliere per “Normale” oppure per “Posizione”, con “Posizione” considera soltanto le uscite nell’estratto definito, cioè se escono i numeri ma non nella posizione giusta non li conteggia.

                Logicamente se vedi gli Ambi ed ammesso che nella cinquina di ricerca ci sia stato anche il terno, nei 20 ambi che avrà trovato ci sarà anche qualche terno, per vedere questo basta che metti 3 per le uscite in “B2” e vedrai se sono tutti ambi oppure anche terni

                la macro è commentata per il funzionamento.

                se vuoi proprio una formula dovrai aspettare qualche altro intervento.

                Ciao By Sal :bye:

                il link al file

                https://mega.nz/#!8J0iVaiD!OS_Qe2nT_x89xBJuAfrvDM9bcio8yC1DF9dkwHI2GYE

              • sidsid
                Moderatore
                  Post totali: 511

                  Ciao boss

                  Solo per capire il funzionamento dell Function Ricer(Rn1, Rn2, Num, Etr)
                  Se deve contare gli ambi in un intervallo, l’istruzione If n >= Etr Then nc = nc + 1 secondo me non tiene conto del valore maggiore di Etr
                  Infatti se n = 3 gli ambi sono 3; quindi ad nc andrebbe sommato 3
                  se n = 4 gli ambi sono 6
                  se n = 5 gli ambi sono 10
                  Invece rispettando la condizione della tua istruzione, viene sempre sommato 1

                  Mi sono permesso di modificare la tua udf, semplificandola un pò

                  Function Ricer(ByVal Rn1 As Range, ByVal Rn2 As Range, ByVal Num As Range, ByVal Etr As Integer)
                  Dim rg1 As Variant, rg2 As Variant, rng As Variant
                  Dim x As Long, nArr As Long
                  Dim nc As Integer, j As Integer, n As Integer
                  
                  rg1 = Rn1
                  rg2 = Rn2
                  rng = Array(rg1, rg2)
                  
                  For nArr = LBound(rng) To UBound(rng)
                      For x = LBound(rng(nArr)) To UBound(rng(nArr))
                          n = 0
                          For j = 1 To 5
                              n = n + WorksheetFunction.CountIf(Num, rng(nArr)(x, j))
                          Next j
                          
                          If n >= Etr Then
                              Select Case n
                                  Case 2: nc = nc + 1
                                  Case 3: nc = nc + 3
                                  Case 4: nc = nc + 6
                                  Case 5: nc = nc + 10
                              End Select
                          End If
                      Next x
                  Next nArr
                  Ricer = nc
                  End Function
                  • Questa risposta è stata modificata 3 mesi, 4 settimane fa da sid sid.
                • sidsid
                  Moderatore
                    Post totali: 511

                    Per semplificare ancora, al posto di

                    Select Case n
                        Case 2: nc = nc + 1
                        Case 3: nc = nc + 3
                        Case 4: nc = nc + 6
                        Case 5: nc = nc + 10
                    End Select

                    possiamo mettere
                    nc = nc + Application.WorksheetFunction.Choose(n, 0, 1, 3, 6, 10)

                  • giorgioantonio
                    Partecipante
                      Post totali: 191

                      Salve Bay-Sal,

                      ci troviamo in un periodo di ferie e non ho voluto disturbare più di tanto.

                      in verità dopo che ho scaricato il file non sono riuscito ad aprirlo.

                      Da Sid riaprendo la discussione vorrei capire il funzionamento,

                      riferendomi al file allegato chiedo che il primo intervallo fa da lettura

                      se ci sono almeno 2 numeri e non saranno mai più di 5,

                      i numeri del primo intervallo devono essere controllati, se presenti,

                      in altri 11 intervalli nella formula ce ne sono solo 2.

                      Ma a prescindere quanti in quanti intervalli come devo farla funzionare

                      almeno con i 2?

                      Salve

                       

                    • sidsid
                      Moderatore
                        Post totali: 511

                        BySal te la spiegato in modo eccellente: gli argomenti della UDF sono 4:
                        – il primo argomento è il range di ricerca C11:G20
                        – il secondo argomento è il range di ricerca H11:L20
                        – il terzo argomento il range di confronto M10:Q10
                        – il quarto argomento rappresenta il tipo di dati da cercare; quindi 2 per l’ambo

                        In una qualsiasi cella inserisci
                        =ricer($C$11:$G$20;$H$11:$L$20;$M$10:$Q$10;2)

                        Ti ricordo che la udf va inserita in un modulo standard

                      • giorgioantonio
                        Partecipante
                          Post totali: 191

                          Salve Sid,

                          a me da #NOME

                          sALVE

                        • BySalvBySalv
                          Amministratore del forum
                            Post totali: 337

                            Ciao, Giorgio, l’errore #NOME non riesce a trovare la funzione oppure l’hai scritta con nome non corretto.

                            Ciao Sid ho visto la tua funzione, ma non da il conteggio giusto, sullo stesso range mi riporta 11, il problema è proprio il Select Case, in quanto “nc” deve essere incrementato solo di 1 perche ha trovato l’ambo o superiore in base ad “Etr”, invece il select incrementa in base al numero di estratti trovati.
                            Buono il fatto di aver eliminato il doppio ciclo per i due range, avendoli accorpati, ed anche la ricerca sul singolo numero, Riduce i tempi di esecuzione.
                            faccio in quel modo per far comprendere di più l’esecuzione.

                            vedi il risultato in verde la funzione con il select case, ho evidenziato gli ambi da conteggiare.

                            Cattura

                            Ho fatto la modifica sulla macro di Sid che è migliore, eliminando il select case

                            Function Ricer(ByVal Rn1 As Range, ByVal Rn2 As Range, ByVal Num As Range, ByVal Etr As Integer)
                            Dim rg1 As Variant, rg2 As Variant, rng As Variant
                            Dim x As Long, nArr As Long
                            Dim nc As Integer, j As Integer, n As Integer
                            
                            rg1 = Rn1
                            rg2 = Rn2
                            rng = Array(rg1, rg2)
                            
                            For nArr = LBound(rng) To UBound(rng)
                                For x = LBound(rng(nArr)) To UBound(rng(nArr))
                                    n = 0
                                    For j = 1 To 5
                                        n = n + WorksheetFunction.CountIf(Num, rng(nArr)(x, j))
                                    Next j
                                    If n >= Etr Then nc = nc + 1
                                Next x
                            Next nArr
                            Ricer = nc
                            End Function

                            Fai Copia incolla in un Modulo

                            Giorgio, mi sembra strano che non riesci ad aprire il file, che errore ti da?, qual’è la tua versione Excel?

                            Ciao By Sal :bye:

                            • Questa risposta è stata modificata 3 mesi, 4 settimane fa da BySalv BySalv.
                          • sidsid
                            Moderatore
                              Post totali: 511

                              Ciao Sid ho visto la tua funzione, ma non da il conteggio giusto, sullo stesso range mi riporta 11
                              Cattura

                              Pensavo che l’esigenza fosse contare gli ambi che si formano nei 2 range; se così fose 11 è il risultato corretto.
                              Se invece si devono contare 2 o più estratti nella stessa estrazione rispetto ai 5 di controllo, allora 6 è il risultatio corretto.

                            • giorgioantonio
                              Partecipante
                                Post totali: 191

                                Salve,

                                ho adattato la function a più intervalli.

                                Pare che funziona.

                                 

                              • sidsid
                                Moderatore
                                  Post totali: 511

                                  Solo per capire: devi contare tutti gli ambi che si formano, oppure solo le estrazioni in cui ci sono almeno 2 estratti?

                                • giorgioantonio
                                  Partecipante
                                    Post totali: 191

                                    Salve,

                                    solo le estrazioni in cui ci sono 2 dei 2 oppure 2 dei 3 numeri

                                    per ambo.

                                    Per esempio 2, 45, 74: (riga 10)

                                    combinazione 2 e 74 = 1 (intervallo c11 : g30); o e anche h11:l30

                                    combinazione 2, 45, 74 = 3 (3 ambi) pur essendo terno)

                                    spero di essere stato chiaro

                                    • Questa risposta è stata modificata 3 mesi, 4 settimane fa da  giorgioantonio. Ragione: aggiunta e in: o e anche
                                  • sidsid
                                    Moderatore
                                      Post totali: 511

                                      No….. non lo sei stato almeno per me.
                                      vedendo l’immagine postata da BySal, il risultato corretto è 6 oppure 11?

                                    • giorgioantonio
                                      Partecipante
                                        Post totali: 191

                                        Salve,
                                        numeri colore giallo: 2 – 74 – 45 – 67 – 38
                                        combinazioni e coppie nel colore marrone
                                        2 – 74 = 2;
                                        2 – 45 = 1;
                                        2 – 67 = 0;
                                        2 – 38 = 0;
                                        74 – 45 = 2;
                                        74 – 67 = 1;
                                        74 – 38 = 0;
                                        45 – 67 = 1
                                        45 – 38 = 1
                                        67 _ 38 = 2
                                        totale 10
                                        vorrei che la function conti questo.

                                      • sidsid
                                        Moderatore
                                          Post totali: 511

                                          Scusa ma io ne conto 11 di ambi
                                          numeri colore giallo: 2 – 74 – 45 – 67 – 38

                                          Riga 11 (range 1) estratti 45-74 (1)
                                          Riga 18 (range 2) estratti 67-38-74-45 (6)
                                          Riga 19 (range 2) estratti 45-2 (1)
                                          Riga 20 (range 2) estratti 2-74 (1)
                                          Riga 27 (range 1) estratti 2-74 (1)
                                          Riga 27 (range2) estratti 67-38 (1)

                                          Sbaglio?

                                          Cattura

                                          • Questa risposta è stata modificata 3 mesi, 4 settimane fa da sid sid.
                                        • giorgioantonio
                                          Partecipante
                                            Post totali: 191

                                            Salve,

                                            OK non ho contato il 74-38
                                            quindi 11.
                                            Se conta così per me va bene.

                                          • BySalvBySalv
                                            Amministratore del forum
                                              Post totali: 337

                                              Ciao allora ho capito male io, quindi va bene la macro di Sid con il “Select Case”, la macro nel Post “#6497”.

                                              Ciao By Sal :bye:

                                            • giorgioantonio
                                              Partecipante
                                                Post totali: 191

                                                ancora un attimo,
                                                la udf nel post 6497 è completa?
                                                sotto vedo delle altre nozioni che potrebbero
                                                far parte della udf.

                                              • BySalvBySalv
                                                Amministratore del forum
                                                  Post totali: 337

                                                  Ciao Giorgio si è Completa, l’aggiunta del post “#6499” si tratta di una semplificazione del “Select Case”, che applica la funzione “Choose” per la ricerca diretta semplificando il select Case come ha detto Sid

                                                  Function Ricer(ByVal Rn1 As Range, ByVal Rn2 As Range, ByVal Num As Range, ByVal Etr As Integer)
                                                  Dim rg1 As Variant, rg2 As Variant, rng As Variant
                                                  Dim x As Long, nArr As Long
                                                  Dim nc As Integer, j As Integer, n As Integer
                                                  
                                                  rg1 = Rn1
                                                  rg2 = Rn2
                                                  rng = Array(rg1, rg2)
                                                  
                                                  For nArr = LBound(rng) To UBound(rng)
                                                      For x = LBound(rng(nArr)) To UBound(rng(nArr))
                                                          n = 0
                                                          For j = 1 To 5
                                                              n = n + WorksheetFunction.CountIf(Num, rng(nArr)(x, j))
                                                          Next j
                                                          
                                                          If n >= Etr Then
                                                              nc = nc + Application.WorksheetFunction.Choose(n, 0, 1, 3, 6, 10)
                                                          End If
                                                      Next x
                                                  Next nArr
                                                  Ricer = nc
                                                  End Function

                                                  Ciao By Sal :bye:

                                                • sidsid
                                                  Moderatore
                                                    Post totali: 511

                                                    Un ulteriore modifica per rendere flessibile la udf, cambiando il quarto parametro (3 per il terno, 4 per la quaterna, 5 per la cinquina)

                                                    Function Ricer(ByVal Rn1 As Range, ByVal Rn2 As Range, ByVal Num As Range, ByVal Etr As Integer)
                                                    Dim rg1 As Variant, rg2 As Variant, rng As Variant
                                                    Dim x As Long, nArr As Long
                                                    Dim nc As Integer, j As Integer, n As Integer, n1 As Integer, _
                                                        n2 As Integer, n3 As Integer, n4 As Integer, n5 As Integer
                                                    
                                                    rg1 = Rn1
                                                    rg2 = Rn2
                                                    rng = Array(rg1, rg2)
                                                    
                                                    Select Case Etr
                                                        Case 2: n1 = 0: n2 = 1: n3 = 3: n4 = 6: n5 = 10
                                                        Case 3: n1 = 0: n2 = 0: n3 = 1: n4 = 4: n5 = 10
                                                        Case 4: n1 = 0: n2 = 0: n3 = 0: n4 = 1: n5 = 5
                                                        Case 5: n1 = 0: n2 = 0: n3 = 0: n4 = 0: n5 = 1
                                                    End Select
                                                    
                                                    For nArr = LBound(rng) To UBound(rng)
                                                        For x = LBound(rng(nArr)) To UBound(rng(nArr))
                                                            n = 0
                                                            For j = 1 To 5
                                                                n = n + WorksheetFunction.CountIf(Num, rng(nArr)(x, j))
                                                            Next j
                                                            
                                                            If n >= Etr Then
                                                                nc = nc + Application.WorksheetFunction.Choose(n, n1, n2, n3, n4, n5)
                                                            End If
                                                        Next x
                                                    Next nArr
                                                    Ricer = nc
                                                    End Function

                                                    Ciao :bye:

                                                  La discussione ‘[RISOLTO] Matrice a più intervalli’ è chiusa a nuove risposte.

                                                  Utilizzando il sito, accetti l'utilizzo dei cookie da parte nostra. maggiori informazioni

                                                  Questo sito utilizza i cookie per fornire la migliore esperienza di navigazione possibile. Continuando a utilizzare questo sito senza modificare le impostazioni dei cookie o cliccando su "Accetta" permetti il loro utilizzo.

                                                  Chiudi