إكسيل وتحليل البياناتصيغ ودوال إكسيل

إكسيل: كيفية التحقق مما إذا كانت الخلية تحتوي على نص من قائمة

دليل أكاديمي شامل يشرح كيفية التحقق من احتواء خلية إكسيل على نص من قائمة محددة باستخدام دوال COUNTIF، SUMPRODUCT، والمصفوفات الديناميكية المتقدمة.

تاريخ النشر

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

تتنوع المنهجيات والتقنيات الرياضية والبرمجية المستخدمة في تحقيق هذا الغرض، بدءاً من الصيغ التقليدية المستندة إلى الدوال الإحصائية والمنطقية الكلاسيكية، مروراً بالمصفوفات الحسابية المتقدمة التي توظف دوال البحث والتحويل الرقمي، وصولاً إلى محركات الحساب الحديثة والمصفوفات الديناميكية المدعومة بدوال التحليل المتقدم في بيئات الحوسبة الحديثة مثل Microsoft 365 وأدوات تحويل البيانات مثل Power Query ولغات البرمجة النصية مثل VBA. يتطلب الاختيار الأمثل بين هذه المنهجيات فهماً عميقاً للبنية الهيكلية للبيانات، وحجم المصفوفات المشمولة بالتحليل، ومستوى الحساسية لحالة الأحرف، والتأثير الحسابي التراكمي لكل صيغة على ذاكرة المصنف وزمن معالجة الأوامر.

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

1. الأسس النظرية لمعالجة النصوص ومطابقة السلاسل النصية في إكسيل

1.1 مفهوم مطابقة النصوص الجزئية والكلية في بيئات جداول البيانات

في علم معالجة البيانات النصية داخل برمجيات الجداول الممتدة، ينشأ فارق جوهري ودقيق بين المطابقة التامة (Exact Match) والمطابقة الجزئية أو البحث عن السلاسل الفرعية (Sub-string Match). ترتكز المطابقة التامة على مبدأ التطابق المطلق بين السلسلتين النصيتين في الطول، وترتيب المحارف، والمسافات البينية والطرفية؛ حيث يعتبر النظام النصين متطابقين فقط إذا كانت كل بايت أو خانة محرفية متطابقة تماماً مع نظيرتها، وهو النمط الذي تعتمده الدوال المنطقية البسيطة ودوال البحث التقليدية في حالتها الافتراضية.

على النقيض من ذلك، فإن مطابقة النصوص الجزئية تمثل عملية مسح استكشافي يتم خلالها البحث عن وجود سلسلة محرفية صغرى (Pattern) مطمورة داخل سلسلة نصية كبرى (Target String)، بغض النظر عما يسبق تلك الكلمة أو يليها من نصوص، أو مسافات، أو علامات ترقيم. تكمن الأهمية العملية لهذا النمط في معالجة الهياكل غير المتجانسة للبيانات الواردة من مصادر خارجية مثل الأنظمة المصرفية، واستطلاعات الرأي، وملاحظات العملاء، وأوصاف المنتجات، حيث تحتوي الخلية الواحدة على جمل كاملة أو بيانات وصفية غير منظمة.

تتمثل الصعوبة البرمجية والرياضية في هذا الإطار في إجراء مسح متزامن لخلية نصية مفردة ضد قائمة كاملة من الكلمات المفتاحية، إذ لا تتيح الدوال القياسية البسيطة مثل دالة البحث النصي إمكانية المقارنة المباشرة بين قيمة فردية ونطاق كامل دون توظيف تقنيات الحساب المصفوفي المتسلسل، مما يتطلب فهم المنطق الداخلي لكيفية تعامل محرك إكسيل مع مصفوفات المقارنة والتحويلات المنطقية الناتجة عنها لضمان الحصول على قرارات تصنيفية دقيقة دون استهلاك مفرط لموارد المعالجة.

1.2 بنية البيانات المعيارية لإجراء عمليات الفحص المقارن

يتطلب التنفيذ الفعال لعمليات فحص النصوص في إكسيل تهيئة وتصميم معمارية بيانات واضحة تفصل بين النطاق الهدف (Target Range) والنطاق المرجعي للبحث (Lookup List). يمثل النطاق الهدف مجموعة الخلايا التي تخضع لعملية الفحص والتحليل، والتي تشتمل عادةً على النصوص الطويلة، أو أوصاف المعاملات، أو البيانات غير المنظمة. في المقابل، يمثل النطاق المرجعي قائمة الكلمات المفتاحية الصريحة والمجردة التي تشكل معايير التصنيف والتطابق المراد الاستدلال بها.

من الضروري الالتزام بالاستخدام الصارم للمراجع المطلقة (Absolute References) الممثلة بعلامة الدولار (مثل $E$2:$E$8) عند الإشارة إلى النطاق المرجعي لقائمة البحث داخل الصيغ الحسابية. يضمن هذا الإجراء الحفاظ على ثبات وتطابق نطاق المعايير أثناء تعميم الصيغة وسحبها عبر مقبض التعبئة التلقائية لتشمل آلاف الصفوف في النطاق الهدف، إذ إن أي انحراف في المرجع النسبي سيؤدي حتماً إلى إزاحة نطاق البحث وإسقاط عناصر حيوية من القائمة، مما ينجم عنه أخطاء تصنيف جسيمة.

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

2. التشريح الدقيق للصيغة الكلاسيكية: دمج COUNTIF مع الرموز البديلة

2.1 دور الرموز البديلة (Wildcards) وعمليات التسلسل النصي

