পরিস্থিতির ওপর নির্ভর করে আপনাকে ড্রপ-ডাউন লিস্টের মধ্যে একাধিক ভ্যালু সিলেক্ট করতে হতে পারে। এই টিউটোরিয়ালে আমরা দেখাব কিভাবে ড্রপ-ডাউন লিস্টে একাধিক সিলেকশন করা যায়। এই সেশনে আমরা এক্সেল ২০১৯ ব্যবহার করছি, আপনি আপনার পছন্দের ভার্সন ব্যবহার করতে পারেন।
সেশনে যাওয়ার আগে ডেটাসেট সম্পর্কে জানি যা আমাদের উদাহরণের ভিত্তি।

এখানে বেশ কিছু স্টেশনারি এলিমেন্ট রয়েছে, এগুলো দিয়ে আমরা একটি ড্রপ-ডাউন লিস্ট তৈরি করব এবং সেখানে একাধিক আইটেম সিলেক্ট করব।
নোট করুন এটি একটি সিম্পল ডেটাসেট যাতে বিষয়টি সহজে বোঝা যায়। বাস্তব পরিস্থিতিতে আপনি বড় এবং জটিল ডেটাসেটের সম্মুখীন হতে পারেন।
প্র্যাকটিস ওয়ার্কবুক
নিচের লিংক থেকে প্র্যাকটিস ওয়ার্কবুক ডাউনলোড করতে পারেন।
ড্রপ-ডাউন লিস্টে একাধিক সিলেকশন (Multiple Selection)
প্রথমে, আমাদের স্টেশনারি এলিমেন্টের ভিত্তিতে একটি ড্রপ-ডাউন লিস্ট তৈরি করতে হবে। দ্রুত বানা ফেলি। ড্রপ-ডাউন লিস্ট তৈরির আর্টিকেলটি ভিজিট করতে পারেন।
Data Validation ডায়লগ বক্সে LIST ডেটা টাইপ সিলেক্ট করে আইটেমের সেল রেঞ্জ ইনসার্ট করুন।

B4:B11 হলো স্টেশনারি এলিমেন্ট ধারণকারী রেঞ্জ। এখন ড্রপ-ডাউন লিস্ট পাবেন।

আরও পড়ুন: সিলেকশনের উপর নির্ভরশীল এক্সেল ড্রপ ডাউন লিস্ট
১. একাধিক আইটেম সিলেক্ট করুন (ডুপ্লিকেট সিলেকশন অনুমোদিত)
একটি সাধারণ ড্রপ-ডাউন লিস্ট সবসময় একক আইটেম সিলেক্ট করে। এখানে দেখুন, আমরা লিস্ট থেকে Pen সিলেক্ট করেছি (নিচের ছবি)।

এখন যদি অন্য আইটেম সিলেক্ট করি, ধরুন Pencil

তবে এটি পূর্বের ভ্যালুকে রিপ্লেস করবে। শুধু Pencil সিলেক্ট থাকবে।

একাধিক আইটেম সিলেক্ট করতে VBA কোড ব্যবহার করতে হবে। Microsoft Visual Basic for Applications উইন্ডো খুলুন (ALT + F11 চাপুন)।
যে ওয়ার্কশিটে ড্রপ-ডাউন লিস্টে একাধিক আইটেম সিলেক্ট করতে চান সেটার নাম বা নম্বরে ডাবল ক্লিক করুন। সেটার কোড উইন্ডো খুলবে।

এটি আমাদের ওয়ার্কবুকের Sheet2-এর কোড উইন্ডো (ড্রপ-ডাউন লিস্ট এই শীটে রয়েছে)।
কোড উইন্ডো খুললে নিচের কোডটি সেখানে ইনসার্ট করুন
Private Sub Worksheet_Change(ByVal Target As Range) Dim Oldvalue As String Dim Newvalue As String On Error GoTo Exitsub If Target.Address = "$D$4" Then If Target.SpecialCells(xlCellTypeAllValidation) Is Nothing Then GoTo Exitsub Else: If Target.Value = "" Then GoTo Exitsub Else Application.EnableEvents = False Newvalue = Target.Value Application.Undo Oldvalue = Target.Value If Oldvalue = "" Then Target.Value = Newvalue Else Target.Value = Oldvalue & ", " & Newvalue End If End If End If Application.EnableEvents = True Exitsub: Application.EnableEvents = True End Sub

কোডটি সেভ করুন, এবং এখন ড্রপ-ডাউন লিস্টে ভ্যালু সিলেক্ট করার চেষ্টা করুন।

