انتخاب چندگزینه از لیست کشویی در اکسل

11,010
28 دیدگاه
انتخاب چند گزینه از لیست کشویی

همانطور که می دانید در اکسل می توان با استفاده از ابزار Data Validation لیست های کشویی (Dropdown List) ایجاد کرد و به کاربر امکان انتخاب از میان گزینه های از پیش تعیین شده را داد. در حالت عادی هر بار تنها یک گزینه از لیست کشویی را می توان انتخاب کرد اما گاهی اوقات نیاز است که کاربر چند گزینه را از لیست انتخاب نماید برای مثال انتخاب چند روز هفته یا انتخاب رشته های ورزشی مورد علاقه و … که به واسطه کارتون به آن نیاز دارید. در اینجا می خواهیم به روشی ساده امکان انتخاب چند گزینه از لیست کشویی در اکسل را فراهم کنیم. با ما همراه باشید.

ساخت منوی کشویی با امکان انتخاب چند گزینه

جهت ساخت لیست کشویی با امکان انتخاب چند گزینه در اکسل از کدنویسی استفاده می شود. برای اینکار فایل اکسل خود را باز کنید و با استفاده از ابزار Data Validation در یکی از سلول ها منوی کشویی ایجاد نمایید. سپس همانند تصویر از روی نام sheet کلیک راست کرده و گزینه View Code را انتخاب کنید تا محیط کد نویسی آن باز شود.

گزینه view code

حال کد های ذیل را در این قسمت وارد نمایید:

Sheet1.ir

Option Explicit
'============== Sheet1.ir ================
Private Sub Worksheet_Change(ByVal Target As Range)
    'آدر سلول يا سلول هاي داراي ليست کشويي
    If Target.Address = "$B$9" Then
        Dim Old_txt, New_txt, Sep_txt As String
        With Application
            'کاراکتر جداکننده بين گزينه ها
            Sep_txt = " " & Chr(124) & " "
            'لغو عمليات در زمان حذف محتواي سلول ليست کشويي
            If Target.Value = "" Then Exit Sub
            'غير فعال کردن نمايش پيغام هاي اکسل
            .EnableEvents = False
            'کنترل خطا : درزمان ورود مواردي غير از آيتم هاي ليست کشويي
            On Error GoTo onErr2
            '
            New_txt = Target.Value & Sep_txt
            .Undo
            Old_txt = Target.Value
            '
            'کنترل وجود آيتم تکراري
            On Error GoTo onErr1
            If .WorksheetFunction.Search(New_txt, Old_txt) > 0 Then
                Target.Value = .WorksheetFunction.Substitute(Old_txt, New_txt, "")
                .EnableEvents = True
                Exit Sub
            End If
            onErr1:
            Target.Value = Old_txt & New_txt
            onErr2:
            'فعال کردن نمايش پيغام هاي اکسل
            .EnableEvents = True
        End With
    End If
End Sub

Sheet1.ir

نتیجه همانند تصویر ذیل خواهد بود.

دقت کنید که در خط 5 کد بالا به جای 9$B$ آدرس سلولی که منوی کشویی را ساخته اید وارد نمایید. حال به محیط اکسل باز گردید و منوی کشویی را امتحان کنید. خواهید دید که با انتخاب هر گزینه، آن گزینه به محتوای سلول اضافه می شود. برای حذف یک گزینه از محتوای سلول نیز کافی است دوباره آن گزینه را از لیست انتخاب کنید. به همین سادگی امکان انتخاب چند گزینه از لیست کشویی را فراهم کردید.

در صورتی که در چند سلول لیست کشویی ایجاد کرده اید باید آدرس تمام آن سلول ها را به خط 5 کد بالا اضافه کنید. برای مثال فرض کنید در سلول های C10 و D12 لیست کشویی وجود دارد. در خط 5 به صورت ذیل آدرس ها را وارد کنید:

If Target.Address = “$C$10” Or Target.Address = “$D$12” Then

کاراکتر جدا کننده بین آیتم ها نیز با دستور Chr در خط 9 مشخص می شود. در اینجا از Chr(124) برای گذاشتن کاراکتر | بین آیتم های انتخاب استفاده شده است. Chr عملکردی مشابه تابع  CHAR در اکسل را دارد و با وارد کردن شماره یونیکد هر کاراکتر، آن را نمایش می دهد. برای آشنایی بیشتر توضیحات توابع CHAR ، UNICHAR و UNICODE را ببینید.

نتیجه کار را می توانید در ویدیو ذیل مشاهده  و فایل اکسل مربوط به این مطلب را دریافت کنید:

تعداد دانلود : 1131

مطالب مرتبط :