تعتمد المنهجية التقليدية الأكثر شهرة في إكسيل لفحص وجود نص من قائمة على توظيف الرموز البديلة أو ما يُعرف بمحارف البدل (Wildcards) المدعومة أصلاً في مجموعة من دوال الإحصاء والبحث. يبرز رمز النجمة (*) بوصفه المحرف البديل المحوري في هذه العمليات، حيث يمتلك دلالة رياضية تفيد بتمثيل أي عدد من المحارف النصية، بدءاً من الصفر وحتى ما لا نهاية من الحروف أو الأرقام أو الرموز المتتالية.

عند الرغبة في البحث عن وجود كلمة مفتاحية معينة بغض النظر عن موقعها داخل الخلية النصية، يتم إحاطة هذه الكلمة برمز النجمة من كلا الجانبين، مما يُنشئ معيار بحث نصي مرن يقبل وجود أي محارف تسبق الكلمة أو تليها. يتم إنجاز هذا الدمج ديناميكياً باستخدام معامل الربط والتسلسل النصي (&) عبر الصيغة البنيوية: "*" & Range & "*"، مما يحول كل عنصر في القائمة المرجعية إلى نمط استكشافي شامل.

عند تطبيق هذا التسلسل على نطاق مرجعي كامل، يقوم محرك الحساب بتحويل القائمة الأصلية إلى مصفوفة افتراضية من الأنماط النصية المجهزة برمز النجمة؛ فإذا كانت القائمة المرجعية تحتوي على كلمات مثل “تسويق” و”مبيعات”، فإن معامل الربط ينتج مصفوفة داخلية بالهيئة: {"*تسويق*", "*مبيعات*"}، وهي البنية الأساسية التي تسمح لدوال العد بإجراء مقارنات متزامنة ومتعددة المعايير على خلية نصية مفردة بكفاءة تشغيلية ممتازة.

2.2 الآلية البرمجية لعمل دالة COUNTIF مع المصفوفات

تم تصميم الدالة الإحصائية الكلاسيكية COUNTIF لحساب عدد الخلايا ضمن نطاق معين والتي تحقق معياراً واحداً محدداً. ومع ذلك، عند عكس البنية التشغيلية التقليدية وتمرير خلية فردية واحدة في وسيطة النطاق (Range) وتمرير نطاق البحث الكامل المزود بالرموز البديلة في وسيطة المعيار (Criteria)، يتغير السلوك الوظيفي للدالة جذرياً في الذاكرة الحسابية لإكسيل لتتحول إلى دالة مصفوفية.

في هذا الوضع غير التقليدي، تقوم الدالة بتقييم الخلية الهدف بشكل منفصل مقابل كل عنصر من عناصر مصفوفة المعايير؛ فإذا تطابقت الخلية الهدف مع النمط الأول، تسجل الدالة القيمة (1) في الموضع الأول للمصفوفة المؤقتة، وإذا لم تتطابق تسجل القيمة (0). تتكرر هذه العملية التقييمية لجميع بنود القائمة المرجعية، مما يؤدي في النهاية إلى توليد مصفوفة أحادية البعد مؤلفة من أصفار وقيم موجبة في الذاكرة اللحظية للنظام.

على سبيل المثال، إذا كانت الخلية المستهدفة تحتوي على النص “حملة التسويق الرقمي للربع الأول”، وكانت مصفوفة المعايير تتألف من الكلمات {“مبيعات”، “تسويق”، “إدارة”}، فإن دالة COUNTIF تُرجع داخلياً المصفوفة الحسابية التالية: {0, 1, 0}. تظهر هذه النتيجة تواجد النص الفرعي الثاني وغياب النصين الأول والثالث، وهي المخرجات الخام التي تعتمد عليها الطبقات المنطقية اللاحقة لاتخاذ القرار النهائي بشأن تطابق الخلية.

3. التكامل المنطقي بين الدوال الشرطية: IF و OR

3.1 توظيف الدالة المنطقية OR لتقييم مصفوفة النتائج

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

في المنطق البولياني (Boolean Logic)، تُعامل الأرقام غير الصفرية (وخاصة الرقم 1 وما فوق) بوصفها مكافئة للقيمة المنطقية الصائبة (TRUE)، في حين يُعامل الرقم صفر بوصفه القيمة المنطقية الخاطئة (FALSE). عندما تتلقى الدالة OR المصفوفة الناتجة من دالة العد {0, 1, 0}، فإنها تقوم باختبار ما إذا كان هناك عنصر واحد على الأقل داخل المصفوفة يحمل قيمة منطقية موجبة؛ وإذا تحقق ذلك، تُرجع الدالة القيمة العامة TRUE بشكل مباشر.

يجب التنبيه إلى أنه في إصدارات إكسيل الكلاسيكية السابقة لنسخة محرك المصفوفات الديناميكية (Dynamic Array Engine)، كانت الدالة OR القياسية تواجه أحياناً قيوداً في التعامل مع المصفوفات الحسابية دون الضغط على مفاتيح التجميع المصفوفي الشهيرة (Ctrl + Shift + Enter). لتفادي هذه المشكلة في المصنفات التوافقية القديمة، كان يلجأ المطورون إلى استبدال الدالة OR بالدالة SUM أو SUMPRODUCT لجمع عناصر المصفوفة العددية، ومن ثم اختبار ما إذا كان المجموع الكلي أكبر من الصفر.

3.2 صياغة المخرجات النهائية عبر الدالة الشرطية IF

