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

دورة شرح الفيجول بيسك للتطبيقات VBA


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

السلام عليكم

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

الدالة بها طريقتين للتقريب

الاولى اذا كان بعد الفاصلة رقم واحد مثل 1.6 او 1.9 او 1.3 سيتم التقريب الى التالي

1. اذا كان اقل من 5 سيصبح الرقم بدون تقريب مثل

1.3 سيصبح 1

99.4 ستصبح 99

2. اذا كان يساوي 5 لن يتم الاتقريب

3. اذا اكثر من 5 ستم زيادة 1 مثل

6.6 ستصبح 7

==========

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

هذا هو كود الدالة



Function RoudFun(MyCel As String)

If MyCel = Empty Then RoudFun = "": Exit Function

MyCel_Int = Int(MyCel)

MyCel2 = Round(MyCel - MyCel_Int, 3)

If Len(MyCel2) = 1 Then RoudFun = MyCel: Exit Function

If Len(MyCel2) = 3 Then

Select Case MyCel2

Case 0 To 0.4:

RoudFun = MyCel_Int

Case 0.5 To 0.5:

RoudFun = MyCel_Int + 0.5

Case 0.6 To 0.9:

RoudFun = MyCel_Int + 1

End Select

End If

If Len(MyCel2) = 4 Then

Select Case Val(Mid(MyCel2, 4, 1))

Case 0 To 4:

RoudFun = MyCel_Int + Val(Mid(MyCel2, 1, 3))

Case Is = 5:

RoudFun = MyCel_Int + Val(Mid(MyCel2, 1, 3)) + "0.0" & Val(Mid(MyCel2, 4, 1))

Case 6 To 9:

RoudFun = MyCel_Int + Val(Mid(MyCel2, 1, 3)) + "0.1"

End Select

End If

End Function


وهذا هو المرفق

RoudFun.rar

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

الأستاذ القدير / أبو أحمد

هذا كود يصعب على أمثالنا فهمه فكيف بعمل مثله

ممكن شرح لهذه الدالة من غير كلف أستاذنا القدير

نحن نعرف مشاغلك واهتمامك الكبير بما يطلبه الأعضاء

فلا نريد أن نكلفك أكثر

والعفو

وجزاك الله خير ( أستاذ كبير وقلب كبير )

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

  • 2 weeks later...

أستاذنا الكبير/ عبد الله المجرب أبو أحمد

أستأذنك في شرح دالة RoudFun ( دالة التقريب) التي عملتها أنت

وإن شاء الله أن أكون موفق في شرحها

وأرجو منكم تصحيح الأخطاء جزاكم الله خير

فلنبدأ الشرح

Function RoudFun(MyCel As String)
في هذا السطر تم عمل الدالة باسم RoudFun ولها بارومتر واحد وهو المتغير MyCel وتم تعريفه من نوع String أي نص
If MyCel = Empty Then RoudFun = "": Exit Function
في هذا السطر وضع شرط بدالة If وهو أنه إذا كانت الخلية المستهدفة فارغة تكون نتيجة الدالة فارغة ثم الخروج من الدالة
MyCel_Int = Int(MyCel)
في هذا السطر تم وضع متغير باسم MyCel_Int وهو يساوي الرقم الصحيح فقط للرقم الكسري الموضوع في في MyCel بارومتر الدالة
MyCel2 = Round(MyCel - MyCel_Int, 3)
هنا تم وضع متغير باسم MyCel2 وهو يساوي تقريب MyCel لثلاث خانات ناقص الرقم الصحيح لـ MyCel والنتيجة هي الكسر مكون من ثلاث خانات أو أقل إذا كان الرقم خاناته أقل من ثلاث
If Len(MyCel2) = 1 Then RoudFun = MyCel: Exit Function   
هنا إذا كان عدد السلسة النصية في نتيجة المتغير MyCel2 مكونة من رقم واحد فنتيجة الدالة تساوي نفس الرقم ومن ثم الخروج من الدالة
If Len(MyCel2) = 3 Then
هنا إذا كان عدد السلسة النصية في نتيجة المتغير MyCel2 مكونة من ثلاثة أرقام فقم بتنفيد الآتي :
Select Case MyCel2
هنا تم استعمال Select Case مع المتغير MyCel2

