Novità

macro per excel

antoR

Senior Member
Buonasera a tutti , voglio approfittare del vostro buon cuore e chiedervi di aiutarmi, per la compilazione di una macro.
Il mio problema è quello di riuscire a trovare in una colonna formata da un minimo di 10 numeri ad un max di 30 numeri, tutti interi, la somma che va da un minimo X ad un massimo Y. Si ottengono XX combinazioni e gli addendi che devono essere 6 sono XXX. Da queste colonne devono essere estratte solo quelle formate da 2 dispari e 4 pari, 3 dispari e 3 pari, 4 dispari e 2 pari. Io purtroppo sono molto limitato in informatica.
Vi ringrazio tutti...
Esempio: prendo i primi 10 numeri ma possono essere diversi
colonna A somma 32 combinazioni date 4
1 2 4 5 6 7 8
2 2 3 5 6 7 9
4 2 3 4 6 8 9
5 2 3 4 6 7 10
3
7
10
9
8
6
 

pfca

Advanced Member >GOLD<
Ciao il tuo esempio è poco chiaro, dovresti spiegare meglio cosa vuoi realizzare.
Tu scrivi i primi 10 numeri colonna A somma 32, ma la somma è differente e non
si capisce cosa intendi per combinazioni date.
Quando si pongono richieste, bisogna sempre pensare che chi le legge le deve
prima di tutto capire. Forse più che colonna intendi riga e non capisco perchè poi
la colonna A sono presenti 10 numeri non in ordine progressivo.
Sembra che tu voglia da un sistema prelevare tutte le colonne che hanno una certa somma
e poi prelevare tutte quelle che rientrano in 2-3-4 numeri pari e 2-3-4 numeri dispari.
Ma senza dei parametri precisi diventa difficile aiutarti.
Francesco
 
Ultima modifica:

Nikor

Premium Member
Buon Giorno, in effetti come scritto da Francesco gli esempi sono un po’ scarni, o meglio incompleti…..

Per le macro non vi posso aiutare perché non le uso, ma vediamo in primis cosa dice la matematica che è l’essenza base per la costruzione di una qual si voglia formula o calcolo da inserire nel flusso degli algoritmi!
L’esempio di AntoR:

1) 2 4 5 6 7 8

2) 2 3 5 6 7 9

4) 2 3 4 6 8 9

5) 2 3 4 6 7 10

3 ).......

7)....

10)..

9)..

8)..

6)..

Si evince come fatto notare da Francesco che la prima colonna formata da 10 numeri avrebbe dovuto avere il separatore di carattere per leggere le 4 sestine proposte in orizzontale su righe!

Le 4 sestine che si leggono nell’esempio sono parziali e ne mancano ben 12!
10 numeri naturali, somma minima = ( 01+02+03+04+05+06) = 21 !
10 numeri naturali, somma massima = ( 10+09+08+07+06+05 ) = 45!
Somma richiesta = 32 , si formano 16 sestine!
Allocazione Pari & Dispari:
( 2-4 ) – ( 3-3 ) – ( 4-2 ) nell’insieme uguale a ( 2,3,4 )
****************************************************************
Per i 30 numeri le cose cambiano drasticamente , ( somma minima = 21 ) ( somma massima = 165 )
Sviluppo integrale = 593.775 sestine con 2,3,4 - Pari & Dispari = 493.675 sestine !
Quale somma inserire? ( le formazioni finali saranno sempre un alto congruo…)
Poi ci sarebbe il rischio che inserendo una somma non pertinente non sarebbero presi in considerazione tutti i 30 numeri con esclusione di una buona parte di essi!

Un esempio:
30 numeri con somma 32! Valore ( 01+02+03+04+05 ) = 15 manca un numero per formare la sestina , il numero non potrà che essere il numero 17 ! in effetti ( 15+17 ) = a 32.

Tutti i numeri superiori al 18 compreso saranno esclusi dallo sviluppo……. E per questo specifico caso che coinvolge 30 numeri con somma 32 le sestine finali saranno 44 !

Nella speranza di avere reso il concetto , vi auguro un buon prosieguo di analisi…. Nikor.
 

pfca