تمثل الدالة الشرطية IF الغلاف النهائي للمنظومة الحسابية، حيث تتولى تحويل التقييم المنطقي البحت إلى مخرجات نصية أو إجرائية مفهومة للمستخدم النهائي أو جاهزة للتقارير الإدارية، مثل تصنيف السجلات إلى “مطابق” و”غير مطابق”، أو “Yes” و”No”، أو إعادة توجيه المعالجة لحسابات متقدمة أخرى.

تأخذ الصيغة النهائية الكاملة في هذا النمط الكلاسيكي الهيكل التركيبي التالي:

=IF(OR(COUNTIF(A1, "*" & $E$2:$E$8 & "*")), "Yes", "No")

حيث تمثل الخلية A1 السلسلة النصية المراد فحصها، ويمثل النطاق $E$2:$E$8 قائمة الكلمات المفتاحية المرجعية. تقوم الدالة بتقييم الشرط بدقة متناهية، فإذا نتج عن الفحص تطابق واحد على الأقل، يتم تمرير القيمة المخصصة للشرط الإيجابي، وفي حال خلو الخلية من جميع الكلمات المفتاحية، تُرجع الصيغة القيمة المخصصة لحالة النفي.

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

4. التطبيق العملي خطوة بخطوة على مجموعات البيانات الحقيقية

4.1 إعداد جدول البيانات وتحديد القوائم المرجعية

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

في عمود منفصل ومستقل تماماً، وليكن العمود (E) بدءاً من الخلية E2 وحتى E5، يتم إدراج قائمة الكلمات المفتاحية المرجعية التي نسعى لرصدها داخل تلك الملاحظات، مثل: “تحويل بنكي”، “شيك”، “بطاقة ائتمان”، “نقدي”. يفيد هذا الفصل الهيكلي في الحفاظ على مرونة النموذج؛ حيث يمكن لمدير النظام إضافة أو تعديل أي كلمة مفتاحية مستقبلاً دون الحاجة لتعديل بنية المعادلات الرياضية المطبقة على آلاف الصفوف في الجدول الرئيسي.

من الضروري التأكد من خلو قائمة الكلمات المفتاحية في العمود (E) من أي صفوف فارغة غير مقصودة داخل النطاق المحدد، حيث إن وجود خلية فارغة محاطة بالرموز البديلة "**" سيؤدي إلى مطابقة أي نص في العالم، مما يتسبب في اعتبار جميع صفوف الجدول مطابقة دون استثناء. بعد التحقق من نظافة القائمة المرجعية، يتم تثبيت المراجع بعلامة الدولار لتأمين جاهزيتها للربط الحسابي.

4.2 كتابة وتعميم الصيغة الحسابية عبر السجلات

تبدأ الخطوة التنفيذية بكتابة الصيغة المركبة في الخلية الأولى من عمود النتائج، وليكن الخلية B2 المحاذية لأول سجل بيانات نصي. يتم إدخال الصيغة التالية بدقة تامة:

=IF(SUMPRODUCT(COUNTIF(A2, "*" & $E$2:$E$5 & "*")) > 0, "مطابق", "غير مطابق")

تم في هذه الصيغة تفضيل استخدام SUMPRODUCT على دالة OR لضمان التوافقية التلقائية والكاملة عبر كافة إصدارات إكسيل الكلاسيكية والحديثة دون الحاجة لآليات الإدخال المصفوفي المعقدة.

بمجرد الضغط على زر الإدخال (Enter)، سيقوم البرنامج بحساب النتيجة الفورية للسجل الأول. بعد التأكد من صحة النتيجة، يتم سحب مقبض التعبئة التلقائية (AutoFill Handle) من الزاوية السفلية للخلية B2 لأسفل العمود، أو النقر المزدوج عليه لتعميم الصيغة على كامل امتداد الجدول البياني الذي قد يضم عشرات الآلاف من السجلات المتتالية.

عقب إتمام التعميم، يُنصح بإجراء مراجعة إحصائية سريعة عبر تطبيق عوامل التصفية (Filters) على العمود B، للتحقق من توزيع النتائج وفحص عينات عشوائية من الخلايا المصنفة كـ “مطابق” و”غير مطابق” للتأكد التام من عدم وجود انحرافات حسابية أو أخطاء في تثبيت النطاقات المرجعية، مما يرسخ الثقة في مخرجات التحليل الشامل للبيانات.

5. المنهجية البديلة المتقدمة: استخدام SUMPRODUCT مع ISNUMBER و SEARCH

5.1 التحليل الوظيفي لدالة البحث غير الحساسة للأحرف SEARCH

تمثل تركيبة الدوال الرياضية المعتمدة على دالة البحث النصي SEARCH مع دالتي ISNUMBER و SUMPRODUCT المنهجية الأكثر متانة ومرونة في معالجة مصفوفات النصوص داخل بيئات إكسيل المتقدمة. صُممت دالة SEARCH للبحث عن موقع بداية سلسلة نصية فرعية داخل نص رئيسي محدد، وتتميز بكونها دالة غير حساسة لحالة الأحرف (Case-Insensitive)، مما يجعلها مثالية للتعامل مع النصوص الإنجليزية والبيانات متعددة اللغات.

