بسم الله الرحمن الرحيم (يَرْفَعِ ٱللَّهُ ٱلَّذِينَ آمَنُواْ مِنكُمْ وَٱلَّذِينَ أُوتُواْ ٱلْعِلْمَ دَرَجَاتٍ وَٱللَّهُ بِمَا تَعْمَلُونَ خَبِيرٌ } العلم درجات: أولها الصمت، والثانية الاستماع، والثالثة الحفظ، والرابعة العمل، والخامسة النشر ***مروان طاهات*** يرحب بكم ويكيبيديا الموسوعة المروانية MANT

الاثنين، 15 مايو 2017

كود VLOOKUP


اسم هذه الدالة هو اختصار لـ "Vertical Lookup" (البحث العمودي) وهي تُستخدم للبحث في عمود محدد عن قيمة محددة حسب الصفوف، وعند العثور على تلك القيمة تقوم بإرجاع ما يقابلها في العمود الثاني (الذي نقوم بتحديده في الصيغة أيضًا). يمكنك تشبيه عمل هذه الدالة بدليل الهاتف، حيث تقوم بالبحث عن رقم شخص محدد بالبحث عن اسمه أولا في عمود الأسماء، وعندما تجد الاسم المطلوب تعثر على الرقم الذي يقابله في العمود الثاني (عمود الأرقام).

البناء العام لصيغة الدالة

VLOOKUP (lookup_value; table_array; col_index_num; [range_lookup])
  • lookup_value: القيمة التي تريد البحث عنها. يجب أن تكون هذه القيمة موجودة في العمود الأول لنطاق الخلايا الذي نحدده في table_array. هذا المُعطى argument وجوده ضروري في الصيغة.
  • table_array: ويمثل نطاق الخلايا الذي يحتوي البيانات التي تبحث فيها الدالة. وهذا المعطى وجوده ضروري أيضًا.
  • col_index_num: رقم العمود في نطاق الخلايا table_array الذي يحتوي على القيمة التي سيتم إرجاعها. وجوده مطلوب في الدالة.
  • range_lookup: هذا المعطى هو عبارة عن قيمة منطقية logical تحدد من خلالها فيما إذا كنت تريد من دالة VLOOKUP البحث عن تطابق تام (بإدخال القيمة FALSE) أو تطابق تقريبي (بإدخال القيمة TRUEE) مع قيمةlookup_value، ووجوده اختياري في الصيغة.
ملاحظة: عند استخدام القيمة المنطقية TRUE يجب أن يكون العمود الأول في نطاق الخلايا table_array مرتبا تصاعديا لكي يتم إرجاع قيمة صحيحة.

مثال 1

