una todas saber referencia las hay funciones error encontrar eliminar donde div cómo corregir excel vba excel-vba excel-formula

todas - referencia circular en excel 2013



¿Cómo lograr esto en Excel sin un razonamiento circular? (3)

Quiero crear una página de Excel donde, en primer lugar, tengo cuatro números aleatorios entre los valores 0-9 que se actualizan como quiero. Esto es fácil usando =RANDBETWEEN(0,9) en cuatro celdas (A1-D1, por ejemplo). Ahora es la parte difícil que quiero que cada uno de estos números aleatorios se detengan cuando alcanza un cierto valor entre 0-9, de modo que si continuamente actualizo las fórmulas si una de las cuatro celdas de número aleatorio alcanza un cierto valor, se detendrá en ese momento. valor y luego no producir más números aleatorios.

Entonces, por ejemplo, si configuro A1 como =RANDBETWEEN(0,9) , puedo seguir refrescando esa celda hasta que se convierta en 5 (o cualquier otro número 0-9) y luego se detenga.

Para lograr esto, quiero decir algo como:

=IF(A1=5,5,RANDBETWEEN(0,9))

por supuesto, esto no funciona, ya que es circular. ¿Cómo puedo lograr esto en Excel?


En el menú ARCHIVO -> OPCIONES -> FÓRMULA, habilite cálculos iterativos. con iteraciones máximas de 1

Luego usa la fórmula que sugeriste:

=IF(A1=5,5,RANDBETWEEN(0,9))

Se detendrá cuando sea igual a 5 y se quede allí.

O puede usar esta función que es similar al @ Gary''sStudent

Function MyRandBetween(Strt As Long, Ed As Long, Sty As Long) As Long Application.Volatile If Application.Caller.Value = Sty Then MyRandBetween = Sty Exit Function Else MyRandBetween = Application.WorksheetFunction.RandBetween(Strt, Ed) End If End Function

Entonces tu fórmula sería

=MyRandBetween(0,9,5)

Se detendrá a las 5 y se quedará allí. De lo contrario, elegirá aleatoriamente un número.


Prueba esta macro corta:

Sub Leave5Alone() With Range("A1") If .Value = 5 Then Else .Value = Application.WorksheetFunction.RandBetween(1, 5) End If End With End Sub

Esto se puede extender fácilmente para cualquier rango de celdas y valores de detención.


Una forma fácil de hacerlo es con los eventos de VBA. El evento calcular lo hará por usted. Pruebe lo siguiente en una hoja, donde ya tiene las fórmulas RANDBETWEEN :

Por ejemplo, aquí:

Option Explicit Private Sub Worksheet_Calculate() Dim myCell As Range For Each myCell In UsedRange If myCell.HasFormula And myCell.Value = 5 Then myCell.Value = myCell.Value End If Next myCell End Sub

Sin embargo, si hay una fórmula como =A1+A2 que también devuelve 5 , la fórmula también se traducirá a valor. Para evitar esto, puede intentar buscar palabras como RANDBETWEEN en la fórmula. Para hacerlo, intente implementar esto en el código:

If InStr(1, UCase(myCell.Formula), "RANDBETWEEN") > 0 Then