Pencil সিলেক্ট করার পর আমরা অন্য আইটেম Notebook সিলেক্ট করছি। এবং আপনি দেখতে পাচ্ছেন, দুটি আইটেমই পাওয়া যাচ্ছে (নিচের ছবি)।

এই কোড ডুপ্লিকেট সিলেকশন অনুমতি দেবে। ধরুন আবার Pencil সিলেক্ট করি,

তবে সিলেকশন বক্সে আবার সেই আইটেমটি পাওয়া যাবে।

কোড ব্যাখ্যা
আমরা দুটি স্ট্রিং ডিক্লেয়ার করেছি Oldvalue এবং Newvalue।
আমরা D4 সেলে ড্রপ-ডাউন লিস্ট তৈরি করেছি, তাই আমাদের টার্গেট অ্যাড্রেস D4। এর সাথে Target.SpecialCells দিয়ে চেক করা হয়েছে সেলটি ডেটা ভ্যালিডেশন ব্যবহার করছে কিনা।
একটি ভ্যালু সিলেক্ট হলে ইভেন্ট বন্ধ করি (Application.EnableEvents = False) যাতে পরিবর্তন আবার ইভেন্ট ট্রিগার না করে। তারপর সিলেক্টেড আইটেমটি Newvalue-এ স্টোর করি।
পরিবর্তন আন্ডু (Undo) করার পর ভ্যালুটিকে Oldvalue-এ সেট করি। তারপর চেক করি Oldvalue খালি কিনা। যদি খালি থাকে (অর্থাৎ শুধু একটা ভ্যালু সিলেক্ট হয়েছে), তবে Newvalue রিটার্ন করি। অন্যথায়, Oldvalue এবং Newvalue কনক্যাটিনেট করি।
শেষে ইভেন্ট রিসেট করি যাতে প্রয়োজনে আবার পরিবর্তন করা যায়।
আরও পড়ুন: Multiple Dependent Drop-Down List Excel VBA
২. ড্রপ ডাউন লিস্ট থেকে একাধিক আইটেম সিলেক্ট করুন (শুধু ইউনিক সিলেকশন)
পূর্বের সেকশনে আমরা ডুপ্লিকেট অনুমোদিত একাধিক সিলেকশন দেখেছি। আপনি যদি ডুপ্লিকেট না চান, তবে এই সেকশন ফলো করুন।
সুবিধার জন্য আলাদা একটি শীট ব্যবহার করা হয়েছে। এইবার আমরা Sheet3-এ আছি। এই শীটের কোড উইন্ডোতে নিচের কোড লিখুন।
Private Sub Worksheet_Change(ByVal Target As Range) Dim Oldvalue As String Dim Newvalue As String Application.EnableEvents = True On Error GoTo Exitsub If Target.Address = "$D$4" Then If Target.SpecialCells(xlCellTypeAllValidation) Is Nothing Then GoTo Exitsub Else: If Target.Value = "" Then GoTo Exitsub Else Application.EnableEvents = False Newvalue = Target.Value Application.Undo Oldvalue = Target.Value If Oldvalue = "" Then Target.Value = Newvalue Else If InStr(1, Oldvalue, Newvalue) = 0 Then Target.Value = Oldvalue & ", " & Newvalue Else: Target.Value = Oldvalue End If End If End If End If Application.EnableEvents = True Exitsub: Application.EnableEvents = True End Sub

পূর্বের কোডের সাথে পার্থক্য আছে কি! নজদিক থেকে দেখুন, আপনি সামান্য পার্থক্য খুঁজে পাবেন।
এখানে VBA ফাংশন INSTR ব্যবহার করা হয়েছে। INSTR ফাংশন একটি স্ট্রিং-এ সাবস্ট্রিং-এর প্রথম ঘটনার পজিশন রিটার্ন করে। বিস্তারিত জানতে INSTR আর্টিকেল পড়ুন।
InStr(1, Oldvalue, Newvalue) = 0 এই লজিক্যাল অপারেশন দিয়ে চেক করা হয়েছে ভ্যালুটি আগে পাওয়া গিয়েছে কিনা। যদি লজিক্যাল অপারেশন TRUE রিটার্ন করে (আগে পাওয়া যেনি) তবে আইটেমটি সিলেক্ট করার অনুমতি দিয়ে পূর্বের ভ্যালুর সাথে কনক্যাটিনেট করা হয়।
কোড সেভ করুন এবং ইতিমধ্যে সিলেক্ট করা আইটেমটি আবার সিলেক্ট করার চেষ্টা করুন।

