non so se capita anche ha voi... Ho fatto delle ulteriori prove...
mi sono accorto che alcune volte la somma di addendi non è uguale al totale solo perchè questa varia dall'altro per un errore nella 7ma-8va cifra di decimale e oltre... questo errore su vari pc...
per cui ho dovuto modificare leggermente il codice... eliminando anche l'
exit do che mi diceva ezechiel a discapito del maggior tempo di esecuzione della macro stessa... per via del controllo di tutte le combinazioni possibili per arrivare al totale sperato.
per cui il mi codice definitivo è questo (quello di ezechiel è nettamente migliore e con una buona conoscenza"professionale" di excel
ma mi pare un po' complessa l'esecuzione e la macro...) premesso che ora bisogna solo mettere in B1 il totale da quadrare e in B2 la quantità dei dati da combinare nella somma...
- Codice: Seleziona tutto
Sub binario()
totale# = 0
Rem importo da quadrare
totalone# = Range("B1").Value
Rem qui verranno segnalate le righe degli importi che andranno a formare il totalone#
righe = ""
Rem valori che hai inserito da A1 in poi...
valori = Range("B2").Value
Do
x = x + 1
If x > 2 ^ (valori) Then Exit Do
For t = 0 To valori
If x And (2 ^ t) Then
totale# = totale# + Range("a" & t + 1).Value
'Range("b" & t + 1).Value = Range("a" & t + 1).Value
righe = righe & "A" & t + 1 & " "
'Else
'Range("b" & t + 1).Value = 0
End If
Next
If Round(totale#, 2) = Round(totalone#, 2) Then
MsgBox righe & vbCrLf & (totale#)
'Exit Do
End If
totale# = 0
righe = ""
Loop
MsgBox ("elaborazione terminata")
End Sub
E' vero che bisogna trascrivere i valori della msgbox e la cosa era quasi intenzionale, ma, se non erro, il ricalcolo delle formule anche senza screenupdating, non fa aumentare il tempo di esecuzione della macro?...
Comunque gamma_ray le soluzioni le hai, spero che tu sia riuscito a risolvere il problema...