عندما تعثر دالة SEARCH على النص المستهدف داخل الخلية، فإنها تُرجع رقماً صحيحاً يمثل الموضع المحرفي الذي تبدأ عنده الكلمة داخل الجملة (مثلاً الرقم 5 إذا كانت الكلمة تبدأ عند المحرف الخامس). أما في حالة إخفاق الدالة في العثور على الكلمة، فإنها لا تُرجع القيمة صفر، بل تُصدر خطأ القيمة الشهير #VALUE!، وهو ما كان يشكل عائقاً أمام المعالجة الحسابية المباشرة حتى تم دمجه مع الدوال المنطقية الفاحصة.

تتجلى القوة الاستثنائية لهذه الدالة عندما نمرر النطاق المرجعي الكامل $E$2:$E$8 كوسيطة أولى (find_text) والخلية المفردة A2 كوسيطة ثانية (within_text). في هذه اللحظة، تقوم الدالة بمحاولة تحديد مواقع جميع كلمات القائمة المرجعية داخل نص الخلية في خطوة حسابية واحدة، مما يولد مصفوفة مختلطة تحتوي على أرقام صحيحة لمواضع الكلمات التي تم العثور عليها، وأخطاء #VALUE! للكلمات التي لم تظهر في النص.

5.2 التحويل المنطقي والتجميع الحسابي عبر ISNUMBER و SUMPRODUCT

لمعالجة الأخطاء الناتجة عن دالة SEARCH وتحويل مخرجاتها إلى قيم قابلة للمعالجة الرياضية، يتم تغليف دالة البحث داخل الدالة المنطقية ISNUMBER. تقوم هذه الدالة بفحص كل عنصر في المصفوفة الناتجة؛ فإذا كان العنصر رقماً (مما يدل على نجاح العثور على الكلمة)، تُرجع القيمة المنطقية TRUE، وإذا كان العنصر خطأً نصياً من نوع #VALUE!، تتجاهل الدالة الخطأ وتُرجع القيمة المنطقية FALSE، لتنتج مصفوفة بوليانية نقية من القيم الصائبة والخاطئة.

تأتي بعد ذلك الخطوة الحاسمة المتمثلة في استخدام المعامل السالب المزدوج (Double Unary Operator –) لتحويل القيم المنطقية TRUE و FALSE إلى مكافئاتها الرقمية الصريحة (1 و 0 على التوالي). تُمكن هذه المعالجة الرياضية الدالة التجميعية الجبارة SUMPRODUCT من جمع الآحاد والأصفار الناتجة في الذاكرة دون الحاجة إلى اللجوء لصيغ المصفوفات المعقدة ذات الأقواس المعقوفة.

تتكامل الصيغة الرياضية المتكاملة لهذا المسار بالصورة التالية:

=SUMPRODUCT(--(ISNUMBER(SEARCH($E$2:$E$8, A2)))) > 0

إذا كان ناتج الجمع التراكمي أكبر من الصفر، فإن ذلك يعني رياضياً أن الخلية تحتوي على كلمة مفتاحية واحدة على الأقل من القائمة المرجعية، مما يوفر أسلوب فحص فائق الاستقرار، وقابل للدمج المباشر داخل دوال IF الشرطية أو التنسيق الشرطي المتقدم (Conditional Formatting).

6. التعامل مع حساسية حالة الأحرف (Case Sensitivity) في السلاسل النصية

6.1 الفروق الجوهرية بين دالتي SEARCH و FIND

في العديد من قواعد البيانات التشغيلية المتقدمة، وخاصة تلك التي تتعامل مع اللغات اللاتينية، ورموز المنتجات القياسية (SKU Codes)، والمعرفات البرمجية، والمفاتيح المشفرة، تصبح مسألة التمييز الدقيق بين الحروف الكبيرة (Uppercase) والحروف الصغيرة (Lowercase) مسألة بالغة الأهمية لمنع التداخل بين الكيانات البيانية المختلفة. في هذا السياق، يبرز التباين التقني الجوهري بين دالتي البحث الأساسيتين في إكسيل: دالة SEARCH ودالة FIND.

بينما تتسم دالة SEARCH بالمرونة والتغاضي التام عن حالة الأحرف (حيث تعتبر الحرف “a” مطابقاً تماماً للحرف “A”)، تتميز الدالة الموازية FIND بالصرامة المطلقة والمطابقة البايتية الحساسة لحالة الأحرف (Case-Sensitive). عند تمرير نص بحث بحروف كبيرة إلى دالة FIND، فإنها تتجاهل تماماً أي تواجد لنفس الكلمة إذا كانت مكتوبة بحروف صغيرة، وتصدر خطأ #VALUE! ما لم تتطابق حالة كل حرف بدقة مجهرية.

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

6.2 بناء معادلة متقدمة تراعي تطابق حالة الأحرف تماماً

لتحقيق فحص صارم يراعي حساسية حالة الأحرف للتحقق مما إذا كانت الخلية تحتوي على نص محدد من قائمة معينة، نقوم باستبدال دالة SEARCH بدالة FIND ضمن البنية المصفوفية المعتمدة على SUMPRODUCT و ISNUMBER. تضمن هذه الصياغة فحص النص الأصلي مقابل كافة بنود القائمة مع اشتراط التطابق التام في تشكيل الأحرف اللاتينية.

تتم كتابة الصيغة المتقدمة على النحو التالي:

=IF(SUMPRODUCT(--(ISNUMBER(FIND($E$2:$E$8, A2)))) > 0, "مطابق بدقة", "غير مطابق")