Advanced Member >GOLD<
Ciao Nikor, grazie per il tuo intervento esaustivo che hai fatto con la tua analisi, penso che però antoR,
non avendo approfondito ciò che vuole, abbia messo somma 32 come esempio, probabilmente se riferito
al superenalotto lui in un sistema sviluppato (penso integralmente), stabilisce una somma X e tolte tutte le
colonne maggiori o minori di X, voglia poi escludere tutte quelle che non rispettano la condizione dei numeri pari e dispari.
Aspettiamo spiegazioni per capire e poi si potrà iniziare a valutare il da fare.
Francesco
 

antoR

Senior Member
Salve, scusatemi se non ho risposto prima. Forse non sono stato molto chiaro, cerco di spiegarmi meglio. Si la questione riguarda il superenalotto, ho estrapolato 28 numeri che, credo abbiano la forza di combinarsi tra loro abbastanza spesso. Chiaro che 28 numeri danno una mole molto ampia di combinazioni, per cui attraverso delle ricerche statistiche ho cercato di ridurle, come? Prima di tutto combinando i numeri secondo una somma prestabilita che può variare e immessa da me (es. totale della colonna 280 o altro totale ). Poi eliminando da queste combinazioni tutte quelle che sono formate da 5/6 numeri pari o dispari, ottenendo così solo quelle che rispecchiano il mio criterio cioè 2 pari e 4 dispari, 3 pari e 3 dispari, 4 pari e 2 dispari. A monte però, attraverso i numeri dati ci sono le combinazioni.
Spero di essere stato chiaro
 

antoR

Senior Member
Io ho già approntato un file excel, aiutato da un amico, che posso allegare… dove si evincono le combinazioni secondo i vari numeri impostati, ottenendo le varie colonne che sono state monitorate per sapere queste combinazioni quanti numeri dispari hanno. Ma non riesco ad andare oltre. Mi manca la parte per eliminare le colonne che hanno i 5/6 numeri dispari e i 5/6 numeri pari.
 

Allegati

  • Immagine.png
    Immagine.png
    82,1 KB · Visite: 4

pfca

Advanced Member >GOLD<
Ciao antoR, purtroppo l'immagine è piccola, ma serve anche capire i riferimenti,esempio tu dove digiti i 28 numeri, poi dove è che posizione lo sviluppo l'integrale da cui poi eliminare le somme maggiori o minori a quella da te indicata ed in che cella è indicata la somma?
Che celle sono interessate dello sviluppo, eventualmente ti metto la macro, ma i riferimenti li devi correggere tu.

Francesco
 
Ultima modifica:

antoR

Senior Member
Ciao PFCA, grazie per la celere risposta, allora, ho cercato di mettere il file .xlms ma non lo accetta quindi ti copio la macro che serve per determinare le combinazioni secondo la somma della sestina che io gli do combinando una serie di numeri e gli chiedo anche quanti devono essere gli addendi, in questo caso 6 ma possono essere diversi, per il superenalotto 6. mi da X combinazioni che sono in colonne, per cui io non so quante colonne sono, diciamo che sono il max delle colonne. Poi con una formula ho determinato il numero dei dispari. I 28 numeri sono digitati nella colonna B3-B30. Lo sviluppo va da D1 a XFD6. La somma è indicata in B2. Gli addendi da combinare in C1, mentre il numero di combinazioni date in A7.
Se puoi inserisci il tutto in questa macro, in modo da riscriverla tutta insieme.

Sub startSearch()
'The selection should be a single contiguous range in a single column. _
The first cell indicates the number of solutions wanted. Specify zero for all. _
The 2nd cell is the target value. _
The rest of the cells are the values available for matching. _
The output is in the column adjacent to the one containing the input data.
If Range("C1") = "" Then
MsgBox "Inserire in C1 il numero degli addendi desiderati"
Exit Sub
End If
Range("D1:XFD6").ClearContents
LR = Cells(Rows.Count, "B").End(xlUp).Row
Range("B1:B" & LR).Select
If Not TypeOf Selection Is Range Then GoTo ErrXIT
If Selection.Areas.Count > 1 Or Selection.Columns.Count > 1 Then GoTo ErrXIT
If Selection.Rows.Count < 3 Then GoTo ErrXIT

