تُعد معالجة البيانات وتنظيمها داخل برمجيات جداول البيانات، وعلى رأسها مايكروسوفت إكسل (Microsoft Excel)، ركيزة محورية في علوم هندسة البيانات التطبيقية وإدارة العمليات المؤسسية. فعلى مدى العقود الأربعة الماضية، منذ إطلاق أولى نسخ إكسل في منتصف ثمانينيات القرن الماضي بواسطة مهندسين بارزين مثل تشارلز سيموني ودوغ كلاندر، ظلت دوال الاستعلام والبحث تمثل المحرك الأساسي لبناء التقارير التفاعلية والنماذج المالية المعقدة. ومع تطور متطلبات بيئات الأعمال الحديثة وتضخم قواعد البيانات المسطحة، واجه المحللون تحديات متنامية تتجاوز نطاق الاستعلام البسيط المعتمد على نمط المراسلة الفردية (One-to-One)، لتبرز الحاجة الملحة إلى معالجة العلاقات متعددة الأطراف (One-to-Many) التي تتطلب استرجاع سجلات متعددة لمعيار بحث واحد، وتنسيق تلك المخرجات أفقياً عبر صفوف متتابعة بدلاً من تفريغها عمودياً.
تنشأ إشكالية استرجاع القيم المتعددة أفقياً عندما تكون هياكل جداول الأعمال مصممة لعرض المتغيرات الزمنية أو التصنيفية على شكل أعمدة متجاورة، كما هو الحال في النماذج الإحصائية للتقييم الأكاديمي، وسجلات المرضى في الرعاية الصحية، ولوحات قياس الأداء الرياضي التي تتطلب سرد النتائج الفردية لكل فريق أو كيان جنباً إلى جنب في سطر واحد للمقارنة الفورية. وفي هذا السياق، تصطدم الرغبة في استخدام الدالة الكلاسيكية الشهيرة VLOOKUP بجدار قيودها المعمارية الصارمة؛ إذ بُنيت الدالة هندسياً للتعامل مع البيانات الخطية الفردية التي تتوقف عند أول قيمة تحقق الشرط المطلوب، مما يجعل استخدامها المجرد غير قادر على الإطلاق على إرجاع النتائج المتكررة أو التمدد أفقياً عبر مصفوفة من الخلايا دون ابتكار حلول حسابية بديلة أو دمجها في تركيبات مصفوفية متطورة.
يقدم هذا البحث التقني تحليلاً هندسياً شاملاً لمعالجة مشكلة “استخدام VLOOKUP لإرجاع قيم متعددة أفقياً”، مع تفكيك الأسس المنطقية للقيود الأصلية التي تحكم دوال البحث التقليدية، واستعراض البدائل المصفوفية المتقدمة التي توفرها منظومة إكسل الكلاسيكية والحديثة. سنركز بصورة تفصيلية ومتعمقة على البنية التركيبية لمعادلة المصفوفات الرائدة القائمة على تكامل دوال INDEX وSMALL وIF، بالإضافة إلى دالة COLUMN، ودراسة كيفية تطويع دالة VLOOKUP نفسها بالاعتماد على الأعمدة المساعدة المركبة. كما سيتطرق المقال إلى دراسة حالة تطبيقية متكاملة لبيانات أداء الفرق الرياضية، وصولاً إلى استعراض النقلة النوعية التي أحدثتها محركات المصفوفات الديناميكية في إصدارات إكسل 365 عبر دوال مثل FILTER وTRANSPOSE، بهدف تزويد المحلل والباحث بمرجع منهجي رصين يغطي كافة الجوانب الرياضية، والتنفيذية، وتحسين الأداء الحسابي داخل بيئات جداول البيانات الضخمة.
1. المدخل المنهجي لمشكلة استرجاع البيانات المتعددة في إكسل
1.1 أهمية البحث الأفقي في معالجة وتحليل البيانات الضخمة
يمثل استخراج السجلات المرتبطة بالكيانات المتكررة تحدياً هيكلياً كبيراً داخل جداول البيانات، لا سيما عند العمل ضمن سياقات بحثية أو أكاديمية أو مهنية تتسم بضخامة المدخلات وتشابك المتغيرات. في البيئات التشغيلية المعتادة، تُسجل المعاملات اليومية أو الرصد التجريبي بطريقة عمودية تراكمية، حيث يُخصص لكل قيد جديد صف مستقل يوثق المعرف الأساسي والصفات التابعة له. ومع ذلك، فإن التحول من طور “تسجيل البيانات” إلى طور “التحليل الاستراتيجي وعرض النتائج” يفرض ضرورة إعادة تشكيل هذه البيانات (Data Reshaping) بحيث تُختصر الصفوف المتكررة لكيان محدد، وتتحول سماتها المتعددة إلى سلاسل أفقية ممتدة في نفس السطر، وهو ما يمنح المحلل نظرة موحدة وشاملة تختصر المسافات البصرية وتحافظ على تركيز لوحة المعلومات.
تنبع الحاجة المعمارية لتوزيع البيانات أفقياً بدلاً من التوزيع الرأسي التقليدي من اعتبارات المقارنة والتحليل الإحصائي السريع. فعندما يرغب الباحث في مقارنة درجات طالب عبر عدة اختبارات فصلية، أو تتبع مبيعات مندوب محدد خلال أرباع سنوية متتالية، فإن رصف النتائج جنباً إلى جنب في صف وحيد يتيح تطبيق مؤشرات الاتجاه الخطي (Sparklines)، وحساب المتوسطات المباشرة، وملاحظة الفروق المعيارية دون تشتيت الانتباه عبر مساحات رأسية هائلة قد تفصل بين سجل وآخر بمئات الصفوف الوسيطة. علاوة على ذلك، تعتمد واجهات البرمجة التطبيقية وقواعد البيانات الحديثة على تنسيقات تسلسلية أفقية لتغذية الرسوم البيانية التفاعلية؛ حيث تُفضل محركات الرسم البياني في إكسل قراءة السلاسل الزمنية المتتابعة كصفوف متكاملة بدلاً من البحث الرأسي المتشعب.
تتجلى الأهمية القصوى للهيكلة الأفقية عند الشروع في بناء لوحات المؤشرات (Dashboards) والنماذج الإحصائية والمالية المتقدمة التي تخضع لمساحات بصرية مقيدة. تفرض الشاشات التفاعلية والتقارير التنفيذية قيوداً هندسية صارمة لا تسمح بالتمرير الرأسي اللانهائي، مما يجعل دمج وتكثيف مخرجات البحث في حيز أفقي متماسك مطلباً تصميمياً ووظيفياً لا غنى عنه. كما أن النماذج الحسابية التي تتضمن مصفوفات رياضية معقدة، مثل حساب الارتباط المتبادل أو مصفوفات التباين والتباين المشترك، تتطلب مدخلات مصفوفية مرتبة أفقياً لتنفيذ عمليات الضرب القياسي للمتجهات، مما يثبت أن استرجاع البيانات أفقياً ليس مجرد تفضيل شكلي لتنسيق الخلايا، بل هو ضرورة حتمية تمليها المتطلبات الحسابية والتحليلية للهندسة المتقدمة للبيانات.
1.2 مفهوم العلاقات متعددة الأطراف (One-to-Many) في بيئة جداول البيانات
يرتكز علم تصميم قواعد البيانات العلائقية على توصيف دقيق لطبيعة الروابط المنطقية بين الكيانات المختلفة، وتعد العلاقة متعددة الأطراف (One-to-Many) النمط الأكثر شيوعاً في مختلف التطبيقات الإنسانية والتقنية. في هذا النمط، يرتبط السجل الوحيد في الجدول الأساسي (مثل معرف العميل، أو رمز المقرر الدراسي، أو اسم الفريق الرياضي) بعدد غير محدود من السجلات التفصيلية في الجدول التابع (مثل طلبات الشراء، أو أسماء الطلاب المسجلين، أو نقاط اللاعبين). ورغم أن أنظمة إدارة قواعد البيانات العلائقية مثل SQL تتعامل مع هذه العلاقات بأريحية تامة من خلال عمليات الربط (JOINs) والتجميع (Aggregation)، فإن جداول البيانات المسطحة في إكسل تفتقر بطبيعتها الأصلية إلى بنية المخططات العلائقية الصلبة، مما يلقي بعبء إدارة وتفكيك هذه العلاقات على كاهل الدوال الحسابية والصيغ المصفوفية التي يصممها المستخدم.
يتجلى الفارق الجوهري بين البحث عن نتيجة فريدة واستخراج مصفوفة نتائج لنفس المعيار في التكوين الحسابي للمخرجات. ففي البحث الفردي، يسعى المحرك الحسابي إلى إيجاد أول نقطة تقاطع تطابق المعيار ثم يُنهي دورة المعالجة فوراً، مكتفياً بإرجاع قيمة قياسية وحيدة (Scalar Value). أما في حالة استخراج النتائج المتعددة للعلاقة متعددة الأطراف، فإن المطلوب هو إنشاء متسلسلة رياضية كاملة أو متجه بيانات (Vector) يتضمن جميع المطابقات الصحيحة مع الحفاظ على تسلسلها التاريخي أو الرقمي. هذا الفارق ينقل العملية الحسابية من مجرد فحص شرطي بسيط إلى عملية مسح شامل (Full Table Scan)، وتصفية مصفوفية (Array Filtering)، ثم إعادة توجيه بنيوية لمواقع تلك السجلات داخل الذاكرة المؤقتة للحاسوب لفرزها وعرضها.
يؤثر نموذج البيانات العلائقي تأثيراً مباشراً على كفاءة دوال البحث والاسترجاع المدمجة داخل إكسل. فعندما تُهيكل الجداول دون مراعاة لفرز المفاتيح الأساسية، تضطر دوال البحث إلى استهلاك موارد المعالجة للتحقق من كل خلية على حدة في النطاق المستهدف. وإذا كانت الدوال المستخدمة غير مهيأة لاستيعاب الطبيعة الديناميكية للمخرجات المتعددة، يحدث انهيار في سلامة البيانات ونزاهتها؛ إذ قد يفترض المحلل أن القيمة المسترجعة تمثل الصورة الكاملة، متجاهلاً وجود سجلات أخرى متطابقة تقع في صفوف لاحقة، مما يؤدي إلى تشويه نتائج التقييم واتخاذ قرارات إدارية مبنية على معطيات مبتورة تفتقر إلى الشمولية الدلالية.
2. القصور الهيكلي لدالة VLOOKUP في استرجاع القيم المتعددة
2.1 آلية عمل دالة VLOOKUP ومحدداتها الحسابية
تمثل دالة VLOOKUP (Vertical Lookup) إحدى أقدم وأشهر الأدوات الحسابية في تاريخ برمجيات الجداول الإلكترونية، حيث تم تصميم بنيتها الرياضية لتنفيذ مهام استعلام محددة ومقيدة بدقة متناهية. تتبع الدالة الصيغة المعيارية =VLOOKUP(lookup_value, table_array, col_index_num, [range_lookup])، وتقوم فلسفتها الإجرائية على مسح العمود الأول من النطاق المحدد (table_array) من أعلى إلى أسفل خطياً، للبحث عن القيمة المرجعية المستهدفة (lookup_value). وما أن تصادف الدالة أول خلية تطابق المعيار المدخل—سواء كان التطابق تقريبياً أو دقيقاً بناءً على المعامل الأخير—حتى تُصدر نواة إكسل الحسابية أمراً فورياً بقطع عملية المسح والتوقف، لتنتقل بعد ذلك أفقياً إلى العمود المقابل المحدد بواسطة رقم الفهرس (col_index_num) وتستخرج القيمة الفردية المقابلة وتفرغها في الخلية الهدف.
يكمن القصور الهيكلي المتجذر في دالة VLOOKUP في افتقارها التام لخاصية التكرار الحلقي (Looping) أو القدرة على استئناف عملية البحث بعد رصد التطابق الأول. الدالة مصممة معمارياً لتعمل كدالة وحيدة القيمة ترجع ناتجاً قياسياً لا يقبل الامتداد؛ فهي لا تحتفظ في ذاكرتها بحالة المؤشر الفهرسي بعد العثور على النتيجة الأولى، ولا تملك بنية برمجية تسمح لها بتمرير إحداثيات النتيجة السابقة للبدء منها في عملية الفحص التالية. ونتيجة لهذا الانقطاع الإلزامي عند أول نتيجة ناجحة، تصبح كافة السجلات اللاحقة التي تشترك في نفس المفتاح المرجعي مخفية تماماً وغير مرئية للدالة، بصرف النظر عن حجم البيانات أو عدد التكرارات الموجودة داخل الجدول المرجعي.
بالإضافة إلى ذلك، فإن الطبيعة الأصلية لعمل دالة VLOOKUP قائمة حصرياً على منطق البحث الرأسي؛ حيث تبحث عمودياً في صفوف الجدول لتستخرج قيمة مقابلة تقع في عمود محدد مسبقاً. وعندما يواجه المستخدم متطلبات العرض الأفقي الديناميكي الحديثة—التي تقضي بسحب المعادلة عبر أعمدة متجاورة لتوليد القيم المتطابقة التالية تباعاً—تفشل دالة VLOOKUP بصورة مطلقة في تلبية هذا الغرض، لأن تغيير موضع الخلية التي تحتوي المعادلة لا يغير من الحقيقة الجوهرية بأن الدالة ستبدأ البحث دائماً من الخلية العليا للعمود الأول، وبالتالي ستظل مقيدة بالنتيجة الأولى إلى الأبد، ما لم يتم إدخال آليات حسابية مساعدة تغير المعطيات الرقمية لمعيار البحث ذاته.

