এমএস এক্সেলে একাধিক ডিপেনডেন্ট ড্রপ-ডাউন লিস্ট তৈরি করা সবসময় একটি চ্যালেঞ্জ। যখন দুটি ড্রপ-ডাউন লিস্টের মধ্যে নির্ভরতা বা সম্পর্ক থাকে তখন এই ধরনের ড্রপ-ডাউন লিস্ট প্রয়োজন হয়। সাধারণত আমরা এটা ভিন্ন ফর্মুলা বা এক্সেলের উপযুক্ত অপশন পরিবর্তন করে তৈরি করি। কিন্তু এক্সেল ভিবিএ কোড ব্যবহার করে একাধিক ড্রপ-ডাউন লিস্ট তৈরি করার কিছু সহজ উপায় রয়েছে। এই আর্টিকেলে আমি এক্সেলে ভিবিএ কোড ব্যবহার করে একাধিক ড্রপ-ডাউন লিস্ট তৈরির বিভিন্ন পদ্ধতি দেখাব।
আরও পড়ুন: এক্সেলে ড্রপ ডাউন লিস্ট তৈরি করা (স্বাধীন এবং ডিপেনডেন্ট)
এক্সেলে ডিপেনডেন্ট ড্রপ-ডাউন লিস্ট কী?
মূল প্রক্রিয়ায় যাওয়ার আগে জানি এক্সেলে ডিপেনডেন্ট ড্রপ-ডাউন লিস্ট কী। যখন দুটি বা তার অধিক ড্রপ-ডাউন লিস্টের মধ্যে নির্ভরতা থাকে তখন সেগুলোকে এক্সেলে ডিপেনডেন্ট ড্রপ-ডাউন লিস্ট বলা হয়। নিচের ছবিটি ডিপেনডেন্ট ড্রপ-ডাউন লিস্টের স্পষ্ট ধারণা দিচ্ছে।


যেমন এখানে Category এবং Food দুটি সম্পূর্ণ ডিপেনডেন্ট ড্রপ-ডাউন লিস্ট। ক্যাটাগরি সিলেকশনের উপর নির্ভর করে ফুডের লিস্ট ডিফাইন করা হয়েছে। এভাবে একাধিক ক্যাসকেডিং ড্রপ-ডাউন লিস্ট কাজ করে।
আরও পড়ুন: এক্সেলে ডাইনামিক ডিপেনডেন্ট ড্রপ ডাউন লিস্ট তৈরি করা
এক্সেল ভিবিএ দিয়ে একাধিক ডিপেনডেন্ট ড্রপ-ডাউন লিস্ট তৈরির ৩টি পদ্ধতি
১. এক্সেল ভিবিএ দিয়ে ড্রপ-ডাউন লিস্টে একাধিক সিলেকশন করা
ধরুন у нас দুটি লিস্ট রয়েছে: Project Name এবং Project Members। প্রতিটি প্রজেক্টের জন্য এক বা একাধিক মেম্বার ড্রপ-ডাউন লিস্ট দিয়ে অ্যাসাইন করব।

ধাপ ১: Developer ট্যাবে যান এবং Visual Basic খুলেন (শর্টকাট Alt + F11)

ধাপ ২: VBAProject মেনু থেকে সংশ্লিষ্ট ওয়ার্কশিটে যান।
ধাপ ৩: এখন VBA কনসোলে নিচের কোডটি লিখুন

কোড:
Private Sub Worksheet_Change(ByVal Target As Range) Dim Old_value As String Dim New_value As String Application.EnableEvents = True On Error GoTo Exitsub If Not Intersect(Target, Range("C4:C11")) Is Nothing Then If Target.SpecialCells(xlCellTypeAllValidation) Is Nothing Then GoTo Exitsub Else: If Target.Value = "" Then GoTo Exitsub Else Application.EnableEvents = False New_value = Target.Value Application.Undo Old_value = Target.Value If Old_value = "" Then Target.Value = New_value Else If InStr(1, Old_value, New_value) = 0 Then Target.Value = Old_value & ", " & New_value Else: Target.Value = Old_value End If End If End If End If Application.EnableEvents = True Exitsub: Application.EnableEvents = True End Sub ধাপ ৪: এখন Project Member কলামে একাধিক নাম সিলেক্ট করুন