এখানে ইতিমধ্যে Pencil সিলেক্ট করা আছে, যদি আবার সেটা সিলেক্ট করতে চাই তবে সেটা অনুমতি দেবে না। ডুপ্লিকেট ভ্যালু অনুমতি দেয় না।
আরও পড়ুন: অন্য একটি শীট থেকে এক্সেলে ড্রপ ডাউন লিস্ট তৈরি
৩. নিউলাইনে (Newline) আইটেম সিলেক্ট করুন
এতক্ষণ আমরা কমা দিয়ে আলাদা করা আইটেমগুলো পেয়েছি। এই সেকশনে সিলেক্ট করা আইটেমগুলো নিউলাইনে সাজাব।
সরলতার জন্য D4 সেলের সাথে কিছু সেল মার্জ করব। এজন্য সিলেক্ট করতে চাইয়ে সেলগুলো সিলেক্ট করুন এবং Home ট্যাবের Alignment সেকশন থেকে Merge & Center ক্লিক করুন।

সেলটির হাইট বাড়ে যাবে।

এখন নিউলাইন দিয়ে আইটেম আলাদা করার কোডটি দেখুন। নিচের কোডটি ব্যবহার করুন
Private Sub Worksheet_Change(ByVal Target As Range) Dim Oldvalue As String Dim Newvalue As String Application.EnableEvents = True On Error GoTo Exitsub If Target.Address = "$D$4" Then If Target.SpecialCells(xlCellTypeAllValidation) Is Nothing Then GoTo Exitsub Else: If Target.Value = "" Then GoTo Exitsub Else Application.EnableEvents = False Newvalue = Target.Value Application.Undo Oldvalue = Target.Value If Oldvalue = "" Then Target.Value = Newvalue Else If InStr(1, Oldvalue, Newvalue) = 0 Then Target.Value = Oldvalue & vbNewLine & Newvalue Else: Target.Value = Oldvalue End If End If End If End If Application.EnableEvents = True Exitsub: Application.EnableEvents = True End Sub

পূর্বের কোড থেকে একমাত্র পার্থক্য হলো এইবার OldValue এবং NewValue-এর মাঝপথে vbNewLine ব্যবহার করা হয়েছে।
vbNewLine আইটেমগুলোর মাঝপথে নিউ লাইন প্রদান করে।
এখন আইটেমগুলো সিলেক্ট করুন।

আমরা Pen সিলেক্ট করেছি যা উপরের ছবিতে দেখাচ্ছে। এখন অন্য এলিমেন্ট সিলেক্ট করুন।

দুটি আইটেম আলাদা লাইনে পাবেন।

এখানে দুটি ভ্যালু রয়েছে, দুটি আলাদা লাইনে। আরেকটি ভ্যালু সিলেক্ট করলে সেটা আরেকটি লাইনে যোগ হবে। প্রতিটি ভ্যালু একটি নতুন লাইনে থাকবে।

নোট করুন, আপনি অন্য কোনো ডিলিমিটার ব্যবহার করতে চাইলে vbNewline-এর বদলে ডাবল কোটেশন মার্কে সেই ডিলিমিটারটি ব্যবহার করুন।
উপসংহার
আজ এই পর্যন্ত। ড্রপ-ডাউন লিস্টে একাধিক সিলেকশন করার বেশ কিছু পদ্ধতি তালিকা করেছি। আশা করি এটি আপনার কাজে আসবে। বুঝতে কোনো সমস্যা হলে কমেন্ট করুন। আমাদের মিস করা অন্য কোনো পদ্ধতি থাকলে জানাতে পারেন।
আরও পড়ুন
- এক্সেলে একাধিক কলামে ড্রপ ডাউন লিস্ট তৈরি (৩ উপায়)
- সেল ভ্যালুকে ড্রপ ডাউন লিস্টের সাথে লিংক করা (৫ উপায়)
- কন্ডিশনাল ড্রপ ডাউন লিস্ট এক্সেলে (তैयারি, সর্ট এবং ব্যবহার)
- ডাইনামিক ডিপেনডেন্ট ড্রপ ডাউন লিস্ট এক্সেলে তৈরি
- IF স্টেটমেন্ট ব্যবহার করে ড্রপ-ডাউন লিস্ট তৈরি
- VLOOKUP ড্রপ ডাউন লিস্টসহ এক্সেলে