2.2 أسباب فشل المحاولات التقليدية لتوسيع دالة VLOOKUP أفقياً
يحاول العديد من مستخدمي إكسل تطبيق أساليب بديهية لتطويع VLOOKUP لتجاوز قيودها الأصلية، إلا أن هذه المحاولات تصطدم بحواجز رياضية ومنطقية لا يمكن تخطيها بالأدوات القياسية. من أبرز هذه المحاولات الخاطئة الاعتقاد بأن تغيير وسيطة رقم فهرس العمود (col_index_num) عند سحب المعادلة أفقياً سيؤدي إلى جلب السجل الثاني أو الثالث للمعيار المتكرر. والواقع الرياضي يثبت أن تعديل رقم العمود ينقل عملية الاستخراج إلى حقل بيانات مختلف تماماً لنفس السجل الأول الذي تم العثور عليه (مثل جلب رقم الهاتف بدلاً من الاسم الأول لنفس الموظف)، ولا يؤدي إطلاقاً إلى استخراج السجل الثاني الذي يشترك في الاسم نفسه، وهو ما يمثل خلطاً شائعاً بين مفهوم استرجاع خصائص متعددة لكيان فريد وبين استرجاع حالات متعددة لكيان متكرر.
تتمثل العقبة التقنية الأخرى في الجمود الحسابي لمعامل البحث المرجعي؛ فعندما يتم تثبيت معيار البحث (مثل الإشارة المطلقة للخلية التي تحتوي اسم الموظف أو الفريق)، يظل مدخل البحث ثابتاً لا يتغير في كل خلية يتم سحب المعادلة إليها عبر الصف الأفقي. ونظراً لأن خوارزمية VLOOKUP الداخلية خوارزمية قطعية لا تتغير (Deterministic Algorithm)، فإن تزويدها بنفس المدخلات ضمن نفس نطاق البيانات سيقود حتماً إلى نفس المخرجات الرياضية دون أدنى اختلاف. ولا تملك الدالة في نسختها القياسية أية واجهة برمجية تتيح لها استقبال مصفوفات منطقية لتقييد مساحة البحث أو استبعاد السجلات التي تم استرجاعها مسبقاً، مما يجعل محاولة إجبارها على توليد متسلسلة أفقية محكومة بالفشل الذاتي.
ينجم عن هذا الخلل المنهجي توليد قيم مكررة لنفس النتيجة الأولى بشكل لا نهائي على امتداد الخلايا التي تُسحب إليها المعادلة، أو الوقوع في أخطاء تفاوت الأبعاد الحسابية. ورغم أنه يمكن معالجة هذا العجز جزئياً عبر ابتكار “أعمدة مساعدة” (Helper Columns) تقوم بدمج مفتاح البحث مع عداد تسلسلي مشتق من دالة COUNTIF لتوليد مفاتيح بحث فريدة جديدة لكل تكرار، إلا أن هذه الطريقة تؤدي إلى تضخيم حجم ملفات البيانات وإفساد النقاء الهيكلي للجداول الأصلية. ومن هنا تبرز الضرورة الرياضية لتجاوز دالة VLOOKUP تماماً في هذه المسألة، والاعتماد على منظومات بديلة مبنية على منطق المصفوفات الذي توفره دوال أخرى متخصصة في توجيه الإحداثيات واستخلاص البيانات بدقة مطلقة.
3. البنية التركيبية للمصفوفة البديلة: INDEX وSMALL وIF
3.1 التفكيك المنطقي للمعادلة المركبة الشاملة
للتغلب على القصور الهيكلي لدالة VLOOKUP في استرجاع القيم المتعددة وتوزيعها أفقياً، طوّر خبراء هندسة جداول البيانات بنية مصفوفية مركبة تمثل قمة التناغم الرياضي بين دوال الاستخلاص والترتيب والمنطق الشرطي. تتألف هذه المعادلة المعيارية من تضافر ثلاث دوال رئيسية هي: دالة الفهرسة INDEX، ودالة الترتيب التصاعدي SMALL، والدالة الشرطية IF، مدعومة بدوال الموضع النسبي ROW وCOLUMN. وتتخذ الصيغة العامة للشكل التالي:
=INDEX(Return_Range, SMALL(IF(Criteria_Range = Criteria_Value, ROW(Criteria_Range) - ROW(First_Cell) + 1), COLUMN(A1)))
يعمل هذا التركيب المتقدم بمثابة محرك استعلام متكامل متعدد الطبقات؛ حيث تنهض كل دالة بمهمة حسابية محددة ترتبط بنيوياً بمخرجات الدالة التي تليها، مشكلة بذلك تدفقاً بيانياً صارماً ينطلق من قاعدة البيانات الخام وصولاً إلى استخلاص السجل الدقيق في موقعه المخصص.
يبدأ هذا التدفق الحسابي من المركز الداخلي للمعادلة عبر الدالة المنطقية IF، التي تتولى فحص النطاق المصدري عنصراً فعنصراً لمقارنته بقيمة البحث المطلوبة. وتنتج هذه العملية مصفوفة منطقية مؤقتة من القيم الثنائية (TRUE وFALSE). في المقابل، تقوم دالة ROW بحساب الإحداثيات الرقمية المتتالية لكافة صفوف النطاق. وعندما تتطابق القيمة مع الشرط (TRUE)، تمرر دالة IF الرقم الفعلي للصف النسبي، بينما تستبدل القيم غير المتطابقة (FALSE) بقيم منطقية فارغة أو مهملة. وبذلك تتحول البيانات الخام إلى مصفوفة رقمية نقية تحتوي حصرياً على أرقام الصفوف التي تحوي السجلات المرغوبة، في حين يتم إسقاط باقي الصفوف التي لا تلبي المعيار.
تنتقل هذه المصفوفة الفهرسية المفلترة مباشرة إلى وسيطة دالة SMALL، التي تؤدي دور المجدول والمنسق الفائق. تتولى هذه الدالة فرز أرقام الصفوف المسترجعة ترتيباً تصاعدياً، وتستند في تحديد الرتبة المستهدفة إلى المعامل الحسابي الذي تولده دالة COLUMN(A1). وأخيراً، تتلقى الدالة الخارجية INDEX هذا الموقع الترتيبي المنتقى لتعمل كأداة قنص نهائية، حيث تسحب القيمة الفعلية من نطاق النتائج وتضعها في الخلية المستهدفة. يخضع هذا التسلسل لهرمية حسابية محكمة داخل نواة إكسل؛ حيث تُنفذ المقارنات المنطقية أولاً، تليها العمليات الحسابية لمصفوفات الصفوف، ثم الترتيب الإحصائي، وأخيراً استرجاع المؤشرات، مما يضمن معالجة متماسكة تخلو من العشوائية الفهرسية.
3.2 مفهوم معادلات المصفوفات (Array Formulas) ودورها الحاسم
تمثل معادلات المصفوفات (Array Formulas) أحد أقوى المفاهيم الهندسية في بيئات جداول البيانات، حيث تسمح بتنفيذ عمليات حسابية ومنطقية متزامنة ومتعددة على مصفوفة كاملة من القيم دفعة واحدة داخل الذاكرة المؤقتة (RAM)، بدلاً من معالجة كل خلية في عملية حسابية منفصلة. في الصيغ الكلاسيكية غير المصفوفية، تنتظر الدالة قيمة قياسية مفردة وتُرجع قيمة قياسية مماثلة. أما في معادلات المصفوفات المركبة، فإن الوسائط تستقبل نطاقات واسعة من الخلايا في موضع يتوقع فيه البرنامج قيمة فردية، مما يدفع المحرك الحسابي لإكسل إلى إنشاء متجهات افتراضية داخلية يجري التلاعب بها رياضياً دون الحاجة إلى تفريغها في خلايا وسيطة على ورقة العمل، وهو ما يحقق أعلى درجات الكفاءة التنسيقية وتماسك البيانات.
من الناحية الإجرائية والتاريخية، شكّل التعامل مع معادلات المصفوفات فارقاً جوهرياً بين إصدارات إكسل الكلاسيكية (إكسل 2019 وما قبله) والإصدارات الحديثة المعتمدة على محرك المصفوفات الديناميكية (Dynamic Arrays Engine) في مايكروسوفت 365. في الإصدارات السابقة، كان إدخال هذه الصيغة المعقدة يتطلب ضغطاً متزامناً على ثلاثة مفاتيح في لوحة المفاتيح: Ctrl + Shift + Enter، وهو ما يُعرف تقنياً باختصار (CSE). يؤدي هذا الإجراء إلى إحاطة المعادلة تلقائياً بقوسي حاصرة مجعدين {...} من قِبل البرنامج، كإشارة للمحرك الحسابي بوجوب تشغيل معالج المصفوفات الداخلي؛ وتخلف المستخدم عن هذا الإجراء الحاسم يؤدي إما إلى ظهور أخطاء حسابية مثل #VALUE!، أو الاقتصار على فحص الخلية الأولى فقط وإرجاع نتائج مشوهة لتعطل تدفق المصفوفة.
تتمثل القوة الحاسمة لمعادلات المصفوفات في قدرتها على تحويل القيم المنطقية المؤقتة إلى مصفوفة إحداثيات رقمية قابلة للاستهلاك البرمجي الآمن. عند تقييم التعبير Criteria_Range = Criteria_Value، تنشئ الذاكرة متجهاً من القيم المنطقية الصرفة مثل {TRUE; FALSE; FALSE; TRUE}. وبواسطة التقييم المصفوفي، يتم دمج هذه السلسلة المنطقية مع سلسلة الأرقام المتولدة من دوال الصفوف، لتتحول القيم الإيجابية إلى أرقام مواقع حقيقية، بينما تُستبعد القيم السلبية تلقائياً. هذه القدرة على التلاعب بالبنى التحتية للمصفوفات الافتراضية داخل الذاكرة قبل تثبيت المخرجات النهائية هي الأساس الذي يمنح تركيبة INDEX / SMALL / IF تفوقها الجذري وقدرتها على استنساخ وتجاوز كافة وظائف VLOOKUP المتعثرة في معالجة النتائج المتعددة.
4. التحليل الإجرائي لدالة INDEX كأداة استخلاص نهائية
4.1 تحديد نطاق الإرجاع المستهدف وتثبيته بالمراجع المطلقة
تحتل دالة INDEX قمة الهيكل الوظيفي للمعادلة المركبة، حيث تتصرف كالمستقبل النهائي والقائم بالتنفيذ لعملية جلب البيانات من الجداول المرجعية. تتميز دالة INDEX عن نظيراتها من دوال البحث بخفتها الحسابية الفائقة واستهلاكها المنخفض لموارد المعالج، إضافة إلى استقلاليتها التامة؛ إذ لا تشترط أن يكون عمود البحث واقعاً في أقصى يسار النطاق كما هو الحال في VLOOKUP، بل يمكنها استرجاع البيانات من أي عمود أو صف بصرف النظر عن موقعه الجغرافي داخل ورقة العمل. ولتحقيق استرجاع دقيق ومستقر، فإن أولى الخطوات الإجرائية تتمثل في التحديد الصارم لنطاق الإرجاع (Return Range) الذي يحتوي على القيم الرقمية أو النصية المراد إظهارها في الصف الأفقي المستهدف.
يعد التثبيت الصارم للنطاق المستهدف باستخدام المراجع المطلقة عبر رمز الدولار (Absolute References: $) متطلباً معمارياً لا يقبل التهاون. فعندما نقوم بتطبيق المعادلة في خلية أولى ثم نشرها وسحبها أفقياً عبر الأعمدة المجاورة باتجاه اليسار أو اليمين، فإن سلوك إكسل الافتراضي يقوم بإزاحة كافة مراجع الخلايا غير المثبتة بنفس مقدار التحرك الأفقي. فإذا حُدد النطاق كمرجع نسبي مثل B2:B100، فإنه سيتحول في الخلية المجاورة تلقائياً إلى C2:C100 ثم إلى D2:D100، مما يخرج نطاق الاسترجاع عن مساره الأصلي ويؤدي إلى جلب بيانات خاطئة أو إرجاع أصفار وخلايا فارغة. لذلك، يتعين صياغة النطاق بصيغة مطلقة كاملة الأبعاد مثل $B$2:$B$100 لضمان ثبات حدود البيانات أثناء الحركة التوسعية للمعادلة.
ترتبط أبعاد نطاق الإرجاع المحدد داخل دالة INDEX ارتباطاً رياضياً وثيقاً بأبعاد نطاق المقارنة الشرطية المستخدم في دوال IF وROW الداخلية. يجب أن تتطابق المصفوفات في عدد الصفوف تطابقاً متماثلاً؛ فإذا كان نطاق البحث عن المعايير يمتد من الصف 2 إلى الصف 100 (أي 99 صفاً)، فينبغي حتماً أن يمتد نطاق الإرجاع في دالة INDEX عبر نفس الامتداد الرأسي تماماً (من الصف 2 إلى الصف 100). إن أي تباين في أطوال هذه المصفوفات سيقود المحرك الحسابي إلى إزاحة مؤشرات الفهرسة النسبية، مما يترتب عليه استخلاص سجلات تسبق أو تلي القيمة المستهدفة برقم صف أو أكثر، وهو ما يقوض الدقة الأكاديمية والمهنية للنموذج بأكمله.
4.2 تفسير وسيطة رقم الصف (Row Number) الديناميكية
في الاستخدامات البسيطة والمعتادة لدالة INDEX، يتم تمرير رقم صف ثابت في الوسيطة الثانية كقيمة رقمية مباشرة، كأن يُكتب =INDEX($B$2:$B$100, 5) لاسترجاع القيمة الموجودة في الصف الخامس من النطاق المحدد. غير أن هذا النمط الثابت يعيدنا مباشرة إلى نفس مشكلة الجمود التي تعاني منها VLOOKUP. يكمن الابتكار الرياضي في المعادلة المصفوفية المعقدة في تجريد هذه الوسيطة من جمودها العددي وتحويلها إلى متغير خوارزمي مرن وذكي، يتلقى مدخلاته لحظياً من نواتج المعادلات الفرعية المتداخلة، مما يجعل رقم الصف المستهدف يتكيف بصورة آنية وفقاً للموقع الأفقي للخلية التي تستقر فيها الصيغة.
تتلقى وسيطة رقم الصف داخل دالة INDEX مخرجات دالة SMALL مباشرة؛ حيث تقوم الأخيرة بتزويدها برقم الموضع الدقيق للسجل المطابق في كل خطوة. والجدير بالذكر هنا هو أن الرقم الممرر إلى دالة INDEX يمثل “الموضع النسبي” (Relative Index) داخل النطاق المحدد وليس رقم الصف الفعلي على مستوى ورقة العمل الكاملة. فإذا كان النطاق يبدأ من الخلية $B$10، فإن القيمة 1 الممررة في وسيطة الصف تعني الصف العاشر من ورقة العمل، أي العنصر الأول من النطاق الداخلي. وتكمن براعة المنظومة في قدرة الدوال المتداخلة على توفير هذا الفهرس الداخلي بدقة فائقة، مما يجنب النظام خلط الإحداثيات بين العناوين المطلقة للورقة والعناوين النسبية للمصفوفة المستهدفة.
يسهم هذا الربط الديناميكي في توفير حماية كاملة ضد أخطاء تجاوز الحدود المحددة (Out-of-Bounds Errors). طالما أن وسيطة رقم الصف تتغذى بقيم ناتجة عن تصفية دقيقة للمصفوفة الحقيقية، فإن دالة INDEX تظل تعمل بثبات داخل الإطار الفيزيائي للنطاق. وحتى في الحالات التي يتم فيها استيفاء كافة النتائج الإيجابية المتطابقة ويبدأ نظام الترقيم في التوقف أو إنتاج رموز انتهاء المتسلسلة، فإن هذه النقطة تُدار لاحقاً بواسطة دوال التحقق من الأخطاء، مما يجعل دالة INDEX بمثابة ذراع ميكانيكية دقيقة تنفذ التوجيهات الرقمية دون أي تدخل يدوي ودون أدنى احتمال للوقوع في خطأ فهرسي عشوائي.
5. الدور الرياضي لدالة SMALL في جدولة وترتيب المخرجات
5.1 مفهوم الترتيب التصاعدي لمواقع السجلات المتطابقة
تؤدي دالة SMALL دور المنظم الرياضي والمجدول الحسابي في هذه المنظومة المصفوفية المتكاملة، حيث تختص في استخراج القيم الصغرى من مصفوفة أرقام بناءً على ترتيب الرتبة المطلوب. وتتبع الدالة الصياغة البنيوية =SMALL(array, k)، حيث تمثل array مجموعة البيانات الرقمية المفحوصة، بينما يمثل k الرتبة الحسابية للقيمة المستهدفة (أي أصغر قيمة، أو ثاني أصغر قيمة، أو ثالث أصغر قيمة، وهكذا تصاعدياً). وفي ظل وجود حالات تطابق متعددة لمعيار البحث، تصبح مهمة فرز هذه المواقع المتعددة تصاعدياً من أصغر رقم صف نسبي إلى أكبره هي الضمانة الوحيدة لتحقيق التتابع المنطقي واستعراض البيانات بنفس الترتيب الذي وردت به في الجدول المصدري الأصلي.
تبرز الأهمية الرياضية الخارقة لدالة SMALL في قدرتها الفطرية على الفلترة والاستبعاد التلقائي للقيم غير الرقمية. فعندما تتلقى الدالة مصفوفة ممتلئة بالقيم المنطقية الزائفة (FALSE) الناتجة عن عدم تطابق المعيار الشرطي في دالة IF، فإن خوارزمية SMALL تتجاهل تلقائياً كل قيمة غير رقمية، ولا تأخذ في الاعتبار سوى الأرقام الصحيحة الصرفة التي تمثل صفوف التطابق الفعلي. على سبيل المثال، إذا كانت المصفوفة المدخلة إلى الدالة تتخذ الشكل التالي: {FALSE; 3; FALSE; FALSE; 8; 12; FALSE}، فإن دالة SMALL تُسقط قيم FALSE كلياً من حساباتها، وتتعامل حصرياً مع المتجه الرقمي المصغر {3; 8; 12}، مما يشكل جسراً متيناً لتحويل البيانات المفلترة إلى مخرجات متسلسلة بدقة هندسية عالية.
تمنح دالة SMALL للمحلل سيطرة مطلقة على تسلسل جلب النتائج بناءً على الرتبة الحسابية (k-th smallest). فمن خلال التحكم في قيمة الوسيطة k، يمكننا في الخلية الأفقية الأولى استخراج أدنى رقم صف مطابق (وهو السجل الأول)، ثم في الخلية الأفقية التالية استخراج ثاني أدنى رقم صف (السجل الثاني)، وهكذا دواليك. تمنع هذه الجدولة التصاعدية حدوث أي تداخل أو قفز بين السجلات؛ فكل نتيجة تُحجز في مكانها المخصص بحسب تسلسل ظهورها التاريخي، مما يحفظ السياق الزمني أو الترتيبي للبيانات، وهو أمر في غاية الحيوية عند تحليل التجارب المتكررة أو التعامل مع السلاسل الإحصائية ذات الدلالة الترتيبية.

