我正在尋找一種方法來在Excel中計算一次隨機數。所以它第一次計算它的計算值,但之後它不會改變。例如,如果我在B1 RANDONCE(A1)
中有這樣的事情,那麼我第一次在A1中輸入一個值時,它會計算一個隨機值,但是它不會再改變。或者至少在我再次改變A1之前。在Excel中計算一個靜態隨機數(計算一次)
我想這樣做,而不需要手動重新複製B1,將它從公式轉換爲描述爲here的值。宏的使用很好。
我正在尋找一種方法來在Excel中計算一次隨機數。所以它第一次計算它的計算值,但之後它不會改變。例如,如果我在B1 RANDONCE(A1)
中有這樣的事情,那麼我第一次在A1中輸入一個值時,它會計算一個隨機值,但是它不會再改變。或者至少在我再次改變A1之前。在Excel中計算一個靜態隨機數(計算一次)
我想這樣做,而不需要手動重新複製B1,將它從公式轉換爲描述爲here的值。宏的使用很好。
你需要帶記憶功能的UDF,因此它知道如果小區已經改變
此UDF將返回一個新的隨機值當refered調用的變化,否則返回最後一個隨機值(即沒有變化)
也返回空白,如果源小區是空白的(可能是也可能不是您需要什麼?)
注:它在紙張被關閉了Static
值都將丟失的問題,所以該值將每次改變表被打開。
Function randonce(r As Range)
Static trigger As Variant
Static v As Double
If r <> trigger Then
v = Rnd
trigger = r
End If
If Len(r) <> 0 Then
randonce = v
Else
randonce = vbNullString
End If
End Function
謝謝你的回答@ChrisNeilsen!它只需要進行一些小的調整即可成爲一體化解決方案。 **第一行:**'函數RandOnce(Long As Long,Long As Long,r As Range)As Long' ** Change **'v = Rnd' ** to **'v = Int(Rnd *(High + 1 - 低))+低「和**在聲明後添加」隨機化「**以確保RNG得到重置。 – TesseractE
您可以創建一個UDF(用戶定義函數):
Public Function Rand_once(ByVal r As Range)
Rand_once = Rnd
End Function
在你想要的結果的單元格,可以放:
=Rand_once(A1)
的值將改變(實際上,只有當源值發生變化時(也就是A1
)纔會被重新計算)。
-1如果工作表有完整的重新計算(例如按Ctrl-Alt-F9),這將改變值, –
這並未被OP精化,我認爲這將足以提供他提供的信息。 – JMax
我不同意。我認爲「但它不會再改變」排除完全重算的變化。 –
這顯然不會是最好的解決辦法,如果你要跟蹤多個細胞,但如果是只是 A1您需要跟蹤更改,您可以在B1使用事件做你的功能,然後在最後給它賦值。我發現這是最簡單的解決方案,它可以按照您的要求運行。
例子:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then
With Cells(1, 2)
.Value = "=rand()" 'or whatever
.Value = .Value
End With
End If
End Sub
如果您必須跟蹤許多單元格,則可以使用'Intersect'使其更具可讀性。然而,我發現這個解決方案相當不錯,因爲它顯然不會改變它的價值(每當Full Recalc左右,請參閱我的回答下面的Chris的辯論),直到A1會發生變化(所以我認爲這值得+1 :)) – JMax
我想我有一個更簡單的方法來做到這一點。完成電子表格,然後爲該列數字應用= RANDBETWEEN函數。然後執行此操作:
現在你有最近創建的值,它們是靜態的。
您也可以使用循環引用來創建一個純粹的公式驅動的「切換開關」,允許用戶計算一組隨機數,然後關閉進一步的重新計算。 Turn off circular reference warnings,然後把該式中細胞B3:
=IF($B$1="YES",RAND(),B3)
如果電池B1包含「YES」,B3將生成與每個電子表格重新計算一個新的隨機數;如果B1包含任何其他值,B3的當前值將被保留。
值需要保持「固定」多長時間?只是在一個會議,或保存後,等? –
如果你對一個不是真正「隨機」的值感到滿意,只是不透明,你可以使用從http://stackoverflow.com/questions/3498356/md5-hash-function-in-excel鏈接的東西來計算'A1'中的值的散列值。 – AakashM
聽起來就像你想要一個事件。我在下面添加了一個答案。請注意,您可以在VBA中的一個步驟中將它的值(來自公式)分配給B1,因此您不需要像在他添加的鏈接中發佈的那樣執行它。 – aevanko