لیست کشویی با چند انتخاب

لیست کشویی کلاسیک در یک برگه اکسل عالی است، اما فقط به شما امکان می دهد یک گزینه از مجموعه ارائه شده را انتخاب کنید. گاهی اوقات این دقیقا همان چیزی است که شما می خواهید، اما شرایطی وجود دارد که کاربر باید بتواند انتخاب کند برخی از عناصر از لیست

بیایید به چندین پیاده سازی معمولی از چنین لیست چند انتخابی نگاه کنیم.

گزینه 1. افقی

کاربر موارد را یکی یکی از لیست کشویی انتخاب می کند و آنها در سمت راست سلول در حال تغییر ظاهر می شوند و به طور خودکار به صورت افقی لیست می شوند:

لیست های کشویی در سلول های C2:C5 در این مثال به روشی استاندارد ایجاد می شوند، به عنوان مثال

  1. سلول های C2:C5 را انتخاب کنید
  2. برگه یا منو داده ها یک تیم انتخاب کنید اعتبار سنجی داده ها
  3. در پنجره باز شده یک گزینه را انتخاب کنید فهرست و به عنوان یک محدوده مشخص کنید منبع سلول ها با داده های منبع برای لیست A1:A8

سپس باید یک ماکرو به ماژول ورق اضافه کنید، که تمام کارهای اصلی را انجام می دهد، یعنی مقادیر انتخاب شده را در سمت راست سلول های سبز اضافه می کند. برای انجام این کار، روی برگه برگه با لیست های کشویی راست کلیک کرده و دستور را انتخاب کنید کد منبع. کد زیر را در پنجره ویرایشگر ویژوال بیسیک که باز می شود قرار دهید:

Private Sub Worksheet_Change(ByVal Target As Range) On Error Resume Next If Not Intersect(Target, Range("C2:C5")) هیچ چیز نیست و Target.Cells.Count = 1 سپس Application.EnableEvents = False If Len(Target.Offset (0, 1)) = 0 سپس Target.Offset(0) = Target Else Target.End(xlToRight).Offset(1) = Target End If Target.ClearContents Application.EnableEvents = End True If End Sub  

در صورت لزوم، محدوده حساس لیست های کشویی C2:C5 در خط دوم این کد را با محدوده حساس خود جایگزین کنید.

گزینه 2. عمودی

مانند نسخه قبلی است، اما مقادیر جدید انتخاب شده در سمت راست اضافه نمی شوند، بلکه به پایین اضافه می شوند:

دقیقاً به همین روش انجام می شود، اما کد ماکرو کنترل کننده کمی تغییر می کند:

Private Sub Worksheet_Change(ByVal Target As Range) On Error Resume Next If Not Intersect(Target, Range("C2:F2")) هیچ است و Target.Cells.Count = 1 سپس Application.EnableEvents = False If Len(Target.Offset (1, 0)) = 0 سپس Target.Offset(1) = Target Else Target.End(xlDown).Offset(0) = Target End If Target.ClearContents Application.EnableEvents = پایان واقعی اگر پایان فرعی  

مجدداً، در صورت لزوم، محدوده حساس لیست های کشویی C2:F2 را با محدوده حساس خود در خط دوم این کد جایگزین کنید.

گزینه 3. با تجمع در همان سلول

در این گزینه انباشت در همان سلولی که لیست کشویی در آن قرار دارد اتفاق می افتد. عناصر انتخاب شده با هر کاراکتری (به عنوان مثال، کاما) از هم جدا می شوند:

لیست های کشویی در سلول های سبز به روشی کاملا استاندارد مانند روش های قبلی ایجاد می شوند. همه کارها دوباره توسط یک ماکرو در ماژول ورق انجام می شود:

Private Sub Worksheet_Change(ByVal Target As Range) On Error Resume Next If Not Intersect(Target, Range("C2:C5")) هیچ چیز نیست و Target.Cells.Count = 1 سپس Application.EnableEvents = False newVal = Target Application.Undo Oldval = Target If Len(oldval) <> 0 و Oldval <> newVal سپس Target = Target & "," & newVal Else Target = newVal End If If Len(newVal) = 0 سپس Target.ClearContents Application.EnableEvents = پایان واقعی اگر پایان فرعی  

در صورت تمایل، می توانید کاراکتر جداکننده (کاما) را در خط نهم کد با شخصیت خود (مثلاً فاصله یا نقطه ویرگول) جایگزین کنید.

  • نحوه ایجاد یک لیست کشویی ساده در یک سلول صفحه اکسل
  • لیست کشویی با محتوا
  • لیست کشویی با گزینه های از دست رفته اضافه شده است
  • ماکروها چیست، چگونه از آنها استفاده کنیم، کجا کد ماکرو را در ویژوال بیسیک وارد کنیم

پاسخ دهید