5.2 توليد المعامل الديناميكي (k) باستخدام مرجعيات الأعمدة
لكي تعمل المعادلة المركبة بمرونة وسلاسة فائقة تتيح للمستخدم كتابتها لمرة واحدة ثم سحبها أفقياً عبر مئات الخلايا دون الحاجة لتعديل أرقام الرتب يدوياً، لا بد من ابتكار طريقة لتوليد المعامل k بصورة آلية وديناميكية تتزايد بمقدار واحد صحيح مع كل انتقال نحو عمود جديد. وهنا يبرز الدور الذكي لدالة الموضع العمودي COLUMN. تقوم هذه الدالة بإرجاع الرقم التسلسلي للعمود الذي تشير إليه وسيطتها؛ فعندما نكتب COLUMN(A1)، فإن الدالة تُرجع فوراً الرقم 1، نظراً لأن الخلية A1 تقع في العمود الأول من ورقة العمل، وبذلك يحصل المعامل k في أول ظهور له على القيمة الحسابية 1 تلقائياً.
تتجلى الميكانيكية الحركية المدهشة لهذه الدالة عند ترك مرجعها كمرجع نسبي مفتوح دون تثبيت برمز الدولار، فعند إدخال الصيغة الحاوية على COLUMN(A1) في خلية البداية وسحبها عرضياً نحو اليسار أو اليمين لتعبئة باقي خلايا الصف، يتدخل محرك إكسل ليعدل المرجع النسبي تلقائياً وفق اتجاه الحركة. ففي الخلية الثانية، يتحول التعبير إلى COLUMN(B1)، وهو ما يُنتج الرقم 2 تلقائياً، وفي الخلية الثالثة يتحول إلى COLUMN(C1) ليُنتج الرقم 3، وتستمر هذه المتتالية الحسابية {1, 2, 3, 4, ...} في التدفق بسلاسة لا نهائية بالتزامن مع تمدد الخلايا الأفقية، مما يضمن تزويد دالة SMALL بالرتبة الصحيحة تباعاً لجلب السجل الأول ثم الثاني فالثالث دون أدنى تدخل يدوي.
يقودنا هذا التحليل إلى مقارنة فنية بين استخدام COLUMN واستخدام الدالة المقابلة ROW في إدارة المعامل k. فلو كان الهدف هو تفريغ النتائج المتعددة عمودياً (رأسياً نحو الأسفل)، لكان الاستخدام الحصري موجهاً لدالة ROW(A1) التي يزداد ناتجها مع النزول إلى الصفوف التالية (A2, A3). أما في حالتنا هذه، والتي تستهدف التوسع الأفقي العرضي حصرياً، فإن استخدام ROW(A1) يُعد خطأً حسابياً فادحاً؛ لأن التحرك عبر خلايا نفس الصف يحافظ على ثبات رقم الصف، وبالتالي ستظل ROW(A1) تُرجع القيمة 1 دائماً، مما يتسبب في تكرار النتيجة الأولى في كافة الخلايا الأفقية. ومن ثم، فإن المواءمة بين اتجاه التعبئة (سحب أفقي) والدالة المولدة للمتسلسلة (دالة الأعمدة COLUMN) هو شرط رياضي أصيل لضمان السلوك السليم للمعادلة.
6. التوجيه الشرطي وحساب المواقع النسبية: دالتا IF وROW
6.1 بناء الاختبار المنطقي لاكتشاف التطابقات
يمثل الاختبار المنطقي الذي تُجريه دالة IF صمام الأمان والمرحلة التأسيسية التي تُبنى عليها مصفوفة النتائج برمتها. تتكفل الدالة الشرطية بإجراء مقارنة متزامنة واسعة النطاق بين الخلية المفردة الحاوية على معيار البحث المستهدف وبين كامل النطاق العمودي الحاوي على المفاتيح في الجدول الأساسي، من خلال الصياغة Criteria_Range = Criteria_Value (على سبيل المثال: $A$2:$A$100 = $D$2). وبدلاً من تقييم خلية واحدة كما في الاستخدامات البسيطة، يُجبر إدخال المصفوفة الدالة على فحص كل مدخل في النطاق المستهدف بصورة مستقلة ومقارنته بالمعيار، مما ينتج عنه متجه داخلي ثنائي الأبعاد يتكون حصراً من القيم المنطقية TRUE في حال التطابق التام وFALSE في حال الاختلاف.
تكتسب هذه المرحلة أهمية خاصة في إدارة حساسية النصوص وجودة المطابقة؛ فالنواة الحسابية لإكسل في اختبارات المقارنة القياسية غير حساسة لحالة الأحرف في اللغات اللاتينية (Case-Insensitive)، مما يتيح مرونة واسعة في استيعاب التباينات الطفيفة في كتابة الكلمات. غير أنه في البيئات الأكاديمية والمهنية الدقيقة، قد يتطلب الأمر مطابقة شديدة الصرامة لرموز أو نصوص محددة؛ وحينها يمكن دمج دوال مساعدة إضافية مثل دالة EXACT لضمان استخلاص السجلات التي تطابق المعيار بصورة حرفية مطلقة تشمل ضبط المسافات وعلامات الترقيم، لمنع أي تلوث منطقي قد ينشأ عن إدراج سجلات غير مرغوب فيها داخل مصفوفة القيم الإيجابية TRUE.
إن توليد مصفوفة الصواب والخطأ المؤقتة يمثل تفكيكاً عملياً لمعضلة استهلاك الذاكرة؛ إذ تُعامل القيم المنطقية داخل المحرك الحسابي لإكسل كبتات رقمية خفيفة الوزن للغاية (Boolean Bits)، حيث يمثل الصواب الرقم 1 والخطأ الرقم 0. هذا التجريد المنطقي يمهد السبيل للمرحلة التالية من الحساب الرياضي؛ إذ لا تقوم دالة IF بحفظ نصوص البيانات أو سماتها المعقدة في هذه المرحلة المؤقتة، بل تقتصر مهمتها الصارمة على إسقاط مرشح منطقي (Logical Mask) فوق جدول البيانات، عازلةً المناطق التي تتضمن الهدف بدقة متناهية تمهيداً لحساب إحداثياتها الطبوغرافية على صفحة العمل.
6.2 معادلة ترقيم الصفوف النسبية وتفادي أخطاء إزاحة الرأس
بعد نجاح دالة IF في تحديد مواقع التطابق المنطقي، يأتي التحدي الرياضي الأكثر حساسية في بنية هذه المعادلة، وهو كيفية تعيين رقم صف صحيح ومضبوط لكل تطابق. يعتمد المبتدئون عادة على استخدام دالة الصف البسيطة ROW(Criteria_Range) مباشرة لتعيين الأرقام، غير أن هذا التطبيق المباشر ينطوي على فخ برمجي كارثي يُعرف في هندسة الجداول بـ “خطأ إزاحة الرأس” (Header Offset Error). فلو كان جدول البيانات يبدأ من الصف الخامس عشر مثلاً (أي أن النطاق هو $A$15:$A$100)، فإن دالة ROW سترجع أرقام الصفوف الحقيقية لورقة العمل بدءاً من 15 فصاعداً، وحين تتلقى دالة INDEX الرقم 15 في مصفوفة تبدأ من الصف 15، فإنها ستبحث عن العنصر الخامس عشر داخل النطاق (أي الصف 30 فعلياً)، مما يترتب عليه انهيار كامل في موثوقية النتائج المسترجعة.
لتفادي هذا الانحراف الفهرسي القاتل، وضع خبراء إكسل صيغة رياضية معيارية تضمن توليد تسلسل رقمي يبدأ بالواحد الصحيح دائماً بصرف النظر عن موقع الجدول داخل ورقة العمل، وتُصاغ هذه القاعدة الذهبية كالتالي: ROW(Criteria_Range) - ROW(First_Cell) + 1. عند تطبيق هذه المعادلة على النطاق $A$15:$A$100، نقوم بحساب رقم صف كل خلية ثم نطرح منه رقم صف الخلية الأولى (الخلية A15 التي تقع في الصف 15) ونضيف الرقم 1. فبالنسبة للخلية الأولى: $15 – 15 + 1 = 1$. وللخلية الثانية: $16 – 15 + 1 = 2$. وللخلية الثالثة: $17 – 15 + 1 = 3$. وهكذا يتحول التسلسل الحقيقي لورقة العمل إلى تسلسل نسبي محلي يبدأ بالرقم 1 وينمو تصاعدياً بانضباط تام.
تضمن صيغة الإزاحة المعيارية هذه سلامة النماذج وقابليتها للنقل وإعادة الاستخدام عبر أوراق عمل مختلفة دون الحاجة لإعادة ضبط الفهارس يدوياً. وسواء تم إدراج صفوف فارغة في رأس الصفحة، أو نُقل الجدول المصدري بأكمله من قمة الورقة إلى منتصفها لغايات التنسيق الجمالي، تظل المعادلة محتفظة بمرونتها الرياضية الداخلية؛ إذ تقوم دالة الطرح الديناميكي بتصفير الفارق الحسابي وإعادة الترقيم إلى الصفر الافتراضي مضافاً إليه واحد، مما يجعل التوافق بين مخرجات دالة ROW النسبية ومدخلات دالة INDEX توافقاً عضوياً راسخاً يحول دون حدوث أي خطأ في الإسناد أو الإرجاع.
7. ميكانيكية التمدد الأفقي للمعادلة وسحب الخلايا
7.1 إدارة المراجع النسبية والمطلقة أثناء السحب العرضي
تعتمد كفاءة النشر الأفقي للمعادلة المركبة على الضبط الدقيق والاستراتيجي لمراجع الخلايا، حيث يُعد التفريق الصارم بين المراجع المطلقة (المغلقة برمز الدولار $) والمراجع النسبية (المفتوحة للحركة) هو المحور الهندسي الفاصل بين نجاح العملية أو فشلها الذريع. عند البدء في سحب مقبض التعبئة (Fill Handle) عبر خلايا الصف الواحد أفقياً من اليمين إلى اليسار أو العكس، تتأثر مراجع الأعمدة حصرياً بالحركة الجغرافية للمعادلة؛ لذا فإن أي مرجع يمثل قاعدة البيانات الأساسية أو معيار الاستعلام المرجعي يجب أن يُقفل إقفالاً مزدوجاً يشمل رمز العمود ورقم الصف معاً.
يتعين تثبيت معيار البحث تثبيتاً مطلقاً (مثل $A$17)، لضمان استمرار كافة الخلايا الأفقية في فحص نفس القيمة المستهدفة دون أي انحراف. فإذا لم يُثبت العمود في الخلية المرجعية، فإن السحب الأفقي بمقدار خطوة واحدة سينقل معيار البحث تلقائياً إلى الخلية المجاورة (مثل B17)، وهي خلية قد تحوي بيانات رقمية أخرى أو تكون فارغة تماماً، مما يدمر سلامة المقارنة الشرطية. وبالمثل، يجب أن تُقفل كافة النطاقات المرجعية للأعمدة مثل نطاق البحث $A$2:$A$13 ونطاق الإرجاع $B$2:$B$13 إقفالاً مطلقاً لحماية حدود مصفوفة التحليل من الانزياح العرضي الموازي لحركة المؤشر الفأري.
في المقابل، يجب الإبقاء المتعمد والذكي على مرجع دالة توليد المعامل COLUMN(A1) كمرجع نسبي حر بالكامل؛ إذ إن الهدف الجوهري من هذا المرجع ليس قراءة محتوى الخلية A1 إطلاقاً، بل استغلال حرف العمود الحاضن لها كعداد فيزيائي يتغير مع اتجاه الحركة. إن ترك هذا المرجع حراً يسمح لإكسل بممارسة سلوكه التلقائي الطبيعي في تعديل الحرف مع السحب؛ فيتحول المرجع عند الانتقال للخلية الأفقية التالية إلى COLUMN(B1) حتماً، ثم إلى COLUMN(C1)، متيحاً للمعادلة التمدد عبر مسافات أفقية واسعة جداً تمتد لعشرات الأعمدة دون أن تفقد نسقها الرياضي أو يحدث انزياح في شروطها المؤسسة.
7.2 سلوك المصفوفة أثناء الانتقال الأفقي المستمر
عند مراقبة التدفق الحسابي عبر خلايا الصف الواحد خطوة بخطوة أثناء السحب الأفقي، يمكن ملاحظة تحولات رياضية مدهشة في سلوك المصفوفة المعالجة داخل الذاكرة المؤقتة. في الخلية المستهدفة الأولى، تستقبل دالة SMALL القيمة 1 من دالة COLUMN(A1)، فتبحث عن أصغر رقم صف نسبي يلبي الشرط المنطقي في المصفوفة، ولنفرض أنه الصف رقم 2؛ فتمرره فوراً إلى دالة INDEX التي تقطف القيمة المخزنة في الصف 2 وتعرضها مباشرة في هذه الخلية، كأول نتيجة ناجحة لعملية البحث الأفقي.
عند الانتقال إلى الخلية الثانية في نفس الصف، فإن البيئة المنطقية الداخلية للمعادلة لا تتغير فيما يخص فحص التطابقات؛ إذ تظل مصفوفة الأرقام النسبية المؤهلة كما هي تماماً. لكن التغيير الجوهري يطرأ حصراً على دالة SMALL، التي تتلقى الآن القيمة 2 الناتجة عن COLUMN(B1). بناءً على هذا التحديث، تتجاهل الدالة أصغر رقم صف قامت باستدعائه سابقاً، وتبحث عن ثاني أصغر رقم صف نسبي، ولنفرض أنه الصف رقم 5؛ فيتم تمرير الرقم 5 إلى دالة INDEX، التي تظهر نتيجته في الخلية الثانية. ويتكرر هذا السلوك الحسابي المنتظم في الخلية الثالثة مستخرجاً النتيجة الثالثة (المقابلة لـ COLUMN(C1))، ثم الرابعة، في تدفق بياني متسق ينقل البيانات من النسق الرأسي المضغوط إلى شريط أفقي مبسوط وواضح.
يستمر هذا التدفق الأفقي السلس حتى يتم استيفاء واستنزاف كافة القيم المتطابقة المتاحة في قاعدة البيانات الأصلية. وحينما تنتقل المعادلة إلى الخلية الأفقية التي تلي آخر تطابق مسجل، تتلقى دالة SMALL رتبة حسابية (ولتكن الرتبة الخامسة، k=5) تتجاوز إجمالي عدد الأرقام المتاحة داخل المصفوفة المفلترة (التي تحوي 4 نتائج فقط مثلاً). في هذه اللحظة بالذات، يعجز المحرك الإحصائي لدالة SMALL عن العثور على قيمة تلبي هذه الرتبة المطلوبة، مما يؤدي إلى توقف السلسلة الحسابية وصدور خطأ رياضي صريح يعكس نفاد النتائج، وهو ما يستدعي تدخل استراتيجيات معالجة الأخطاء لتحسين مظهر النموذج واستقراره.
8. دراسة حالة تطبيقية: استخراج نقاط لاعبي فرق كرة السلة
8.1 هيكلة البيانات الأولية وتحديد معطيات النموذج
لترسيخ المفاهيم النظرية السابقة وتوضيح قدرة المعادلة المصفوفية على حل المشكلات المعقدة، نستعرض دراسة حالة تطبيقية متكاملة مستمدة من قطاع التحليل الرياضي وإحصاءات دوريات كرة السلة. تخيل أن لدينا سجلاً إحصائياً رأسياً يوثق مشاركات لاعبي أندية متعددة في مباريات مختلفة، حيث يوضح الجدول في العمود A اسم الفريق (Team)، بينما يوضح العمود B عدد النقاط (Points) التي سجلها اللاعب في المباراة المعنية. يمتد هذا الجدول في نطاق البيانات من الخلية A2 إلى الخلية B13 كما هو موضح في المعطيات الجدولية التالية:
- الصف 2: الفريق Mavs — النقاط: 24
- الصف 3: الفريق Pacers — النقاط: 18
- الصف 4: الفريق Nets — النقاط: 22
- الصف 5: الفريق Pacers — النقاط: 30
- الصف 6: الفريق Mavs — النقاط: 40
- الصف 7: الفريق Mavs — النقاط: 15
- الصف 8: الفريق Nets — النقاط: 12
- الصف 9: الفريق Pacers — النقاط: 25
- الصف 10: الفريق Mavs — النقاط: 25
- الصف 11: الفريق Pacers — النقاط: 14
- الصف 12: الفريق Nets — النقاط: 19
- الصف 13: الفريق Nets — النقاط: 16
تتمثل المشكلة العملية المطروحة في رغبة الجهاز الفني في بناء لوحة استعلام مدمجة في أسفل ورقة العمل؛ حيث يتم إدخال اسم الفريق المستهدف في الخلية المرجعية A17 (وليكن فريق Mavs)، والمطلوب هندسياً هو استخراج كافة النقاط المسجلة بواسطة لاعبي هذا الفريق وتوزيعها أفقياً في الخلايا المتجاورة B17 وC17 وD17 وE17، بحيث تتوالى الأرقام تباعاً دون إغفال أي سجل ودون ترك فجوات بينية، مما يمكن المحلل من قراءة الأداء الهجومي للفريق عبر شريط موحد بنظرة واحدة.
يتضح من القراءة الأولية للبيانات أن فريق Mavs يتكرر في أربعة صفوف مختلفة من الجدول الأصلي؛ حيث ظهر في الصف 2 مسجلاً (24) نقطة، وفي الصف 6 مسجلاً (40) نقطة، وفي الصف 7 مسجلاً (15) نقطة، وأخيراً في الصف 10 مسجلاً (25) نقطة. لو حاولنا استخدام دالة VLOOKUP التقليدية عبر كتابة الصيغة =VLOOKUP($A$17, $A$2:$B$13, 2, FALSE) وسحبها أفقياً عبر الخلايا، فستكون النتيجة الكارثية هي ظهور الرقم (24) مكرراً في جميع الخلايا من B17 إلى E17؛ لأن الدالة تجد التطابق الأول في الصف 2 وتتوقف عنده دائماً، متجاهلة تماماً النقاط (40، 15، 25)، وهو ما يؤكد عجز الدالة القياسية وحتمية استخدام الصيغة المصفوفية المركبة.

