Scommessa



  • Scommessa
    di Antonio (utente non iscritto) data: 09/02/2013 18:01:29

    Buonasera a tutti. Ho allegato il mio file delle scommesse. Qualcuno sa come si può fare tramite formule o vba per sapere se la scommessa è vinta? Grazie



  • di Vecchio Frac data: 09/02/2013 18:33:36

    Carino il modello, colorato.
    Solo che è completamente vuoto... non c'è una formula, non c'è una riga di codice...
    Non c'è neanche una riga di spiegazione su quello che deve determinare cosa sia questa "scommessa", dove la inserisci, come la devi controllare.
    Insomma non dici niente.
    Sulla base dei (pochi) dati forniti, l'unica risposta che sono in grado di darti è:
    "ci vuole la sfera di cristallo"
    ^_^





  • di Antonio (utente non iscritto) data: 09/02/2013 19:25:57

    Scusa mi spiego meglio. Io sono un appassionato di scommesse, mi riferisco alle partite di calcio. Nelle celle C6:D20 scrivo le squadre che gioco per esempio nella C6 JUVENTUS e nella D6 FIORENTINA mentre nella E6 il mio pronostico per esempio over 1,5 e poi a seguire. Nella cella F6 scrivo il risultato finale per esempio 2 - 0. Codice vba non ho scritto niente perchè non ho la più pallida idea di cosa scrivere; in pratica vorrei che una volta scritte le mie squadre con i miei pronostici e poi i risultati finali il pulsante controlla mi dice se la scommessa è vinta oppure no.



  • di Vecchio Frac data: 09/02/2013 20:07:06

    Tu sei del settore e utilizzi un linguaggio tecnico ("gergo") che va definito: spiega meglio "over 1,5".
    Chiaramente se scrivi un risultato iniziale e poi un risultato finale puoi controllare benissimo se il pronostico è stato azzeccato; ma i due termini devono essere scritti in modo comparabile, ad esempio 1-0 nella colonna del pronostico, 2-0 il risultato finale, ergo la scommessa è vinta.
    Fai una cortesia: allega (immagine o file) un esempio di quello che dovrebbe essere uno schema compilato e con alcuni dati già inseriti, iniziali e finali, in modo che si possa ricostruire lo scenario (tipo, "all'inizio è così, poi voglio che sia colà e mi aspetto questo risultato").
    Altrimenti si va a tentativi e sprechiamo un sacco di tempo.






  • di Antonio (utente non iscritto) data: 09/02/2013 20:26:05

    Ho allegato un file compilato; non so se tu ti intendi di scommesse. Fammi sapere se vuoi che io chiarisca qualcos'altro.



  • di Vecchio Frac data: 09/02/2013 20:38:59

    Purtroppo non mi intendo di scommesse... mi devi guidare a capirti :)
    Non vedo l'allegato quindi attendo prima di fare qualche ipotesi.





  • di Antonio (utente non iscritto) data: 09/02/2013 20:46:40

    L'allegato è quello, ho modificato il primo e allegato, se lo scarichi noti la differenza. Al totocalcio hai mai giocato?



  • di Vecchio Frac data: 09/02/2013 20:56:51

    Ok, ho riscaricato l'allegato.
    Non è usuale dare lo stesso nome dell'allegato precedente, proprio per non sovrascrivere file esistenti...
    Al totocalcio ho giocato ma diciamo che sono passati un po' di annetti, all'epoca c'erano ancora i due punti per la vittoria e Bearzot guidava la Nazionale ^_^





  • di Antonio (utente non iscritto) data: 09/02/2013 21:18:42

    Ok, ti spiego + o - come funzionano le scommesse:
    se vince la squadra di casa è 1
    se pareggiano è x
    se vince la squadra di fuori è 2
    (come al totocalcio).
    Oltre a questi pronostici si possono giocare questi altri:
    la doppia chance 1x x2 12
    over 1,5 minino 2 gol
    over 2,5 minimo 3 gol
    over 3,5 minimo 4 gol
    under 1,5 massimo un gol
    under 2,5 massimo 2 gol
    under 3,5 massimo 3 gol
    gol che tutte gue le squadre segnano
    nogol che segna solo una squadra.
    Poi ci sono altri pronostici, tipo esito 1 tempo, risultato finale ecc.
    Non so come e se è possibile creare del codice vba.



  • di Vecchio Frac data: 10/02/2013 12:03:08

    Bene, ora è quasi tutto chiaro.
    Si può fare benissimo con una serie di If e Select Case.
    "over" indica il numero di reti segnate dalla prima squadra (dove "under" indica le reti segnate dalla seconda)?






  • di Antonio (utente non iscritto) data: 10/02/2013 14:02:58

    Under e Over è il numero complessivo di gol a prescindere di quale squadra segni.



  • di Vecchio Frac data: 10/02/2013 17:37:09

    Allego il file revisionato. Probabilmente si può fare di meglio :)
    Ho apportato una leggera modifica al layout.
    Riporto anche, per comodità, il codice qui sotto (anche perchè tra qualche giorno l'allegato sparisce).
    Controlla, dimmi se va bene così e poi dimmi anche se bisogna integrare i casi con altri (esito primo tempo, ecc.); per il pronostico, potresti utilizzare una convalida dati in cella.

     
    Option Explicit
    
    Public Sub controlla()
    Dim rng As Range, cella As Range
    Dim s As String, i As Integer
    Dim somma_gol As Integer, v As Variant
    
        [I6:I20].ClearContents
        Set rng = [E6:E20]
        
        For Each cella In rng
            i = i + 1
            
            '1-X-2
            If cella.Offset(, 1) > cella.Offset(, 2) Then
                s = "1"
            ElseIf cella.Offset(, 1) = cella.Offset(, 2) Then
                s = "X"
            Else
                s = "2"
            End If
            
            'gol - nogol
            If cella.Offset(, 1) <> 0 And cella.Offset(, 2) <> 0 Then
                s = s & " - gol"
            ElseIf InStr(cella.Offset(, 1) & cella.Offset(, 2), "0") Then
                s = s & " - nogol"
            End If
            
            'over e under
            somma_gol = cella.Offset(, 1) + cella.Offset(, 2)
            s = s & " - " & Choose(somma_gol, "under 1,5 ", "over 1,5 - under 2,5 ", "over 1,5 - over 2,5 - under 3,5 ", "over 1,5 - over 2,5 - over 3,5 ")
            If somma_gol > 4 Then s = s & "over 1,5 - over 2,5 - over 3,5 "
            
            'inserisce la traduzione dei risultati in colonna "esito calcolato"
            cella.Offset(, 3) = s
            
            'cella corrisponde a ESITO (pronostico) quindi controlla col risultato effettivo per dare un responso
            cella.Offset(, 4) = IIf(InStr(UCase(s), cella & " "), "INDOVINATA", "SBAGLIATA")
            'controllo suppletivo per le doppie chance
            If Len(cella) = 2 Then
                cella.Offset(, 4) = IIf(Left(s, 1) Like "[" & cella & "]", "INDOVINATA", "SBAGLIATA")
            End If
        
        Next
    
        MsgBox "Fatto!"
    End Sub
    






  • di Antonio (utente non iscritto) data: 11/02/2013 21:07:43

    Grazie del file, sei ingambissima! Io di vba non ne capisco però con delle formulette me la cavicchio e l'ho fatto pure io; l'ho allegato se ti va dagli un occhiata. Ti saluto



  • di Antonio (utente non iscritto) data: 20/02/2013 10:46:45

    Ciao Vecchio Frac, usando il tuo file ho notato questa cosa che non va e cioè agli under over; nel codice vba ho scritto quello che va bene però preceduto da '. Come si fa a correggerlo? Grazie



  • di Vecchio Frac data: 20/02/2013 18:30:44

    Bene, vedi se questa correzione (basata sulle tue indicazioni) ti risolve il problema.
    Il problema era una errata indicizzazione di Choose (che non accetta un valore zero come indice dell'array) e anche una non corretta espressione delle condizioni (per mia incomprensione).
     
            'over e under
            somma_gol = cella.Offset(, 1) + cella.Offset(, 2)
            s = s & " - " & Choose(somma_gol + 1, "under 1,5 ", "under 1,5 - under 2,5 - under 3,5 ", "under 2,5 - under 3,5 - over 1,5 ", "over 1,5 - over 2,5 - under 3,5 ")
            If somma_gol >= 4 Then s = s & "over 1,5 - over 2,5 - over 3,5 "
    






  • di Antonio (utente non iscritto) data: 20/02/2013 18:39:47

    Va bene per l'under 1,5, ma per l'under 2,5 e under 3,5 con lo 0 - 0 mi da sbagliata invece è indovinata.



  • di Antonio (utente non iscritto) data: 25/02/2013 00:27:24

    Perché agli under over hai messo choose invece di usare if inserendo tutti i casi?



  • di Vecchio Frac data: 26/02/2013 08:55:03

    Per risparmiare righe di codice :)
    somma_gol è un numero quindi si può usare come un indice, non è una condizione che deve essere valutata; gli altri casi invece si basano su una comparazione (maggiore o minore di) e quindi è più logico testare le condizioni con If.





  • di Antonio (utente non iscritto) data: 26/02/2013 16:18:27

    però usando choose non va bene in quanto alcuni casi tipo lo 0 a 0 non esce il risultato giusto; quindi come possiamo scrivere il codice?



  • di Vecchio Frac data: 26/02/2013 22:28:52

    La prima scelta di Choose vale 1, quando "somma_gol + 1" vale 1 significa che la somma era zero.
    E corrisponde soltanto a "under 1,5". A cos'altro dovrebbe corrispondere?





  • di Antonio (utente non iscritto) data: 28/02/2013 17:53:49

    Praticamente se somma gol è uguale a 0 oppure 1 deve essere under 1.5 under 2.5 under 3.5; se uguale a 2 deve essere under 2.5 under 3.5 over 1.5; se uguale a 3 under 3.5 over 1.5 over 2.5; se uguale o superiore a 4 over 1.5 over 2.5 over 3.5.



  • di Antonio (utente non iscritto) data: 03/03/2013 19:08:44

    Ma non si può fare?



  • di Vecchio Frac data: 03/03/2013 20:36:24

    Ma certo che si può fare: basta che descrivi tu i casi.

    Ecco la nuova stringa che contempla la descrizione che hai specificato, sostituiscila nel codice:

    s = s & " - " & Choose(somma_gol + 1, "under 1,5 - under 2,5 - under 3,5 ", "under 1,5 - under 2,5 - under 3,5 ", "under 2,5 - under 3,5 - over 1,5 ", "over 1,5 - over 2,5 - under 3,5 ")

    Se hai capito come funziona Choose non dovrebbe esserti oscuro l'intero meccanismo ^_^
    (p.s. scusami ma mi era sfuggita la continuazione di questo thread che hai marcato "risolto" nonostante stiamo continuando ad alimentarlo)





  • di Antonio (utente non iscritto) data: 05/03/2013 20:51:54

    L'ho sistemato ed ora dovrebbe funzionare, speriamo! Ciao e grazie


  • allegati?
    di totygno71 data: 06/03/2013 14:02:50

    ma dove sono gli allegati?



  • di Vecchio Frac data: 06/03/2013 15:07:08

    Gli allegati vengono rimossi dal sistema dopo due, massimo tre giorni dal loro inserimento.
    Di solito l'interessato che segue la discussione ha il tempo per recuperare eventuali allegati che si riferiscono alla sua problematica.
    E' anche per questo motivo che preferisco, quando possibile, scrivere direttamente il codice nel post, così rimane.





  • di Antonio (utente non iscritto) data: 12/03/2013 21:15:48

    Ciao. Gli under e over ora funzionano, mentre ho visto che gol nogol c'è qualcosa che non va. Gol è quando entrambe le squadre segnano mentre nogol quando almeno una squadra non segna; lo 0 a 0 è nogol. Sto allegando il file dove nel vba ho scritto "a modo mio" come dovrebbe essere la formula che però non funziona.



  • di Vecchio Frac data: 12/03/2013 21:30:26

    Bene... dai che quasi ci siamo ^_^
    Al tuo codice manacava comunque un End If; l'ho accorpato per logica.
    Sulla base della tua indicazione il codice esatto è questo; ho fatto alcune prove, sostituisci il codice al punto giusto e verifica.
     
            'Gol è quando entrambe le squadre segnano mentre nogol quando almeno una squadra non segna; lo 0 a 0 è nogol
            'gol - nogol 
            If cella.Offset(, 1) > 0 And cella.Offset(, 2) > 0 Then      'qui almeno una delle due squadre segna
                s = s & " - gol"
            ElseIf cella.Offset(, 1) = 0 Or cella.Offset(, 2) = 0 Then  'qui una delle due squadre non segna
                s = s & " - nogol"
            End If






  • di Antonio (utente non iscritto) data: 12/03/2013 22:17:45

    Ancora non ho provato la nuova formula, ma nel primo if dove dici che almeno una della due squadre segna non va bene perché devono segnare entrambe le squadre; gol è quando segnano entrambe le squadre.



  • di Vecchio Frac data: 13/03/2013 08:36:45

    L'osservazione è giusta, ho scritto male il commento in italiano ma in effetti il codice è corretto: l'operatore And impone che entrambe le condizioni siano soddisfatte, quindi il Then viene eseguito se la prima squadra segna almeno un gol E ANCHE la seconda squadra segna almeno un gol.
     
    If cella.Offset(, 1) > 0 And cella.Offset(, 2) > 0 Then      'qui entrambe le squadre segnano almeno un gol






  • di Antonio (utente non iscritto) data: 13/03/2013 20:56:21

    Ho provato e non funziona. Nogol va bene mentre gol mi da sempre indovinato anche quando è sbagliato. Ho capito l'arcano: se invece di scrivere gol scrivo per esempio goal funziona; l'arcano sta nella parola gol che è compresa nel nogol e quindi quando è gol mi da indovinato e lo stesso quando è nogol. Come si può rimediare?



  • di Vecchio Frac data: 13/03/2013 21:17:37

    Verissimo... peccato non averci pensato prima, avremmo risparmiato numerosi tentativi.
    Ti riscrivo l'intera Sub con la nuova modifica (più lunga: ho creato un ciclo che controlla esattamente ogni esito possibile col pronostico e quindi da qui non si scappa).
    Fai la modifica e verifica il funzionamento.
    Spero di poter vedere la spunta su Risolta :)
     
    Option Explicit
    
    Public Sub controlla()
    Dim rng As Range, cella As Range
    Dim s As String, i As Integer
    Dim somma_gol As Integer, v As Variant, ok As Boolean
    
        [I6:I20].ClearContents
        Set rng = [E6:E20]
        
        For Each cella In rng
            i = i + 1
            
            '1-X-2
            If cella.Offset(, 1) > cella.Offset(, 2) Then
                s = "1"
            ElseIf cella.Offset(, 1) = cella.Offset(, 2) Then
                s = "X"
            Else
                s = "2"
            End If
            
            'gol - nogol
        'Gol è quando entrambe le squadre segnano mentre nogol quando almeno una squadra non segna; lo 0 a 0 è nogol
            'gol - nogol
            If cella.Offset(, 1) > 0 And cella.Offset(, 2) > 0 Then      'qui almeno una delle due squadre segna
                s = s & " - gol"
            ElseIf cella.Offset(, 1) = 0 Or cella.Offset(, 2) = 0 Then  'qui una delle due squadre non segna
                s = s & " - nogol"
            End If
    
    
            'over e under
            somma_gol = cella.Offset(, 1) + cella.Offset(, 2)
            s = s & " - " & Choose(somma_gol + 1, "under 1,5 - under 2,5 - under 3,5 ", "under 1,5 - under 2,5 - under 3,5 ", "under 2,5 - under 3,5 - over 1,5 ", "over 1,5 - over 2,5 - under 3,5 ")
            If somma_gol >= 4 Then s = s & "over 1,5 - over 2,5 - over 3,5 "
            
            'inserisce la traduzione dei risultati in colonna "esito calcolato"
            cella.Offset(, 3) = s
            
            'cella corrisponde a ESITO (pronostico) quindi controlla col risultato effettivo per dare un responso
            'viene verificato ogni singolo item che di cui si compone il risultato effettivo.
            For Each v In Split(s, "-")
                ok = False
                If LCase(cella) = Trim(v) Then
                    cella.Offset(, 4) = "INDOVINATA"
                    ok = True
                    Exit For
                End If
            Next
            If Not ok Then cella.Offset(, 4) = "SBAGLIATA"
                
            'controllo suppletivo per le doppie chance
            If Len(cella) = 2 Then
                cella.Offset(, 4) = IIf(Left(s, 1) Like "[" & cella & "]", "INDOVINATA", "SBAGLIATA")
            End If
            Next
        If Cells(20, 10) = 0 Then
        MsgBox "SCOMMESSA VINTA!"
        Else
        MsgBox "SCOMMESSA PERSA!"
        End If
        Range("A1").Select
    End Sub
    
    






  • di Antonio (utente non iscritto) data: 14/03/2013 21:05:25

    Purtroppo la spunta risolta non la posso mettere , ti spiego il perché. Ora funziona gol nogol ma non sta funzionando più la X cioè il pareggio. Prima funzionava adesso non sta funzionando più; se il risultato è 1 a 1 e metti X dice sbagliata se metti però la doppia 1X o X2 da indovinata. Un altra cosa: se io gioco ad esempio 7 squadre quando clicco controlla mi escono i risultati a tutte 15 le squadre anche a quelle che non gioco. Io vorrei che uscissero solo alle squadre che gioco.



  • di Vecchio Frac data: 14/03/2013 21:30:14

    Riallego il codice corretto.
    Le modifiche sono evidenziate con un piccolo commento ('<---).
    La soluzione al problema della X è che il confronto va fatto a parità di condizioni: in questo caso ho scelto di confrontare due testi entrambi in LCase (minuscolo). Ma entrambi i termini devono essere in minuscolo altrimenti la "x" è diversa dalla "X".
    Per evitare di scrivere un esito in assenza di pronostico è sufficiente il controllo sulla "cella" che corrisponde al pronostico: se è vuota (assenza di pronostico), non scrive niente nella corrispondente cella dell'esito.
     
    Option Explicit
    
    Public Sub controlla()
    Dim rng As Range, cella As Range
    Dim s As String, i As Integer
    Dim somma_gol As Integer, v As Variant, ok As Boolean
    
        [I6:I20].ClearContents
        Set rng = [E6:E20]
        
        For Each cella In rng
            i = i + 1
            
            '1-X-2
            If cella.Offset(, 1) > cella.Offset(, 2) Then
                s = "1"
            ElseIf cella.Offset(, 1) = cella.Offset(, 2) Then
                s = "X"
            Else
                s = "2"
            End If
            
            'gol - nogol
            'Gol è quando entrambe le squadre segnano mentre nogol quando almeno una squadra non segna; lo 0 a 0 è nogol
            If cella.Offset(, 1) > 0 And cella.Offset(, 2) > 0 Then      'qui almeno una delle due squadre segna
                s = s & " - gol"
            ElseIf cella.Offset(, 1) = 0 Or cella.Offset(, 2) = 0 Then  'qui una delle due squadre non segna
                s = s & " - nogol"
            End If
    
    
            'over e under
            somma_gol = cella.Offset(, 1) + cella.Offset(, 2)
            s = s & " - " & Choose(somma_gol + 1, "under 1,5 - under 2,5 - under 3,5 ", "under 1,5 - under 2,5 - under 3,5 ", "under 2,5 - under 3,5 - over 1,5 ", "over 1,5 - over 2,5 - under 3,5 ")
            If somma_gol >= 4 Then s = s & "over 1,5 - over 2,5 - over 3,5 "
            
            'inserisce la traduzione dei risultati in colonna "esito calcolato"
            cella.Offset(, 3) = s
            
            'cella corrisponde a ESITO (pronostico) quindi controlla col risultato effettivo per dare un responso
            'viene verificato ogni singolo item che di cui si compone il risultato effettivo.
            For Each v In Split(s, "-")
                ok = False
                If LCase(cella) = LCase(Trim(v)) Then               '<--- confrontiamo come si deve!!
                    cella.Offset(, 4) = "INDOVINATA"
                    ok = True
                    Exit For
                End If
            Next
            If Not ok Then cella.Offset(, 4) = "SBAGLIATA"
                
            'controllo suppletivo per le doppie chance
            If Len(cella) = 2 Then
                cella.Offset(, 4) = IIf(Left(s, 1) Like "[" & cella & "]", "INDOVINATA", "SBAGLIATA")
            End If
            
            If Trim(cella) = "" Then cella.Offset(, 4) = ""     ' <--- assenza di pronostico, cella vuota
        Next
        
        If Cells(20, 10) = 0 Then
            MsgBox "SCOMMESSA VINTA!"
        Else
            MsgBox "SCOMMESSA PERSA!"
        End If
        Range("A1").Select
    End Sub
    






  • di Antonio (utente non iscritto) data: 15/03/2013 15:27:08

    Ok, ora funziona perfettamente! Ho allegato il file corretto con aggiunta un mio foglio sempre riguardante le scommesse magari qualcuno lo vorrebbe per esempio Totygno71. Ciao e grazie ancora



  • di Vecchio Frac data: 15/03/2013 15:54:32

    Sono contento ^_^