Como sumar aleatoriamente en excel?

Primero que nada felicidades por este gran sitio de apoyo para los novatos en el tema y gracias a los expertos por su tiempo y dedicación...

Quisiera saber como realizar una sumatoria aleatoria de una cantidad de números X y que el resultado siempre de entre un rango de 35.5 a 36 y que la sumatoria aleatoria la pueda actualizar varias veces.

Gracias

1 respuesta

Respuesta
1

Necesito más datos. Los números los puedes crear tu o están creados. Se suma todas la misma cantidad de números de números o es distinta. ¿Cuáles son los límites entre lo s que pueden estar los números?

Si tienes un libro con esto mándamelo, así o a lo mejor entiendo lo que quieres.

Mi correo es

Los números los puedo crear yo, la cantidad de números a
introducir son 10, los limites de la suma entre los que debe de estar son
entre 35.5 y 36 y las sumas aleatorias que sean indistintas.

Por ejemplo: introduzco estos 10 números y quiero que se sumen
aleatoriamente y que el resultado final este entre 35.5 y 36 osea <= 36 y
>=35.5.

12
11
8
7.5
2.3
15
21
3.2
6
5

Sigo sin entenderlo.

Opción 1)

Tu metes 10 números sin ninguna restricción y debes tomar unos cuantos de ellos 2, 3, 4, ¿5 o los que sean que sumen entre 35.5 y 36?

Si es eso, puede ser que haya varias opciones o que no haya ninguna.

Opción 2)

Lo que quieres es que el ordenador genere 10 números aleatorios de forma que su suma esté comprendida entre 35.5 y 36

En este segundo caso habría que poner unos límites a los valores de los números y/o decir cuánto se quiere que sean de parecidos entre sí.

Dime cuál es la opción, o si es otra tendrás que explicarla con todo lujo de detalles.

Tal vez si me explicaras para que sirve lo que quieres hacer lo entendería mejor.

Buenos días, es la opción 1 exactamente como la plasmaste!!

Gracias !

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.

Wow muchísimas gracia, solo una duda, el código donde lo introduzco para probarlo??

Gracias !

¿No has trabajado aún con ninguna macro?

El código debes introducirlo en un módulo que debes crear con el editor de Visual basic. Entonces se creará una macro llamada CalcularSumas que es la que debes ejecutar.

Si todo esto te suena a chino es que necesitas un cursillo sobre macros.

Para empezar debes ejecutar el editor de Visual Basic que está en la ficha Programador. Si no lo encuentras o tu versión es 2003 pulsa ALT + F11. Luego pulsa el menú Insertar y dentro de el Módulo. Y en esa ventana es donde hay que copiar el texto de la macro.

UNa vez hecho eso ya tienes la macro. La puedes ejecutar en la misma ficha Programador o con el atajo ALT + F8.

De todas formas te mando el fichero ya con la macro incorporada y un botón para lanzarla.

Enlace a Suma10

Y eso es todo.

Muchísimas gracias, creo que si necesito un cursillo de esto, me recomiendas alguno?

De verdad muchísimas gracias y felicidades por su excelente trabajo.

De verdad me han hecho esta pregunta varias veces y no encuentro libro o página web definitiva al respecto. Lo que hago yo es buscar en el Google las preguntas concretas en cada momento. Puedes mandar la pregunta sobre el cursillo a Aprendemos o ponerla en el tablón de Excel. Yo soy más bien programador de tipo general que especialista en Excel.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas