2013-08-13 8 views
5

इसलिए मैं अपने वर्कशीट में मूल आंकड़ों की गणना कर रहा हूं और इसमें कोड शामिल हैं:रूट मीन स्क्वायर (आरएमएस) फ़ंक्शन?

xxx = Application.worksheetfunction। औसत (आदि आदि आदि

yyy = Application.worksheetfunction मिनट (आदि आदि आदि

zzz = Application.worksheetfunction अधिकतम (आदि आदि आदि

मेरा प्रश्न:।। क्या कोई एक आरएमएस समकक्ष फ़ंक्शन जहां मैं बस उस कोड में 'औसत, न्यूनतम, अधिकतम' फ़ंक्शंस के स्थान पर प्लग कर सकता हूं? और यदि ऐसा नहीं है तो आरएमएस समाधान खोजने के लिए कोड करने का सबसे प्रभावी माध्यम क्या होगा?

मुझे आशा है कि मैंने लक्ष्य को स्पष्ट रूप से पर्याप्त बताया है। मैं उत्सुक हूं कि वीबीए के लिए एक पूर्वनिर्धारित आरएमएस फ़ंक्शन है या नहीं, या मुझे कुछ प्रकार के उपयोगकर्ता परिभाषित फ़ंक्शन को बनाना है या नहीं? ~ जिसमें से मैं काफी नया हूं, इसलिए यदि इसके लिए लिखने के लिए कोड की एक साधारण रेखा नहीं है, तो मुझे यूडीएफ पर और अधिक पढ़ना होगा।

संपादित करें:

मैं 30,000 पंक्तियों के आसपास, और सादगी की खातिर मिल गया है: दो कॉलम की कल्पना। कॉलम ए वर्ष 1 9 41 या 2008 के माध्यम से कुछ और है। कॉलम बी एक संख्यात्मक मूल्य है। मैं बस एक साथ कोड डालने की कोशिश कर रहा हूं जो औसत, न्यूनतम, अधिकतम और आरएमएस मूल्यों के दशक के सारांश देता है।

+1

एसक्यूआरटी (एसयूएमएसक्यू (ए 1: ए 10)/COUNTA (ए 1: ए 10)) प्रति [श्रीएक्ससेल] (http://www.mrexcel.com/forum/excel-questions/8734-root-mean-quare। एचटीएमएल) – pnuts

+1

क्या आप आरएमएस के संबंध में मेरा "न्यूनतम" और "अधिकतम" का अर्थ समझ सकते हैं? –

+0

यह जानकारी सहायक है, हालांकि मैं कई वर्षों के माध्यम से कई दशकों के माध्यम से लूपिंग कर रहा हूं। मैन्युअल रूप से स्क्रॉल करने और परिभाषित करने के बजाय मुझे इसे स्वचालित करने के लिए वीबीए में मिला है; और यह मुझे वीबीए में 'SumSq' और 'countA' कार्यों का उपयोग करने की अनुमति देता है। हालांकि वीबीई की एकमात्र विकल्प केवल 'वर्ग' की बजाय 'स्क्वार्टपी' फ़ंक्शन है।मुझे निश्चित रूप से इस विषय पर ज्ञान की कमी है, लेकिन अगर आप शायद 'sqrt' की सही दिशा में थोड़ा आगे निकल सकते हैं जो सबसे उपयोगी होगा! – WATERflowTech

उत्तर

1

आप

=SQRT(SUMSQ(A:A)/COUNTA(range)) 

साथ या VBA में औसत कर सकते हैं:

r = (Application.WorksheetFunction.SumSq(Range("A:A"))/Range("A:A").Count)^(1/2) 
+0

यह जानकारी सहायक है, हालांकि मैं कई वर्षों के माध्यम से कई दशकों के माध्यम से लूपिंग कर रहा हूं। मैन्युअल रूप से स्क्रॉल करने और परिभाषित करने के बजाय मुझे इसे स्वचालित करने के लिए वीबीए में मिला है; और यह मुझे वीबीए में 'SumSq' और 'countA' कार्यों का उपयोग करने की अनुमति देता है। हालांकि वीबीई की एकमात्र विकल्प केवल 'वर्ग' की बजाय 'स्क्वार्टपी' फ़ंक्शन है। मुझे निश्चित रूप से इस विषय पर ज्ञान की कमी है, लेकिन अगर आप शायद 'sqrt' की सही दिशा में थोड़ा आगे निकल सकते हैं जो सबसे उपयोगी होगा! – WATERflowTech

+0

@WATERflowTech, ठीक है, मैंने एक वीबीए फ़ंक्शन भी जोड़ा, आप शायद नामित श्रेणियों का उपयोग करना चाहेंगे। –

+0

यही वह है, एनएच पावर पर अच्छी कॉल। मैंने इसके बारे में सोचा नहीं था लेकिन बिना किसी संदेह के भविष्य में याद होगा! धन्यवाद लांस! – WATERflowTech

0

एक VBA समारोह है कि सरणियों (किसी भी रैंक) स्वीकार करता है और एक से अधिक क्षेत्रों (ए 4 की तरह एक असंतत श्रृंखला के साथ पर्वतमाला: बी 6, सी 11: डी 15), या यहां तक ​​कि सूत्र में श्रेणियों का एक संघ भी है। यह गैर संख्या डेटाटाइप छोड़ देता है (तिथियां, बूलियन, रिक्त स्थान इत्यादि सहित)।

आप इस तरह के रूप में किसी कार्यपत्रक सूत्र में VBA कोड में उपयोग कर सकते हैं, या एक यूडीएफ के रूप में:

"= आरएमएस (A1: A10)" (मूल उपयोग)

"= आरएमएस (A1: ए 10, सी 1: सी 10) "(एकाधिक श्रेणियां (या उस मामले के लिए सरणी))

" {= आरएमएस ({1,2,3,4})} "(सरणी सूत्र + Ctrl + shift + enter के साथ दर्ज किया गया है)

Function RMS(ParamArray args()) As Double 

    Dim arg, arr, area As Range, ss As Double, n As Long 

    For Each arg In args 
     If TypeOf arg Is Range Then 
      For Each area In arg.Areas 
       arr = area.value 
       If VarType(arr) < vbArray Then 
        queryRmsElements Array(arr), ss, n 
       Else 
        queryRmsElements arr, ss, n 
       End If 
      Next area 
     ElseIf VarType(arg) > vbArray Then 
      queryRmsElements arg, ss, n 
     Else 
      Err.Raise 1, "RMS", "Invalid Argument" 
     End If 
    Next arg 

    RMS = (ss/n)^0.5 

End Function 
Private Sub queryRmsElements(ByRef elements, ByRef ss As Double, ByRef n As Long) 
    Static element As Variant 
    'Enumerate to cover rank > 1 (vs. Iterate) 
    For Each element In elements 
     Select Case VarType(element) 
      Case VbVarType.vbByte, _ 
       VbVarType.vbCurrency, _ 
       VbVarType.vbDecimal, _ 
       VbVarType.vbDouble, _ 
       VbVarType.vbInteger, _ 
       VbVarType.vbLong, _ 
       VbVarType.vbSingle 
       ss = element^2 + ss 
       n = n + 1 
      Case Else 
     End Select 
    Next element 
End Sub 
0

यह मेरे लिए काम करता है:

Function RMS(Intervalo As Range) 

Dim SomaQ As Double 
Dim Tamanho As Integer 

SomaQ = 0 
Tamanho = Intervalo.Count 
SomaQ = Application.WorksheetFunction.SumSq(Intervalo) 
RMS = Sqr(SomaQ/Tamanho) 

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