Dim TargetVal, Rslt(), InArr(), StartTime As Date, MaxSoln As Integer, _
HaveRandomNegatives As Boolean
StartTime = Now()
MaxSoln = Selection.Cells(1).Value
TargetVal = Selection.Cells(2).Value
InArr = Application.WorksheetFunction.Transpose( _
Selection.Offset(2, 0).Resize(Selection.Rows.Count - 2).Value)
HaveRandomNegatives = checkRandomNegatives(InArr)
If Not HaveRandomNegatives Then
ElseIf MsgBox("At least 1 negative number is present between positive numbers" _
& vbNewLine _
& "It may take a lot longer to search for matches." & vbNewLine _
& "OK to continue else Cancel", vbOKCancel) = vbCancel Then
Exit Sub
End If
ReDim Rslt(0)
recursiveMatch MaxSoln, TargetVal, InArr, HaveRandomNegatives, _
LBound(InArr), 0, 0.00000001, _
Rslt, "", ", "
'Rslt(UBound(Rslt)) = Format(Now, "hh:mm:ss")
'ReDim Preserve Rslt(UBound(Rslt) + 1)
'Rslt(UBound(Rslt)) = Format(StartTime, "hh:mm:ss")
'Selection.Offset(0, 1).Resize(ArrLen(Rslt), 1).Value = _
Application.WorksheetFunction.Transpose(Rslt)
drow = 1: dcol = 4
'----------------PARTE MODIFICATA--------------------->
For J = 0 To UBound(Rslt)
quanti = Len(Rslt(J)) - Len(Replace(Rslt(J), ",", "")) + 1
If quanti = Range("C1") Then
arr0 = Split(Rslt(J), ",")
For I = 0 To UBound(arr0)
Cells(drow, dcol) = Cells(arr0(I) + 2, 2)
drow = drow + 1
Next
dcol = dcol + 1
drow = 1
End If
Next
'<-------------------------------------------------------
Exit Sub
ErrXIT:
MsgBox "Please select cells in a single column before using this macro" & vbNewLine _
& "The selection should be a single contiguous range in a single column." & vbNewLine _
& "The first cell indicates the number of solutions wanted. Specify zero for all." & vbNewLine _
& "The 2nd cell is the target value." & vbNewLine _
& "The rest of the cells are the values available for matching." & vbNewLine _
& "The output is in the column adjacent to the one containing the input data."
End Sub

Function RealEqual(A, B, Optional Epsilon As Double = 0.00000001)
RealEqual = Abs(A - B) <= Epsilon
End Function
Function ExtendRslt(CurrRslt, NewVal, Separator)
If CurrRslt = "" Then ExtendRslt = NewVal _
Else ExtendRslt = CurrRslt & Separator & NewVal
End Function
Sub recursiveMatch(ByVal MaxSoln As Integer, ByVal TargetVal, InArr(), _
ByVal HaveRandomNegatives As Boolean, _
ByVal CurrIdx As Integer, _
ByVal CurrTotal, ByVal Epsilon As Double, _
ByRef Rslt(), ByVal CurrRslt As String, ByVal Separator As String)
Dim I As Integer
For I = CurrIdx To UBound(InArr)
If RealEqual(CurrTotal + InArr(I), TargetVal, Epsilon) Then
Rslt(UBound(Rslt)) = ExtendRslt(CurrRslt, I, Separator)
'Rslt(UBound(Rslt)) = (CurrTotal + InArr(I)) _
& Separator & ExtendRslt(CurrRslt, I, Separator)
If MaxSoln = 0 Then
' If UBound(Rslt) Mod 100 = 0 Then Debug.Print "Rslt(" & UBound(Rslt) & ")=" & Rslt(UBound(Rslt))
Else
If UBound(Rslt) >= MaxSoln Then Exit Sub
End If
ReDim Preserve Rslt(UBound(Rslt) + 1)
ElseIf IIf(HaveRandomNegatives, False, CurrTotal + InArr(I) > TargetVal + Epsilon) Then
ElseIf CurrIdx < UBound(InArr) Then
recursiveMatch MaxSoln, TargetVal, InArr(), HaveRandomNegatives, _
I + 1, _
CurrTotal + InArr(I), Epsilon, Rslt(), _
ExtendRslt(CurrRslt, I, Separator), _
Separator
If MaxSoln <> 0 Then If UBound(Rslt) >= MaxSoln Then Exit Sub
Else
'we've run out of possible elements and we _
still don't have a match
End If
Next I
End Sub
Function ArrLen(Arr()) As Integer
On Error Resume Next
ArrLen = UBound(Arr) - LBound(Arr) + 1
End Function
Function checkRandomNegatives(Arr) As Boolean
Dim I As Long
I = LBound(Arr)
Do While Arr(I) < 0 And I < UBound(Arr): I = I + 1: Loop
If I = UBound(Arr) Then Exit Function
Do While Arr(I) >= 0 And I < UBound(Arr): I = I + 1: Loop
checkRandomNegatives = Arr(I) < 0
End Function
 

