تلميذ الاكسل قام بنشر نوفمبر 2, 2003 قام بنشر نوفمبر 2, 2003 السلام عليكم ارجو قبولي عضو في منتداكم ولكم كل التقدير .. عندي سؤالين كأول مشاركة لي وتدور حول النسب المئويه وطريقة ادراج الكود في الاكسل 0 السؤال : كيف يمكن انشاء معادلة لاستخراج النسب المئوية مثلاً : من 1- 400 يخصم نسبة 1.5 من المئة من 400 - 1000 يخصم نسبة 2 من المئة 0 وهكذا حتى 50000 وكل جزء يخصم نسبه تتزايد لست او سبع مرات 0 حاولت ومانفع معي كل الطرق اللي اعرفها السؤال الثاني : كيف يمكن اضافة كود vb يمكن تطبيقه في خليه معينه 0 اتمنى ان اجد اجابه وافيه شاكر لكم جهودكم في المنتدى ودمتم بخير 0
محمد طاهر عرفه قام بنشر نوفمبر 3, 2003 قام بنشر نوفمبر 3, 2003 أولا أهلا بك ثانيا ، يرجي مراجعة قواعد طرح المشاركات و منها عدم طرح سؤالين فى مشاركة واحدة . بالنسبة للسؤال الاول لابد من استخدام دالة خاصة ، بخلاف دوال الاكسيل و لكتابة الدالة افتح محرر البيزيك ALT+F11 ( يوجد فى الارشيف مقدمة للتعامل مع ال vba فى الاكسيل يرجي مراجعتها ) ثم أدرج موديول جديد و به ضع الكود التالي Function getpercentage(myval) Dim dicount As Single Select Case myval Case Is >= 5000 discount = 6.5 Case Is >= 4400 discount = 6 Case Is >= 4000 discount = 5.5 Case Is >= 3400 discount = 5 Case Is >= 3000 discount = 4.5 Case Is >= 2400 discount = 4 Case Is >= 2000 discount = 3.5 Case Is >= 1400 discount = 3 Case Is >= 1000 discount = 2.5 Case Is >= 400 discount = 2 Case Is >= 0 discount = 1.5 Case Else discount = 0 End Select getpercentage = myval - (discount / 100) * myval End Function و بذلك يمكنك استدعاؤها مباشرة من مربع حوار الدوال مجموعة User Defined أو كتابة جملة الاستخدام مباشرة مثل : مثلا يوجد الرقم قبل التخفيض فى الخلية C5 و ضع الجملة الاتية فى الخلية لاتي تريد الناتج بها =getpercentage(C5)
تلميذ الاكسل قام بنشر نوفمبر 3, 2003 الكاتب قام بنشر نوفمبر 3, 2003 الاستاذ / محمد طاهر جزاك الله خير ومعذره لتسرعي في طرح الاسئلة قبل قراءة شروط المشاركه اشكرك لسرعة تجاوبك 0 اضفت الكود كما ذكرت في ردك ولكن النسب طلعت بشكل مغاير لما قصدت عند ادخال مبلغ 400 يظهر مبلغ الخصم 392 اي انه اكبر من الخصم الطبيعي بحيث اصبح يفوق 1.5 % التي قصدت وهي 6 تقريباً ودمتم بخير 0
محمد طاهر عرفه قام بنشر نوفمبر 3, 2003 قام بنشر نوفمبر 3, 2003 اذا اردت عدم دخول ال 400 نفسها فى نسبة ال 2% فاستبدل Case Is >= 400 ب Case Is > 400 و هكذا للباقي اذا أردت نفس الشيء لهم استبدل كل ال Case Is >= .. ب Case Is >.. فتصير النسبة الخاصة بال 400 نفسها 1.5% بدلا من 2% لانها ستدخل فى الشريحة السابقة مع تحياتي
تلميذ الاكسل قام بنشر نوفمبر 4, 2003 الكاتب قام بنشر نوفمبر 4, 2003 (معدل) السلام عليكم شاكر لك سعة صدرك وتجاوبك ربما لم اوضح المطلوب بشكل صحيح لانني لم افهم المقصود في الرد الاخير قصدت في سؤالي عندما ادخل مبلغ اقل من 4000 او يساوي نفس المبلغ في خليه احصل على خصم 1.5% في خليه اخرى مجاوره وبالطريقه السابقه لم احصل على المطلوب 0 جربت وضع الكود بالشكل التالي : =B1/100*1.5 ولكن في حالة جمع اكثر من مبلغ بأكثر من نسبة خصم في معادلة واحده هذا ماقصدت 0 تم تعديل نوفمبر 4, 2003 بواسطه تلميذ الاكسل
محمد طاهر عرفه قام بنشر نوفمبر 4, 2003 قام بنشر نوفمبر 4, 2003 لم أفهم قصدك هذا مثال مرفق فى الرد اللخير ذكرت 4000 ، أظنك تقصد 400 كما فى المواضيع السابقة و اذا قصدت انك تريد الخصم و ليس القيمة بعد الخصم فيمكنك الحصول عليه كما فى المثال أو عن طريق الدالة مباشرة باستبدال getpercentage = myval - (discount / 100) * myval بالسطر التالي getpercentage = (discount / 100) GetPerentage.rar
تلميذ الاكسل قام بنشر نوفمبر 4, 2003 الكاتب قام بنشر نوفمبر 4, 2003 استاذي العزيز اوضح اكثر مثلا عندي عامل اتفقت انا وهو عند وصو الدخل لمبلغ 400 مثلا يحصل على مامقداره 1.5 % من مبلغ الدخل وضعت 400 كمثال للمبلغ .............. في الكود السابق ينتج ماتبقى بعد خصم 1.5 % وانا اقصد العكس جربت الطريقه الاخيره ولم يتغير شي 0 اصبح الخصم بعد التعديل الاخير عند ادخال مبلغ 400 يساوي ( 0.02 ) وهي نسبه غير صحيحه لان نسبة 1.5% من المئه تساوي 6وهذا ماقصدته 0
محمد طاهر عرفه قام بنشر نوفمبر 5, 2003 قام بنشر نوفمبر 5, 2003 آخر تعديل ذكرته يعطيك الخصم كنسبة مئوية لكي تضربه فى القيمة الاصلية بعد ذلك و اذا أردت الحصول علي القيمة ( ال 6 مباشرة ) التي هي فرق ال 400 من ال 394 فى المثال السابق اما ان تطرحهما أو أن تعدل السطر الاخير فى الدالة الي getpercentage = myval * (discount / 100)
تلميذ الاكسل قام بنشر نوفمبر 5, 2003 الكاتب قام بنشر نوفمبر 5, 2003 الحقيقه اتعبتك معي جزاك الله خيراً ورزقك الجنه انه على ذلك قدير وبالاجابة جدير اسمح لي أن اعطيك طلبي بشكل اوضح لاني في الحقيقه الى الان لم اجد الطريقه التي اقصدها وهذا المثال بالتفصيل : من مبلغ 0 الى 45000 يخصم 1.5% للموظف من 45001 الى مبلغ 60000 يخصم 3% للموظف من 60001 الى 70000 يخصم 4% للموظف من 70001 الى 80000 يخصم 5% للموظف 80001 الى 90000 يخصم 5.5 % للموظف بمعنى الموظف يحصل على مبلغ الخصم كراتب له يعني عند وصول الدخل الى ( 45000 ) يحصل على نسبة ( 1.5 % ) راتب له علماً ان نسبة ( 45000 بعد خصم 1.5 % تساوي = 675 وعند خصم النسبه مابين ( 45001 الى 60000 يخصم 3% ليحصل على 1125 كراتب له وعند الخصم للدخل بين( 60001 الى 70000 يحصل على خصم 4% ويساوي 1575 كراتب له ) هذا ماقصدته 0
أفضل إجابة محمد طاهر عرفه قام بنشر نوفمبر 5, 2003 أفضل إجابة قام بنشر نوفمبر 5, 2003 السلام عليكم علي ما فهمت بصعوبة من الارقام التي وضعتها كناتج فى النهاية أن النسبة المتزايدة تطبق علي الفرق الذي زاد عن الشريحة السابقة فقط أي أن كل الارقام التي زادت عن ال 45000 يتم تطبيق نسبة 1.5% علي أول 45000 منها ... و هكذا ... مثال اذا وقع الرقم تحت ال 60000 يتم تطبيق 1.5% علي اول 45000 و 3% علي الباقي .. و هكذا مرفق المثال و أرجو أن يكون هو ما تطلب GetPerentage2.rar
تلميذ الاكسل قام بنشر نوفمبر 5, 2003 الكاتب قام بنشر نوفمبر 5, 2003 من مبلغ 0 الى 45000 يخصم 1.5% للموظف من 45001 الى مبلغ 60000 يخصم 3% للموظف من 60001 الى 70000 يخصم 4% للموظف من 70001 الى 80000 يخصم 5% للموظف 80001 الى 90000 يخصم 5.5 % للموظف نعم بارك الله فيك هذا ماقصدت ولكن النسبة في الزيادة تتعلق بكل شريحه على حده يعني من 45001 الى 60000 تساوي 3% وكل مبلغ له نسبه تخصه بغض النظر عن ماسبقه وهنا لم افهم المقصود من علامة السالب If myval > 80000 Then perc = perc + (myval - 80000) * (5.5 - 5) / 100 End If 5.5% تخصم من 5 هل تقصد النسبه التي قبلها مع انها الى الان تقريباً ناجحه بنسبة 95% لما قصدته في المثال اشكرك لتجوبك 0 واعتذر اذا كان في ردي السابق لبس بحيث اصبح صعب الفهم
محمد طاهر عرفه قام بنشر نوفمبر 5, 2003 قام بنشر نوفمبر 5, 2003 لماذا 95% ما المشكلة ؟؟ الفكرة فى الكود هي انه اذا كان الرقم مثلا 60000 وتكون نسبته 3% لما فوق ال 45000 فال 45000 تأخذ نسبة 1.5% و ال 15000 التالية تأخذ ( 3% - 1.5% ) هذا ما فهمته مما سبق و ما تطابق مع نتائج المثال الذي وضعته
تلميذ الاكسل قام بنشر نوفمبر 5, 2003 الكاتب قام بنشر نوفمبر 5, 2003 (معدل) Function getpercentage(myval) Dim perc As Single If myval >= 0 Then perc = 1.5 * myval / 100 End If If myval > 45000 Then perc = perc + (myval - 45000) * (3 - 1.5) / 100 End If If myval > 60000 Then perc = perc + (myval - 60000) * (4 - 3) / 100 End If If myval > 70000 Then perc = perc + (myval - 70000) * (5 - 4) / 100 End If If myval > 80000 Then perc = perc + (myval - 80000) * (5.5 - 5) / 100 End If If myval > 90000 Then perc = perc + (myval - 90000) * (5.5 - 5) / 100 End If getpercentage = perc End Function شاكر لك سرعة ردك كنت اقصد ان تحسب النسبه بين ( 45000 الى 60000 ) بدون خصم نسبة 1.5% التي تخص المبلغ من 1 الى 45000 بحيث تصبح مستقله كمثال لاني حاولت صياغة الكود فلم افلح وهذا المثال عن طريق دالة IF على ما أعتقد اذا كان المبلغ أكبر من 45000 وأصغر من او يساوي 60000 يخصم 3% 0 وهكذا بين كل مبلغ والذي يليه بدون الحاجه الى الخصم من المبلغ السابق 0 كذلك الجزء الاخير الذي يخص مبلغ 90000 فأعلى اصبح مكرر مع مبلغ 80000 ويعطي نفس الخصم 0 قمت بتعديل الكود السابق ليصبح : Function getpercentage(myval) Dim perc As Single If myval >= 0 Then perc = 1.5 * myval / 100 End If If myval > 45000 Then perc = perc + (myval - 45000) * ( 1.5) / 100 End If If myval > 60000 Then perc = perc + (myval - 60000) * (3-1.5) / 100 End If If myval > 70000 Then perc = perc + (myval - 70000) * (4-3) / 100 End If If myval > 80000 Then perc = perc + (myval - 80000) * (5-4) / 100 End If If myval > 90000 Then perc = perc + (myval - 90000) * (5.5 - 5) / 100 End If getpercentage = perc End Function وكانت النتيجه كما هو مطلوب جزاك الله خيراً وزوجك من الحور العين 0 عدلت بعد ان اضفت ردي ورجعت لتحرير المشاركه 0 تم تعديل نوفمبر 6, 2003 بواسطه تلميذ الاكسل
محمد طاهر عرفه قام بنشر نوفمبر 6, 2003 قام بنشر نوفمبر 6, 2003 بصراحة أنا مازلت مش فاهم علاقة الناتج بالشرح السابق فالان ااذا كان الرقم بين 45000 و 60000 لم تعد تعطيه 3% كما وصفت سابقا عموما جميل أنك وصلت لما تريد ، و هو المطلوب مع تحياتي
تلميذ الاكسل قام بنشر نوفمبر 6, 2003 الكاتب قام بنشر نوفمبر 6, 2003 جزاك الله خير بصراحه انا صار عندي لبس في فهم الكود الاخير ولكن بعد التعديل اصبح هو المطلوب بشكل ممتاز اشكرك لتجاوبك ومتابعتك تقبل تحياتي وفائق احترامي 0
الردود الموصى بها