عند تنفيذ هذه الصيغة، تقوم دالة FIND بإجراء مقارنة نقطية لحالة الأحرف؛ فإذا كانت القائمة المرجعية تحتوي على الرمز “USA” وكان النص في الخلية A2 يحتوي على “usa” بحروف صغيرة، فإن دالة FIND ستُرجع خطأً ولن تسجل حالة تطابق، مما يُبقي ناتج دالة SUMPRODUCT عند الصفر وتُرجع الخلية نتيجة “غير مطابق”.

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

7. الحلول الحديثة باستخدام دوال المصفوفات الديناميكية في Microsoft 365

7.1 استخدام الدوال التكرارية الحديثة BYROW و LAMBDA

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

تعمل دالة BYROW على استقبال نطاق كامل من صفوف البيانات وتمرير كل صف على حدة إلى تعبير LAMBDA مخصص يقوم بإجراء الفحوصات والعمليات الحسابية المطلوبة داخلياً، ومن ثم إرجاع مصفوفة نتائج ديناميكية تنسكب تلقائياً (Spill) على امتداد العمود المستهدف بمرونة تشغيلية فائقة وسرعة حسابية استثنائية.

يمكن بناء الصيغة المتقدمة باستخدام هذه المنظومة الحديثة كالتالي:

=BYROW(A2:A100, LAMBDA(row, IF(OR(ISNUMBER(SEARCH($E$2:$E$8, row))), "Yes", "No")))

في هذه المعادلة الأنيقة، تقوم الدالة بفحص كل صف في النطاق A2:A100 ومقارنته لحظياً بمصفوفة الكلمات المفتاحية، منتجة عمود نتائج متكامل ينبثق من خلية واحدة فقط، مما يقلل بشكل ملموس من حجم الملف، ويبسط عمليات التعديل والصيانة البرمجية لورقة العمل.

7.2 توظيف الدوال النصية الجديدة مثل TEXTJOIN و REGEX (في التحديثات الأخيرة)

في أحدث التحديثات البرمجية الموجهة لبرنامج إكسيل ضمن بيئة Microsoft 365، تم تعزيز قدرات معالجة النصوص عبر دمج دوال التعبيرات النمطية (Regular Expressions) المدمجة أصلاً، مثل دوال REGEXTEST و REGEXEXTRACT، مما فتح آفاقاً غير مسبوقة للتعامل مع سلاسل النصوص المعقدة ومطابقة الأنماط المتعددة بأعلى مستويات الكفاءة البرمجية المعروفة في لغات البرمجة المتقدمة مثل بايثون وجافا سكريبت.

يمكن دمج دالة الربط النصي المتقدمة TEXTJOIN مع دوال REGEX لبناء نمط تطابق متعدد في غاية القوة؛ حيث يتم تجميع عناصر القائمة المرجعية في نص واحد مفصول برمز الخط العمودي (|) الذي يعبر عن العامل المنطقي “أو” في لغة التعبيرات النمطية، عبر الصيغة: TEXTJOIN("|", TRUE, $E$2:$E$8).

تتم بعد ذلك عملية الفحص المباشر للخلية باستخدام الصيغة الحديثة:

=IF(REGEXTEST(A2, TEXTJOIN("|", TRUE, $E$2:$E$8)), "مطابق", "غير مطابق")

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

8. استخراج النص المطابق الفعلي بدلاً من القيمة المنطقية الثنائية

8.1 استرجاع أول عنصر مطابق من القائمة

في العديد من متطلبات الأعمال المتقدمة، لا يكتفي متخذ القرار بمعرفة القيمة المنطقية الثنائية (نعم/لا) التي تفيد بوجود تطابق من عدمه، بل تبرز الحاجة الملحة إلى استخراج القيمة النصية الصريحة للكلمة المفتاحية التي تسببت في تحقيق هذا التطابق، وذلك لأغراض التبويب، والتصنيف الفئوي، وبناء الجداول المحورية (Pivot Tables).

لتحقيق هذا الغرض الكلاسيكي، يتم دمج دالة الفهرسة الشهيرة INDEX مع دالتي المطابقة والبحث MATCH و SEARCH. تعمل دالة SEARCH على تحديد مواضع الكلمات، وتتولى دالة ISNUMBER تحويلها إلى قيم بوليانية، بينما تقوم دالة MATCH بتحديد موقع أول قيمة TRUE داخل تلك المصفوفة، لتقوم دالة INDEX باسترجاع النص المقابل مباشرة من القائمة المرجعية.

تتم صياغة المعادلة وتغليفها بدالة معالجة الأخطاء IFERROR على النحو التالي:

=IFERROR(INDEX($E$2:$E$8, MATCH(TRUE, ISNUMBER(SEARCH($E$2:$E$8, A2)), 0)), "لا يوجد تطابق")

تضمن دالة IFERROR الحفاظ على المظهر الاحترافي لجدول البيانات عبر استبدال أخطاء عدم التطابق #N/A بعبارات وصفية منسقة، مما يسهل قراءة التقارير واستخدامها المباشر في لوحات التحكم التنفيذية وعمليات اتخاذ القرار الفوري.

8.2 استخراج جميع الكلمات المطابقة وتجميعها في خلية واحدة

قد تحتوي الخلية النصية الواحدة على أكثر من كلمة مفتاحية من القائمة المرجعية في نفس الوقت (مثلاً: ملاحظة تتضمن كلمتي “شحن سريع” و”دفع إلكتروني”). في مثل هذه السيناريوهات، تعجز صيغ الفهرسة الفردية التقليدية عن تقديم صورة شاملة لأنها تقتصر على إرجاع التطابق الأول فقط وتهمل بقية العناصر المطابقة في النص.