ধাপ ৫: সব সেল থেকে ড্রপ-ডাউন লিস্টে একাধিক সিলেকশন করা যাবে

আরও পড়ুন: এক্সেলে ড্রপ ডাউন লিস্ট থেকে একাধিক সিলেকশন করা
২. এক্সেল ভিবিএ দিয়ে একাধিক ডিপেনডেন্ট ড্রপ-ডাউন লিস্ট তৈরি
ধরুন ভিন্ন ক্যাটাগরির ফুড ডেটাসেট রয়েছে যেমন সবজি, ফল, এবং ডেয়রি প্রোডাক্ট। এখন ক্যাটাগরির অনুযায়ী ফুড আইটেম সার্চ করব। যদি ক্যাটাগরি হিসেবে Fruits বেছে নেওয়া হয় তবে Food কলামে উপলব্ধ আইটেমগুলো হবে Raspberry, Apricot, Peach, Mango। সুতরাং ফুড আইটেমগুলো ক্যাটাগরির উপর নির্ভর করবে। Category এবং Food-এর মধ্যে নির্ভরতা রয়েছে।

ধাপ ১: পদ্ধতি ১-এর ধাপ ১ এবং ধাপ ২ ফলো করে VBA কনসোল খুলুন এবং নিচের কোড লিখুন

কোড:
সবজি ড্রপ-ডাউন লিস্ট তৈরি করার জন্য:
Sub Vegetable_List() Range("C4:C6").Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _ Formula1:="=Vegetable_List" End Sub ফল ড্রপ-ডাউন লিস্ট তৈরি করার জন্য:
Sub Fruit_List() Range("C4:C6").Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _ Formula1:="=Fruits_list" End Sub ডেয়রি প্রোডাক্ট ড্রপ-ডাউন লিস্ট তৈরি করার জন্য:
Sub Dairy_List() Range("C4:C6").Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _ Formula1:="=Dairy_Product_List" End Sub এই অংশে আমরা প্রতিটি ফুড আইটেমের আলাদা লিস্ট তৈরি করছি এবং সেগুলো C4:C6 রেঞ্জে ড্রপ-ডাউন লিস্ট হিসেবে সেভ করছি।
ধাপ ২: এখন B4:B6 রেঞ্জের জন্য মূল ফাংশন লিখতে হবে

কোড:
Private Sub Worksheet_Change(ByVal Target As Range) Range("B4:B6").Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _ Formula1:="Vegetable_List,Fruits_list,Dairy_Product_List" If Range("B4:B6").Value = "Vegetable_List" Then Call Vegetable_List ElseIf Range("B4:B6").Value = "Fruits_list" Then Call Fruit_List ElseIf Range("B4:B6").Value = "Dairy_Product_List" Then Call Dairy_List Else End If কোড ব্যাখ্যা
- এখানে B4:B6 রেঞ্জের জন্য একটি আরো লিস্ট তৈরি করা হচ্ছে ক্যাটাগরির নামে, যেটে ফুড ক্যাটাগরির নামগুলো থাকবে।
- তারপর লিস্টের ভ্যালু এবং ক্যাটাগরি চেক করে IF ELSE স্টেটমেন্ট দিয়ে বিভক্ত করা হচ্ছে।
- যদি কোনো মিল পাওয়া যায়, তবে CallBack মেথড দিয়ে লিস্ট তৈরির ফাংশন কল করা হচ্ছে। যেমন
If Range(“B4:B6”).Value = “Vegetable_List” Then
Call Vegetable_List
- যদি সেলের ভ্যালু Vegetable_List টেক্সটের সাথে মিলে যায়, তবে Vegetable_List ফাংশন কল করব সাবজি লিস্ট তৈরি ও দেখানোর জন্য।
সুতরাং আমাদের পুরো কোডটি হবে এইরকম:

ধাপ ৩: এখন ওয়ার্কশিটে যাইয়ে ড্রপ-ডাউন লিস্ট থেকে যেকোনো ক্যাটাগরি সিলেক্ট করুন

ধাপ ৪: তারপর Food কলামে সংশ্লিষ্ট আইটেমগুলো উপলব্ধ হবে

