Continuo ad avere dubbi sui risultati concretamente ottenibili, comunque vediamo di fare qualche passo avanti...
Per cominciare ho ripreso un precedente lavoro, dove avevo pubblicato un "modello" per cercare i possibili addendi di un elenco che fornissero una cera somma; vedi
viewtopic.php?f=26&t=110098Partendo da quel file ne ho pubblicato un secondo,
CercaCombinaz_V1-308_PnN.xlsm, che puo' essere scaricato seguendo le informazioni presenti in questo messaggio:
viewtopic.php?f=26&t=110098&p=666439#p666439Usero' quel file per calcolare le possibili combinazioni; i risultati invece li accumuliamo all'interno di Foglio2 (che supponiamo in partenza sia vuoto).
Tutto questo viene fatto dalla Sub FeedCercaZero, corrispondente a questo codice:
- Codice: Seleziona tutto
Sub FeedCercaZero()
Dim deSh As Worksheet, starD As Date
Dim I As Long, J As Long, MaxI As Long, NextO As Long
'
Sheets("Foglio1").Select
Set deSh = Sheets("Foglio2") '<<< Il foglio per i risultati
'
MaxI = Cells(Rows.Count, "A").End(xlUp).Row
For I = 2 To MaxI
If Cells(I, 1) <> "" And Cells(I, 1) <> starD Then
starD = Cells(I, 1)
'Cerca il fine "settimana":
For J = 1 To 100
'Debug.Print Cells(I + J, 1).Value
If Cells(I + J, 1).Value > (starD + 6) Or (I + J) > MaxI Then Exit For
Next J
Debug.Print I, starD, J
'Registra la data di partenza;
NextO = deSh.Cells(Rows.Count, "B").End(xlUp).Row + 2
deSh.Cells(NextO, 1) = Cells(I, 1).Value
'Popola l'area dei dati e avvia la ricerca:
Workbooks("CercaCombinaz_V1-308_PnN.xlsm").Sheets("Lavoro").Range("B2:B199").ClearContents
Cells(I, 1).Resize(J, 1).Select 'Solo per debug
Workbooks("CercaCombinaz_V1-308_PnN.xlsm").Sheets("Lavoro").Range("B2").Resize(J, 1).Value = Cells(I, 2).Resize(J, 1).Value
Application.Run "'CercaCombinaz_V1-308_PnN.xlsm'!CercaComb308P", "True", 0.001
Debug.Print , Range("BAA1").End(xlToLeft).Column
'Copia i risultati in Foglio2:
Range(Range("B1"), Range("BAA1").End(xlToLeft)).Resize(J + 1).Copy deSh.Cells(NextO, 2)
Application.CutCopyMode = False
ThisWorkbook.Activate
DoEvents
End If
Next I
MsgBox ("Analisi completata")
End Sub
Il codice va inserito in un "Modulo Standard" del progetto vba del tuo file
Operativamente:
-scarica il file CercaCombinaz_V1-308_PnN.xlsm
-inserisci il codice della Sub FeedCercaZero nel tuo file
-apri il file CercaCombinaz_V1-308_PnN.xlsm
-quando sei pronto lancia la Sub FeedCercaZero; poiche' la macro deve fare un "tot" di simulazioni (una per ogni data del tuo file) e ogni simulazione prevede la verifica di tutte le possibili combinazioni tra gli N addendi, il tutto portera' via "qualche minuto"
Il mio file di test e'
byKAR64_C40222_Ricerca.xlsm; puo' essere scaricato qui:
https://www.dropbox.com/scl/fi/nz7dmi86 ... tkpmj&dl=0Contiene gia' la Sub FeedCercaZero e mostra in Foglio2 i risultati della mia prova.
Come si leggono i risultati di Foglio2:
-in colonna A c'e' la data di partenza
-in colonna B ci sono i dati relativa ai 7 giorni che partono dalla data di colonna A
-in colonna C, in verticale, sono marcati con "1" le combinazioni che danno luogo alla somma=0
Sono state esaminate 252 date (di partenza) e in totale sono state trovate 4351 combinazioni (abbastanza piu' bassa della stima che avevo fatto ieri sera).
Vedi che cosa si capisce da questo mio discorso e dal file demo che puoi scaricare, e dai un feedback.