اذهب الي المحتوي
أوفيسنا

استخراج النسب المئوية ؟؟؟


إذهب إلى أفضل إجابة Solved by محمد طاهر عرفه,

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

السلام عليكم

ارجو قبولي عضو في منتداكم ولكم كل التقدير ..

عندي سؤالين كأول مشاركة لي وتدور حول النسب المئويه وطريقة ادراج الكود في الاكسل 0

السؤال : كيف يمكن انشاء معادلة لاستخراج النسب المئوية مثلاً :

من 1- 400 يخصم نسبة 1.5 من المئة

من 400 - 1000 يخصم نسبة 2 من المئة 0

وهكذا حتى 50000 وكل جزء يخصم نسبه تتزايد لست او سبع مرات 0

حاولت ومانفع معي كل الطرق اللي اعرفها

السؤال الثاني :

كيف يمكن اضافة كود vb يمكن تطبيقه في خليه معينه 0

اتمنى ان اجد اجابه وافيه شاكر لكم جهودكم في المنتدى ودمتم بخير 0

رابط هذا التعليق
شارك

أولا أهلا بك

ثانيا ، يرجي مراجعة قواعد طرح المشاركات و منها عدم طرح سؤالين فى مشاركة واحدة .

بالنسبة للسؤال الاول

لابد من استخدام دالة خاصة ، بخلاف دوال الاكسيل

و لكتابة الدالة افتح محرر البيزيك 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)

رابط هذا التعليق
شارك

الاستاذ / محمد طاهر

جزاك الله خير ومعذره لتسرعي في طرح الاسئلة قبل قراءة شروط المشاركه

اشكرك لسرعة تجاوبك 0

اضفت الكود كما ذكرت في ردك ولكن النسب طلعت بشكل مغاير لما قصدت عند ادخال مبلغ 400 يظهر مبلغ الخصم 392 اي انه اكبر من الخصم الطبيعي بحيث اصبح يفوق 1.5 % التي قصدت وهي 6 تقريباً ودمتم بخير 0

رابط هذا التعليق
شارك

اذا اردت عدم دخول ال 400 نفسها فى نسبة ال 2%

فاستبدل

Case Is >= 400

ب

Case Is > 400

و هكذا للباقي اذا أردت نفس الشيء لهم

استبدل كل ال

Case Is >= ..

ب

Case Is >..

فتصير النسبة الخاصة بال 400 نفسها 1.5% بدلا من 2%

لانها ستدخل فى الشريحة السابقة

مع تحياتي

رابط هذا التعليق
شارك

السلام عليكم

شاكر لك سعة صدرك وتجاوبك

ربما لم اوضح المطلوب بشكل صحيح لانني لم افهم المقصود في الرد الاخير

قصدت في سؤالي عندما ادخل مبلغ اقل من 4000 او يساوي نفس المبلغ في خليه احصل على خصم 1.5% في خليه اخرى مجاوره وبالطريقه السابقه لم احصل على المطلوب 0 جربت وضع الكود بالشكل التالي :

=B1/100*1.5

ولكن في حالة جمع اكثر من مبلغ بأكثر من نسبة خصم في معادلة واحده هذا ماقصدت 0

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

لم أفهم قصدك

هذا مثال مرفق

فى الرد اللخير ذكرت 4000 ، أظنك تقصد 400 كما فى المواضيع السابقة

و اذا قصدت انك تريد الخصم و ليس القيمة بعد الخصم

فيمكنك الحصول عليه كما فى المثال

أو عن طريق الدالة مباشرة باستبدال

 getpercentage = myval - (discount / 100) * myval

 بالسطر التالي

 getpercentage = (discount / 100)

GetPerentage.rar

رابط هذا التعليق
شارك

استاذي العزيز

اوضح اكثر

مثلا عندي عامل اتفقت انا وهو عند وصو الدخل لمبلغ 400 مثلا يحصل على مامقداره 1.5 % من مبلغ الدخل وضعت 400 كمثال للمبلغ .............. في الكود السابق ينتج ماتبقى بعد خصم 1.5 % وانا اقصد العكس جربت الطريقه الاخيره ولم يتغير شي 0

اصبح الخصم بعد التعديل الاخير عند ادخال مبلغ 400 يساوي ( 0.02 ) وهي نسبه غير صحيحه لان نسبة 1.5% من المئه تساوي 6وهذا ماقصدته 0

رابط هذا التعليق
شارك

آخر تعديل ذكرته يعطيك الخصم كنسبة مئوية لكي تضربه فى القيمة الاصلية بعد ذلك

و اذا أردت الحصول علي القيمة ( ال 6 مباشرة ) التي هي فرق ال 400 من ال 394 فى المثال السابق

اما ان تطرحهما

أو

أن تعدل السطر الاخير فى الدالة الي

getpercentage = myval * (discount / 100)

رابط هذا التعليق
شارك

الحقيقه اتعبتك معي جزاك الله خيراً ورزقك الجنه انه على ذلك قدير وبالاجابة جدير

اسمح لي أن اعطيك طلبي بشكل اوضح لاني في الحقيقه الى الان لم اجد الطريقه التي اقصدها وهذا المثال بالتفصيل :

من مبلغ 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

رابط هذا التعليق
شارك

  • أفضل إجابة

السلام عليكم

علي ما فهمت بصعوبة من الارقام التي وضعتها كناتج فى النهاية أن النسبة المتزايدة تطبق علي الفرق الذي زاد عن الشريحة السابقة فقط

أي أن كل الارقام التي زادت عن ال 45000 يتم تطبيق نسبة 1.5% علي أول 45000 منها ... و هكذا ...

مثال اذا وقع الرقم تحت ال 60000 يتم تطبيق 1.5% علي اول 45000 و 3% علي الباقي .. و هكذا

مرفق المثال و أرجو أن يكون هو ما تطلب

GetPerentage2.rar

رابط هذا التعليق
شارك

من مبلغ 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

واعتذر اذا كان في ردي السابق لبس بحيث اصبح صعب الفهم

رابط هذا التعليق
شارك

لماذا 95% ما المشكلة ؟؟

الفكرة فى الكود هي انه اذا كان الرقم مثلا 60000 وتكون نسبته 3% لما فوق ال 45000

فال 45000 تأخذ نسبة 1.5%

و ال 15000 التالية تأخذ ( 3% - 1.5% )

هذا ما فهمته مما سبق و ما تطابق مع نتائج المثال الذي وضعته

رابط هذا التعليق
شارك

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

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

بصراحة أنا مازلت مش فاهم علاقة الناتج بالشرح السابق

فالان ااذا كان الرقم بين 45000 و 60000 لم تعد تعطيه 3% كما وصفت سابقا

عموما جميل أنك وصلت لما تريد ، و هو المطلوب

مع تحياتي

رابط هذا التعليق
شارك

جزاك الله خير بصراحه انا صار عندي لبس في فهم الكود الاخير ولكن بعد التعديل اصبح هو المطلوب بشكل ممتاز اشكرك لتجاوبك ومتابعتك تقبل تحياتي وفائق احترامي 0

رابط هذا التعليق
شارك

زائر
هذا الموضوع مغلق.
  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

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

Important Information