Combinatoria en VBA para Excel

Estoy trabajando en una macro que me copie en una hoja de Excel todas las combinaciones posibles de tres variables, cuya suma hacen la cuarta. Dos de las variables crecen en paso de 0,5 y la tercer en paso de 0,25.

Me da error de desbordamiento cuando "fila" vale 32.767.

Sub combinatoria()

'Dimensiona variables
Dim Libro As String: Dim Hoja As String
Dim Caudal As Double: Dim Plata As Double: Dim Oro As Double: Dim Multimedia As Double: Dim fila As Integer

'Incializa varibles
Libro = ThisWorkbook.Name
Hoja = "MacroLAN - Otros"
fila = 0

For Caudal = 0.5 To 10000 Step 0.25
For Plata = 0 To Caudal Step 0.5
For Oro = 0 To (Caudal - Plata) Step 0.5
Multimedia = Caudal - Plata - Oro
Workbooks(Libro).Worksheets(Hoja).Cells(3 + fila, 5) = Caudal
Workbooks(Libro).Worksheets(Hoja).Cells(3 + fila, 7) = Plata
Workbooks(Libro).Worksheets(Hoja).Cells(3 + fila, 8) = Oro
Workbooks(Libro).Worksheets(Hoja).Cells(3 + fila, 9) = Multimedia
fila = fila + 1
On Error Resume Next
Next
On Error Resume Next
Next
On Error Resume Next
Next

End Sub

¿Sabéis cómo podría solucionarlo?

1 Respuesta

Respuesta
1

[Hola

Tu bucle correspondiente a "Caudal" da más de 40 mil "vueltas" y tú has declarado tu variable "fila" como tipo "Integer" y el límite de ese tipo es justamente 32767, por eso al intentar sumarle un uno más (fila = fila + 1) causa el error que has mencionado. Declara tu variable a tipo "Long"

Abraham Valencia

PD: El controlador "On Error Resume Next" lo estás usando mal, por si acaso. Dale una leída a su uso.

¡Gracias! Sí, me di cuenta al escribir aquí. Lo que no tuve en cuenta es que son tantas combinaciones que lleno todas las filas del Excel jajaja Tendré que darle una pensada.

Un saludo,

Bea

Pues claro, tienes bucle sobre bucle sobre bucle, demasiadas combinaciones para una sola hoja con "apenas" 1'048,576 je je je.

Una forma de hacerlo es que detectes el número de fila (con la propia variable que lleva ese nombre) y al llegar a la cifra mencionada use otra hoja para seguir insertando los datos. Pero claro, tendrías que cambiar varias cosas y sí, es aún un poco más complicado de lo que ya estás intentando hacer.

Abraham Valencia

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas