hussam031 قام بنشر سبتمبر 15 قام بنشر سبتمبر 15 السلام عليكم الزملاء الكرام لدي ملف في الصفحة الاولى كامل المواد الاولية و تكلفة كل مادة وفي صفحة الثانية المنتجات و كمية كل مادة اولية اريد في الصفحة الثانية ان اجمع اجمالي التكلفة لكل منتج حاولت استخدام دالة sumproduct و لكن تعطيني خطأ بسبب عدم تساوي عدد المواد في الصفحة الثانية مع عدد المواد في الصفحة الاولى الملف مرفق مع الشكر officena.xlsx
عبدالله بشير عبدالله قام بنشر سبتمبر 16 قام بنشر سبتمبر 16 وعليكم السلام ورحمة الله وبركاته المعادلة التالية تتعامل في حالة اختلاف الصفوف =SUMPRODUCT((RawMaterials!$B$2:$B$20=INDEX(ProductionMode!$B$3:$B$9; ROW(ProductionMode!$B$3:$B$9)-ROW(ProductionMode!$B$3)+1))*(RawMaterials!$C$2:$C$20)*INDEX(ProductionMode!C3:C9; ROW(ProductionMode!C3:C9)-ROW(ProductionMode!C3)+1))
hussam031 قام بنشر سبتمبر 16 الكاتب قام بنشر سبتمبر 16 تحياتي استاذ عبدالله شكرا لمجهودك حسب المعادلة فهي تظهر تكلفة المنتج للمادة a فقط ولكن تكلفة المنتج هي للجمع للمواد في الصفحة الثانية بمعنى ان تكلفة المنتج هي بضرب كمية المادة a مع تكلفتها في الصفحة الاولى + المادة s مع تكلفتها في الصفحة الاولى و هكذا شكرا لك مرة اخرى
عبدالله بشير عبدالله قام بنشر سبتمبر 16 قام بنشر سبتمبر 16 (معدل) السلام عليكم ورحمة الله وبركاته حسب وصفك للامر انت تحتاج الى كود ليقوم بالمهمة جرب واخبرنى بالنتيجة الكود Sub CalculateProductionCost() Dim wsRaw As Worksheet Dim wsProd As Worksheet Dim lastRowRaw As Long Dim lastRowProd As Long Dim i As Long, j As Long Dim materialName As String Dim materialCost As Variant Dim totalCost As Double Dim materialCosts As Object Dim prodValues As Variant Set wsRaw = ThisWorkbook.Sheets("RawMaterials") Set wsProd = ThisWorkbook.Sheets("ProductionMode") lastRowRaw = wsRaw.Cells(wsRaw.Rows.Count, "B").End(xlUp).Row lastRowProd = wsProd.Cells(wsProd.Rows.Count, "B").End(xlUp).Row Set materialCosts = CreateObject("Scripting.Dictionary") For i = 2 To lastRowRaw materialName = wsRaw.Cells(i, 2).Value materialCost = wsRaw.Cells(i, 3).Value If IsNumeric(materialCost) Then materialCosts(materialName) = materialCost End If Next i prodValues = wsProd.Range("B2:K9").Value For j = 3 To 11 totalCost = 0 For i = 1 To 8 materialName = prodValues(i, 1) If materialCosts.exists(materialName) And IsNumeric(prodValues(i, j - 1)) Then totalCost = totalCost + (prodValues(i, j - 1) * materialCosts(materialName)) End If Next i wsProd.Cells(12, j).Value = totalCost Next j End Sub الملف officena.xlsb تم تعديل سبتمبر 16 بواسطه عبدالله بشير عبدالله
hussam031 قام بنشر سبتمبر 16 الكاتب قام بنشر سبتمبر 16 الله يعطيك العافية استاذ عبدالله ان كان هناك معادلة يكون افضل بالنسبة لي لانني لست خبيرا بالفيجوال بيزيك بكل الاحوال اشكرك جدا
عبدالله بشير عبدالله قام بنشر سبتمبر 16 قام بنشر سبتمبر 16 (معدل) المعادلة =SUMPRODUCT(SUMIFS(RawMaterials!$C$2:$C$20; RawMaterials!$B$2:$B$20; ProductionMode!$B3:$B9); ProductionMode!C3:C9) الملف officena1.xlsb تم تعديل سبتمبر 16 بواسطه عبدالله بشير عبدالله 1
محمد هشام. قام بنشر سبتمبر 16 قام بنشر سبتمبر 16 وعليكم السلام ورحمة الله تعالى وبركاته حياك الله اخي @عبدالله بشير عبدالله اسمح لي بهدا الاقتراح اخي @hussam031 قم بوضع احدى المعادلات التالية في الخلية C12 مع سحبها يسارا لغاية اخر عمود K =SUMPRODUCT(C$3:C$9, INDEX(RawMaterials!$C$2:$C$100, MATCH($B$3:$B$9, RawMaterials!$B$2:$B$100, 0))) OR =SUMPRODUCT(C$3:C$9, VLOOKUP($B$3:$B$9, RawMaterials!$B$2:$C$100, 2, FALSE)) officena V2.xlsx 1
hussam031 قام بنشر سبتمبر 17 الكاتب قام بنشر سبتمبر 17 استاذ عبد الله شكرا لك استاذ محمد هشام اشكرك على استجابتك اخي الكريم، ولكن عن تطبيق المعادلة تعطيني Value# رغم اني اضعها ضمن صفيف، عند تطبيقها لا تعمل رغم ان الملف الذي ارفقته حضرتك النتائج موجودة حتى الملف المرفق من قبلك اذا حررت الخلية و وضعت المعادلة ضمن صفيف {} تعطي نفس الخطأ السابق استاذ هشام عدلت قليلا على المعادلة بدر استخدام sumproduct استخدمت sum مع تقديري لك
أ / محمد صالح قام بنشر سبتمبر 17 قام بنشر سبتمبر 17 2 ساعات مضت, hussam031 said: اذا حررت الخلية و وضعت المعادلة ضمن صفيف {} تعطي نفس الخطأ السابق كيف وضعت المعادلة ضمن صفيف؟؟؟ الصواب أن تضغط كنترول وشيفت وانتر بدلا من انتر فقط في النسخ القديمة من الأوفيس. أما في الحديثة يكتفى بانتر فقط بالتوفيق 1
الردود الموصى بها
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.