اذهب الي المحتوي
أوفيسنا
بحث مخصص من جوجل فى أوفيسنا
Custom Search

مساعدة في برنامج متعدد المدخلات


إذهب إلى أفضل إجابة Solved by محمد هشام.,

الردود الموصى بها

السلام عليكم

قمت بعمل برنامج صغير يقوم باجراء معادلات على مجموعة خلايا

 يعمل البرنامج بشكل مناسب فقط عندما تكون المدخلات على شكل

RANGE 

 

لكن اذا كانت المدخلات متفرقة او اكثر من

RANGE

تظهر رسالة خطأ

 

حاولت استخدام

paramarray

لكن لم تنجح المحاولة.

 

المطلوب ان تكون المدخلات متعددة مثل دالة الجمع في الاكسل

المحاولات في الملف المرفق 

 

شكرا جزيلا

SumdB.xlsm

تم تعديل بواسطه K.Sabban
رابط هذا التعليق
شارك

  • أفضل إجابة

وعليكم السلام ورحمة الله تعالى وبركاته 

يمكنك اخي دمج الدلة  للتعامل بشكل صحيح مع مدخلات متعددة تتضمن أكثر من نطاق على الشكل التالي 

 

Function dbsum(ParamArray Knowndb()) As Variant
    Dim firstsum As Double
    Dim rng As Range
    Dim i As Integer

    firstsum = 0
        For i = LBound(Knowndb) To UBound(Knowndb)
        If TypeName(Knowndb(i)) = "Range" Then
            For Each rng In Knowndb(i)
                firstsum = firstsum + WorksheetFunction.Power(10, rng.Value / 10)
            Next rng
        Else
            firstsum = firstsum + WorksheetFunction.Power(10, Knowndb(i) / 10)
        End If
    Next i
    dbsum = 10 * WorksheetFunction.Log10(firstsum)
End Function

 

=dbsum(P11:P12,N9:N10)

=dbsum(K11:K13,I9:I10)

=dbsum(F9:F12)

 

SumdB.xlsm

 

كما يمكنك تعديل الدالة  بحيث تكون أكثر كفاءة وقادرة على التعامل مع مجموعة متنوعة من المدخلات بما في ذلك النطاقات _  القيم الفردية _ والمصفوفات

Function dbsum(ParamArray Knowndb()) As Variant
    Dim cnt As Double, rng As Range
    Dim i As Integer, j As Integer
    
    cnt = 0
    
    On Error GoTo ErrorHandler
        For i = LBound(Knowndb) To UBound(Knowndb)
        Select Case TypeName(Knowndb(i))
            Case "Range"
                For Each rng In Knowndb(i)
                    If IsNumeric(rng.Value) Then
                        cnt = cnt + WorksheetFunction.Power(10, rng.Value / 10)
                    Else
                        Err.Raise vbObjectError + 1, , "قيمة غير رقمية في النطاق"
                    End If
                Next rng
            Case "Double", "Integer", "Single", "Currency", "Long"
                cnt = cnt + WorksheetFunction.Power(10, Knowndb(i) / 10)
            Case "Variant()"
                For j = LBound(Knowndb(i)) To UBound(Knowndb(i))
                    If IsNumeric(Knowndb(i)(j)) Then
                        cnt = cnt + WorksheetFunction.Power(10, Knowndb(i)(j) / 10)
                    Else
                        Err.Raise vbObjectError + 2, , "قيمة غير رقمية في المصفوفة"
                    End If
                Next j
            Case Else
        End Select
    Next i
    dbsum = 10 * WorksheetFunction.Log10(cnt)
    Exit Function
ErrorHandler:
    dbsum = CVErr(xlErrValue)
    MsgBox "خطأ: " & Err.Description, vbCritical, "خطأ في الدالة dbsum"
End Function

 

SumdB.xlsm

تم تعديل بواسطه محمد هشام.
  • Like 3
رابط هذا التعليق
شارك

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان
  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information