pfca

Advanced Member >GOLD<
Ciao antoR, dopo la macro che hai postato fatta dal tuo amico, mi sembra molto strano che non ti abbia realizzato
anche l'esclusione delle colonne con i pari e i dispari.

​​​​​​​
 

pfca

Advanced Member >GOLD<
Ciao antoG, ho fatto la variazione, fammi sapere questo pomeriggio quando ti trovo in linea,
così vediamo di inviarti il file.
Francesco
 

pfca

Advanced Member >GOLD<
Basta mandare un messaggio, se hai capito cosa ti ho scritto tra le righe, visto che non è difficile indovinarlo!
Francesco
 

antoR

Senior Member
Scusate, ma per motivi di lavoro, ho dovuto fermarmi. Vi posto fin dove sono arrivato. Non mi carica l'allegato
 

Allegati

  • photo18846.jpg
    photo18846.jpg
    12,3 KB · Visite: 1
  • Immagine.jpg
    Immagine.jpg
    12,3 KB · Visite: 2

Oscar

Advanced Member >GOLD<
macro per excel

05-11-2018, 22:09



Buonasera a tutti , voglio approfittare del vostro buon cuore e chiedervi di aiutarmi, per la compilazione di una macro.


Il mio problema è quello di riuscire a trovare in una colonna formata da un minimo di 10 numeri ad un max di 30 numeri, tutti interi, la somma che va da un minimo X ad un massimo Y. Si ottengono XX combinazioni e gli addendi che devono essere 6 sono XXX. Da queste colonne devono essere estratte solo quelle formate da 2 dispari e 4 pari, 3 dispari e 3 pari, 4 dispari e 2 pari. Io purtroppo sono molto limitato in informatica.


Vi ringrazio tutti...


Esempio: prendo i primi 10 numeri ma possono essere diversi


colonna A somma 32 combinazioni date 4


1 2 4 5 6 7 8


2 2 3 5 6 7 9


4 2 3 4 6 8 9


5 2 3 4 6 7 10


3


7


10


9


8


6



Ciao Antor se ho capito bene vuoi una macro che ti sviluppi un sistema in sestine di 30 numeri e selezionando solamente quelle con la somma = 32 e i pari da 2 a 4 , ti dico subito che con Excel è meglio che lo lasci perdere perché il calcolo è troppo grande ,Excel è limitato , ma è ottimo ma per cose piccole
Per la questione ti indico di usare un programma per il Superenalotto dove puoi selezionare tutti i numeri che desideri selezionare la somma che desideri e i numeri pari e magari vuoi aggiungere anche il ridotto
 

pfca

Advanced Member >GOLD<
Prima di tutto un saluto ad Oscar.
Per antoR, avevi detto di aver capito l'indovinello ma non ho mai ricevuto tuo msg, il file è pronto da novembre, manca solo il tuo contatto per inviartelo,
Ti ripropongo l'indovinello e spero che questa volta lo capisci veramente così da scrivere un messaggio di posta a cui poi inviarti il file:
Al mio nickname aggiungi l'anno di nascita 53, poi ci metti una lumacchina e l'account di posta di google per arrivare a me.
Francesco
 

Ultima estrazione Lotto

  • Estrazione del lotto
    martedì 23 aprile 2024
    Bari
    47
    22
    34
    20
    50
    Cagliari
    33
    14
    86
    02
    62
    Firenze
    61
    22
    44
    19
    26
    Genova
    21
    12
    57
    82
    55
    Milano
    66
    05
    11
    70
    30
    Napoli
    05
    23
    25
    52
    73
    Palermo
    23
    44
    49
    71
    65
    Roma
    82
    37
    59
    34
    71
    Torino
    26
    42
    66
    15
    58
    Venezia
    57
    06
    68
    54
    84
    Nazionale
    21
    79
    49
    03
    01
    Estrazione Simbolotto
    Genova
    24
    02
    19
    03
    27

Ultimi Messaggi

Alto