8.2 التطبيق العملي للصيغة وتحليل النتائج المسترجعة
لتحقيق الهدف المطلوب واستخراج سجلات فريق Mavs الأربعة أفقياً، نتوجه إلى الخلية B17 المجاورة مباشرة لمعيار البحث، ونقوم بصياغة المعادلة المصفوفية المركبة بدقة متناهية على النحو التالي:
=INDEX($B$2:$B$13, SMALL(IF($A$2:$A$13 = $A$17, ROW($A$2:$A$13) - ROW($A$2) + 1), COLUMN(A1)))
في بيئات إكسل الكلاسيكية، نضغط على المفاتيح Ctrl + Shift + Enter لتفعيل الصيغة (أو نضغط مفتاح Enter في إكسل 365 بفضل محرك المصفوفات التلقائي). عند تثبيت المعادلة في الخلية B17، يظهر الرقم (24) فوراً، وهو أول رصيد نقطي سجله الفريق في الصف 2 من الجدول الأصلي.
نقوم الآن بسحب مقبض التعبئة للخلية B17 أفقياً نحو اليسار (أو اليمين حسب لغة الواجهة) لتغطية الخلايا C17 وD17 وE17. نلاحظ ما يلي بالتحليل التفصيلي:
- في الخلية
C17: يتحول المعامل تلقائياً إلىCOLUMN(B1)أي الرقم 2. تستخرج دالةSMALLثاني أصغر صف مطابق (الصف 6 من الجدول، الذي يمثل الموضع النسبي 5)، وتمرره لدالةINDEXليظهر الرقم (40). - في الخلية
D17: يتحول المعامل إلىCOLUMN(C1)أي الرقم 3. تستخرج دالةSMALLثالث أصغر صف مطابق (الصف 7، الموضع النسبي 6)، فتسترجع دالةINDEXالقيمة (15). - في الخلية
E17: يتحول المعامل إلىCOLUMN(D1)أي الرقم 4. تستخرج دالةSMALLرابع أصغر صف مطابق (الصف 10، الموضع النسبي 9)، وتظهر القيمة (25).
بالمطابقة الفورية، نجد أن السلسلة الأفقية المسترجعة في النطاق B17:E17 تتكون بدقة تامة من القيم: (24، 40، 15، 25). هذا التطابق المطلق مع سجلات الجدول الرأسي الأصلي يبرهن على النجاح الرياضي للمعادلة المصفوفية في فك الارتباط الرأسي، وتحويل علاقة الأطراف المتعددة لفريق Mavs إلى شريط مصفوفي أفقي غاية في التناسق والدقة الحسابية، محققاً الهدف الذي استعصى كلياً على الأدوات التقليدية.
9. استراتيجيات معالجة الأخطاء وتحسين الأداء الحسابي
9.1 معالجة خطأ نفاد النتائج (#NUM!) بطرق احترافية
على الرغم من النجاح المبهر للمعادلة المصفوفية في استخراج القيم المتطابقة، فإن هناك ظاهرة حسابية حتمية تظهر عند استمرار سحب المعادلة أفقياً إلى ما بعد استيفاء كافة النتائج الفعلية. في دراسة الحالة السابقة، إذا واصل المستخدم سحب المعادلة من الخلية E17 إلى الخلية التالية F17، فإنه سيتفاجأ بظهور رمز الخطأ الشهير #NUM!. ينشأ هذا الخطأ تحديداً من داخل دالة SMALL؛ فعندما تطلب منها وسيطة COLUMN(E1) استخراج خامس أصغر قيمة (k=5) من مصفوفة لا تحتوي في أصلها سوى على أربعة صفوف متطابقة، فإن الدالة تفشل رياضياً في العثور على رتبة تطابق هذا الرقم، فتصدر خطأ القيمة العددية #NUM! وتمرره إلى السطح، مما يشوه المظهر الجمالي للتقرير التنفيذي ويوحي بوجود خلل في التصميم.
تتمثل الطريقة الأكثر شيوعاً واحترافية لمعالجة هذه المشكلة التنسيقية في “تغليف” المعادلة المصفوفية المركبة بالكامل داخل دالة معالجة الأخطاء IFERROR. تتبع هذه الدالة الصياغة =IFERROR(Value, Value_if_error)؛ حيث تقوم بتقييم الصيغة الأصلية بالكامل، فإذا أسفرت عن نتيجة عددية سليمة قامت بعرضها فوراً، أما إذا واجهت أي خطأ حسابي (بما في ذلك خطأ #NUM! الناتج عن نفاد النتائج)، فإنها تتجاوزه بهدوء وتُرجع قيمة بديلة يحددها المستخدم، وعادة ما تكون سلسلة نصية فارغة يُعبر عنها بعلامتي تنصيص متتاليتين "". وبذلك تصبح المعادلة الوقائية الشاملة كالتالي:
=IFERROR(INDEX($B$2:$B$13, SMALL(IF($A$2:$A$13 = $A$17, ROW($A$2:$A$13) - ROW($A$2) + 1), COLUMN(A1))), "")
تتيح هذه الإضافة الآمنة سحب المعادلة أفقياً عبر مساحات واسعة تتجاوز أقصى عدد متوقع من النتائج المتكررة؛ فإذا كان الفريق يمتلك 10 مباريات، يمكن سحب المعادلة عبر 15 عموداً، لتظهر المباريات العشر بوضوح، في حين تظل الأعمدة الخمسة المتبقية بيضاء ونظيفة وخالية من أي إشارات خطأ مشتتة.
توجد مقاربة هندسية أخرى تفضلها بعض النماذج الأكاديمية الصارمة، وتتمثل في استخدام فحص منطقي مسبق عبر الجمع بين دالتي IF وCOUNTIF بدلاً من كتم الأخطاء عبر IFERROR. تعتمد هذه الطريقة على فحص موضع العمود الحالي عبر المقارنة الشرطية: IF(COLUMN(A1) <= COUNTIF($A$2:$A$13, $A$17), [Formula], ""). تكمن الميزة النظرية لهذا الأسلوب في كونه يمنع استدعاء المعادلة المصفوفية الثقيلة من الأساس إذا تجاوز عدد الأعمدة عدد النتائج المتاحة، مما يحافظ على شفافية المنطق البرمجي، غير أن استخدام IFERROR يظل الحل المفضل والأوسع انتشاراً نظراً لإيجازه وخفته التركيبية وسهولة صيانته من قبل مطوري النماذج المالية والإدارية.
9.2 تحسين استهلاك الذاكرة وسرعة المعالجة في الملفات الضخمة
على الرغم من المرونة والجمال الرياضي لمعادلات المصفوفات المركبة (INDEX / SMALL / IF)، إلا أنها تُصنف ضمن أثقل الصيغ الحسابية عبئاً على وحدة المعالجة المركزية (CPU) والذاكرة المؤقتة لبرنامج إكسل. تتضاعف العمليات الحسابية لهذه الصيغ بصورة هندسية مع زيادة عدد الصفوف؛ فإذا كان النطاق يحتوي على 50,000 صف، ومُددت المعادلة أفقياً عبر 20 عموداً، فإن إكسل يضطر إلى معالجة مصفوفة من مليون عنصر منطقي في كل دورة إعادة حساب (Recalculation Cycle). هذا السلوك الحسابي الكثيف قد يؤدي إلى تجمد الشاشة، وتباطؤ حركة التنقل داخل الملف، واستنزاف موارد النظام بصورة مفرطة تعيق الإنتاجية وتجعل إدارة جداول البيانات الضخمة أمراً بالغ التعقيد.
لتحسين استهلاك الذاكرة وتفادي الاختناقات الأدائية في الملفات الكبيرة، يجب اتباع حزمة من الممارسات الهندسية الصارمة. أولى هذه القواعد هي الامتناع التام والقطعي عن الإشارة إلى الأعمدة الكاملة مثل A:A أو B:B داخل معادلات المصفوفات؛ إذ إن كتابة المرجع بهذا الشكل المفتوح يجبر المحرك الحسابي لإكسل على فحص وتخصيص مساحات ذاكرة لكافة صفوف ورقة العمل البالغة 1,048,576 صفاً، حتى لو لم تكن مشغولة بالبيانات! وبدلاً من ذلك، يجب حصر النطاقات في حدودها الفيزيائية الفعلية عبر استخدام جداول إكسل المنظمة (Excel Tables) والمراجع المهيكلة (Structured References)، أو تحديد نطاقات ثابتة ومحكمة مثل $A$2:$A$5000 لتقليص نطاق التقييم الداخلي إلى حدوده الدنيا المطلوبة فقط.
يلعب الترتيب المسبق للبيانات المرجعية (Pre-sorting) دوراً إيجابياً غير مباشر في استقرار المعالجة؛ حيث يساعد فرز البيانات وفق عمود المعايير محرك الحساب على الوصول السريع إلى الكتل الخلوية المتجاورة دون الحاجة للتشتت عبر صفحات الذاكرة العشوائية المتباعدة. علاوة على ذلك، في الحالات التي تتضخم فيها السجلات لمئات الآلاف، يُنصح دائماً بإلغاء الحساب التلقائي وتحويله إلى الحساب اليدوي (Manual Calculation) عبر خيارات البرنامج أثناء عمليات التحرير، أو اللجوء إلى تقنيات “الأعمدة المساعدة الخفيفة” التي تُجري العمليات المنطقية لمرة واحدة فقط بدلاً من إعادة احتساب المصفوفات الثقيلة داخل كل خلية أفقية على حدة، محققين بذلك التوازن المنشود بين رشاقة الأداء الهندسي ودقة المخرجات الإحصائية.
10. المقارنة المعيارية والبدائل الحديثة في الإصدارات المتقدمة
10.1 الحلول المعاصرة باستخدام دالة FILTER ودوال المصفوفات الديناميكية
شهد عام 2018 نقلة نوعية وتاريخية هي الأكبر في المعمارية البرمجية لبرنامج مايكروسوفت إكسل، تمثلت في إطلاق محرك “المصفوفات الديناميكية” (Dynamic Arrays Engine) في إصدارات مايكروسوفت 365 وإكسل 2021 وما تلاها. أزال هذا المحرك الثوري الحاجة التاريخية لاستخدام اختصارات لوحة المفاتيح المعقدة (CSE)، وألغى القيود التي كانت تفرض كتابة معادلات مصفوفية مركبة ومتداخلة. وفي صدارة هذه الدوال الحديثة جاءت دالة التصفية المباشرة FILTER، التي أحدثت ثورة حقيقية في طريقة استخراج النتائج المتعددة وتجاوزت تماماً كل التعقيدات المصاحبة لتركيبة INDEX وSMALL وIF الكلاسيكية.
تتميز دالة FILTER ببساطتها الفائقة وصياغتها الرياضية المباشرة: =FILTER(array, include, [if_empty]). لاسترجاع سجلات متعددة رأسياً، يكفي تحديد نطاق البيانات ونطاق المقارنة؛ فتفيض النتائج (Spill) تلقائياً في الخلايا دون سحب يدوي. ولتحقيق المطلب الهندسي الأساسي لموضوعنا—وهو تفريغ النتائج المتعددة أفقياً بدلاً من التوزيع الرأسي—يتم دمج دالة FILTER بدالة التحويل الهندسي TRANSPOSE أو الدالة الحديثة TOROW، لتصبح المعادلة المعاصرة في غاية الأناقة والإيجاز على النحو التالي:
=TRANSPOSE(FILTER($B$2:$B$13, $A$2:$A$13 = $A$17, ""))
أو باستخدام الدالة المتخصصة في التحويل إلى صف أفقي:
=TOROW(FILTER($B$2:$B$13, $A$2:$A$13 = $A$17, ""))
تقوم هذه الصيغة المتطورة باستخلاص كافة النتائج المتطابقة دفعة واحدة داخل الذاكرة بواسطة FILTER، ثم تقوم TRANSPOSE أو TOROW بقلب محور المصفوفة الناتجة من متجه عمودي إلى صف أفقي ممتد، وتفيض النتائج تلقائياً عبر الخلايا الأفقية بضغطة زر واحدة على مفتاح Enter ودون الحاجة لسحب المعادلة يدوياً أو تكرارها في الخلايا المجاورة.
تبرز المقارنة التقنية بين دقة وبساطة حل FILTER المتطور مقابل تعقيد تركيبة INDEX / SMALL الكلاسيكية فوارق جوهرية في الأداء والصيانة؛ فبينما تتطلب الطريقة الكلاسيكية استخدام خمس دوال متداخلة، وضبطاً معقداً للمراجع النسبية والمطلقة، وسحباً يدوياً، وتغليفاً بدوال الأخطاء، يُنجز الحل الحديث نفس المهمة بدالتين فقط وبمعادلة واحدة تُكتب في خلية وحيدة وتتكفل بنشر نتائجها ذاتياً دون استهلاك مفرط للذاكرة، مع توفير ميزة الحذف التلقائي للمخرجات إذا أُزيلت السجلات، مما يمثل تحولاً جذرياً في هندسة البرمجيات المكتبية جعل حلول الاستعلام الأفقي متاحة بأعلى مستويات النقاء والأناقة البرمجية.
10.2 دليل اتخاذ القرار لاختيار الطريقة المثلى لاسترجاع البيانات
رغم التفوق الكاسح للحلول المعاصرة القائمة على المصفوفات الديناميكية، لا يمكن الجزم بأفضلية طريقة واحدة بصورة مطلقة في كافة السيناريوهات العملية؛ إذ تحكم البيئات المؤسسية والبحثية معايير متعددة تفرض موازنات دقيقة بين الحداثة البرمجية والتوافقية التشغيلية. لذا، تم وضع هذا الدليل المنهجي لمساعدة المحللين ومديري تقنية المعلومات على اتخاذ القرار الرشيد لاختيار الاستراتيجية المثلى لاسترجاع البيانات المتعددة أفقياً وفقاً لظروف بيئة العمل:
- بيئة العمل والتوافقية العكسية (Backward Compatibility): إذا كانت النماذج وجداول البيانات ستتم مشاركتها مع مستخدمين يعتمدون على إصدارات إكسل القديمة (Excel 2019، 2016، 2013 أو أقدم)، أو بيئات تفتقر للاشتراكات السحابية، فإن استخدام دوال مثل
FILTERأوTOROWسيؤدي حتماً إلى تعطل النموذج وظهور خطأ#NAME?لدى هؤلاء المستخدمين. في هذه الحالة، يصبح الاعتماد على تركيبة INDEX / SMALL / IF الكلاسيكية (مع تثبيت CSE) هو الخيار الإلزامي والوحيد لضمان استقرار النموذج وسلامة تشغيله عبر مختلف الأجهزة والمنصات. - حجم مصفوفة البيانات وموارد المعالجة: في قواعد البيانات الضخمة التي تحتوي على مئات الآلاف من الصفوف على إصدارات قديمة، قد تسبب معادلات
INDEX / SMALLتدهوراً حاداً في الأداء؛ وحينها يُفضل الاعتماد على استراتيجية العمود المساعد المركب (Helper Column) الذي يدمج معيار البحث مع دالةCOUNTIFلتوليد مفاتيح فريدة مثل (Mavs_1,Mavs_2)، واستخدام دالةVLOOKUPالعادية بالاقتران معCOLUMN(A1)للاستعلام الأفقي؛ حيث تتفوق هذه الطريقة المساعدة في سرعة الحساب بمراحل على مصفوفاتSMALLالمعقدة. - المرونة وسرعة التطوير والصيانة: إذا كانت المنشأة تعمل بالكامل ضمن بيئة Microsoft 365 أو Excel 2021+، فإن الخيار القياسي والمعياري دون منازع هو دمج TRANSPOSE مع FILTER أو استخدام TOROW. توفر هذه الحلول الحديثة أقصى درجات المرونة، وتقضي على أخطاء سحب الخلايا، وتمنح المحلل القدرة على تعديل شروط البحث في ثوانٍ معدودة، مما يقلل احتمالات الخطأ البشري ويرتقي بجودة التقارير إلى المعايير الهندسية الحديثة.
تؤكد التوصيات المهنية والأكاديمية في ختام هذا التقييم أن الانتقال نحو الحلول الديناميكية الحديثة هو الاتجاه المستقبلي الحتمي لعلم تحليل البيانات داخل جداول البيانات، غير أن الإدراك العميق للأسس الرياضية التي قامت عليها الحلول المصفوفية الكلاسيكية يظل السلاح المعرفي الأهم لأي متخصص يسعى لامتلاك فهم شامل لكيفية إدارة الذاكرة، وبناء المتجهات، ومعالجة العلاقات العلائقية المعقدة في شتى بيئات الحوسبة الجدولية.
خاتمة
في الختام، يمثل البحث عن حلول لمشكلة “استخدام VLOOKUP لإرجاع قيم متعددة أفقياً” نموذجاً مثالياً للتطور المستمر في حلول هندسة جداول البيانات؛ حيث بدأ كمعضلة تقنية ناجمة عن القصور الهيكلي الأصيل لدالة بُنيت أساساً لإرجاع قيمة فردية والتوقف عند أول تطابق، ليتحول عبر إبداعات مطوري النماذج إلى سياق رياضي متكامل يدمج بين الفهرسة والترتيب والانتقاء الشرطي من خلال تحالف دوال INDEX وSMALL وIF مع دالة COLUMN. وقد أثبت هذا التحليل المعمق أن فهم حركة البيانات بين المراجع المطلقة والنسبية، واستيعاب آليات ترقيم الصفوف الموضعية، يمثل الفارق الجوهري بين النماذج الهشة المعرضة للانهيار وتلك النماذج الرصينة التي تصمد أمام تقلبات الأحجام والبيئات التشغيلية المختلفة.
لقد فتحت الإصدارات الحديثة لبرنامج إكسل آفاقاً جديدة بالكامل من خلال محركات المصفوفات الديناميكية ودوال FILTER وTRANSPOSE وTOROW، منهيةً حقبة طويلة من التعقيد الرياضي والضغط المتزامن على مفاتيح لوحة المفاتيح، ومؤكدةً أن مستقبل إدارة وتحليل البيانات يتجه نحو المزيد من الأناقة البرمجية والسلاسة التنفيذية. ومع ذلك، يظل الإلمام بالحلول المصفوفية الكلاسيكية ركناً أساسياً من أركان الثقافة الحاسوبية للمحلل المحترف؛ فهو لا يضمن التوافقية العكسية المطلقة للنماذج المؤسسية الحساسة فحسب، بل يغرس فهماً عميقاً لمنطق تدفق البيانات ومعالجتها داخل الذاكرة المؤقتة، مما يمكّن الباحثين وصناع القرار من تطويع جداول البيانات لأعقد المهام التحليلية بدقة واقتدار.
المراجع
- Alexander, M., & Kusleika, R. (2020). Excel 2019 Bible. John Wiley & Sons.
- Billings, C. (2021). Mastering Excel Array Formulas: The complete guide to dynamic arrays and modern functions. Microsoft Press.
- Frye, C. (2019). Microsoft Excel 2019 Step by Step. Microsoft Press.
- Harvey, G. (2021). Excel All-in-One For Dummies. John Wiley & Sons.
- Jelen, B. (2020). MrExcel 2020: Seeing Excel Clearly. Holy Macro! Books.
- Walkenbach, J. (2015). Excel 2016 Formulas. John Wiley & Sons.
- Winston, W. (2021). Microsoft Excel Data Analysis and Business Modeling (Office 2021 and Microsoft 365). Microsoft Press.