إجمالي مرات مشاهدة الصفحة

الاثنين، 2 مايو 2016

تحويل المعادلات إلى أكواد Convert Formulas To VBA

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

كيف يمكن تحويل المعادلات إلى أكواد؟
كثيراً ما يطرح هذا التساؤل خصوصاً إذا كان الملف يحتوي على الكثير من المعادلات ، ويبدأ المستخدم يعاني من بطء وثقل الملف بسبب المعادلات الكثيرة ، ويبدأ في البحث عن الأكواد كبديل للمعادلات ، ولذا آثرت أن أقدم طريقة بدائية جداً وهي ليست طريقة احترافية ، ولكنها تؤدي الغرض لهذا الموضوع.

سنقوم بضرب مثال لمعادلة ترقيم في العمود الأول اعتماداً على المدخلات في العمود الثاني ، حيث يحتوي العمود الأول (النطاق A2:A11 على معالة ترقيم بسيطة)

بفرض أن لديك في ورقة العمل Sheet1 ، النطاق B2:B11 فيه مجموعة أسماء ، ولديك في النطاق A2:A11 معادلة تقوم بعملية الترقيم والمعادلة بهذا الشكل :

=IF(B2="","",ROW()-1)

والمطلوب تحويل المعادلة إلى كود والحصول على القيم فقط دون المعادلة ، أي يتم الحصول على نفس النتيجة وبنفس المعادلة دون الاحتفاظ بالمعادلة نفسها

سأقوم أولاً بوضع الكود ثم شرح لأسطر الكود لكي يتبين لكم طريقة التعديل على الكود بما يتناسب معكم
Sub Convert_Formula_To_VBA()
    Dim LR As Long

    With Sheets("Sheet1")
        LR = .Range("B" & Rows.Count).End(xlUp).Row

        With .Range("A2:A" & LR)
            .Formula = "=IF(B2="""","""",ROW()-1)"
            .Value = .Value
        End With
    End With
    
    MsgBox "Done...", 64
End Sub
السطر الأول تعريف المتغير LR لمعرفة رقم آخر صف به بيانات في العمود الثاني (عمود الأسماء)

السطر الثاني بدء التعامل مع ورقة العمل المسماة Sheet1 ونستخدم جملة With .... End With لتحقيق المطلوب وهو التعامل مع ورقة العمل Sheet1، وفائدة هذه الجملة أنها تختصر التعامل مع الجمل البرمجية حيث أنه بدلاً من أن تكتب في كل الأسطر Sheets("Sheet1")  في كل سطر للإشارة إلى ورقة العمل ، باستخدام جملة With ... End With ستقوم باستبدال الكلمة بنقطة فقط

السطر الثالث تعيين قيمة للمتغير LR وهذا يعتمد على العمود المطلوب معرفة رقم آخر صف به وهو العمود الثاني ، ويخزن المتغير رقم آخر صف للتعامل مع النطاق بدايةً من B2 إلى آخر صف به بيانات في العمود B

السطر الرابع جملة With داخل جملة With الأولى وهو للتعامل مع النطاق بدايةً من الخلية A2 إلى آخر خلية اعتماداً على العمود الثاني كما ذكرنا

السطر الخامس استخدام كلمة Formula لوضع المعادلة وتوضع المعادلة بالكامل بما في ذلك علامة يساوي بين أقواس تنصيص ، وتتم بعض التعديلات على المعادلة بالشكل التالي : الفاصلة المنقوطة في المعادلة تستبدل بفاصلة عادية ، وأقواس التنصيص الموجودة في المعادلة توضع بين أقواس تنصيص أخرى

السطر السادس يتم تحويل المعادلات التي تم إدراجها في السطر السابق إلى قيم

السطر السابع والثامن لإغلاق جملتي With وتنتهي بكلمة End With

السطر الأخير إظهار رسالة تفيد بانتهاء عمل الكود ، لإشعار المستخدم بانتهاء الكود من تنفيذ المطلوب

إعداد / ياسر خليل أبو البراء

هناك 11 تعليقًا:

  1. ما شاء الله عليك يا ابوالبراء
    زادك الله من علمه وحلمه وفضله
    تقبل تحياتى

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

    ردحذف
  3. =IFERROR(INDEX(archives!$C$3:$C$6000,IFERROR(SMALL(search!$Z$3:$Z$6000,ROW()-2),""),1),"")

    ردحذف
  4. بارك الله فيك أخي الحبيب
    حاول ترفع ملفك على منتدى أوفيسنا أو في أحد الجروبات للإطلاع عليه وموافاتك بما يجب عليك أن تقوم به
    تقبل تحياتي

    ردحذف
  5. شرح جميل جداً وواضح.باررك الله فيك وأشكرك

    ردحذف
  6. بارك الله فيك أخي الفاضل ومشكور على مرورك العطر بالمدونة

    ردحذف
  7. ايه رأيك استاذى الكبير مما علمتنا
    For i = 2 To Cells(Rows.Count, 2).End(xlUp).Row
    Range("A" & i) = i - 1

    ردحذف
  8. أحسنت أخي صلاح
    كل السبل تؤدي إلى روما .. وقد نوهت بالفعل في الموضوع أن الطريقة ليست احترافية ، ولكنها تفي بالغرض

    ردحذف
  9. ربنا يبارك فى حضرتك على مجهودك الجميل. اريد كود لاظهار محتوى خلية معينة d1 الموجوده فى sheet3 ويظهر محتوياتها داخل textbox فى userform

    ردحذف
  10. .انضم إلى eToro وقُد ثورة التكنولوجيا المالية

    تداول من أي مكان وقتك ثمين. تداول من خلال الكمبيوتر أو الجوال أو الكمبيوتر اللوحي

    ردحذف