28 دیدگاه. پیغام بگذارید

  • با سلام و ممنون از سایت خوبتون
    من این روش رو تست کردم اوکی بود فقط یک مشکل داره توی کدنویسیش محدودیت در تعداد سلولی که میخایم این برنامه روش پیاده کنیم داره یعنی فقط مثلا تا 36سلول میتونیم انتخاب کنیم درصورتیکه فایل من 57ردیفه
    لطفا راهنماییم کنید
    ممنون

    پاسخ
    • رسول سلیمانی
      ۲۸ آبان ۱۴۰۱

      سلام مرتضی عزیز
      این مشکل نیست، شما کافیه در خط 5، شرط را به این صورت بنویسید
      مثلا برای اینکه تمامی سلول های ستون 2 تا ردیف 60 شامل لیست کشویی باشد :

       If Target.Column = 2 And Target.Row <= 60 Then
      
      پاسخ
  • سلام من این کد اجرا کردم ولی فقط برای یک سلول اجرا میشه . اگر مثلا برای f3 تا f100 بخوایم اجرا بشه باید چطور دستور داد؟

    پاسخ
    • سلام مرتضی عزیز
      شما باید شرط if را که در خط 5 قرار دارد را متناسب با نیاز خود تغییر دهید.مثلا برای موردی که گفتین کد ذیل

      If Target.column =5 AND Target.Row >2 AND Target.Row < 101 Then

      در خط 5 وارد کنید

      پاسخ
  • سلام بارها کد وارد کردم و همه چی اکی بود. ولی فایل میبندم دوباره باز میکنم کد ها حذف شدن. البته سیو هم میزنم

    پاسخ
  • وقت بخیر.چرا بعد نوشتن کد با باز کردن مجدد فایل اکسل کد نوشته شده پاک میشه.یعنی سیو نمیشه

    پاسخ
  • اشکان
    ۷ دی ۱۴۰۲

    سلام آیا این امکان در اکسل وجود دارد که فقط یک سلول یا یک ردیف را راست چین یا چپ پین کرد

    پاسخ
    • سلام در تب home از ابزارهای بخش alignment می‌تونید استفاده کنید

      پاسخ
      • اشکان
        ۷ دی ۱۴۰۲

        سلام ممنون از سرعت در پاسخگویی در حقیقت من میخوام محتوای داخل کشوم چپ چین بشن فقط چون کلمات در زمان بالا و پایین کردن کشو میرن زیر نمار کنار کشو

        پاسخ
        • رسول سلیمانی
          ۸ دی ۱۴۰۲

          در استفاده از این نوع لیست متاسفانه امکان اعمال تغییرات روی آن وجود ندارد برای رفع شدن مشکل تون می تونید چیدمان اکسل را Left to Right قرار دهید . از تب page layout اینکار را انجام دهید

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

          پاسخ
          • سلام.. برای نمایش متن فارسی در VBA این تنظیمات را انجام دهید
            Control Panel
            Region
            از سربرگ Administrative روی Change System locale کلیک کنید و از منوی کشویی Persians را انتخاب کنید

            کد ها را هم از روی فایل پیوست کپی نمایید

  • اشکان
    ۷ دی ۱۴۰۲

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

    پاسخ
    • رسول سلیمانی
      ۸ دی ۱۴۰۲

      کدها به درستی عمل می کنند لطفا خطایی که رخ می دهد را ارسال بفرمایید
      در خصوص عمل نکردن فایل دانلودی… چون از کد استفاده شده اکسل کدها را غیر فعال می کند برای همین پس از دانلود و باز کردن فایل یه نوار زرد رنگ در بالای صفحه اکسل نشان داده می شود روی دکمه enable content کلیک کنید اگر با این کار هم درست نشد به احتمال زیاد از ویندوز 11 استفاده می کنید در ویندوز 11 فایل های دانلودی حاوی کد مسدود می شوند برای رفع آن روی فایل کلیک راست کرده و گزینه properties را انتخاب کنید در تب general پایین صفحه تیک گزینه unblock را بزنید و دوباره فایل را اجرا کنید

      پاسخ
  • سلام وقت بخیر من می خواستم این فرمول انتخاب چند گزینه در کشو روی سه تا از ستون هام اجرا بشه و اومدم تو خط پنجم این تغییر رو دادم ولی الان در کل ستون ها داره این فرمول اجرا می شه ممنون میشم راهنمایی کنید .
    If Target.Column = (6) Or (19) Or (28) And Target.Row > 2 And Target.Row < 3271 Then

    پاسخ
  • سلام
    وقتتون بخیر.ممنونم از سایت خوبتون و آموزش کاملتون
    اگر بخوان امکان انتخاب چند گزینه ای برای دو ستون باشه باید چیکار کنم؟

    پاسخ
  • سلام ، من یک فایل با 30 ردیف دارم ، میخوام برای تمامی ردیفهام این کد رو استفاده کنم ، چه تغییری باید رد کد ایجاد بشه ؟ ممنون میشم راهنماییم کنید ، خیلی واجبه

    پاسخ
    • سلام فرض کنیم میخواهید در ستون B از ردیف 10 تا ردیف 40 میخواهید این فرمول را استفاد کنید برای اینکار خط 5 کد را به صورت ذیل بنویسید
      If Target.column =2 AND Target.Row <41 AND Target.Row > 9 Then

      پاسخ
  • سلام
    ممنون از کدی که به اشتراک گذاشتین. من یه مشکل کوچیک دارم. اگه بخوام که این علامت جدا کننده درانتهای اخرین انتخاب ظاهر نشه چه راه حلی پیشنهاد میدید?

    پاسخ
    • سلام کدی که برای اینکار نوشته شده با توجه به جدا کننده و جایگاهش عمل می کنه و حذف کردن جدا کننده باعث خطا در اجرای کد میشه.. شما می توانید بجای جدا کننده از فاصله (Space) استفاده کنید

      پاسخ

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

این قسمت نباید خالی باشد
این قسمت نباید خالی باشد
لطفاً یک نشانی ایمیل معتبر بنویسید.
شما برای ادامه باید با شرایط موافقت کنید

keyboard_arrow_up