Pues me parece que ya lo tengo.
Escribiré el código para quien le pueda servir y dejaré el fichero en Dropbox.
Enlace al fichero Suma10
Public Columna As Integer
Public Const Superior = 36
Public Const Inferior = 35.5
Public Const MaximaCantidadNumeros = 16
Public Lista(MaximaCantidadNumeros) As Double
Public Sumas(2 ^ MaximaCantidadNumeros - 1) As Double
Sub CalcularSumas()
'By ValeroASM
Dim Auxi As Single
Dim Pot, Pot2, j As Long
Dim i, Numeros, Hallados As Integer
Dim uc As Range
Numeros = MaximaCantidadNumeros
For i = 0 To MaximaCantidadNumeros - 1
If Range("A" & i + 1) <> "" Then
Lista(i) = Range("A" & i + 1).Value
Else
Numeros = i
Exit For
End If
Next
Range("B1:" & Range("B1").End(xlToRight).Offset(Numeros + 3, 0).Address).Clear
Columna = 2
Hallados = 0
Sumas(0) = 0
Sumas(1) = Lista(0)
Pot2 = 2
For i = 1 To Numeros - 1
Pot = Pot2
Pot2 = 2 * Pot
S = Lista(i)
Sumas(Pot) = S
For j = Pot To Pot2 - 1
Sumas(j) = S + Sumas(j - Pot)
If Sumas(j) <= Superior Then
If Sumas(j) >= Inferior Then Call Escribir(j): Hallados = Hallados + 1
End If
Next
Next
MsgBox ("Se han encontrado " & Hallados & " sumas posibles.")
End Sub
Private Sub Escribir(ByVal Numero As Long)
'By ValeroASM
Dim Resto, Contador, Nume, Fila As Integer
Fila = 1
Contador = 0
Nume = Numero
While Nume <> 0
Resto = Nume Mod 2
If Resto = 1 Then Cells(Fila, Columna) = Lista(Contador): Fila = Fila + 1
Nume = (Nume - Resto) / 2
Contador = Contador + 1
Wend
Fila = Fila + 1
Cells(Fila, Columna) = Sumas(Numero)
Cells(Fila, Columna).Interior.Color = vbYellow
Columna = Columna + 1
End Sub
Sobre el algoritmo no comentaré nada, me llevo todó el día averiguarlo y perfeccionarlo. Es rápido aunque necesita bastante memoria porque las sumas las hace basandose en otras anteriores que guarda en la memoria en el array
Public Sumas(2 ^ MaximaCantidadNumeros - 1) As Double
donde puse
Public Const MaximaCantidadNumeros = 16
Creo que con eso ocupa 524288 bytes
Pero cada número que añadas a 16 duplicará la memoria necesaria. Lo mejor es que pongas esa constante con el valor con kla cantidad real de números que estás usando.
Los números que realmente usará son los que hayas en la columna A desde A1 hasta que encuentre una casilla vacía.
Y eso es todo, pruébalo y ojala te funcione como quieres. Si necesitas alguna explicación pídemela.