لحل هذه المشكلة استناداً إلى أدوات الحساب الحديثة في Microsoft 365، نعتمد على التكامل القوي بين دالة التصفية المتقدمة FILTER ودالة الدمج النصي TEXTJOIN. تقوم دالة FILTER بفرز وتصفية القائمة المرجعية بالكامل لاستبقاء الكلمات التي تم العثور عليها داخل النص فقط، بينما تتولى TEXTJOIN دمج هذه الكلمات المسترجعة في خلية واحدة مع الفصل بينها بفاصلة مخصصة.

تأخذ الصيغة المتقدمة الشكل التالي:

=TEXTJOIN(", ", TRUE, FILTER($E$2:$E$8, ISNUMBER(SEARCH($E$2:$E$8, A2)), "لا يوجد تطابق"))

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

9. معالجة الأخطاء الشائعة واستكشاف المشكلات وإصلاحها

9.1 أخطاء المسافات البيضاء والرموز الخفية وتطبيع النصوص

تعد مشكلة المسافات البيضاء الزائدة والرموز غير المرئية من أكثر الأسباب شيوعاً لإخفاق صيغ فحص ومطابقة النصوص في إكسيل. غالباً ما تحتوي البيانات المستوردة من مصادر خارجية مثل الأنظمة المؤسسية (ERP) وصفحات الويب على مسافات بادئة أو لاحقة، أو محارف كسر الأسطر (Line Breaks)، أو ما يُعرف بالمسافات غير القابلة للكسر (Non-breaking spaces ذات الرمز المحرفي CHAR(160)).

تؤدي هذه الرموز الخفية إلى تشويه السلاسل النصية؛ فإذا كانت الكلمة المفتاحية في القائمة المرجعية تحتوي على مسافة خفية في نهايتها “مبيعات “، فإن دالة البحث لن تعثر عليها داخل النص “مبيعات”، مما ينجم عنه إخفاق كامل في التطابق وظهور نتائج سلبية خاطئة بالرغم من التطابق البصري الظاهر للمستخدم.

للتغلب على هذه المعضلة وتطبيع البيانات تطبيعاً قياسياً (Data Normalization)، يجب تنقية السلاسل النصية في النطاقين معاً بتطبيق دالتي TRIM لإزالة المسافات الزائدة ودالة CLEAN لحذف المحارف غير القابلة للطباعة، مع استبدال المسافات الخاصة عبر الدالة SUBSTITUTE بصيغة استباقية تضمن نظافة بيئة التحليل الحسابي.

9.2 إدارة الخلايا الفارغة داخل النطاق المرجعي

تمثل الخلايا الفارغة داخل نطاق البحث المرجعي فخاً برمجياً خطيراً يقع فيه العديد من ممارسي إكسيل؛ فعند استخدام صيغة COUNTIF مع الرموز البديلة "*"&Range&"*"، فإن أي خلية فارغة داخل النطاق المرجعي ستتحول رياضياً إلى المعيار "**"، وهو معيار شامل يتطابق تلقائياً مع أي نص أو محرف داخل الخلية المستهدفة، مما يجعل الصيغة تُرجع النتيجة “Yes” لكافة صفوف الجدول بلا استثناء.

وبالمثل، عند استخدام دالة SEARCH مع خلية مرجعية فارغة، فإنها تُرجع الموضع المحرفي (1) معتبرة الفراغ نصاً متواجداً في بداية كل سلسلة، مما يقود أيضاً إلى كارثة الإيجابيات الكاذبة الشاملة (False Positives) ويفقد التحليل قيمته العلمية والعملية بالكامل.

لتفادي هذا الفخ الكارثي، يجب حماية الصيغة إما بتحديد النطاق المرجعي بدقة متناهية دون تضمين أي صفوف فارغة، أو بتعديل النطاق ديناميكياً باستخدام دالة FILTER لاستبعاد الفراغات قبل تمريرها للصيغة، كما في التركيب الرياضي التالي:

=IF(OR(ISNUMBER(SEARCH(FILTER($E$2:$E$8, $E$2:$E$8<>""), A2))), "Yes", "No")

يضمن هذا الإجراء الوقائي حصر عمليات الفحص في الكلمات المفتاحية الحقيقية فقط، وحماية سلامة النتائج الإحصائية من التشوهات البيانية غير المقصودة.

10. تحسين الأداء الحسابي والتعامل مع قواعد البيانات الضخمة (Big Data)

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

عند الانتقال بالنماذج الحسابية من النطاقات التجريبية الصغيرة إلى بيئات البيانات الضخمة التي تحتوي على مئات الآلاف من الصفوف، يصبح التعقيد الحسابي للصيغ عاملاً حاسماً في استقرار البرنامج وكفاءة استخدام الذاكرة العشوائية (RAM). تتميز الصيغ المصفوفية التي تقارن كل صف بنطاق مرجعي بتعقيد حسابي تضاعفي من الرتبة $O(N \times M)$، حيث يمثل $N$ عدد سجلات البيانات المستهدفة، ويمثل $M$ عدد الكلمات المفتاحية في القائمة المرجعية.

إذا كان الجدول يحتوي على 100,000 صف وكانت القائمة المرجعية تضم 100 كلمة، فإن إكسيل يضطر لإجراء 10,000,000 عملية فحص ومقارنة نصية مصفوفية في كل دورة حسابية. يتسبب هذا الحمل الحسابي الثقيل في بطء ملحوظ في استجابة البرنامج وتجميد واجهة المستخدم أثناء عمليات إعادة الحساب التلقائي، واستهلاك مكثف لقدرات المعالجة المركزية (CPU).

