معرفی تابع List.Contains

تعالی الله یکی بی مثل و مانند

که خوانندش خداوندان "خداوند"

 

مقدمه 1

از جمله توابع زیر مجموعه List یکی همین List.Contains و دو تا از اعوان و انصارش است . همین شش مثال را که از سایت مایکروسافت آوردم برای آشنائی اولیه کفایت می کند . در خصوص List.Contains می بینید که پارامتر اولش یک لیست است و پارامتر دوم چیزی از جنس همان اعضاء لیست اول ،ولی نه یک لیست . اما در مورد دو تابع بعدی هر دو پارامتر لیست هستند . یافتن فرق توابع از روی مثال ها آسان است

List.Contains ( { 1 , 2 ,3 , 4 , 5 ,6 } , 4 ) →true

List.Contains ( { A" , "B" , "C" , "D"  } , "F" ) →false

List.ContainsAll ( { 1 , 2 ,3 , 4 , 5 ,6 } , { 4 , 6 } ) →true

List.ContainsAll ( { 1 , 2 ,3 , 4 , 5 ,6 } , { 4 , 7 } ) →false

List.ContainsAny ( { 1 , 2 ,3 , 4 , 5 ,6 } , { 4 , 7 } ) →true

List.ContainsAll ( { 1 , 2 ,3 , 4 , 5 ,6 } , { 0 , 7 } ) →false

مقدمه 2

پیش از ورود به بحث اصلی فرض کنید در پاور کوئری ستونی از اعداد داریم و می خواهیم حاصلضرب ستون اول را در دو ضرب و در یک ستون جدید جایگزین کنیم . برای این کار عبارت زیر را در یک Custom Column می نویسیم

[Column1]*2

یعنی آقای پاور کوئری لطفا هر سلول را از ستونی بنام [Column1] در دو ضرب کن و حاصلضرب را در ستون جدید درج کن . اینکار – درست یا غلط - مرا یاد حلقه FOR در VBA  می اندازد . انگار در هر لحظه یک سلول از ستون Column1 بجای [Column1] نشسته باشد و در دو ضرب شود و حاصل در سلول متناظرش در ستون دوم بنشیند.  

بحث اصلی

حالا فرض کنید ستونی از حروف داریم قرار است یک ستون Custom درست کنیم . به این شرط که اگر هر سلول در ستون اول یکی از حروف A  یا  F یا  I یا S  بود پاور کوئری برایمان در ستون Custom  ، Yes  را و در غیر اینصورت No را درج کند .

 

راه اول

یک راه ساده اینست که اولا جدول تک ستونی آبی رنگ را به محیط پاور کوئری منتقل کنیم و سپس یک ستونی Custom ی Add کنیم و کد زیر را در آن بنویسیم . فقط برای خواناتر شدن چنین نوشتم وگرنه .....

If

    [Category]="A" or [Category]="F" or [Category]="I" or [Category]="S"

    Then

          "yes"

    else

          "no"

 

جدول سبز رنگ شکل یک حاصل استفاده از ساده ترین زبان برای رسیدن به مقصود است (اگر کوئری را در اکسل بارگذاری کنیم )

راه دوم

از تابعی که در مقدمه معرفی شد کمک بگیریم و این بار در پنجرهء Custom Column کد زیر را بنویسیم

if List.Contains(  {"A" , "F" , "I" , "S" } , [Category] ) = true

      then

           "Yes"

      else

           "No"

پارامتر اول تابع  ، چنانکه انتظار می رفت لیستی است با چهار عضو . حالا مقدمهء دوم را بخاطر آورید در هر لحظه یکی از سلولهای ستون  Categoryبجای  [Category] می نشیند و تابع چک می کند آیا محتویات سلول برابر یکی از اعضاء لیست اول هست یا نه ؟ اگر نتیجه true  بود که متناظرآن سلول در ستون دوم Yes و در غیر اینصورت No را می نشاند .

 

 

سوال : آیا همیشه لیست موجود در پارامتر اول چهار یا پنج تا حرف است یا ممکن است چهل عضو داشته باشد ؟ سوال : آیا بهتر نبود کاربر این اختیار را داشت که هم خود اعضاء لیست و هم تعداد شان را تغییر دهد  و به اصطلاح اعضای لیست کاملاً داینامیک باشند ؟ . تصور امکان استفاده از دو روش بالا با فرض داینامیک بودن ِ لیستِ اول محال نیست ؟

مسلما در مثالهای واقعی به این سادگی نیست .

 

راه سوم

لیست پارامتر اول تابع List.Contains  را در یک Table  داخل اکسل سامان دادم . ببینید تا صدق گفتارم را دریابید (شیت دوم فایل ضمیمه)

 

 

این Table را به ادیتور پاور کوئری منتقل کردم . آن را چنان که می دانید و می بینید به یک لیست تغییر دادم . حالا نامش OuerList است . کد زیر را در پنجرهء Custom Column مرقوم بفرمائید . یک کد شُسته رُفته و ُ کارا .

 if List.Contains(  OuerList , [Category] ) = true

      then

            "Yes"

      Else

            "No

محکم بنشینید و در صفحه اکسل (شیت دو  ِ فایل پیوست) یک حرف به جدول MyList اضافه کنید سپس روی جدول سبز رنگ که خروجی کوئری professional است کلیک راست کرده دکمه Refresh را محترمانه بفشارید .

شما را با حس ذوق زدگی رها نمی کنم برایتان یک سورپرایز دیگر دارم . آن را بهمراه کوئریهای مربوط به این مقاله در فایل ضمیمه ببینید .

ندیده های گرامی! شما را به خدا می سپارم .

📎 فایل‌های پیوست

به عنوان اولین نفر، تجربه یا دیدگاه خود را بنویسید!

محتوای این فیلد خصوصی است و به صورت عمومی نشان داده نخواهد شد.

متن ساده

  • تگ‌های HTML مجاز نیستند.
  • خطوط و پاراگراف‌ها بطور خودکار اعمال می‌شوند.
کد امنیتی