Case 0 To 0.4:

RoudFun = MyCel_Int
هنا إذاكان نتيجةالمتغير MyCel2 من صفر إلى أربعة فإن نتيجة الدالة تساوي نتيجة المتغير MyCel_Int المحددة أعلاه

Case 0.5 To 0.5:

RoudFun = MyCel_Int + 0.5
هنا نتيجة الدالة تساوي نتيجة المتغير MyCel_Int زايد 0.5 أستاذ عبد الله على الرغم من إعجابي بالفكرة بس مارأيك بهكذا

Case 0.5 To 0.5:

RoudFun = MyCel

Case 0.6 To 0.9:

RoudFun = MyCel_Int + 1

End Select

End If
هنا إذا كان MyCel2 من ستة من عشرة(0.6) إلى تسعة من عشرة (0.9) فإن النتيجة تساوي MyCel_Int زايد 1 ومن ثم إنها Select Case وإنهاء الدالة If
If Len(MyCel2) = 4 Then
هنا إذا كان عدد السلسة النصية في نتيجة المتغير MyCel2 مكونة من أربعةأرقام فقم بتنفيد الآتي :

Select Case Val(Mid(MyCel2, 4, 1))

Case 0 To 4:

RoudFun = MyCel_Int + Val(Mid(MyCel2, 1, 3))
تم استخدام دالتين دالة Val مع دالة Mid لتحديد العدد الرابع في MyCel2 هنا إذا كان عددواحد من بدايةالعدد الرابع في السلسة النصيةMyCel2 وترتيبه هنا سوف يكون 4 في السلسة نتيجته من صفر إلى أربعة فإن نتيجة الدالة تساوي نتيجة المتغير MyCel_Int زايد ثلاثة أرقام في MyCel2 من بداية السلسلة وهي مثلاً (0.0)

Case Is = 5:

RoudFun = MyCel_Int + Val(Mid(MyCel2, 1, 3)) + "0.0" & Val(Mid(MyCel2, 4, 1))
إذا كانت نتيجة Val(Mid(MyCel2, 4, 1)) تساوي خمسة فإن النتيجة تساوي MyCel_Int زايد ثلاثة أرقام في MyCel2 زايد " 0.0" مع الرقم الرابع في MyCel2 وتم وضع ( "0.0")حتى يكون موضع الرقم في السلسة 4 أي موضعه نفسه مع عدم تغير في الأرقام السابقة وهنا لا يتم تغير شيء

Case 6 To 9:

RoudFun = MyCel_Int + Val(Mid(MyCel2, 1, 3)) + "0.1"

End Select

End If

End Function
هنا إذا كانت نتيجةVal(Mid(MyCel2, 4, 1)) من 6 إلى 9 فإن النتيجة تساوي نتيجة المتغير MyCel_Int زايد ثلاثة أرقام في MyCel2 من بداية السلسلة زايد "0.1" هنا يتم إضافة رقم 1 إلى الرقم الثالث في السلسة فيزيد بمقدار واحد ومن ثم إنها Select Case وإنهاء الدالة If و إنتهاء الدالة المستحدثة Function أستأذي عبد الله ما رأيك لو كان السطر
 If Len(MyCel2) >= 4 Then

فمهما زادت الأعداد بعد الفاصلة عن ثلاثة أرقام تكون النتيجة نفسها

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

أعتذر عن الشرح اللمل فهو شرح متعلم وهذا الشرح لي ولإمثالي من المبتدئين في هذا المجال

لأنني طلبت منك أستاذي الشرح

ولكن حاولت أن أفهم الدالة بنفسي وإن شاء الله يكون فهمي سليما

أعتذر مرة أخرى عن الإطالة

تلميذكم الشهابي

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

<p>

بارك الله فيك اخي الشهابي واعذرني على عدم شرحي للدالة فقد نسيت 
</p>

<p><strong>أستاذنا / أبو أحمد </strong></p>

<p><strong>عذرك مقبول و إن لم تعتذر </strong></p>

<p><strong>بالعكس تسيانك ساعدنا في الوصول إلى محاولة الفهم بأن

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

