Excel

2011-11-04 18 views
8

में एक स्थिर यादृच्छिक संख्या (इसे एक बार गणना करें) की गणना करें मैं Excel में एक बार यादृच्छिक संख्या की गणना करने का एक तरीका ढूंढ रहा हूं। तो इसकी पहली बार इसकी गणना की गई, लेकिन फिर यह बाद में नहीं बदलती है।Excel

तो उदाहरण के लिए, यदि मेरे पास बी 1 RANDONCE(A1) में ऐसा कुछ था, तो पहली बार मैंने ए 1 में एक मान डाला, यह एक यादृच्छिक मान की गणना करेगा लेकिन फिर यह फिर से नहीं बदलेगा। या कम से कम तब तक जब तक मैंने ए 1 को फिर से नहीं बदला।

मैं बी 1 को मैन्युअल रूप से बिना किसी सूत्र से बदलने के लिए इसे करना चाहता हूं जैसा कि here वर्णित है। मैक्रोज़ का उपयोग ठीक है।

+1

मूल्य को "निश्चित" रहने की कितनी देर तक आवश्यकता है? बस एक सत्र में, या बचत के बाद, आदि? –

+0

यदि आप ऐसे मूल्य से खुश होंगे जो वास्तव में 'यादृच्छिक' नहीं है, तो केवल अपारदर्शी, आप http://stackoverflow.com/questions/3498356/md5-hash-function-in-excel से जुड़े कुछ का उपयोग कर सकते हैं 'ए 1' में मान के हैश की गणना करें। – AakashM

+0

लगता है जैसे आप एक घटना चाहते हैं। मैंने नीचे एक जवाब जोड़ा। ध्यान दें कि आप वीबीए में एक चरण में बी 1 के मूल्य (फॉर्मूला से) असाइन कर सकते हैं, इसलिए आपको ऐसा करने की आवश्यकता नहीं है जैसे उन्होंने आपके द्वारा जोड़े गए लिंक में पोस्ट किया है। – aevanko

उत्तर

3

आप स्मृति के साथ एक यूडीएफ की जरूरत है, तो यह जानता है सेल

यह यूडीएफ एक नई यादृच्छिक मान प्रदान करेंगे जब बदलाव कॉल करने के लिए संदर्भित, अन्यथा पिछले यादृच्छिक मान देता है (यानी कोई परिवर्तन नहीं)
बदल गया है यदि स्रोत सेल रिक्त है (क्या हो सकता है या नहीं हो सकता है तो भी खाली हो सकता है)

नोट: यह समस्या है कि 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 
+0

इस उत्तर के लिए धन्यवाद, @ChrisNeilsen! इसे केवल एक-एक-एक समाधान के लिए कुछ छोटे बदलावों की आवश्यकता होती है। ** पहली पंक्ति: ** 'फंक्शन रैंडऑन (लम्बाई जितना लंबा, लंबा लंबा, आर रेंज के रूप में) लंबे समय तक ** ** बदलें ** 'वी = आरएनडी ** ** ** ** वी = इंट (आरएनडी * (उच्च + 1 - कम)) + लो' और ** आरएनजी रीसेट होने के लिए घोषणाओं के बाद ** 'यादृच्छिक' जोड़ें **। – TesseractE

3

आप एक यूडीएफ (उपयोगकर्ता निर्धारित समारोह) बना सकते हैं: सेल जहां परिणाम चाहते हैं

Public Function Rand_once(ByVal r As Range) 
    Rand_once = Rnd 
End Function 

, आप रख सकते हैं:

=Rand_once(A1) 

मूल्य बदल जाएगा (वास्तव में, पुन: गणना की जा रही है) केवल जब स्रोत मान बदलता है (उर्फ A1)।

+2

-1 शीट में पूर्ण पुनर्मूल्यांकन होने पर यह मूल्य बदल जाएगा (उदाहरण के लिए ctrl-alt-F9 दबाएं) –

+0

यह ओपी द्वारा सटीक नहीं था और मुझे लगता है कि यह पर्याप्त जानकारी प्रदान की जाएगी जो उसने दी थी। – JMax

+2

मैं असहमत हूं। मुझे लगता है "लेकिन फिर यह फिर से नहीं बदलेगा" पूर्ण recalc पर परिवर्तन को छोड़कर। –

1

यह स्पष्ट रूप से सबसे अच्छा समाधान आप कई कोशिकाओं को ट्रैक करने के लिए है, तो नहीं होगा, लेकिन अगर यह सिर्फ A1 है आप परिवर्तन के लिए ट्रैक करने की जरूरत है, तो आप बी 1 में अपने कार्य करने के लिए एक घटना का उपयोग कर सकते हैं, फिर अंत में, इसे दिया गया मान असाइन करें। मुझे यह सबसे आसान समाधान मिल गया है और यह काम करता है क्योंकि आपको इसकी आवश्यकता होती है।

उदाहरण:

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 
+0

यदि आपको कई सेल्स ट्रैक करना है, तो आप इसे अधिक पढ़ने योग्य बनाने के लिए 'इंटरसेक्ट' का उपयोग कर सकते हैं। फिर भी, मुझे यह समाधान बहुत बढ़िया लगता है क्योंकि यह स्पष्ट रूप से मूल्य को नहीं बदलेगा (जब भी पूर्ण रिकेल या तो, मेरे उत्तर के नीचे क्रिस के साथ बहस देखें) जब तक कि ए 1' बदल नहीं जाता है (इसलिए मुझे लगता है कि यह +1 को डिस्वर करता है :)) – JMax

4

मुझे लगता है मैं यह करने के लिए एक बहुत ही आसान तरीका है। अपनी स्प्रेडशीट को पूरा करें, फिर संख्याओं के उस कॉलम के लिए = RANDBETWEEN फ़ंक्शन लागू करें। फिर यह करें:

  1. उस कॉलम से परिणामों की प्रतिलिपि बनाएँ।
  2. कॉलम को हाइलाइट करें और "विशेष पेस्ट करें" का चयन करें और "मान" चुनें।

अब आपके पास हाल ही में बनाए गए मान हैं और वे स्थिर हैं।

2

आप पूरी तरह फॉर्मूला-संचालित "टॉगल स्विच" बनाने के लिए परिपत्र संदर्भों का भी उपयोग कर सकते हैं, जिससे उपयोगकर्ता यादृच्छिक संख्याओं के सेट की गणना कर सकता है और फिर आगे की पुनरावृत्ति बंद कर देता है। Turn off circular reference warnings, और फिर सेल B3 में यह फार्मूला रख: सेल B1 शामिल

=IF($B$1="YES",RAND(),B3) 

तो "हाँ", बी 3 प्रत्येक स्प्रेडशीट पुनर्गणना के साथ एक नई यादृच्छिक संख्या उत्पन्न होगा; यदि बी 1 में कोई अन्य मूल्य है, तो बी 3 का वर्तमान मूल्य बरकरार रखा जाएगा।

संबंधित मुद्दे