لتجنب هذا التدهور في الأداء، ينبغي الابتعاد عن استخدام الدوال المتقلبة (Volatile Functions) داخل المصفوفات النصية، وضبط خيارات الحساب في إكسيل على الوضع اليدوي (Manual Calculation) أثناء عمليات التحرير الموسعة، مع إجراء دراسات مقارنة دورية لزمن المعالجة بين الصيغ المصفوفية والحلول البديلة لاختيار المسار الأكثر رشاقة واستدامة للمصنف المالي أو الإداري.

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

توجد مجموعة من الاستراتيجيات المعمارية الفعالة لتسريع معالجة النصوص في قواعد البيانات الكبيرة؛ تأتي في مقدمتها استراتيجية تحويل النطاقات العادية إلى جداول إكسيل رسمية (Excel Tables). توفر هذه الجداول ميزات المراجع الهيكلية المحسنة داخلياً وتضمن تحديث نطاقات البحث تلقائياً عند إضافة سجلات جديدة دون الحاجة لإعادة ضبط الصيغ يدوياً.

تتمثل الاستراتيجية الثانية في تقليص حجم القائمة المرجعية عبر إزالة الكلمات المكررة، وحذف الكلمات العامة الشائعة جداً (Stop Words) التي لا تضيف قيمة تمييزية لعملية التصنيف، وترتيب عناصر القائمة المرجعية وفقاً لمعدل تكرارها المتوقع تنازلياً؛ حيث إن وضع الكلمات الأكثر شيوعاً في مقدمة القائمة يسهم في تسريع إنهاء المقارنات المنطقية في بعض الدوال الذكية قبل استكمال مسح كامل المصفوفة.

علاوة على ذلك، يمكن استخدام استراتيجية “الأعمدة المساعدة المؤقتة” (Helper Columns) لتقسيم العمليات الحسابية المعقدة إلى مراحل فرعية بسيطة وغير مصفوفية، مما يسمح لمحرك إكسيل بالاستفادة من تقنيات المعالجة المتعددة الخيوط (Multi-threaded Calculation) وتوزيع الأحمال بالتساوي عبر أنوية المعالج المتاحة، لتقليص زمن الحساب الكلي بنسب تتجاوز 70% في المشروعات الضخمة.

11. حلول الأتمتة المتقدمة: Power Query والبرمجة النصية عبر VBA

11.1 تنفيذ فحص ومطابقة النصوص باستخدام أداة Power Query

تُعد أداة Power Query المحرك الأقوى والأكثر كفاءة على الإطلاق داخل إكسيل لمعالجة البيانات الضخمة وأتمتة مسارات استخراج وتحويل وتجهيز البيانات (ETL). تتفوق هذه الأداة في عزل العمليات الحسابية الثقيلة خارج بيئة خلايا ورقة العمل، مما يحافظ على خفة الملف وسرعة استجابته.

لإجراء مطابقة النصوص عبر Power Query، يتم استيراد كل من جدول البيانات الأساسي وجدول الكلمات المفتاحية إلى محرر الاستعلامات. بعد ذلك، يتم إنشاء عمود مخصص (Custom Column) باستخدام لغة الصيغ المتقدمة Power Query M، عبر كتابة تعبير برمجي يقوم بتكرار فحص احتواء النص باستخدام الدالة Text.Contains.

يتم استخدام الكود المعياري التالي في لغة M:

List.AnyTrue(List.Transform(KeywordsList, (k) => Text.Contains([Description], k, Comparer.OrdinalIgnoreCase)))

يقوم هذا التعبير بتحويل قائمة الكلمات إلى دوال فحص متتالية للخلية مع تجاهل حالة الأحرف؛ فإذا تم العثور على أي تطابق، يُرجع العمود القيمة البوليانية TRUE. علاوة على ذلك، يتيح Power Query ميزة المطابقة الضبابية (Fuzzy Matching) المذهلة التي تسمح باكتشاف التطابقات حتى في حالات وجود أخطاء إملائية طفيفة في النصوص المدخلة، مما يجعله الحل المؤسسي المتكامل للأعمال التجارية المعقدة.

11.2 إنشاء دالة مخصصة (UDF) باستخدام VBA لأداء فائق ومرن

يوفر استخدام لغة التطبيقات المرئية للبرمجة المدمجة Excel VBA للمطورين والمحللين إمكانية بناء دوال مخصصة للمستخدم (User-Defined Functions – UDF) تتجاوز قيود الصيغ التقليدية، وتوفر واجهة برمجية فائقة البساطة والمرونة للمستخدم النهائي داخل ورقة العمل.

يمكن فتح محرر الأكواد (Alt + F11)، وإدراج وحدة نمطية جديدة (Standard Module)، ثم كتابة الكود البرمجي التالي لتأسيس الدالة المخصصة IsTextInList:

Function IsTextInList(TargetCell As Range, KeywordRange As Range, Optional MatchCase As Boolean = False) As Boolean
    Dim cell As Range
    Dim compType As VbCompareMethod
    compType = IIf(MatchCase, vbBinaryCompare, vbTextCompare)
    For Each cell In KeywordRange
        If Len(Trim(cell.Value)) > 0 Then
            If InStr(1, TargetCell.Value, cell.Value, compType) > 0 Then
                IsTextInList = True
                Exit Function
            End If
        End If
    Next cell
    IsTextInList = False
End Function

