ciao, sono alle prese con un nuovo progetto, per me titanico, che cerco di illustrarvi.
è stato progettato per il win ma vorrei adattarlo anche al superenalotto.
nel foglio 1 ho inserito i numeri da 1 a 20, disposti in un quadrato come vedrete nel file che vi allego:
http://www.filedropper.com/sviluppocomb ... ndizionato
la disposizione non è importante qualora, ai fini del calcolo, crediate sia meglio disporli tutti su una riga o colonna.
per evitare di digitare i numeri da scegliere ogni volta ho pensato di inserire tutti i numeri, così la scelta potrebbe avvenire cliccando sulla cella corrispondente, attivandola e far comprendere alla macro che si è scelto quel numero.
sto cercando alcuni argomenti al riguardo, ma fino ad oggi non ho trovato nulla.
anche questa soluzione, se non è possibile realizzarla, non è poi così importante ai fini del calcolo che mi accingo a spiegarvi.
1) sviluppiamo tutte le combinazioni che si possono ottenere con i numeri scelti, anche scegliendoli tutti da 1 a 20, e le inseriamo nel foglio 2 a partire da B3.(vedi foglio 2)
a tal proposito ho modificato una macro realizzata da Anthony nel topic " FORMULA PER COMBINARE 90 NUMERI", ma mi sono fermato alle sestine, poichè il mio excel 03 non ha righe sufficienti per ospitare valori maggiori di 65536.
la macro dovrebbe prevedere quindi che se le combinazioni sviluppate superano il limite del foglio si deve passare al foglio successivo.
non credo che arriverò a sviluppare una tale quantità di combinazioni, ma vorrei prevenire una eventuale modifica della macro per questo problema.
2) ESECUZIONE DEL CALCOLO:
consideriamo:
1) tutte le combinazioni sviluppate,range B-K sotto (A), inserite nel foglio 2 e successivi se lo sviluppo supera il numero di righe del foglio ;
2) la prima combinazione del range P-Y, sotto (B), range P3-Y3;
3) i valori MIN e MAX che si trovano sulla stessa riga della prima combinazione del range P-Y, celle AA3 e AB3.
da tutte le combinazioni sotto (A) eliminiamo, momentaneamente, tutti i numeri diversi da quelli contenuti nella prima combinazione sotto (B).
dei restanti numeri sotto (A) calcoliamo le somme, riga per riga, e verifichiamo, per tutte le combinazioni sotto (A), se il risultato della somma è compreso od uguale ai valori MIN e MAX di AA3 e AB3.
se la somma è compresa tra il MIN e MAX, oppure è uguale ad uno dei due valori, accettiamo le combinazioni sotto (A), altrimenti le scartiamo.
memorizziamo le somme buone o meglio le righe in cui si trovano le somme relative a quelle combinazioni che verranno accettate;
ripristiniamo tutta la colonna (A) con i valori originari;
copiamo le combinazioni accettate sotto (A) nel foglio, diciamo il 20, i precedenti fogli possono servire per l'elaborazione.
ripetiamo lo stesso calcolo considerando tutte le combinazioni sotto (A);
la seconda combinazione sotto (B);
ed i corrispondenti valori MIN e MAX, posti nelle celle AA4 ed AB4.
le combinazioni accettate le accodiamo alle precedenti.
ripetiamo il calcolo fino all'ultima combinazione sotto (A).
i valori che ho inserito nel file sono totalmente casuali, non avendo eseguito alcun calcolo.
così pure le colonne possono essere diverse per necessità di calcolo.
il numero delle combinazioni sotto (A) dipende evidentemente dal numero di valori scelti nel foglio 1, e quindi dal numero di combinazioni sviluppate in ogni calcolo;
le combinazioni sotto (B) vengono prelevate da una altra cartella che ancora non ho completato, e col tempo aumentano, e si dovrebbe prevedere anche in questo caso la possibilità di passare al foglio successivo;
quindi vorrei inserire una call che preleva questi dati, (ho già la macro che effettua il trasferimento di valori).
anche questi ultimi valori variano ad ogni calcolo eseguito nella propria cartella, ma la variazione è limitata ai valori che inserisco ogni volta, rimanendo invariati i valori del calcolo precedente.
infine anche i valori nelle colonne AA ed AB, vengono prelevati da una altra cartella, ed anch'essi variano tutti ad ogni calcolo eseguito nella propria cartella.
quindi tutti i valori nelle colonne AA ed AB variano continuamente ad ogni calcolo.
anche per questi valori devo prevedere una call che li importa e la possibilità di passare al foglio successivo.
è evidente che non si conosce l'ultima riga piena o prima vuota, nei rispettivi range, per accodare i valori.
riassumendo, l'elaborazione deve:
1) sviluppare le combinazioni;
2) eliminare in tutto (A), non in modo definitivo, i valori diversi da una combinazione di (B);
3) eseguire le somme, per riga, sotto (A);
4) confrontare le somme con i valori in una cella di AA ed AB;
5) ripristinare (A);
6) copiare in un altro foglio le combinazioni sotto (A) che hanno rispettato la condizione di AA ed AB
7) ripetere il calcolo.
per quanto riguarda il flusso del calcolo non so se è meglio e più semplice sviluppare le combinazioni e successivamente eseguire i punti 2-3-4.., oppure eseguire i punti 2-3-4.. durante lo sviluppo delle combinazioni.
infine, e concludo, si potrebbe strutturare la macro in modo che il calcolo sia eseguito sia sviluppando le combinazioni, sia inserendo manualmente le combinazioni sotto (A) oppure importandole da un file txt.
la struttura che ho dato alla cartella, le righe, le colonne ed i valori nelle celle sono solo indicativi al solo scopo di illustrare l'elaborazione, e quindi per necessità di calcolo possono essere variate;
sarà la complessità della macro a stabilire la struttura della cartella.
credo di aver esposto tutto e spero con chiarezza.
mi rendo conto che sono l'autore dell' Odissea, ma chiarezza e sintesi, a volte, non sono buoni alleati.
saluti e grazie