image002.gif

بعد إعتذار الاستاذ معتصم عن شرح هذا الجزء نتيجة لظروف نسال الله ان ييسرها عليه

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

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

السلام عليكم

الاستاذ القدير عبدالله المجرب حفظك الله ورعاك

حقيقة موضوع مميز وكلنا نستفيد منه

لك منا كل الشكر والتقدير

نسأل الله ان يوفقك دنيا واخره

وهذه دالة التقريب ربما اكون اصبت


Function ALI_I(A As Double) As Double

Dim A_1 As Long

Dim A_2 As Double

Dim A_3 As Double

A_1 = Int(A): A_2 = A - A_1

A_3 = A

Select Case A_2

		    Case Is < 0.5

		    ALI_I = A_1

		    Case Is = 0.5

		    ALI_I = A_3

		    Case Is > 0.5

		    ALI_I = A_1 + 1

End Select

End Function

تقبلو تحياتي وشكري

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

  • 2 weeks later...

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

عمل أكثر من رائع يا جماعه

ولكن لى سؤال بخصوص input box

>>>>> مربع inputbox يحتوى على زرين ok,cancel

- كيف يمكننى تنفيذ كود ما عند الضغط على ok

- وعند الضغط على cancel يتم انهاء الكود

أرجو التوضيح بمثال

مع العلم أننى قمت بتنفيذ الفكرة على مربع msgbox وشغاله 100%

ولكن عند التنفيذ على مربع inputbox يعطينى خطأ

وشكرا جزيلا

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

ولكن لى سؤال بخصوص input box

>>>>> مربع inputbox يحتوى على زرين ok,cancel

- كيف يمكننى تنفيذ كود ما عند الضغط على ok

- وعند الضغط على cancel يتم انهاء الكود

أرجو التوضيح بمثال

جرب هذا الكود


Sub bbb()

A = InputBox("ادخل القيمة التي تريد", "تنبيه", 1)

If Not A <> Empty Then Exit Sub

Cells(1, 1) = A

End Sub

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

  • 2 months later...

hjlhjkl.gif

تحية طيبة لكل أحبابي

أعضاء ومشرفي منتدى أوفيسنا

بيتنا الثاني جميعاً

sdfsdu.gif

عذرا لغيابي عنكم في الفترة الأخيرة

نظرا لانشغالي بأعمال امتحانات نهاية العام في عملي

asadsdscxc.gif

واليوم موعدنا مع الفصل الثامن من الدورة وهو يخص تصحيح الأخطاء

وهذا هو الجزء الأول الخاص بأنواع الأخطاء

وبإذن الله سيتم رفع الجزء الثاني قريبا جدا

67997493wd7.gif

وفقنا الله وإياكم لكل ما يحبه ويرضاه

ولا ينقصني سوى دعاؤكم

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

5464564.gif

أشكر جميع من شاهد ورد على الجزء الأول من الفصل الثامن

وها هو الجزء الثاني كما وعدتكم

ومرفق الملف الذي تم العمل عليه

5c1622fn.gif

وبه هدية خفيفة أتمنى أن تنال إعجابكم

jhkhjkhk.gif

وفقنا الله وإياكم لكل ما يحب ويرضى

sdfgsgsdf.gif

تصحيح الأخطاء debugging.rar

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

  • 3 weeks later...
  • 1 month later...
  • 5 weeks later...

السلام عليكم ورحمة الله وبركاته اردت المشاركة في هذا العمل الخير

وذلك بشرح بعض الدروس النظرية بطريقة مرئية

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

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

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

  • 1 month later...
  • 2 weeks later...
  • 4 weeks later...
  • 4 weeks later...

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

جزيل الشكر والتقدير لكم و لكل أعضاء المنتدى الموقرين

لدى سؤال أستاذ عبدالله هل يمكن عمل الترحيل لبند أو بنود معينة حسب الإختيار من شيت إلى آخر بنفس الملف بمجرد الضغط على علامة صح بجوار البند

أرجوا المعذرة لأنى جديد فى هذه التطبيقات

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

زائر
هذا الموضوع مغلق.
×
×
  • اضف...

Important Information