تتميز هذه الدالة البرمجية بكونها توقف عملية البحث فور العثور على أول تطابق (Exit Function)، مما يوفر كفاءة معالجة قصوى مقارنة بالدوال الحسابية التي تفحص كامل المصفوفة إجبارياً. كما تتيح وسيطة اختيارية تمنح المستخدم التحكم التام في تفعيل أو تعطيل حساسية حالة الأحرف حسب رغبته، ويتم استدعاؤها في الخلية بمنتهى البساطة عبر الصيغة: =IsTextInList(A2, $E$2:$E$8).

12. نماذج تطبيقية ودراسات حالة واقعية في بيئات الأعمال المختلفة

12.1 تصنيف المعاملات المالية والمصرفية تلقائياً

في الأقسام المالية والمحاسبية للمؤسسات والشركات التجارية، يمثل تصنيف كشوف الحسابات البنكية (Bank Statements) اليومية أو الشهرية عبئاً روتينياً يستنزف مئات الساعات من العمل اليدوي. تشتمل هذه الكشوف عادةً على أوصاف نصية مبهمة ومعقدة لمعاملات الشراء والتحويل، مثل “POS-104928-SHELL OIL-RIYADH” أو “TRANSFER TO VENDOR ACME TECH CORP”.

من خلال تطبيق النماذج المتقدمة لمطابقة النصوص، يستطيع الفريق المحاسبي إنشاء جدول مرجعي يحتوي على الكلمات الاستدلالية الأساسية (مثل: “SHELL” لتصنيف مصروفات الوقود، “ACME TECH” لتصنيف مدفوعات الموردين، “SALARY” للمدفوعات العمالية). باستخدام صيغ الربط التلقائي عبر INDEX / MATCH / SEARCH، يتم ملء عمود “فئة المصروف” آلياً بمجرد لصق كشف الحساب الخام في ورقة العمل.

يؤدي تطبيق هذا النظام المؤتمت إلى تقليص التدخل البشري بنسبة تزيد عن 90%، والقضاء التام على أخطاء التوجيه المحاسبي الناتجة عن الإجهاد الذهني لمدخلي البيانات، بالإضافة إلى تسريع إعداد الميزانيات الدورية والتقارير المالية الختامية بدقة متناهية تلبي معايير الحوكمة المالية المؤسسية.

12.2 تصفية السير الذاتية وتحليل بيانات العملاء واستطلاعات الرأي

يمتد النطاق التطبيقي لهذه التقنيات ليشمل قطاع إدارة الموارد البشرية (HR) وإدارات التسويق وتجربة العملاء. في أقسام التوظيف التي تستقبل آلاف السير الذاتية يومياً بتنسيقات نصية مجردة، يتم تطبيق صيغ فحص النصوص لمقارنة ملخصات المتقدمين مع قائمة المهارات والمتطلبات الإلزامية للوظيفة (مثل: “Python”, “SQL”, “Project Management”).

تتيح الصيغ المعتمدة على TEXTJOIN و FILTER استخراج وحصر المهارات المتوفرة في كل سيرة ذاتية في عمود مستقل، وحساب مؤشر التوافق الوظيفي للمرشحين تلقائياً، مما يساعد مديري التوظيف على فرز واختيار أفضل الكفاءات خلال دقائق معدودة بدلاً من القراءة اليدوية المرهقة لكل وثيقة على حدة.

وفي قطاع التسويق، تُستخدم هذه الأدوات في تحليل مشاعر العملاء واستطلاعات الرأي عبر مسح التعليقات والآراء بحثاً عن الكلمات المفتاحية الإيجابية (“ممتاز”، “رائع”، “سريع”) والسلبية (“بطيء”، “سيئ”، “معطل”)، وربطها بلوحات تحكم تفاعلية (Interactive Dashboards) تعكس نبض العملاء الفوري وتوجهاتهم، مما يدعم الإدارة في اتخاذ قرارات استراتيجية قائمة على بيانات وصفية دقيقة وموثوقة.

خاتمة

إن إتقان مهارات التحقق من احتواء الخلايا النصية على عناصر من قوائم مرجعية في مايكروسوفت إكسيل يمثل نقلة نوعية في قدرات تحليل البيانات وإدارتها بكفاءة واحترافية. استعرضنا في هذا الدليل الشامل البنية النظرية والعملية لكافة الطرق المتاحة؛ بدءاً من صيغ COUNTIF الكلاسيكية المدعومة بالرموز البديلة، إلى التركيبات الرياضية المتقدمة عبر SUMPRODUCT و SEARCH و FIND، وصولاً إلى أحدث الدوال المصفوفية الديناميكية والحلول المؤتمتة عبر Power Query و VBA.

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

References

اقتباس هذا المقال

looti, M. (2026, أغسطس 30). إكسيل: كيفية التحقق مما إذا كانت الخلية تحتوي على نص من قائمة. عرب سايكلوجي. https://arabpsychology.com/statistics/excel-check-if-cell-contains-text-from-list-2/
looti, Mohammed. “إكسيل: كيفية التحقق مما إذا كانت الخلية تحتوي على نص من قائمة.” عرب سايكلوجي, 30 أغسطس 2026, https://arabpsychology.com/statistics/excel-check-if-cell-contains-text-from-list-2/.
looti, Mohammed. “إكسيل: كيفية التحقق مما إذا كانت الخلية تحتوي على نص من قائمة.” عرب سايكلوجي. أغسطس 30, 2026. https://arabpsychology.com/statistics/excel-check-if-cell-contains-text-from-list-2/.