الجدول أدناه يحتوي على بيانات الموظفين لشركة ما. عدد صفوف الجدول هو 100 صف تقريبا. في مثل هذه الجداول الكبيرة (وما يفوقها) قد يكون من المضيعة للوقت البحث في كل صف من صفوف الجدول إذا رغبنا في العثور على معلومة معينة. وسيكون الأمر أسهل وأسرع بكثير باستخدام دالة VLOOKUP. المطلوب هنا هو العثور على قسم ومقدار راتب الموظف صاحب البطاقة رقم 100، والموظف صاحب البطاقة رقم 65.
صورة1-vlookup-example.png
نضع المؤشر في الخلية التي نريد إرجاع القيمة الأولى فيها، وهي الخلية H2 في هذا المثال، ثم نذهب إلى تبويب:
صيغ Formulas > بحث وإشارة Lookup & Reference > VLOOKUP
صورة2-ادراج صيغة-vlookup.png
في مربع الحوار Function Arguments نقوم بتحديد معطيات الدالة:
  • في الحقل الأول، lookup_value، نحدد القيمة التي نريد البحث عنها، وهي رقم البطاقة "100" في هذا المثال، لذلك سنحدد الخلية G2 التي تحتوي هذه القيمة.
  • في الحقل الثاني، table_array، نحدد نطاق الخلايا الذي يحتوي بياناتنا. في هذا المثال سنحدد الجدول بأكمله (A1:D100).
  • في الحقل الثالث، col_index_num، ندخل رقم العمود الذي يحتوي على القيمة التي سيتم إرجاعها، وبما إننا نريد العثور على "قسم" الموظف، فسنقوم بإدخال الرقم "3"، وهو تسلسل عمود "القسم" في الجدول من اليمين إلى اليسار (أي أنّ تسلسل عمود "رقم بطاقة الموظف هو"1"، عمود "تاريخ التوظيف" هو "2"، وهكذا). إذا كان اتجاه الورقة من اليسار إلى اليمين نقوم بحساب رقم العمود من اليسار إلى اليمين.
  • في الحقل الرابع، range_lookup، نقوم بإدخال الرقم صفر (والذي يعني القيمة المنطقية FALSE) لأننا نبحث عن تطابق تام مع الرقم "100"، وليس تطابق تقريبي، بسبب وجود أرقام قريبة من رقم "100" في عمود "رقم بطاقة الموظف".
صورة3-معطيات الصيغة.png
ننقر على OK، وسيتم العثور على قسم صاحب البطاقة رقم 100 فورا، وهو قسم "الخدمات":
صورة4-نتيجة الصيغة-1.png

تفسير عمل الصيغة

تقوم الصيغة أولا بالبحث في صفوف عمود "رقم بطاقة الموظف" واحدا تلو الآخر، وعندما تعثر على الرقم "100" تقوم بإيجاد القيمة التي تقابلها في عمود "القسم" ثم ترجع هذه القيمة في الخلية H2.
نكرر نفس الخطوات للعثور على مقدار راتب الموظف صاحب البطاقة رقم "100"، وستكون المعطيات كما موضّح في الصورة التالية:
صورة5-معطيات الصيغة-2.png
قمنا بإدخال الرقم "4" في الحقل الثالث لأنّ تسلسل عمود "الراتب" في الجدول هو الرابع. وكما في الخطوة السابقة، يتم إيجاد النتيجة في الخلية G2:
صورة6-نتيجة الصيغة-2.png
الخطوات نفسها تنطبق على رقم البطاقة "65".

مثال 2

الجدول أدناه يحتوي على درجات اختبارين لمجموعة من الطلاب، مع متوسط الدرجات. المطلوب هو إيجاد تقدير كل طالب باستخدام دالة VLOOKUP:
صورة7-مثال2-vlookup.png
بالتأكيد يمكننا إدخال التقديرات يدويا لكل طالب اعتمادًا على قيمة المتوسط، لكن كما ذكرنا، تسّهل دالة VLOOKUP العمل وتختصر الكثير من الوقت.
ملاحظة: قمنا بترتيب القيم في عمود "الدرجة" (وهو العمود الأول من نطاق الخلاياtable_array) تصاعديا لأننا سنستخدم القيمة المنطقية TRUE في حقلrange_lookup.
نحدد الخلية التي نريد إرجاع النتيجة فيها، وهي الخلية E2 في هذا المثال، ثم نذهب إلى تبويب:
صيغ Formulas > بحث وإشارة Lookup & Reference < VLOOKUP
صورة8-ادراج صيغة-vlookup.png
  • في الحقل الأول نحدد القيمة التي نريد البحث عن التقدير الذي يقابلها، وهي قيمة المتوسط للطالب الأول، 82، في هذا المثال (أي الخلية D2).
  • في الحقل الثاني نحدد نطاق الخلايا الذي سيتم البحث عن التقدير المناسب فيه، وهو النطاق H1:I7.
  • في الحقل الثالث نحدد رقم العمود الذي يحتوي على القيمة التي سيتم إرجاعها. وبما أنّ تسلسل عمود "التقدير" هو الثاني في نطاق الخلايا، سندخل الرقم "2".
  • في الحقل الرابع ندخل الرقم 1 (والذي يعني القيمة المنطقية TRUE) أو نتركه فارغًا، وفي الحالتين سيتم إرجاع نفس النتيجة. السبب في أنّنا اخترنا القيمة TRUE هو أننا نبحث عن تطابق تقريبي مع القيم في عمود "الدرجة" وليس تطابق تام.
صورة9-معطيات الصيغة-vlookup.png
ننقر على OK وسيتم إرجاع التقدير الذي يقابل قيم المتوسط:
صورة10-نتيجة المثال2-vlookup.png

تفسير عمل الصيغة

ستقوم الصيغة بالبحث عن القيمة "82" أو أقرب أقل قيمة إليها، وعند إيجادها، تقوم بإيجاد ما يقابلها في عمود "التقدير"، ومن ثم إرجاع النتيجة في الخلية E2.
نستخدم التعبئة التلقائية لنسخ الصيغة إلى بقية خلايا عمود "التقدير":
صورة11-تعبئة تلقائية.png
بعد نسخ الصيغة، نلاحظ حدوث خطأ في إيجاد القيم للخلايا من E7 إلى E23، والسبب هو أنّ البرنامج استخدم نطاق الخلايا H1:I7 كمرجع نسبي relative reference. لذلك سنعيد إدراج الصيغة ونستخدم نطاق الخلايا المذكور كمرجع مطلق absolute reference بوضع مؤشر الكتابة فوق اسم الخلية والنقر على مفتاح F4 (أو بكتابة علامة الدولار قبل وبعد حرف العمود يدويا من لوحة المفاتيح)
صورة12-مرجع مطلق.gif
هذه المرة سيتم إيجاد قيم صحيحة في عمود "التقدير" بأكمله عند استخدام التعبئة التلقائية:
صورة13-تعبئة تلقائية-1.gif
أو بدلا من استخدام نطاق الخلايا (H1:I7) كمرجع مطلق وتحديده يدويا كلما أردنا استخدام الدالة، نقوم بتسميته باسم مخصص. وبذلك نستطيع استخدام اسم النطاق في الصيغة. نحدد نطاق الخلايا، ندخل الاسم المرغوب في حقل الاسم (قمنا بتسميته بـ "التقدير")، ثم نضغط Enter:
صورة14-تسمية نطاق الخلايا.png
في المرة المقبلة، عندما نقوم بإدراج دالة VLOOKUP (أو أيّة دالة أخرى يُستخدم فيها ذلك النطاق)، نقوم بإدخال اسمه بدلًا من تحديده على الورقة:
صورة15-ادخال اسم النطاق.png
هذه الطريقة هي أفضل وأكثر كفاءة، وتجعلنا نتلافى الأخطاء التي قد تحدث عند استخدام نوع المرجع غير المناسب.

HLOOKUP

تعمل دالة HLOOKUP (اختصارا لـ Horizontal Lookup) بالضبط كما تعمل دالة VLOOKUPP فيما عدا أنّها تقوم بالبحث عن القيم أفقيا وليس عموديا (أي تبحث عن قيمة محددة في صف محدد حسب أعمدة ذلك الصف).

البناء العام لصيغة الدالة

HLOOKUP(lookup_value; table_array; row_index_num; [range_lookup])
  • lookup_value: هي القيمة التي تريد البحث عنها. يجب أن تكون هذه القيمة موجودة في الصف الأول لنطاق الخلايا الذي سنحدده في حقل table_array. وهذا المعطى مطلوب في الصيغة.
  • table_array: وهو نطاق الخلايا الذي يحتوي البيانات التي تبحث فيها الدالة. وهذا المعطى مطلوب في الصيغة أيضًا.
  • row_index_num: رقم الصف في نطاق الخلايا table_array الذي يحتوي على القيمة التي سيتم إرجاعها. وجوده مطلوب في الصيغة.
  • range_lookup: هذا المعطى هو عبارة عن قيمة منطقية logical تحدد فيما إذا كنت تريد من دالة HLOOKUP البحث عن تطابق تام (بإدخال القيمة FALSE) أو تطابق تقريبي (بإدخال القيمة TRUE) مع قيمةlookup_value، ووجوده اختياري في الصيغة.
ملاحظة: عند استخدام القيمة المنطقية TRUE يجب أن يكون الصف الأول في نطاق الخلايا table_array مرتبا تصاعديا لكي يتم إرجاع قيمة صحيحة.

مثال

الجدول التالي يحتوي على تواريخ بدء وانتهاء مجموعة من المشاريع. المطلوب هو إيجاد تاريخ انتهاء المشروع رقم 5. بالطبع يمكننا العثور عليه بسهولة في مثل هذا الجدول الصغير، لكن سيصبح الأمر أكثر صعوبة في الجداول الكبير. على كل حال، سنستخدم دالة HLOOKUP للعثور على القيمة المطلوبة.
صورة16-hlookup-مثال.png
أولا، نحدد الخلية التي نريد إرجاع النتيجة فيها، وهي الخلية B9 في هذا المثال، ثم نذهب إلى تبويب:
صيغ Formulas > بحث وإشارة Lookup & Reference < HLOOKUP
صورة17-ادراج صيغة-hlookup.png
في مربع الحوار Function Arguments نقوم بتحديد المعطيات:
  • في الحقل الأول، lookup_value، نحدد القيم التي نريد البحث عنها، وهو رقم المشروع "5" في هذا المثال. لذلك سنحدد الخلية B8 التي قمنا بإدخال هذا الرقم فيها مسبقا.
  • في الحقل الثاني، table_array، نحدد نطاق الخلايا الذي سيتم البحث فيه، وهو A1:I13 في هذا المثال.
  • في الحقل الثالث، row_index_num نقوم بإدخال رقم تسلسل الصف الذي  يحتوي على النتيجة التي سيتم إرجاعها. وفي هذا المثال هو صف "تاريخ الانتهاء"، تسلسله الثالث (3).
  • في الحقل الرابع، lookup_range نقوم بإدخال الرقم صفر (أي القيمة المنطقية FALSE) لأننا نريد البحث عن قيمة مطابقة تماما للقيمة في حقلlookup_value:
صورة18-معطيات الصيغة-hlookup.png
ننقر على OK وسيتم إرجاع تاريخ الانتهاء للمشروع رقم 5:
صورة19-نتيجة المثال-hlookup.png

تفسير عمل الصيغة

ستقوم الصيغة بالبحث في صف "المشروع" عن الرقم 5، وعند العثور عليه ستقوم بإيجاد القيمة المقابلة لهذا الرقم في الصف المحدد في حقل row_index_num، وهو الصف الثالث في مثالنا، ومن ثم إرجاع النتيجة في الخلية B9.
يجب أن تأخذ في الاعتبار أنّه إذا كانت قيمة lookup_range تساوي TRUE، ولم تتمكن الدالة من العثور على قيمة lookup_value فستقوم بإرجاع أقرب أقل قيمة من قيمة lookup_value.

مثال 2

إذا كنا نريد معرفة تاريخ البداية للمشروع رقم "9" (والذي هو في الحقيقة غير موجود في الجدول) ستكون الصيغة كالتالي:
صورة20-قيمة منطقية true.png
وستكون النتيجة كالتالي:
صورة21-نتيجة-2.png

تفسير عمل الصيغة

قامت الصيغة بالبحث عن الرقم "9" في صف "المشروع"، وقد تعذّر عليها إيجاده، لذلك قامت بإرجاع "تاريخ البدء" للمشروع رقم "8" وهو أقرب أقل قيمة من الرقم "9". وهذا بسبب أننا قمنا بإدخال القيمة المنطقية TRUE (أي البحث عن تطابق تقريبي).
أما إذا قمنا بتحديد القيمة المنطقية FALSE، فستكون النتيجة خطأ #N/A، لأنّ الدالة في هذه الحالة ستبحث عن تطابق تام:
صورة22_خطأ.png

كود التفقيط – ج1 اللغة العربية



دالة التفقيط للغة العربية

كود التفقيط – ج1 اللغة العربية

السلام عليكم, يعتبر كود التفقيط من أهم اكواد VBA كونه يحل مشكلة شائعة عند مستخدمي برنامج Excel من مختلف اللغات والمتمثلة بتحويل اي رقم عددي الى نص مما يساهم في حل مشكلة طباعة المستندات المالية رقماً ونصاً كما في حالة الشيكات او الفواتير وماشابه.
اعتقد ان كتابة هكذا كود ليتناسب مع طبيعة اللغة العربية (من تذكير وتأنيث) يُعتبر أمراً صعب جداً فما بالك اذا كان هذا الكود يأخذ بعين الاعتبار امكانية تغيير اسم العملة للرقم الصحيح وكذلك الجزء العشري (الكسر). اعتقد أن المهمة هنا ستكون اصعب واصعب. الكود الذي سأطرحه من كتابة الأستاذ المبدع عبد الله باقشير وقد تم طرحه في موقع أوفيسنا عام 2011. لقد قمت بتعديلات طفيفة جداً على الكود كالتالي,
  1. تغيير اسم الدالة الافتراضي لسهولة الكتابة والتذكر,
  2. تغير القيم الافتراضيّة للدالة للعملة السعودية (لا يوجد عملة افتراضيّة في الكود الاصلي),
  3. تغيير ترتيب مدخلات الدالة لسهولة التذكر.


كود التفقيط:

يمكنك نسخ كود التفقيط من صندوق الكود التالي او تحميل ملف المثال من آخر المقالة,

ملاحظات على عمل كود التفقيط للغة العربية:

بعد اضافة الكود الى موديول Module في محرر الفجوال بيزك لديك VBA Editor (او بعد تحميل ملف المثال وفتحه), سيمكنك استخدام كود التفقيط المقترح من خلال ادراجه (اضافته) كدالة ضمن ورقة العمل.
بعض اكواد VBA يكون عملها (كهذا الكود) من خلال انشاء دالة مخصّصة جديدة Function يرمز لها بـ UDF والتي هي اختصار لـ User Defined Formula.
وبالتالي, كل ماعليك فعله هو تحديد المكان الذي تريد اظهار نتيجة كود التفقيط فيه ثم اتبع خطوات ادراج معادلة في اكسل Excel,

ادراج معادلة كود التفقيط
ادراج معادلة كود التفقيط



ادراج معادلة كود التفقيط
ادراج معادلة كود التفقيط


لاحظ أننا حددنا مجموعة المعادلات User Defined لنتمكن من اظهار هذه المعادلة المخصّصة. سيُظهر لنا اكسل Excel قائمة بكل الـ UDF المتاحة لنا, نختار معادلة كودنا المسماة CurrText (المشتقة من Currency Text)

ادراج معادلة كود التفقيط
ادراج معادلة كود التفقيط


ومن ثم تقوم بادخال بيانات المعادلة حسب ماسيتم توضيحه لاحقاً, ثم موافق.

ادراج معادلة كود التفقيط
ادراج معادلة كود التفقيط



مدخلات كود التفقيط للغة العربية:



شرح معادلة كود التفقيط للعربية
شرح معادلة كود التفقيط للعربية


  • معادلة كود التفقيط المقترحة تحتاج كحد ادنى لتحديد قيمة المبلغ المراد تفقيطه سواءاً بكتابته بشكل مباشر في متن (نص) المعادلة كما في المثال رقم 5 اعلاه أو من خلال تحديد خليّة المبلغ كما في المثال الثالث والرابع اعلاه. في هذه الحالة, سيتم تطبيق العملة السعودية (ريال / هللة) على النتيجة افتراضياً الا في حال قمت بتعديل القيمة الافتراضية للمعادلة لتناسب احتياجاتك (سيتم شرحه لاحقاً). كذلك يأخذ الكود بعين الاعتبار صيغة التذكير والتأنيث للمبلغ كأن نقول “اثنا عشر” او “اثنتا عشرة” بما يتناسب مع متطلبات المستخدم النهائي. قمت بتأنيث نتيجة المعادلة افتراضياً لكن يمكنك دائماً تغييرها خلال ادراج الدالة او بتغيير القيمة الافتراضية داخل الكود نفسه (سيتم شرحها لاحقاً)
  • باقي مدخلات المعادلة حسب الرسم التوضيحي اعلاه هي كالتالي,
    • جنس العملة: اختياريّة, صفر او فارغة >> مذكر, اي رقم اخر >> مؤنث
    • اسم العملة الرئيسية مفرد. اختياريّة, لاحظ انك يجب ان تحيطها دائماً باشارتي قتباس “”
    • اسم العملة الرئيسية جمع. اختياريّة, لاحظ انك يجب ان تحيطها دائماً باشارتي قتباس “”
    • جنس الجزء العُشري من الرقم (الكسر). اختياريّة, صفر او فارغة >> مذكر, اي رقم اخر >> مؤنث
    • اسم العملة للجزء العُشري مفرد. اختياريّة, لاحظ انك يجب ان تحيطها دائماً باشارتي قتباس “”
    • اسم العملة للجزء العُشري جمع. اختياريّة, لاحظ انك يجب ان تحيطها دائماً باشارتي قتباس “”
    • عدد الخانات العشرية المراد قرائتها.  اختياريّة.
  • الكود يضيف العبارة ” فقط لا غير” افتراضيّاً بعد المبلغ. يمكنك التعديل عليها (صيغةً ومكاناً) من داخل الكود كما سنرى لاحقاً.
  • في حالة كان اسم العملة ينتهي بتاء مربوطة, يجب كتابةً اسمها بتاء مربوطة وليس هاء. مثال, هللة وليس هلله لتجنب الاخطاء الاملائيّة.
  • في المثالين الأول والثاني اعلاه, قمت بادخال القيم المتناسبة مع العملة المصريّة لكنني غيرت جنس العملة لاظهار الفرق.


كيفية التعديل على القيم الافتراضية لكود التفقيط:

يمكنك تغيير بعض او جميع القيم الافتراضية لكود التفقيط المقترح لتناسب احتياجاتك كالتالي, بعد نسخ الكود الى محرر الفيجوال بيزك – VBA Editor لديك, يمكنك تعديل القيم حسب التالي,

قيم كود التفقيط الافتراضية
قيم كود التفقيط الافتراضية

0. اسم الكود في حال اردت تغييره.
  1. اي نص تريد كتابته قبل القيمة المكتوبة. مثلاً “فقط ” (فقط مائة وخمسون….). يجب اضافة فراغ بعد العبارة التي قد ترغب باضافتها.
  2. اي نص تريد كتابته بعد القيمة المكتوبة. مثلاً ” فقط لا غير” (مائة وخمسون ريال فقط لا غير). يجب اضافة فراغ قبل العبارة التي قد ترغب باضافتها.
  3. هذا مكان المبلغ. لايمكنك التعديل هنا.
  4. جنس العملة, False >> مذكر, True >> مؤنث.
  5. اسم العملة الرئيسية مفرد. لاحظ انك يجب ان تحيطها دائماً باشارتي قتباس “”
  6. اسم العملة الرئيسية جمع. لاحظ انك يجب ان تحيطها دائماً باشارتي قتباس “”
  7. جنس الجزء العُشري من الرقم (الكسر). False >> مذكر, True >> مؤنث
  8. اسم العملة للجزء العُشري مفرد. لاحظ انك يجب ان تحيطها دائماً باشارتي قتباس “”
  9. اسم العملة للجزء العُشري جمع. لاحظ انك يجب ان تحيطها دائماً باشارتي قتباس “”
  10. عدد الخانات العشرية المراد قرائتها.  اختياريّة.
يجب التبنيه اخيراً انه وفي حالة اضفت هذه المعادلة داخل ملف العمل الذي يحوي الكود, ستظهر لك المعادلة كما هي مكتوبة اعلاه. اما لو حفظت الكود في ملف عمل آخر ومن ثم حاولت استخدام هذه المعادلة (يجب ان تكون ورقة العمل المذكورة مفتوحة الا في حال كان الكود محفوظاً في الملف الشخصي Personal, لمزيد من المعلومات حول هذه النقطة, راجع الروابط اسفل المقالة) فإنك ستحصل على المعادلة مسبوقة باسم ملف العمل الذي يحوي الكود. لا مشكلة اذا ان النتيجة ستكون هي ذاتها.

ادراج معادلة كود التفقيط من ملف آخر
ادراج معادلة كود التفقيط من ملف آخر

للتوضيح, في حال كنت تتسائل مثلي عن معنى كلمة تفقيط. فاعلم انها مشتقة من كلمة فَقَط وفعل فَقَّط والتي تعني (مثلاً فقّط الحساب) ختمه بكلمة « فقط » مع تعيين مقداره خوفا من التزوير
روابط مهمّة:
أخيراً ملف المثال المذكور في المقالة.