ধাপ ৫: ফাইনাল আউটপুট নিচের মতো হবে:

৩. এক্সেল ভিবিএ দিয়ে একাধিক ডিপেনডেন্ট ড্রপ-ডাউন লিস্ট ক্লিয়ার করা
পূর্বের সেকশনে আমরা শুধু দেখেছি কিভাবে এক্সেলে মিলে যাওয়া লিস্ট পাওয়া যায়। কিন্তু কখনো কখনো মিসম্যাচ সিলেকশন হতে পারে যা অটোমেটিক্যালি রিমুভ হবে না। এটা প্রতিরোধে ফর্মুলা ব্যবহার করা যায়।
অন্য একটি অপশন হলো ম্যাক্রো ব্যবহার করা, প্রথম ড্রপডাউনে সিলেক্ট করার পর ডিপেনডেন্ট সেল ক্লিয়ার করলে মিসম্যাচ সিলেকশন রুকবে।

ধাপ ১: পদ্ধতি ১-এর ধাপ ১ এবং ধাপ ২ ফলো করে VBA কনসোল খুলুন এবং নিচের কোড লিখুন

কোড:
Private Sub Worksheet_Change(ByVal Target As Range) On Error Resume Next If Target.Column = 2 Then If Target.Validation.Type = 3 Then Application.EnableEvents = False Target.Offset(0, 1).ClearContents End If End If exitHandler: Application.EnableEvents = True Exit Sub End Sub ধাপ ২: এখন Food কলাম থেকে যেকোনো আইটেম সিলেক্ট করুন এবং Category-এ서 ভিন্ন ক্যাটাগরি সিলেক্ট করে দেখুন কী হয়
প্রথম

দ্বিতীয়

ফাইনাল আউটপুট

আরও পড়ুন: এক্সেলে ড্রপ-ডাউন লিস্ট রিমুভ করা
মনে রাখবেন
| সাধারণ এরর | কখন দেখায় |
|---|---|
| Unable to delete List | Data Validation-এ যদি Allow List-এ সমান না হয় এবং Source সঠিক সিলেক্ট না হয় তবে ড্রপ-ডাউন লিস্ট ডিলিট করা যাবে না, অথবা ভিবিএ কোড দিয়ে লিস্ট ডিলিট করতে হবে। |
| Update value problem | সাধারণত ডিপেনডেন্ট ড্রপ-ডাউন লিস্টে যদি কোনো মিসম্যাচ ভ্যালু থাকে, তবে সেটা অটোমেটিক আপডেট হয় না। আমরা বা ফর্মুলা বা ভিবিএ কোড (এই আর্টিকেলের পদ্ধতি ৩) ব্যবহার করতে পারি ভ্যালু অটোমেটিক আপডেট করার জন্য। |
উপসংহার
এই হলো এক্সেল ভিবিএ দিয়ে একাধিক ডিপেনডেন্ট ড্রপ-ডাউন লিস্ট তৈরি বা ম্যানিপুলেট করার কিছু পদ্ধতি। আমি সব পদ্ধতিকে তাদের উদাহরণসহ দেখিয়েছি কিন্তু আরও অনেক ইটারেশন হতে পারে। ব্যবহৃত ফাংশনগুলোর মৌলিক বিষয়ও আলোচনা করেছি। আপনার অন্য কোনো পদ্ধতি থাকলে আমাদের সাথে শেয়ার করতে পারেন।
আরও পড়ুন
- এক্সেলে একাধিক কলামে ড্রপ ডাউন লিস্ট তৈরি (৩ উপায়)
- সিলেকশনের উপর নির্ভরশীল এক্সেল ড্রপ ডাউন লিস্ট
- IF স্টেটমেন্ট ব্যবহার করে এক্সেলে ড্রপ-ডাউন লিস্ট তৈরি
- অন্য একটি শীট থেকে ড্রপ ডাউন লিস্ট তৈরি (২ পদ্ধতি)
- এক্সেলে ড্রপ-ডাউন লিস্ট এডিট করা (৪ বেসিক পদ্ধতি)
- এক্সেলে VLOOKUP ড্রপ ডাউন লিস্টসহ