K.Sabban قام بنشر سبتمبر 4 مشاركة قام بنشر سبتمبر 4 (معدل) السلام عليكم قمت بعمل برنامج صغير يقوم باجراء معادلات على مجموعة خلايا يعمل البرنامج بشكل مناسب فقط عندما تكون المدخلات على شكل RANGE لكن اذا كانت المدخلات متفرقة او اكثر من RANGE تظهر رسالة خطأ حاولت استخدام paramarray لكن لم تنجح المحاولة. المطلوب ان تكون المدخلات متعددة مثل دالة الجمع في الاكسل المحاولات في الملف المرفق شكرا جزيلا SumdB.xlsm تم تعديل سبتمبر 4 بواسطه K.Sabban رابط هذا التعليق شارك More sharing options...
أفضل إجابة محمد هشام. قام بنشر سبتمبر 4 أفضل إجابة مشاركة قام بنشر سبتمبر 4 (معدل) وعليكم السلام ورحمة الله تعالى وبركاته يمكنك اخي دمج الدلة للتعامل بشكل صحيح مع مدخلات متعددة تتضمن أكثر من نطاق على الشكل التالي 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 تم تعديل سبتمبر 4 بواسطه محمد هشام. 3 رابط هذا التعليق شارك More sharing options...
K.Sabban قام بنشر سبتمبر 5 الكاتب مشاركة قام بنشر سبتمبر 5 بارك الله فيك اخي محمد كما أريد و زيادة أحسن الله إليك رابط هذا التعليق شارك More sharing options...
الردود الموصى بها
من فضلك سجل دخول لتتمكن من التعليق
ستتمكن من اضافه تعليقات بعد التسجيل
سجل دخولك الان