يمثل التعامل مع البيانات النصية غير المنظمة أحد أكبر التحديات التحليلية التي تواجه المتخصصين في بيئات الأعمال الحديثة وهندسة البيانات الإدارية. في كثير من الأحيان، لا تتطابق السجلات المدخلة في جداول البيانات مع المفاتيح المرجعية بدقة مطلقة، بل تأتي متضمنة داخل سلاسل نصية طويلة، مثل أسماء المعاملات البنكية المدمجة مع أرقام العمليات، أو مسميات الوظائف المتداخلة، أو العناوين الجغرافية المفصلة، أو حتى الرموز التعريفية للقطع والمنتجات. من هنا تبرز الحاجة المعرفية والتقنية لفهم كيفية التحقق مما إذا كانت الخلية تحتوي على نص جزئي (Partial Text Matching) داخل برنامج مايكروسوفت إكسل (Microsoft Excel)، ليس فقط كإجراء وظيفي عابر، بل كمنهجية معمارية شاملة تضمن سلامة تدفقات البيانات ونماذج اتخاذ القرار.
تتجاوز معالجة النصوص الجزئية مجرد الضغط على اختصارات البحث التقليدية؛ إذ تتطلب بناء معادلات ديناميكية قابلة للتوسع، وتطبيق خوارزميات شرطية قادرة على التمييز بين الأنماط المتشابهة، وفصل المتغيرات النصية بكفاءة حسابية عالية. إن بناء نموذج بيانات مرن يستلزم الإحاطة بالفروق الجوهرية بين مختلف الدوال الرياضية والمنطقية، مثل دمج الدوال الشرطية مع محارف البدل، وتوظيف دوال تحديد المواقع الحسابية، وصولاً إلى استغلال أدوات ذكاء الأعمال المدمجة مثل لغة الاستعلامات المصممة للتحويلات الهيكلية ولغات البرمجة النصية للأتمتة الكاملة.
يقدم هذا المرجع الأكاديمي الشامل دليلاً موسعاً يغطي كافة الأبعاد النظرية والتطبيقية لمطابقة النصوص الجزئية في إكسل. سنستعرض عبر هذا الدليل الآليات الرياضية والمنطقية لمختلف الدوال، واستراتيجيات إدارة حساسية حالة الأحرف، ومعالجة النصوص متعددة الشروط، وتطبيق التنسيق الشرطي والتصفية المتقدمة، وصولاً إلى تحليل الكفاءة الحسابية عند معالجة ملايين السجلات في بيئات العمل الضخمة.
- 1. المفاهيم التأسيسية للبحث عن النصوص الجزئية في مايكروسوفت إكسل
- 2. استخدام دالتي COUNTIF و IF للتحقق الشرطي من النصوص الجزئية
- 3. طريقة دمج SEARCH و ISNUMBER للبحث المتقدم غير الحساس لحالة الأحرف
- 4. طريقة دمج FIND و ISNUMBER للمطابقة الحساسة لحالة الأحرف
- 5. التحقق من وجود نصوص جزئية متعددة وفق شروط منطقية (OR / AND)
- 6. التنسيق الشرطي القائم على مطابقة النصوص الجزئية لتمييز البيانات بصرياً
- 7. استخراج وتصفية البيانات بناءً على النصوص الجزئية
- 8. البحث والاسترجاع المرجعي باستخدام النصوص الجزئية (VLOOKUP و XLOOKUP)
- 9. معالجة وتصحيح الأخطاء الشائعة أثناء التحقق من النصوص الجزئية
- 10. التحقق البرمجي التلقائي من النصوص الجزئية باستخدام VBA ووحدات الماكرو
- 11. استخدام Power Query في فحص ومعالجة النصوص الجزئية ضمن تدفقات البيانات الضخمة
- 12. تحسين الأداء وأفضل الممارسات للتعامل مع مجموعات البيانات الضخمة
- الخلاصة (Conclusion)
- المراجع (References)
1. المفاهيم التأسيسية للبحث عن النصوص الجزئية في مايكروسوفت إكسل
1.1 الفرق بين المطابقة التامة والمطابقة الجزئية للنصوص
يقوم المفهوم الرياضي للمطابقة التامة (Exact Match) على مبدأ التطابق الثنائي الصارم بين سلسلتين نصيتين؛ حيث يتم اختبار المساواة المنطقية بحيث تتطابق كل خانة ومحرف ومسافة في السلسلة المدخلة مع السلسلة المرجعية. رياضياً ومنطقياً، إذا كانت السلسلة الأولى تُعرَّف بالمتجه $S_1 = (c_1, c_2, dots, c_n)$ والسلسلة الثانية بالمتجه $S_2 = (k_1, k_2, dots, k_m)$، فإن المطابقة التامة تشترط أن يكون $n = m$ وأن تكون كل $c_i = k_i$ لجميع قيم $i$. في بيئات الأعمال الواقعية، تبرز حدود استخدام المطابقة التامة عند تنظيف البيانات غير المنظمة؛ إذ يؤدي وجود مسافة بيضاء غير مرئية أو اختلاف بسيط في صياغة الجملة إلى فشل المقارنة المنطقية واختلال نتائج التحليل.
على النقيض من ذلك، يرتكز مفهوم السلاسل النصية الفرعية (Substrings) والمطابقة الجزئية (Partial Match) على البحث عن نمط متسلسل محدد $P$ داخل سلسلة نصية أشمل $T$. هنا، لا يُشترط تساوي الطول الإجمالي للسلسلتين، بل يتحقق الشرط المنطقي بمجرد وجود السلسلة $P$ كجزء متصل داخل $T$. تكتسب هذه المنهجية أهمية تطبيقية بالغة في تنظيف البيانات الضخمة (Data Cleansing)، حيث تتضمن السجلات اليومية تفاصيل مدمجة مثل أرقام الحسابات المتبوعة بأسماء الفروع، أو المسميات المهنية التي تشتمل على توصيفات إضافية، مما يجعل المطابقة الجزئية الأداة الأساسية لتصنيف وفهرسة السجلات المعقدة وتوحيد مصادر البيانات غير المتجانسة.
تفرض البيانات النصية غير المنظمة تحديات تقنية معقدة ترتبط بتباين أساليب الإدخال اليدوي، واختلاف علامات الترقيم، وتعدد المسافات البينية والبادئة واللاحقة. تتطلب معالجة هذه التحديات بناء نماذج فحص قوية لا تتأثر بالشوائب النصية المحيطة بالنص المستهدف، والاعتماد على أدوات فحص مرنة قادرة على عزل الكلمات المفتاحية دون التضحية بالدقة المنطقية للنتائج.

1.2 دور محارف البدل (Wildcards) في معالجة السلاسل النصية
تمثل محارف البدل (Wildcards) رموزاً برمجية خاصة تُستخدم لتوسيع نطاق البحث النصي وتحديد الأنماط المرنة داخل بيئة إكسل. يعد محرف النجمة (*) أكثر هذه الرموز استخداماً وشمولية؛ حيث يرمز إلى أي عدد عشوائي من الحروف أو الأرقام أو الرموز، بما في ذلك انعدام وجود المحارف تماماً (صفر من المحارف). على سبيل المثال، التعبير "*تسويق*" يطابق أي سلسلة نصية تحتوي على كلمة “تسويق” في بدايتها، أو وسطها، أو نهايتها، بغض النظر عن الكلمات أو الرموز التي تسبقها أو تليها.
في المقابل، يُستخدم محرف علامة الاستفهام (?) لتمثيل حرف واحد متغير فقط في موضع نصي محدد بدقة متناهية. يتيح هذا المحرف للباحثين والمحللين التحكم الصارم في البنية الهيكلية للنص المستهدف؛ فالتعبير "A?C" يطابق سلاسل مثل “ABC” و “A1C” و “A-C”، ولكنه يرفض مطابقة “ABBC” لتجاوزها عدد المحارف المسموح به في موضع علامة الاستفهام. هذه الميزة لا غنى عنها عند التعامل مع أكواد المنتجات ذات التنسيق الثابت التي تختلف فقط في رمز تشغيلي واحد.
تظهر الحاجة إلى علامة التلدة (~) كرمز إلغاء (Escape Character) عندما تتضمن السلسلة النصية المراد البحث عنها محارف البدل نفسها كأحرف فعلية. إذا أردنا التحقق من وجود علامة النجمة الفعلية (*) أو علامة الاستفهام (?) داخل النص دون معاملتها كمحارف بدل برمجية، يتم وضع علامة التلدة مباشرة قبل الرمز، مثل "~*" أو "~?"، كما تُستخدم "~~" للبحث عن علامة التلدة ذاتها. تجدر الإشارة إلى أن محارف البدل لا تعمل مع كافة دوال إكسل النصية، بل تقتصر على مجموعة محددة من الدوال المنطقية والمرجعية مثل دالة COUNTIF، ودوال البحث مثل VLOOKUP و XLOOKUP و MATCH.
1.3 حساسية حالة الأحرف (Case Sensitivity) وتأثيرها على استخراج البيانات
تُعد حساسية حالة الأحرف (Case Sensitivity) معياراً حاسماً عند التعامل مع النصوص المكتوبة باللغات التي تميز بين الحروف الكبيرة (Uppercase) والصغيرة (Lowercase) كاللغة الإنجليزية والفرنسية. في تلك البيئات، تُعامل السلسلة “EXCEL” كقيمة مختلفة كلياً عن “excel” إذا كانت الدالة المستخدمة حساسة لحالة الأحرف. يؤدي إغفال هذا التمييز إلى وقوع أخطاء فادحة في استخراج البيانات المعتمدة على الأكواد المشفرة وحساسية المعاملات البرمجية الدقيقة.
أما في سياق اللغة العربية، ورغم عدم وجود تقسيم للأحرف الكبيرة والصغيرة، تبرز إشكاليات موازية لا تقل تعقيداً، تتمثل في علامات التشكيل، وتنوع أشكال الهمزات (أ، إ، آ، ا)، واختلاف الياء المهملة عن الألف المقصورة (ي / ى)، والتاء المربوطة عن الهاء (ة / هـ). تفشل الدوال شديدة الحساسية في التعرف على النصوص الجزئية في حال وجود تباين في إدخال الهمزات أو التشكيل، ما يفرض ضرورة التمييز الدقيق بين دوال البحث غير الحساسة وتلك التي تطبق معايير مطابقة بايت-بايت الدقيقة.
يتطلب اتخاذ القرار التحليلي السليم الموازنة بين الحاجة إلى المرونة وتفادي إغفال البيانات من جهة، وبين الحاجة إلى الصرامة لمنع استرجاع سجلات غير صحيحة من جهة أخرى. يُبنى هذا الاختيار على طبيعة الحقول المستهدفة، حيث تُفضَّل الدوال غير الحساسة لحالة الأحرف لتحليل النصوص العامة، بينما تُخصص الدوال الحساسة للأرقام التسلسلية الحساسة، والشفرات البرمجية، والمفاتيح الفريدة.
2. استخدام دالتي COUNTIF و IF للتحقق الشرطي من النصوص الجزئية
2.1 التشريح الهيكلي لصيغة COUNTIF مع محارف البدل
تُعد دالة COUNTIF إحدى أكثر الأدوات كفاءة وبساطة في مايكروسوفت إكسل للتحقق من احتواء الخلية على نص جزئي محدد. يرتكز التحليل المنطقي للصيغة =COUNTIF(A1, "*text*") على تقييم محتوى الخلية المرجعية A1 مقابل معيار البحث المحاط بمحارف البدل. إذا كانت السلسلة النصية تحتوي على الكلمة “text” في أي موضع، فإن الدالة تقوم باحتساب الخلية وتعيد القيمة العددية 1؛ وفي حال عدم العثور على النمط المطلوب، فإنها تعيد القيمة العددية 0.
لضمان قراءة السلسلة كنمط بحث صالح، يجب وضع محارف البدل مع النص المطلوب داخل علامتي اقتباس مزدوجتين (“*text*”). وفي السيناريوهات العملية التي تتطلب جعل معيار البحث ديناميكياً مستنداً إلى قيمة خلية أخرى (ولتكن B1 مثلاً)، يتم استخدام معامل الربط النصي (&) لدمج محارف البدل مع مرجع الخلية، فتُصاغ المعادلة كالتالي: =COUNTIF(A1, "*" & B1 & "*"). تضمن هذه الصياغة توليد نمط البحث تلقائياً بمجرد تغير القيمة المدخلة في الخلية B1.
تتميز دالة COUNTIF بسلوكها الافتراضي غير الحساس تماماً لحالة الأحرف اللاتينية؛ ما يعني أن البحث عن “*sales*” سيتعرف تلقائياً على “SALES” و “Sales” و “sAlEs”. توفر هذه الخاصية حماية ممتازة لعمليات التدقيق السريع التي لا تتطلب صرامة في تدقيق الحروف الكبيرة والصغيرة، مما يقلل من احتمالات استبعاد السجلات المتطابقة بسبب أخطاء التنسيق الطباعي.
2.2 دمج دالة IF لتخصيص المخرجات المنطقية (Yes/No)
على الرغم من قدرة دالة COUNTIF المنفردة على إرجاع قيم رقمية (1 أو 0)، إلا أن التقارير الإدارية ونماذج الأعمال تتطلب مخرجات وصفية واضحة ومخصصة. هنا يبرز دور دمج دالة IF الشرطية لبناء صيغة منطقية متكاملة: =IF(COUNTIF(A1, "*نص*") > 0, "نعم", "لا"). يقوم هذا التركيب بتقييم ناتج العد؛ فإذا كان أكبر من الصفر يتحقق المسار الإيجابي للدالة وتُرجع النص “نعم”، وفي حال كان الناتج صفراً يُنفَّذ المسار السلبي وتُرجع “لا”.
يمكن التوسع في تخصيص المخرجات لتصنيف السجلات إلى مجموعات نوعية محددة بدلاً من الاكتفاء بالإجابات الثنائية. على سبيل المثال، يمكن تخصيص المعادلة لتسجيل “عميل استراتيجي” أو “عميل عادي”، أو تعيين رموز إدارية محددة تسهل عمليات التجميع والفرز اللاحقة في الجداول المحورية (Pivot Tables). يساعد هذا النهج في تحويل البيانات النصية الخام إلى فئات تحليلية جاهزة للاستخدام الفوري في لوحات المؤشرات التنفيذية.
يتعين اتخاذ الحيطة عند التعامل مع الخلايا المرجعية الفارغة؛ فإذا كانت الخلية المستهدفة أو خلية المعيار فارغة، قد يؤدي استخدام النمط "*" & B1 & "*" إلى مطابقة أي نص وعودة نتائج إيجابية كاذبة (False Positives). لتفادي هذا السلوك غير المرغوب، يُنصح بتغليف الصيغة بشرط تحققي إضافي يتأكد من امتلاء الخلية المرجعية قبل إطلاق عملية البحث، مما يضمن دقة وسلاسة سحب المعادلة عبر آلاف الصفوف باستخدام مقبض التعبئة التلقائية (AutoFill).
2.3 أمثلة تطبيقية واقعية لتحليل أداء اللاعبين وسجلات الفرق
لتوضيح التطبيق العملي لهذه التقنية، نفترض وجود قاعدة بيانات رياضية تتضمن مسميات المراكز التفصيلية للاعبي كرة السلة، حيث تُسجل المراكز في العمود A بمسميات مركبة مثل “Shooting Guard” و “Point Guard” و “Lead Guard” و “Center Forward”. إذا كان الهدف التحليلي هو تصنيف أي لاعب يشغل وظيفة حراسة المرمى/الملعب تحت الفئة العامة “Guard”، يتم تطبيق الصيغة التالية في العمود B:
=IF(COUNTIF(A2, "*Guard*") > 0, "حارس", "مركز آخر")
يوضح الجدول التالي عينة من البيانات المسجلة، والمعادلة المنفذة، والنتائج المستخرجة التي توضح دقة المطابقة الجزئية:
| اللاعب (Player) | المركز المسجل (Raw Position) | الصيغة المطبقة (Applied Formula) | النتيجة المنطقية (Result) | المؤشر الثنائي (Binary Indicator) |
|---|---|---|---|---|
| طارق علي | Point Guard | =IF(COUNTIF(B2, "*Guard*")>0, "حارس", "آخر") |
حارس | 1 |
| محمود حسن | Power Forward | =IF(COUNTIF(B3, "*Guard*")>0, "حارس", "آخر") |
آخر | 0 |
| سامي يوسف | Shooting Guard / Wing | =IF(COUNTIF(B4, "*Guard*")>0, "حارس", "آخر") |
حارس | 1 |
| خالد ناصر | Pure Center | =IF(COUNTIF(B5, "*Guard*")>0, "حارس", "آخر") |
آخر | 0 |
يسمح تحويل النتائج الوصفية إلى مؤشرات ثنائية (Binary Indicators: 1 و 0) باستخدام الصيغة =COUNTIF(A2, "*Guard*") مباشرة للباحثين والمحللين الرياضيين بإجراء عمليات التجميع الإحصائي السريعة، مثل حساب النسبة المئوية للاعبي الحراسة في التشكيلة، أو دمج هذه المؤشرات كمتغيرات مستقلة في نماذج الانحدار الخطي لتحليل كفاءة الفريق.
3. طريقة دمج SEARCH و ISNUMBER للبحث المتقدم غير الحساس لحالة الأحرف
3.1 آلية عمل دالة SEARCH وتحديد مواضع النصوص الفرعية
تُعد دالة SEARCH إحدى الركائز البرمجية المتقدمة للتعامل مع النصوص في إكسل؛ إذ تقوم بالبحث عن سلسلة نصية فرعية داخل نص رئيسي، وتُرجع الموضع العددي الترتيبي الذي تبدأ منه تلك السلسلة داخل النص الأصلي. على سبيل المثال، إذا طُبقت المعادلة =SEARCH("تقرير", "استلام تقرير الأداء")، فإن الدالة ترجع الرقم 8، وهو موضع الحرف الأول من كلمة “تقرير” داخل العبارة المحللة.
يكمن السلوك الجوهري لدالة SEARCH في استجابتها لحالات عدم التطابق؛ فإذا لم يتم العثور على النص المستهدف إطلاقاً داخل الخلية المفحوصة، فإن الدالة تُرجع خطأ القيمة الشهير #VALUE!. لا يُعتبر هذا الخطأ عيباً برمجياً، بل هو إشارة تقنية صريحة تدل على غياب النمط المطلوب، ولكنه يتطلب معالجة منطقية حتى لا يتسبب في إفساد الحسابات الإجمالية للنموذج المالي أو التحليلي.
تتضمن الدالة أيضاً وسيطة اختيارية ثالثة بالغة الأهمية وهي موضع البداية (Start_num)، وتُصاغ بالشكل: =SEARCH(find_text, within_text, [start_num]). تتيح هذه الوسيطة للمحلل تجاوز المقاطع الأولى من السلسلة النصية والبدء في البحث من موضع محدد، وهو ما يفيد في تجاوز البادئات المتكررة (مثل الرموز التعريفية للشركات) والتركيز على أجزاء السلسلة التي تحتوي على المتغيرات الفعلية.

3.2 تحويل النتائج إلى قيم منطقية باستخدام دالة ISNUMBER
لتحويل المخرجات المتفاوتة لدالة SEARCH (الأرقام وأخطاء #VALUE!) إلى إجابات منطقية قياسية، يتم دمجها مع دالة ISNUMBER لإنشاء المعادلة الشهيرة: =ISNUMBER(SEARCH("نص", A1)). تقوم دالة ISNUMBER بفحص القيمة المعادة من SEARCH؛ فإذا كانت الدالة قد عثرت على النص وأرجعت موقعه العددي (أي رقم من 1 فما فوق)، تحولها ISNUMBER مباشرة إلى القيمة المنطقية TRUE.
تكمن العبقرية البرمجية في هذا الدمج في قدرة دالة ISNUMBER على “ابتلاع” خطأ #VALUE! دون أي انهيار في بنية الحسابات؛ فعندما تفشل SEARCH في العثور على النص وتُرجع الخطأ، تكتشف ISNUMBER أن المدخل ليس قيمة عددية، فتقوم بتحويل الخطأ تلقائياً وبأمان تام إلى القيمة المنطقية FALSE. ينتج عن هذا الدمج مخرج منطقي نقي يصلح تماماً كمدخل للشروط المعقدة.
عند المقارنة بين طريقة ISNUMBER(SEARCH()) وطريقة COUNTIF()، تتفوق الأولى بقدرتها على التعامل مع المصفوفات الديناميكية بكفاءة أعلى داخل الذاكرة، كما أنها لا تتطلب استخدام محارف البدل المحاطة بعلامات الربط، مما يجعل الشفرة البرمجية أكثر نظافة وقابلية للصيانة، فضلاً عن سهولة إدراجها داخل دوال التفرع المنطقي مثل IF و AND و OR لتنفيذ عمليات شرطية متسلسلة.
3.3 البحث الجزئي بالاعتماد على مراجع خلايا ديناميكية
في بيئات النمذجة الاحترافية، يُفضل تجنب تثبيت الكلمات المفتاحية يدوياً داخل الصيغ (Hardcoding)، والاستعاضة عن ذلك باستخدام مراجع الخلايا الديناميكية. تتيح الصيغة =ISNUMBER(SEARCH(B1, A1)) فحص ما إذا كان النص الموجود في الخلية A1 يحتوي على القيمة المتغيرة المكتوبة في الخلية B1. يضمن هذا النهج مرونة النموذج وتحديث نتائجه تلقائياً بمجرد تعديل المستخدم لمعيار البحث في الخلية المرجعية.
تظهر ثغرة تقنية شائعة عند استخدام مراجع الخلايا تتمثل في حالة “الخلية المرجعية الفارغة”. إذا كانت الخلية B1 فارغة تماماً، فإن دالة SEARCH تعامل الفراغ كسلسلة نصية فارغة بطول صفر، وتجدها فوراً عند الموضع 1 في أي نص داخل A1، مما يؤدي إلى إرجاع القيمة TRUE لكافة السجلات دون استثناء، وهو ما يُعرف بالنتائج الإيجابية الخاطئة الخطرة.
لمعالجة هذه المشكلة الهيكلية، يتم تطبيق دوال التحقق المسبق مثل دالة ISBLANK لضمان عدم تنفيذ البحث إلا في حال احتواء الخلية المرجعية على نص فعلي. تُصاغ المعادلة الوقائية الشاملة كالتالي:
=IF(OR(ISBLANK(B1), B1=""), FALSE, ISNUMBER(SEARCH(B1, A1))).
تضمن هذه التركيبة تحييد الخلايا الفارغة وإرجاع القيمة المنطقية FALSE حتى يتم إدخال معيار بحث صالح من قِبل المستخدم.
4. طريقة دمج FIND و ISNUMBER للمطابقة الحساسة لحالة الأحرف
4.1 الخصائص التقنية لدالة FIND والمطابقة الدقيقة للحروف
تختلف دالة FIND عن دالة SEARCH في خاصية مركزية واحدة: الحساسية الصارمة لحالة الأحرف (Case Sensitivity). عند تطبيق دالة FIND، يتم التمييز الحرفي بين الأحرف اللاتينية الكبيرة والصغيرة، كما يتم التعامل بدقة فائقة مع الرموز المشفرة. فالبحث عن السلسلة “INV” داخل النص “Invoice-101” سيبوء بالفشل ويُرجع خطأ #VALUE! لأن الحرفين “n” و “v” في النص الأصلي مكتوبان بحالة الأحرف الصغيرة.
تُعد دالة FIND الخيار الإلزامي والوحيد في البيئات التقنية التي تعتمد على أكواد برمجية متباينة، أو معرفات المنتجات الصناعية (SKUs)، أو فحص كلمات المرور المشفرة ورموز التتبع الدولية التي تفرق بين الحرف الكبير والصغير لأسباب أمنية وتشغيلية. في هذه البيئات، قد يؤدي استخدام دالة غير حساسة إلى الخلط بين فئات المنتجات أو تصنيف المعاملات تحت حسابات خاطئة.
من الناحية التشغيلية، لا تدعم دالة FIND محارف البدل (* و ?)؛ إذ تعامل رمز النجمة أو علامة الاستفهام إذا وُجدت داخل وسيطة البحث كحروف عادية صلبة يتم البحث عن تطابقها الذاتي داخل السلسلة. يمنح هذا السلوك دالة FIND سرعة معالجة استثنائية وأماناً مطلقاً ضد التوسيع غير المقصود لأنماط البحث عند التعامل مع السجلات الفنية.
4.2 صياغة واختبار معادلة =IF(ISNUMBER(FIND()), …)
تتم عملية التحقق الحساس لحالة الأحرف من خلال دمج FIND مع ISNUMBER ضمن صيغة منطقية محكمة تُكتب على النحو التالي:
=IF(ISNUMBER(FIND("CodeA", A1)), "مطابق للحالة", "غير مطابق").
يقوم هذا التعبير البرمجي باختبار الخلية A1؛ فإذا وُجدت السلسلة “CodeA” بنفس توزيع الأحرف الكبيرة والصغيرة تماماً، يتم إرجاع موضعها وتأكيده عبر ISNUMBER ليعيد الشرط النتيجة الإيجابية المخصصة.
لتوضيح ذلك عبر حالات اختبار واقعية، نستعرض الجدول التحليلي التالي الذي يبرز التباين الحسابي بين دالتي SEARCH و FIND عند فحص نفس السجلات النصية:
| النص الأصلي (Source String) | قيمة البحث (Search Term) | ناتج SEARCH (غير حساس) | ناتج FIND (حساس للحالة) | الصيغة النهائية المطبقة |
|---|---|---|---|---|
| SKU-alpha-990 | ALPHA | 5 (نجاح المطابقة) | #VALUE! (فشل المطابقة) | =ISNUMBER(FIND("ALPHA", A2)) -> FALSE |
| SKU-ALPHA-990 | ALPHA | 5 (نجاح المطابقة) | 5 (نجاح المطابقة) | =ISNUMBER(FIND("ALPHA", A3)) -> TRUE |
| BATCH_x_404 | _X_ | 6 (نجاح المطابقة) | #VALUE! (فشل المطابقة) | =ISNUMBER(FIND("_X_", A4)) -> FALSE |
| BATCH_X_404 | _X_ | 6 (نجاح المطابقة) | 6 (نجاح المطابقة) | =ISNUMBER(FIND("_X_", A5)) -> TRUE |
أما في النصوص العربية، فتستجيب دالة FIND للتباينات الصوتية والإملائية الدقيقة بصورة صارمة، مما يجعلها أداة ممتازة لتدقيق الجودة اللغوية ورصد الأخطاء الشائعة في كتابة الهمزات وعلامات الترقيم داخل قواعد البيانات الرسمية والوثائق القانونية الموثقة.
4.3 إدارة الأخطاء وتأمين تدفق البيانات النصية
في بعض السيناريوهات البرمجية المعقدة، يلجأ بعض المحللين إلى استخدام دالة IFERROR كبديل لدالة ISNUMBER لاقتناص أخطاء دالتي FIND و SEARCH، وصياغة المعادلة بالشكل: =IF(IFERROR(FIND("ABC", A1), 0) > 0, "موجود", "غير موجود"). ورغم أن هذه التركيبة تؤدي الغرض الوظيفي ذاته، إلا أن التحليل الهيكلي للأداء يبرز فروقاً دقيقة بين الطريقتين.
تُعد تركيبة ISNUMBER(FIND()) أكثر كفاءة من الناحية الحسابية وسرعة المعالجة؛ حيث تفحص دالة ISNUMBER نوع البيانات في مسار معالجة مباشر ومحدد، بينما تفرض دالة IFERROR على محرك إكسل مراقبة بيئة الحساب لرصد كافة أنواع الأخطاء (مثل #N/A, #REF!, #NAME?)، وهو ما قد يتسبب في إخفاء أخطاء مرجعية حقيقية في حال كتابة اسم الدالة بشكل خاطئ أو تلف مراجع النطاقات.
لضمان سهولة صيانة النماذج المالية والتحليلية مستقبلاً، تُملي أفضل الممارسات الهندسية توثيق التركيبات المعقدة وتفضيل الصيغ المعيارية المباشرة، مع إضافة تعليقات توضيحية داخل مصنفات العمل تبين بوضوح سبب اختيار دالة FIND بدلاً من SEARCH، لتفادي تعديلها لاحقاً من قِبل مستخدمين آخرين لا يدركون أهمية الحساسية لحالة الأحرف في هذا السياق المحدد.
5. التحقق من وجود نصوص جزئية متعددة وفق شروط منطقية (OR / AND)
5.1 البحث عن نص جزئي واحد على الأقل من بين خيارات متعددة (منطق OR)
تتطلب السيناريوهات التحليلية المتقدمة في كثير من الأحيان التحقق مما إذا كانت الخلية تحتوي على كلمة واحدة على الأقل من بين قائمة من الكلمات المفتاحية البديلة (منطق الاختيار OR). يمكن تحقيق ذلك باستخدام المصفوفات الثابتة (Array Constants) المدمجة مع دالة COUNTIF في صيغة رياضية مدمجة: =IF(SUM(COUNTIF(A1, {"*عاجل*", "*مهم*", "*أولوية*"})) > 0, "يتطلب إجراء", "عادي"). تقوم COUNTIF هنا بحساب مدى تحقق كل نمط بشكل منفصل، ثم تجمع دالة SUM النتائج؛ فإذا تجاوز المجموع الصفر، دل ذلك على وجود كلمة مفتاحية واحدة على الأقل.
توفر دالة OR الكلاسيكية طريقة بديلة تعتمد على دمج الفحوصات الفردية عبر تركيبة ISNUMBER و SEARCH:
=OR(ISNUMBER(SEARCH("شمال", A1)), ISNUMBER(SEARCH("جنوب", A1)), ISNUMBER(SEARCH("شرق", A1))).
تتميز هذه الصيغة بوضوحها الهيكلي وسهولة قراءتها وتعديلها من قِبل المحللين المبتدئين، على الرغم من طول نص المعادلة عند زيادة عدد الكلمات المفتاحية المستهدفة.
عندما تكون قائمة الكلمات المفتاحية طويلة ومخزنة في جدول مستقل (مثلاً النطاق E1:E10)، يصبح تثبيت المصفوفات يدوياً أمراً غير عملي. هنا تبرز القوة التحليلية لـ دالة SUMPRODUCT عبر المعادلة التالية:
=SUMPRODUCT(--ISNUMBER(SEARCH(E$1:E$10, A1))) > 0.
تقوم هذه الصيغة بمسح الخلية A1 مقابل كل عنصر في القائمة، وتحويل النتائج المنطقية إلى أصفار وآحاد باستخدام المعامل الثنائي (–)، ثم جمعها، لتعيد TRUE إذا تطابقت الخلية مع أي كلمة في القائمة المرجعية.
5.2 التحقق من احتواء الخلية على كافة النصوص الجزئية معاً (منطق AND)
في حالات التدقيق التجميعي، قد يشترط النموذج التحليلي احتواء الخلية الواحدة على عدة نصوص جزئية في آن واحد معاً بغض النظر عن ترتيب ورودها داخل السلسلة النصية (منطق المعية AND). يتم تحقيق هذا الشرط الصارم عبر دمج دالة AND المنطقية مع اختبارات ISNUMBER و SEARCH المستقلة لكل نص فرعي مستهدف:
=AND(ISNUMBER(SEARCH("معتمد", A1)), ISNUMBER(SEARCH("2024", A1)), ISNUMBER(SEARCH("نهائي", A1)))
تقوم المعادلة السابقة بتقييم كل جزء بشكل منفصل؛ ولن تُرجع الدالة القيمة المنطقية TRUE إلا إذا وُجدت الكلمات الثلاث (“معتمد” و “2024” و “نهائي”) جميعها داخل محتوى الخلية A1. إذا تخلف وجود كلمة واحدة فقط من الكلمات المستهدفة، يُلغى الشرط بالكامل ويتحول الناتج إلى FALSE.
تكتسب هذه الصياغة أهمية محورية في تدقيق سجلات المعاملات المالية المدمجة، وفحص العناوين البريدية المكتظة، والتحقق من سجلات خوادم تكنولوجيا المعلومات (Server Logs)؛ حيث يلزم التأكد من تطابق رمز العملية ورقم الحساب والحالة التشغيلية معاً داخل سطر واحد من البيانات الخام لضمان صحة التصنيف المالي والإداري.
5.3 التعامل مع الشروط المركبة والمعقدة (Nested Criteria)
تتضمن النمذجة المتقدمة أحياناً سيناريوهات هجينة تدمج بين شروط الإثبات والنفي المتداخلة (Nested Criteria)؛ كأن نشترط احتواء الخلية على النص الجزئي “أ” أو “ب”، بشرط خلوها التام والقطعي من النص “ج”. يتم التعبير عن هذا المنطق الرياضي المركب بالصيغة التالية:
=IF(AND(OR(ISNUMBER(SEARCH("مبيعات", A1)), ISNUMBER(SEARCH("تسويق", A1))), NOT(ISNUMBER(SEARCH("ملغى", A1)))), "مقبول", "مستبعد")
يقوم محرك إكسل بتقييم الشق الداخلي عبر دالة OR أولاً لتأكيد وجود أحد القسمين المستهدفين، ثم يقوم بفحص الشق السلبي عبر دالة NOT للتأكد من عدم وجود كلمة “ملغى” إطلاقاً، وتتولى دالة AND الربط النهائي بين المسارين لتحديد القرار الوظيفي بدقة متناهية.
لتفادي بطء إعادة الحساب في الجداول الكبيرة التي تحتوي على مئات الآلاف من الصفوف، يجب الحرص على تبسيط المعادلات المنطقية المتداخلة، وتجنب تكرار استدعاء دوال البحث لنفس المتغير عدة مرات، مع تفضيل تقسيم الشروط المعقدة إلى أعمدة مساعدة وسيطة (Helper Columns) عندما تتجاوز مستويات التداخل ثلاثة مستويات منطقية متتابعة.
6. التنسيق الشرطي القائم على مطابقة النصوص الجزئية لتمييز البيانات بصرياً
6.1 إنشاء قواعد التنسيق الشرطي الافتراضية للنصوص الجزئية
يوفر التنسيق الشرطي (Conditional Formatting) وسيلة بصرية فورية لتمييز السجلات التي تحتوي على نصوص جزئية دون الحاجة إلى كتابة معادلات معقدة في أعمدة مستقلة. يمكن الوصول إلى هذه الخاصية عبر المسار الافتراضي المدمج في واجهة إكسل: الصفحة الرئيسية (Home) -> التنسيق الشرطي (Conditional Formatting) -> قواعد تمييز الخلايا (Highlight Cells Rules) -> النص المتضمن (Text that Contains).
يتيح هذا الخيار للمستخدم كتابة الكلمة المفتاحية المستهدفة مباشرة داخل مربع الحوار، واختيار نمط الألوان المرغوب لتظليل الخلايا (مثل التعبئة باللون الأخضر مع نص أخضر داكن). يقوم إكسل بتطبيق التنسيق تلقائياً على كل خلية في النطاق المحدد تشتمل على ذلك النص الجزئي، متجاهلاً حساسية حالة الأحرف كإعداد قياسي مدمج.
على الرغم من سرعة وسهولة القواعد الافتراضية، إلا أنها تعاني من قيود جوهرية؛ إذ لا تسمح بربط معيار النص بخلية متغيرة خارجية بطريقة مرنة، ولا تتيح تطبيق شروط منطقية متعددة (AND/OR)، كما تعجز عن تظليل الصف بأكمله بناءً على قيمة خلية واحدة داخل العمود، ما يستدعي الانتقال إلى الصيغ المخصصة.
6.2 استخدام الصيغ المخصصة (Custom Formulas) في التنسيق الشرطي
تمنح الصيغ المخصصة داخل التنسيق الشرطي المحلل سيطرة رياضية وهندسية كاملة على آلية التمييز البصري. لإنشاء قاعدة مخصصة، يتم التوجه إلى: التنسيق الشرطي -> قاعدة جديدة (New Rule) -> استخدام صيغة لتحديد الخلايا التي سيتم تنسيقها (Use a formula to determine which cells to format). في مربع الصيغة، نكتب المعادلة التالية لفحص العمود A استناداً إلى الكلمة المكتوبة في الخلية $B$1:
=ISNUMBER(SEARCH($B$1, $A1))
يكمن السر الهندسي في تثبيت مرجع الخلية بعلامة الدولار ($): قمنا بتثبيت الخلية المرجعية للبحث بالكامل $B$1 لضمان ثباتها أثناء انتقال التنسيق بين الخلايا، في حين قمنا بتثبيت العمود فقط في الخلية المفحوصة $A1 مع ترك الصف حراً ليتغير تلقائياً (A1, A2, A3…).
يتيح هذا التثبيت المتقن للعمود $A1 إمكانية تطبيق التنسيق الشرطي على نطاق جدول كامل (مثلاً من A1 إلى G100)؛ مما يؤدي إلى تظليل الصف بالكامل (Entire Row) بألوان التمييز بمجرد احتواء الخلية الموجودة في العمود A على النص الجزئي المطلوب، وهي ميزة بصرية لا غنى عنها لبناء لوحات القيادة التفاعلية (Interactive Dashboards).
6.3 تحسين الأداء البصري وإدارة التضارب في قواعد التنسيق
عند تراكم قواعد التنسيق الشرطي وتداخلها في ملفات العمل المعقدة، قد تظهر تعارضات لونية وتدهور ملحوظ في سرعة استجابة الملف. لإدارة هذا التضارب، يتم فتح نافذة “إدارة قواعد التنسيق الشرطي” (Conditional Formatting Rules Manager) لترتيب أولوية القواعد؛ حيث تُنفَّذ القواعد من الأعلى إلى الأسفل وفق التسلسل الهرمي المضبوط.
يُعد تفعيل خيار “إيقاف في حال التحقق” (Stop If True) من أهم الممارسات لتحسين الأداء؛ إذ يمنع معالج إكسل من مواصلة تقييم القواعد اللاحقة لنفس الخلية بمجرد تحقق القاعدة الحالية، مما يوفر موارد المعالجة الحسابية بشكل ملموس في الجداول التي تضم عشرات الآلاف من الصفوف.
من الضروري أيضاً مراعاة معايير التباين البصري وإمكانية الوصول عند اختيار لوحات الألوان في التقارير التنفيذية، وتجنب استخدام ألوان فاقعة أو متقاربة قد تعيق تمييز البيانات، مع تفضيل التدرجات الهادئة التي تبرز الأنماط الاستثنائية بوضوح دون تشتيت الانتباه.
7. استخراج وتصفية البيانات بناءً على النصوص الجزئية
7.1 استخدام أدوات التصفية التلقائية (AutoFilter) ومحارف البدل
تُمثل أداة التصفية التلقائية (AutoFilter) الوسيلة الأسرع والأكثر شيوعاً لعزل وتفحص السجلات بناءً على نصوص جزئية دون كتابة صيغ برمجية في شبكة العمل. عند تفعيل عوامل التصفية من تبويب “بيانات” (Data) -> “تصفية” (Filter)، يتيح مربع البحث المدمج في رأس العمود كتابة النصوص مباشرة، مع الدعم التام لمحارف البدل.
بالإضافة إلى مربع البحث السريع، توفر عوامل تصفية النصوص المخصصة (Custom Text Filters) خيارات منطقية دقيقة تشمل: “يحتوي على” (Contains)، و “لا يحتوي على” (Does Not Contain)، و “يبدأ بـ” (Begins With)، و “ينتهي بـ” (Ends With). تتيح هذه الواجهة دمج شرطين متزامنين باستخدام أداتي الربط (AND / OR)، مما يوفر مرونة كبيرة في استبعاد السجلات غير المرغوبة بسرعة فائقة.
بعد تصفية البيانات وفق المعيار النصي الجزئي، يمكن للمحلل نسخ السجلات الظاهرة فقط ولصقها في ورقة عمل جديدة لإجراء تحليلات متخصصة أو تصديرها كتقارير مرحلية، مما يضمن عزل البيانات المشبوهة أو المستهدفة دون المساس بالهيكل الأصلي لقاعدة البيانات الأساسية.

7.2 التصفية الديناميكية المتقدمة باستخدام دالة FILTER الحديثة
مع إطلاق محرك الحسابات والمصفوفات الديناميكية (Dynamic Arrays) في مايكروسوفت إكسل 365، أصبحت دالة FILTER الخيار الأكثر قوة لتصفية البيانات واستخراجها تلقائياً دون أي تدخل يدوي. يتم بناء صيغة التصفية المعتمدة على نص جزئي كالتالي:
=FILTER(A2:D100, ISNUMBER(SEARCH("الرياض", B2:B100)), "لا توجد نتائج مطابقة")
تقوم هذه الصيغة بمسح النطاق B2:B100؛ وفي كل سطر يُرجع فيه الفحص القيمة TRUE، يتم استخراج الصف المقابل من النطاق الكامل A2:D100 وسكبه تلقائياً في نطاق الانسكاب (Spill Range) المستقل. تتحدث هذه المخرجات آنياً بمجرد تعديل أو إضافة أي بيانات في الجدول المصدر.
لتحقيق التصفية متعددة الشروط، يتم استخدام المعاملات الحسابية للمصفوفات: علامة الجمع (+) لتمثيل منطق OR، وعلامة الضرب (*) لتمثيل منطق AND. لتصفية السجلات التي تحتوي في العمود B على “استشارات” والعمود C على “2024”، تُصاغ المعادلة كالتالي:
=FILTER(A2:D100, ISNUMBER(SEARCH("استشارات", B2:B100)) * ISNUMBER(SEARCH("2024", C2:C100)), "لا توجد نتائج").
7.3 استخراج السلسلة النصية المطابقة وفصلها عن الخلية الأصلية
في كثير من الحالات التحليلية، لا يقتصر الهدف على التحقق من وجود النص الجزئي أو تصفية الصف، بل يمتد ليشمل اقتطاع واستخراج ذلك الجزء النصي بدقة وعزله في عمود مستقل. يمكن تحقيق ذلك تقليدياً عبر دمج دوال النصوص الكلاسيكية MID و SEARCH و LEN، من خلال تحديد موضع البداية وطول النص المراد قصه.
مع التحديثات الأخيرة في إكسل، أصبح استخراج النصوص أكثر بساطة بفضل دوال مثل TEXTBEFORE و TEXTAFTER و TEXTSPLIT. إذا كان النص يحتوي على بنية محددة بفواصل (مثل: “رقم_الطلب: 98745 – التاريخ: 2024”)، يمكن استخراج رقم الطلب بنقاء تام عبر الصيغة:
=TEXTBEFORE(TEXTAFTER(A1, "رقم_الطلب: "), " -")
تتعامل هذه الدوال المتقدمة بكفاءة عالية مع التباين في أطوال الكلمات وهياكل السجلات المتغيرة، وتتيح للمحلل تنظيف وفصل البيانات المدمجة داخل نصوص معقدة وتحويلها إلى جداول بيانات مهيكلة تخضع للتحليل الإحصائي الدقيق.
8. البحث والاسترجاع المرجعي باستخدام النصوص الجزئية (VLOOKUP و XLOOKUP)
8.1 إجراء بحث جزئي باستخدام دالة VLOOKUP الكلاسيكية
تدعم دالة البحث العمودي الكلاسيكية VLOOKUP استخدام محارف البدل لإجراء عمليات المطابقة الجزئية والاسترجاع المرجعي للبيانات. تُصاغ معادلة VLOOKUP للبحث عن كلمة متغيرة موجودة في الخلية D1 داخل جدول بيانات كالتالي:
=VLOOKUP("*" & D1 & "*", A1:C100, 3, FALSE)
تقوم المعادلة بربط محارف البدل بقيمة البحث لإنشاء نمط بحث جزئي، ثم تمسح العمود الأول A1:A100 حتى تعثر على أول سجل يحتوي على تلك السلسلة، لتُرجع بعد ذلك القيمة المقابلة له من العمود الثالث في الجدول. يجب التأكيد على ضرورة ضبط وسيطة نوع المطابقة على FALSE (مطابقة تامة للنمط)؛ إذ إن استخدام TRUE (مطابقة تقريبية) يؤدي إلى نتائج خاطئة تماماً عند العمل مع محارف البدل.
تخضع هذه الطريقة للقيود التاريخية المعروفة لدالة VLOOKUP؛ حيث تعجز عن البحث لليسار (يجب أن يكون عمود البحث هو الأول دائماً)، وتتوقف عند أول مطابقة تعثر عليها متجاهلة أي تكرارات لاحقة قد تكون هي المقصودة في التحليل، إضافة إلى هشاشة رقم فهرس العمود (Column Index) في حال إدراج أعمدة جديدة داخل الجدول.
8.2 البحث الجزئي المتطور باستخدام دالة XLOOKUP الحديثة
تقدم دالة XLOOKUP حلاً جذرياً وشاملاً لكافة قيود البحث المرجعي في إكسل، مع دعم فائق ومخصص للبحث الجزئي عبر وسائطها التشغيلية. لتمكين البحث بمحارف البدل في XLOOKUP، يجب ضبط الوسيطة الخامسة (Match_mode) على القيمة 2 (وضع مطابقة محارف البدل).
تُبنى صيغة XLOOKUP المرنة والحديثة على النحو التالي:
=XLOOKUP("*" & D1 & "*", A2:A100, C2:C100, "غير موجود", 2)
تتميز XLOOKUP بفصل مصفوفة البحث عن مصفوفة الإرجاع، مما يتيح استرجاع البيانات من أي عمود يميناً أو يساراً دون أي قيود، مع إمكانية توفير نص بديل فوري في حال عدم العثور على نتائج عبر وسيطة القيمة المفقودة المدمجة (“غير موجود”) دون الحاجة لدالة IFERROR الخارجية.
علاوة على ذلك، تتيح وسيطة وضع البحث (Search_mode) في XLOOKUP إمكانية البحث من الأسفل إلى الأعلى (البحث العكسي) عبر تمرير القيمة -1، وهو ما يسمح باسترجاع آخر معاملة مسجلة تحتوي على النص الجزئي المطلوب بدلاً من المطابقة الأولى، وهي ميزة فريدة لا تتوفر في الدوال التقليدية.
8.3 المطابقة المرجعية المتقدمة باستخدام INDEX و MATCH
تظل تركيبة INDEX و MATCH الخيار المعماري المفضل لدى خبراء النمذجة المتقدمة الذين يعملون على إصدارات إكسل المختلفة لضمان التوافق المطلق والكفاءة العالية في إدارة الذاكرة. يتم توظيف محارف البدل داخل دالة MATCH للبحث عن النص الجزئي واسترجاع رقم الصف، لتتولى دالة INDEX جلب القيمة المطلوبة:
=INDEX(C2:C100, MATCH("*" & D1 & "*", A2:A100, 0))
يوضح الجدول التالي مقارنة تقنية ومعمارية بين الطرق الثلاث المتبعة في البحث المرجعي للنصوص الجزئية:
| وجه المقارنة (Feature) | VLOOKUP مع محارف البدل | INDEX / MATCH مع محارف البدل | XLOOKUP مع محارف البدل (وضع 2) |
|---|---|---|---|
| اتجاه البحث المرجعي | إلى اليمين/اليسار فقط حسب موضع عمود المفتاح | حر بالكامل في جميع الاتجاهات | حر بالكامل ومستقل عن الترتيب |
| استهلاك موارد المعالج | متوسط (يعيد حساب النطاق كاملاً) | منخفض جداً وسريع للغاية | فائق السرعة ومحسن بالذاكرة |
| معالجة القيم المفقودة | تتطلب تغليف خارجي بدالة IFERROR | تتطلب دمج خارجي مع IFERROR / IFNA | مدمجة داخلياً عبر الوسيطة [if_not_found] |
| التوافق مع الإصدارات القديمة | متوافقة مع كافة إصدارات إكسل (1997+) | متوافقة مع كافة إصدارات إكسل (1997+) | مقتصرة على Excel 365 و Excel 2021+ |
يساعد هذا التحليل في توجيه المطورين لاختيار الأداة الأنسب بحسب البيئة التشغيلية المستهدفة ومستوى التوافق المطلوب بين المستخدمين في بيئة العمل المشتركة.
9. معالجة وتصحيح الأخطاء الشائعة أثناء التحقق من النصوص الجزئية
9.1 التعامل مع المسافات المخفية والرموز غير المرئية
تُعد المسافات البادئة واللاحقة والمسافات المزدوجة السبب الأكثر شيوعاً لفشل صيغ التحقق من النصوص الجزئية في إكسل. عند تصدير البيانات من أنظمة تخطيط الموارد المؤسسية (ERP) أو قواعد البيانات السحابية، غالباً ما تحتوي الحقول النصية على مسافات غير مرئية تفصل بين الحروف أو تُضاف في أواخر السطور، مما يؤدي إلى عدم تطابق الأنماط بدقة.
لمعالجة هذه المسألة، تُستخدم دالة TRIM لإزالة كافة المسافات الزائدة من النصوص مع الإبقاء فقط على مسافة مفردة واحدة بين الكلمات. يتم دمج TRIM مباشرة داخل معادلة الفحص لتطهير النص قبل اختباره:
=ISNUMBER(SEARCH("الهدف", TRIM(A1))).
إضافة إلى المسافات العادية، قد تتضمن النصوص المستوردة من صفحات الويب محارف الفراغ غير المنفصل (Non-breaking spaces ذات الرمز العشري 160 أو )، ومحارف التحكم غير القابلة للطباعة (رموز الآسكي من 0 إلى 31). هنا يتم دمج دالة CLEAN ودالة SUBSTITUTE مع دالة TRIM لإنشاء طبقة تنظيف فائقة القوة تضمن إزالة كافة الشوائب الخفية قبل إطلاق عمليات المطابقة الحسابية.
9.2 إدارة الأخطاء المنطقية والنوعية (#VALUE! و #N/A)
يواجه مستخدمو إكسل بصورة متكررة أخطاء برمجية أثناء فحص النصوص، وعلى رأسها خطأ #VALUE! الناتج عن فشل دالتي FIND و SEARCH في العثور على السلسلة المستهدفة، وخطأ #N/A الذي يظهر عند فشل دوال البحث المرجعي VLOOKUP أو MATCH في إيجاد أي تطابق للنمط الجزئي.
تتطلب الإدارة الاحترافية لهذه الأخطاء استخدام طبقات حماية برمجية متخصصة. تُعد دالة IFNA الخيار الأمثل للتعامل مع أخطاء دوال البحث المرجعي حصراً دون إخفاء الأخطاء الهيكلية الأخرى:
=IFNA(XLOOKUP("*" & D1 & "*", A1:A100, B1:B100, 2), "لا يوجد تطابق").
يضمن هذا التخصيص عدم تعطل التقارير المحاسبية ولوحات التحكم عند مواجهة قيم غير موجودة في قاعدة البيانات.
من الضروري أيضاً التمييز الدقيق بين الخلية التي تحتوي على سلسلة نصية فارغة ناتجة عن معادلة سابقة "" والخلية الفارغة تماماً (Blank Cell)؛ حيث يؤدي تمرير النصوص الفارغة كمعايير بحث إلى سلوكيات حسابية غير متوقعة تتطلب معالجتها بالتحقق الشرطي المسبق باستخدام LEN(A1)>0 للتأكد من وجود محتوى حقيقي قابل للفحص.
9.3 مشاكل تحويل أنواع البيانات (الأرقام المخزنة كنصوص والعكس)
تفشل دوال البحث النصي المعتمدة على محارف البدل (مثل COUNTIF و VLOOKUP) عندما تُطبق على خلايا تحتوي على قيم رقمية أو تواريخ مخزنة بتنسيق رقمي خالص (Pure Numbers)، لأن محارف البدل مخصصة بطبيعتها لمسح السلاسل النصية فقط؛ فإذا بحثت عن "*123*" داخل رقم الحساب البنكي 123456 المخزن كرقم، ستعيد الدالة القيمة صفر.
للتغلب على هذا التحدي التقني، يجب تحويل الأرقام إلى نصوص برمجياً داخل المعادلة باستخدام دالة TEXT أو دمجها مع سلسلة نصية فارغة (A1 & "") قبل إجراء عملية الفحص:
=ISNUMBER(SEARCH("123", A1 & "")).
يجبر هذا الدمج محرك إكسل على معاملة الرقم كسلسلة محارف قابلة للمسح والتطابق الجزئي بسهولة.
وفي المقابل، عند استخراج أرقام جزئية من داخل نصوص مدمجة (مثل استخراج القيمة المالية من العبارة “المبلغ: 5000 ريال”)، يجب تحويل النص الناتج مجدداً إلى رقم صالح للعمليات الحسابية باستخدام دالة VALUE أو المعامل الحسابي المزدوج -- لتمكين دوال الجمع والإحصاء من حسابه بشكل صحيح.
10. التحقق البرمجي التلقائي من النصوص الجزئية باستخدام VBA ووحدات الماكرو
10.1 استخدام المعامل Like في لغة Visual Basic for Applications
توفر بيئة التطوير الخاصة بمايكروسوفت إكسل Visual Basic for Applications (VBA) إمكانيات برمجية فائقة للتحقق من النصوص الجزئية من خلال المعامل الشرطي Like. يتيح هذا المعامل تطبيق شروط بحث نمطية قوية تتجاوز إمكانيات المعادلات التقليدية داخل خلايا ورقة العمل.
يدعم المعامل Like محارف بدل متقدمة؛ فبالإضافة إلى النجمة (*) وعلامة الاستفهام (?)، يدعم استخدام فئات الأحرف المحددة بين أقواس معقوفة مثل [A-Z] لمطابقة أي حرف لاتيني كبير، و [0-9] أو رمز الهاشتاج # لمطابقة أي خانة رقمية مفردة، و [!A-Z] لنفي الفئة. يوضح مقطع الكود التالي كيفية فحص عمود كامل وتظليل الخلايا المطابقة:
Sub HighlightPartialMatches()
Dim ws As Worksheet
Dim cell As Range
Set ws = ThisWorkbook.Sheets("Data")
For Each cell In ws.Range("A2:A1000")
If cell.Value Like "*تقرير*" Then
cell.Interior.Color = RGB(200, 240, 200)
End If
Next cell
End Sub
تسمح هذه الحلقات التكرارية بمعالجة آلاف السجلات وتطبيق إجراءات معقدة وفورية كعزل البيانات أو تصديرها إلى مصنفات مستقلة في ثوانٍ معدودة دون إثقال كاهل ورقة العمل بصيغ حسابية مستمرة.
10.2 تطوير دوال معرفة من قبل المستخدم (UDF) للتحقق المخصص
عندما تصبح الصيغ داخل خلايا إكسل طويلة ومعقدة ويصعب على المستخدمين صيانتها، يُعد تطوير الدوال المعرفة من قِبل المستخدم (User-Defined Functions – UDF) عبر VBA الحل الأمثل لتبسيط واجهة الحسابات ورفع الكفاءة التشغيلية للمؤسسة.
يمكن برمجة دالة مخصصة باسم ContainsText تستقبل الخلية المستهدفة والكلمة المفتاحية، مع خيار اختياري للتحكم في حساسية حالة الأحرف، كما يوضح الكود التالي:
Function ContainsText(TargetRange As Range, SearchStr As String, Optional MatchCase As Boolean = False) As Boolean
Dim CompareMode As VbCompareMethod
If MatchCase Then
CompareMode = vbBinaryCompare
Else
CompareMode = vbTextCompare
End If
If InStr(1, TargetRange.Value, SearchStr, CompareMode) > 0 Then
ContainsText = True
Else
ContainsText = False
End If
End Function
بعد إدراج هذا الكود في وحدة نمطية (Standard Module)، يمكن لأي مستخدم استخدام المعادلة مباشرة في ورقة العمل كأي دالة قياسية: =ContainsText(A1, "ضريبة", FALSE)، مما يقلل احتمالات الأخطاء ويوحد معايير الفحص في كافة أقسام المؤسسة.
10.3 استخدام التعبيرات النمطية (Regular Expressions – RegEx) في VBA
تمثل التعبيرات النمطية (Regular Expressions – RegEx) قمة التطور في خوارزميات البحث عن النصوص وتطابق الأنماط المعقدة. تتيح مكتبة VBScript Regular Expressions المدمجة في نظام ويندوز لمطوري إكسل كتابة أنماط بحث لا يمكن لمحارف البدل التقليدية مجاراتها إطلاقاً.
باستخدام RegEx، يستطيع المحلل التحقق من احتواء الخلية على نصوص تتبع نمطاً محدداً مثل: عناوين البريد الإلكتروني، أو أرقام الهواتف الدولية، أو أرقام الآيبان (IBAN)، أو الصيغ المركبة للرموز الضريبية. يوضح الكود التالي دالة مخصصة تفحص ما إذا كانت الخلية تحتوي على كود يتألف من ثلاثة حروف تليها أربعة أرقام:
Function RegExCheck(CellRef As Range, PatternStr As String) As Boolean
Dim RegEx As Object
Set RegEx = CreateObject("VBScript.RegExp")
With RegEx
.Pattern = PatternStr
.IgnoreCase = True
.Global = False
End With
RegExCheck = RegEx.Test(CellRef.Value)
End Function
تُطبق هذه الدالة في ورقة العمل بالصيغة: =RegExCheck(A1, "[A-Z]{3}-d{4}")؛ لتتحقق بدقة رياضية متناهية من تطابق النمط المطلوب مع النص الجزئي الموجود في الخلية، ما يمنح مهندسي البيانات قوة استثنائية لتنقية وتدقيق البيانات الحساسة.
11. استخدام Power Query في فحص ومعالجة النصوص الجزئية ضمن تدفقات البيانات الضخمة
11.1 استيراد البيانات وتطبيق شروط النصوص الجزئية في محرر Power Query
تُعد أداة تغذية واستعلام البيانات (Power Query) المحرك الحديث والمعياري لعمليات استخراج وتحويل وتحميل البيانات (ETL) داخل مايكروسوفت إكسل وبيئة Power BI. عند التعامل مع ملايين السجلات المستوردة من مصادر خارجية، يُفضل معالجة وتصنيف النصوص الجزئية داخل Power Query قبل تحميلها إلى شبكة خلايا إكسل.
يوفر محرر Power Query واجهة رسومية لإنشاء “العمود الشرطي” (Conditional Column). من خلال تبويب “إضافة عمود” (Add Column) -> “عمود شرطي”، يمكن ضبط المشغّل على “يحتوي على” (Contains)، وتحديد الكلمة المفتاحية المستهدفة، وتعيين القيمة المعادة في حال تحقق الشرط. يقوم المحرك بتطبيق هذا التحويل على كافة الصفوف المتدفقة بكفاءة استثنائية لا تستهلك ذاكرة واجهة المستخدم الرسومية.
تتيح أداة التصفية المتقدمة داخل Power Query عزل وتضمين السجلات التي تشتمل على أنماط جزئية معقدة عبر خيارات Text Filters، مع إمكانية تحويل الحروف إلى حالة موحدة (Lowercase/Uppercase) بنقرة زر واحدة لضمان مطابقة متجانسة عبر كامل مجموعة البيانات المجمعة.
11.2 صياغة دوال لغة M لمطابقة النصوص المتقدمة
تعتمد أداة Power Query داخلياً على لغة الاستعلامات المتقدمة المعروفة بـ لغة M (Power Query M formula language). تتيح كتابة الشفرات البرمجية بلغة M مرونة مطلقة للتحكم في تفاصيل المطابقة النصية وحساسية حالة الأحرف والمطابقة الثقافية للنصوص.
تُمثل الدالة Text.Contains الركيزة الأساسية لفحص النصوص الجزئية في لغة M، وتُصاغ وفق البنية الهيكلية التالية:
Text.Contains([CustomerNotes], "مستعجل", Comparer.OrdinalIgnoreCase)
تضمن وسيطة المقارنة Comparer.OrdinalIgnoreCase تنفيذ فحص جزئي غير حساس تماماً لحالة الأحرف وبسرعة معالجة عالية تتخطى المقارنات اللغوية البطيئة. كما يمكن صياغة شروط تفرع منطقية معقدة داخل محرر الصيغة المتقدمة كالتالي:
if Text.Contains([ProductDescription], "PRO", Comparer.Ordinal) then "احترافي" else if Text.Contains([ProductDescription], "LITE", Comparer.Ordinal) then "اقتصادي" else "قياسي"
تتيح هذه التركيبات البرمجية بناء مسارات تنظيف متقدمة تستوعب كافة السيناريوهات الاستثنائية للبيانات قبل ترحيلها إلى نماذج البيانات التحليلية.
11.3 أتمتة تنظيف النصوص الجزئية وتحديث التقارير تلقائياً
تتجلى القوة الكبرى لأداة Power Query في إمكانية بناء مسار تحويلي آلي (Automated Transformation Pipeline) يُسجل خطوات المعالجة والتنظيف النصي خطوة بخطوة. بمجرد إعداد الاستعلام، لا يحتاج المحلل إلى إعادة كتابة المعادلات أو تكرار خطوات التنسيق والتصفية عند استلام بيانات جديدة.
بمجرد إضافة سجلات جديدة إلى المصدر الأصلي والضغط على زر “تحديث الكل” (Refresh All)، يتولى Power Query تنفيذ عمليات الفحص الجزئي، وإعادة تطبيق شروط Text.Contains، وتحديث التصنيفات في أجزاء من الثانية، وتغذية الجداول المحورية ولوحات القيادة التفاعلية مباشرة.
يساهم هذا النهج المعماري في تقليص حجم ملفات الإكسل بشكل جذري؛ حيث يتم التخلص من آلاف الصيغ المحسوبة داخل شبكة الخلايا واستبدالها بجداول بيانات معالجة ومضغوطة داخل نموذج البيانات الداخلي (Data Model)، مما يضمن استقرار النماذج المؤسسية وسرعة أدائها.
12. تحسين الأداء وأفضل الممارسات للتعامل مع مجموعات البيانات الضخمة
12.1 مقارنة الكفاءة الحسابية بين مختلف دوال فحص النصوص الجزئية
في مشاريع تحليل البيانات الضخمة التي تحتوي على مئات الآلاف من الصفوف، يصبح اختيار الدالة المناسبة عاملاً حاسماً في سرعة استجابة ملف الإكسل ومنع تجمد واجهة البرنامج. تختلف الدوال اختلافاً كبيراً في استهلاك المعالج (CPU) ومعدل إشغال الذاكرة العشوائية (RAM).
تُعد تركيبة ISNUMBER(SEARCH()) و ISNUMBER(FIND()) الخيار الأكثر كفاءة من حيث سرعة التنفيذ واستغلال الموارد؛ إذ تعمل الدالتان عبر مسارات معالجة مؤشرية خفيفة في الذاكرة. في المقابل، تستهلك صيغ المصفوفات المتعددة مثل SUMPRODUCT(--ISNUMBER(SEARCH())) دورات معالجة إضافية لتقييم أبعاد المصفوفة في كل خلية على حدة، ما يجعلها غير مناسبة للتطبيق على أعمدة كاملة في النطاقات الكبرى.
تُعد الدوال المتقلبة (Volatile Functions) كابوساً لأداء النماذج؛ لذا يجب تجنب إقحام دوال مثل OFFSET أو INDIRECT داخل صيغ البحث الجزئي، والاعتماد بدلاً من ذلك على الأعمدة المساعدة (Helper Columns) الثابتة لتقسيم العمليات المنطقية الطويلة؛ حيث يتيح ذلك لمحرك إكسل استخدام تقنية الحساب متعدد الخيوط (Multi-Threaded Calculation) بفعالية قصوى.
12.2 أفضل الممارسات في تنظيم الجداول وتوحيد هياكل البيانات النصية
لضمان استقرار وكفاءة عمليات مطابقة النصوص، يُوصى بتحويل النطاقات التقليدية إلى جداول إكسل رسمية (Excel Tables / ListObjects). توفر هذه الجداول ميزة التوسع التلقائي للصيغ، واستخدام المراجع المهيكلة (Structured References) مثل [@CustomerName] بدلاً من مراجع الخلايا الجامدة، مما يضمن اتساق المنطق الحسابي في كافة السجلات المضافة مستقبلاً.
يجب على مديري قواعد البيانات اعتماد معايير إدخال موحدة وتجنب خلط اللغات والتنسيقات المتباينة داخل الحقل الواحد، وتطبيق قواعد التحقق من صحة البيانات (Data Validation) لتقييد خيارات الإدخال اليدوي العشوائي قدر الإمكان عند المصدر.
تتضمن الممارسات المتقدمة إنشاء قواميس بيانات ومراجع معيارية (Lookup Reference Dictionaries)؛ حيث يتم ربط النصوص الجزئية الشائعة بتصنيفاتها المعتمدة في جداول مساعدة منفصلة، مما يتيح تحديث شروط التصنيف في مكان مركزي واحد دون الحاجة لتعديل الصيغ البرمجية المنتشرة في مصنف العمل.
12.3 دليل اتخاذ القرار لاختيار التقنية المثلى لمطابقة النصوص الجزئية
لتسهيل اختيار الأداة التقنية الأنسب لكل سيناريو عملي، يمكن الاعتماد على مصفوفة اتخاذ القرار المنهجية التالية:
- دالة COUNTIF مع محارف البدل (*): الخيار الأمثل للتحقق الشرطي السريع، والفحوصات الفردية البسيطة غير الحساسة لحالة الأحرف، وعند بناء مؤشرات ثنائية في الجداول المتوسطة.
- دالة ISNUMBER مع SEARCH: الأداة المعيارية الأولى للمطابقة الجزئية المرنة داخل دوال IF و FILTER والتنسيق الشرطي المخصص، وتفضيلها المطلق عند التعامل مع مراجع الخلايا الديناميكية.
- دالة ISNUMBER مع FIND: الخيار الإلزامي والوحيد عند اشتراط الحساسية الصارمة لحالة الأحرف (Uppercase vs Lowercase)، وتدقيق الأكواد وكلمات المرور المشفرة.
- دالة XLOOKUP (مع ضبط الوضع 2): الأداة الحديثة المثلى للبحث والاسترجاع المرجعي للبيانات بناءً على نصوص جزئية مع معالجة الأخطاء في خطوة واحدة.
- لغة الاستعلامات Power Query: الخيار الحتمي عند استيراد وتنظيف وتصنيف مجموعات البيانات الضخمة (أكثر من 100 ألف صف) المتدفقة من خارج إكسل بشكل مؤتمت بالكامل.
- وحدات ماكرو VBA و RegEx: الحل المتخصص للمهام التكرارية الشاقة التي تتطلب مطابقة أنماط بنيوية معقدة لا تستطيع الدوال القياسية استيعابها.
يوفر هذا الدليل المنهجي إطار عمل متكامل يضمن لخبراء تحليل البيانات والمطورين الماليين اختيار التقنية التي توازن بأعلى كفاءة بين سرعة التنفيذ، وسهولة الصيانة، ودقة المخرجات التحليلية المعتمدة.
الخلاصة (Conclusion)
يمثل إتقان مهارات التحقق من النصوص الجزئية في مايكروسوفت إكسل ركيزة محورية لتحويل البيانات النصية غير المنظمة إلى أصول معرفية ورقمية ذات قيمة استراتيجية عالية. لقد استعرض هذا الدليل الأكاديمي الشامل الترسانة الكاملة للأدوات المتاحة داخل بيئة إكسل؛ بدءاً من الدوال الكلاسيكية المعتمدة على محارف البدل مثل COUNTIF و VLOOKUP، مروراً بالتراكيب المنطقية المحكمة لـ ISNUMBER مع SEARCH و FIND، وصولاً إلى أدوات العصر الحديث كالمصفوفات الديناميكية عبر دالة FILTER، والبحث المرجعي المتقدم باستخدام XLOOKUP.
تتجاوز الاحترافية في إدارة البيانات مجرد حفظ صيغ المعادلات؛ إذ تتطلب فهماً هندسياً عميقاً لكيفية معالجة الأخطاء البرمجية الشائعة، والتخلص من المسافات والمحارف الخفية، واختيار الأداة الأنسب بحسب حجم البيانات ومتطلبات حساسية حالة الأحرف. ومع تزايد حجم البيانات المؤسسية، تصبح أدوات مثل Power Query والبرمجة النصية عبر VBA والتعابير النمطية (RegEx) أدوات لا غنى عنها لبناء تدفقات عمل مؤتمتة وقابلة للتوسع بأعلى كفاءة حسابية ممكنة.
إن تبني أفضل الممارسات في تنظيم الجداول، وتوثيق النماذج، وبناء قواميس البيانات المرجعية يضمن استدامة النظم التحليلية وسهولة صيانتها ومشاركتها بين فرق العمل، مما يمكن المؤسسات من اتخاذ قرارات دقيقة وموثوقة مبنية على بيانات مفحوصة ومنقاة بأعلى المعايير الهندسية والرياضية.
المراجع (References)
- Alexander, M., Kusleika, R., & Walkenbach, J. (2019). Excel 2019 Bible. John Wiley & Sons. https://www.wiley.com/en-us/Excel+2019+Bible-p-9781119514787
- Friedl, J. E. (2006). Mastering Regular Expressions (3rd ed.). O’Reilly Media. https://www.oreilly.com/library/view/mastering-regular-expressions/0596528124/
- Microsoft Corporation. (2024a). COUNTIF function. Microsoft Support. https://support.microsoft.com/en-us/office/countif-function-e0de10c6-f885-4e71-a3f3-b44fb760ae2f
- Microsoft Corporation. (2024b). SEARCH, SEARCHB functions. Microsoft Support. https://support.microsoft.com/en-us/office/search-searchb-functions-9ab04538-0e55-4719-a72e-b6f54513b495
- Microsoft Corporation. (2024c). XLOOKUP function. Microsoft Support. https://support.microsoft.com/en-us/office/xlookup-function-b7fd680e-6d10-43e6-84f9-88eae8bf5929
- Microsoft Corporation. (2024d). Power Query M formula language reference. Microsoft Learn. https://learn.microsoft.com/en-us/powerquery-m/
- Puls, K., & Escobar, M. (2016). M Is for (Data) Monkey: A Guide to the M Language in Excel Power Query. Holy Macro! Books.
- Walkenbach, J. (2015). Excel VBA Programming For Dummies (4th ed.). John Wiley & Sons. https://www.wiley.com/en-us/Excel+VBA+Programming+For+Dummies%2C+4th+Edition-p-9781119077398