এক্সেলের অটোফিল্টার ফিচার নির্দিষ্ট শর্ত অনুযায়ী ডেটা বের করার জন্য খুবই কার্যকর। VBA প্রয়োগ এক্সেলে যেকোনো অপারেশন চালানোর সবচেয়ে কার্যকর, দ্রুত এবং নিরাপদ পদ্ধতি। এই আর্টিকেলে, আমরা আপনাকে VBA ম্যাক্রো ব্যবহার করে এক্সেলে একই ফিল্ড (কলাম)-এ মাল্টিপল ক্রাইটেরিয়া দিয়ে অটোফিল্টার করার ৪টি পদ্ধতি দেখাব।
আপনি এখান থেকে ফ্রি প্র্যাকটিস এক্সেল ওয়ার্কবুক ডাউনলোড করতে পারেন।
এই অংশ অনুসরণ করলে, আপনি শিখবেন এক্সেলে VBA দিয়ে একই কলামে একাধিক টেক্সট ও সংখ্যাসূচক মান, AND অপারেটর এবং OR অপারেটর দিয়ে অটোফিল্টার করার ৪টি ভিন্ন ক্রাইটেরিয়া।
নিচের ডেটাসেট বিবেচনা করুন। কলাম B-তে কিছু র্যান্ডম নাম্বার রয়েছে, در عوض কলাম D-তে শুধু বিজোড় সংখ্যা রয়েছে। আমরা এখানে যা করব, সেটি হলো কলাম D-তে থাকা ক্রাইটেরিয়ার ভিত্তিক কলাম B ফিল্টার করা; অর্থাৎ, র্যান্ডম নাম্বার (কলাম B) বিজোড় সংখ্যা দিয়ে ফিল্টার হবে যাতে কলাম D-তে থাকা সংখ্যাগুলো অন্তর্ভুক্ত এবং তাদের মাঝপথের সংখ্যাগুলো থাকে।
এখন দেখি এক্সেলে VBA দিয়ে এটা কীভাবে করতে হয়।
ধাপসমূহ:
- শুরুতে, আপনার কীবোর্ডে Alt + F11 চাপুন অথবা ডেভেলপার -> ভিজ্যুয়াল বেসিক ট্যাবে যান ভিজ্যুয়াল বেসিক এডিটর খোলার জন্য।
- এরপর, পপ-আপ কোড উইন্ডোতে, মেনু বার থেকে, ইনসার্ট -> মডিউল ক্লিক করুন।
- তারপর, নিচের কোডটি কপি করে কোড উইন্ডোতে পেস্ট করুন।
Sub AutoFilterWithMultipleCriteriaOnSameColumn() Dim iArray As Variant With ThisWorkbook.Worksheets("Column") iArray = Split(Join(Application.Transpose(.Range(.Cells(5, 4), .Cells(.Range("D:D").Find(What:="*", LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row, 4)).Value))) .Range("B4").AutoFilter Field:=1, Criteria1:=iArray, Operator:=xlFilterValues End With End Sub
আপনার কোড এখন রান করার জন্য প্রস্তুত।
- এখন, আপনার কীবোর্ডে F5 চাপুন অথবা মেনু বার থেকে Run -> Run Sub/UserForm নির্বাচন করুন। আপনি সাব-মেনু বারের ছোট Run আইকন-এ ক্লিক করেও ম্যাক্রো রান করতে পারেন।
সফল কোড এক্সিকিউশনের পর, ফলাফল চেক করার জন্য নিচের ছবিটি দেখুন।
উপরের ছবি থেকে দেখা যাচ্ছে, কলাম B এখন শুধু বিজোড় সংখ্যা দিয়ে ফিল্টার করা হয়েছে।
আপনি একই কোড ব্যবহার করে জোড় সংখ্যা ভিত্তিকেও ফিল্টার করতে পারেন। সেক্ষেত্রে, আপনাকে বদলে জোড় সংখ্যা অন্য একটি কলামে সংরক্ষণ করতে হবে।
VBA কোড ব্যাখ্যা
Dim iArray As Variant
অ্যারে-র জন্য ভেরিয়েবল ডিফাইন করা হয়েছে।
With ThisWorkbook.Worksheets("Column")
আমাদের ডেটাসেটের জন্য ওয়ার্কশিটের নাম ডিক্লেয়ার করা হয়েছে ("Column" আমাদের ডেটাসেটের শিটের নাম)। আপনাকে আপনার ডেটাসেট অনুযায়ী শিটের নাম লিখতে হবে।
iArray = Split(Join(Application.Transpose(.Range(.Cells(5, 4), .Cells(.Range("D:D").Find(What:="*", LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row, 4)).Value)))
ডিফাইন করা অ্যারে-টিকে সেল D5-থেকে শুরু হয়ে কলাম D-তে সংরক্ষিত ক্রাইটেরিয়া দিয়ে পূরণ করা হয়েছে।
.Range("B4").AutoFilter Field:=1, Criteria1:=iArray, Operator:=xlFilterValues End With
- কলাম B ফিল্টার করা হয়েছে সেল B4-থেকে শুরু হয়ে ডিফাইন করা অ্যারে-তে সংরক্ষিত মাল্টিপল ক্রাইটেরিয়া অনুযায়ী।
- তারপর, ওয়ার্কশিট ছেড়ে দেওয়া হয়েছে।
এক্সেলে xlAND অপারেটর দুটি ক্রাইটেরিয়ার সাথে কাজ করে। এটি সেই মানগুলো ফেরত দেয় যা দুই ক্রাইটেরিয়া ও পূরণ করে।
এখন, নিচের ডেটাসেট বিবেচনা করুন। কলাম B-তে র্যান্ডম নাম্বার রয়েছে, এবং আমরা D4:E5 রেঞ্জে দুটি শর্ত দিয়েছি। শর্তগুলো হলো কলাম B কে ফিল্টার করতে হবে সেই সংখ্যাগুলো দিয়ে যেগুলো ২-এর চেয়ে বড় বা সমান (মান সংরক্ষিত সেল E4-এ) এবং ৯-এর চেয়ে ছোট বা সমান (মান সংরক্ষিত সেল E5-এ)। আমরা এক্সেল VBA-তে AND অপারেটর দিয়ে কলাম B ফিল্টার করব।
এটি পাওয়ার ধাপগুলো নিচে দেওয়া হলো।
ধাপসমূহ:
- পূর্বের মতো, ডেভেলপার ট্যাব থেকে ভিজ্যুয়াল বেসিক এডিটর খুলুন এবং কোড উইন্ডোতে একটি মডিউল ইনসার্ট করুন।
- তারপর, নিচের কোডটি কপি করে কোড উইন্ডোতে পেস্ট করুন।
Sub AutoFilterOnSameColumnWithAND() With ThisWorkbook.Worksheets("AND") .Range("B4").AutoFilter Field:=1, Criteria1:=">=" & .Range("E4").Value, Operator:=xlAnd, Criteria2:="<=" & .Range("E5").Value End With End Sub
আপনার কোড এখন রান করার জন্য প্রস্তুত।
- এরপর, Run করুন ম্যাক্রোটি উপরের সেকশনে দেখানো মতো। ফলাফল নিচের ছবিতে দেখানো হয়েছে।
সফল কোড এক্সিকিউশনের পর, কলাম B ২ থেকে ৯ পর্যন্ত মান দিয়ে ফিল্টার করা হয়েছে, যেগুলো দুটি শর্ত ও পূরণ করে।
VBA কোড ব্যাখ্যা
With ThisWorkbook.Worksheets("AND") .Range("B4").AutoFilter Field:=1, Criteria1:=">=" & .Range("E4").Value, Operator:=xlAnd, Criteria2:="<=" & .Range("E5").Value End With
এই কোডটুকু,
- প্রথমে আমরা যে ওয়ার্কশিট-এর সাথে কাজ করব তার নাম ডিক্লেয়ার করে ("AND" আমাদের ডেটাসেটের শিটের নাম)। আপনাকে আপনার ডেটাসেট অনুযায়ী শিটের নাম লিখতে হবে।
- তারপর, সেল E4 এবং E5-এ সংরক্ষিত মাল্টিপল ক্রাইটেরিয়া এবং xlAnd অপারেটর অনুযায়ী সেল B4-থেকে শুরু হয়ে কলাম B ফিল্টার করা হয়েছে।
- তারপর, ওয়ার্কশিট ছেড়ে দেওয়া হয়েছে।
এক্সেলে xlOR অপারেটর দুটি ক্রাইটেরিয়ার সাথে কাজ করে। xlAND-এর বিপরীতে, এটি সেই মানগুলো ফেরত দেয় যা যেকোনো একটি ক্রাইটেরিয়া পূরণ করে।
এখন, নিচের ডেটাসেট বিবেচনা করুন। কলাম B-তে র্যান্ডম নাম্বার রয়েছে, এবং আমরা D4:E5 রেঞ্জে দুটি শর্ত দিয়েছি। শর্তগুলো হলো কলাম B কে ফিল্টার করতে হবে সেই সংখ্যাগুলো দিয়ে যেগুলো ১২-এর চেয়ে বড় বা সমান (মান সংরক্ষিত সেল E4-এ) অথবা ৭-এর চেয়ে ছোট বা সমান (মান সংরক্ষিত সেল E5-এ)। আমরা এক্সেল VBA-তে OR অপারেটর দিয়ে কলাম B ফিল্টার করব।
চলুন দেখি এটা কীভাবে করতে হয়।
ধাপসমূহ:
- পূর্বে দেখানো মতো, ডেভেলপার ট্যাব থেকে ভিজ্যুয়াল বেসিক এডিটর খুলুন এবং কোড উইন্ডোতে একটি মডিউল ইনসার্ট করুন।
- তারপর, নিচের কোডটি কপি করে কোড উইন্ডোতে পেস্ট করুন।
Sub AutoFilterOnSameColumnWithOR() With ThisWorkbook.Worksheets("OR") .Range("B4").AutoFilter Field:=1, Criteria1:="<" & .Range("E5").Value, Operator:=xlOr, Criteria2:=">" & .Range("E4").Value End With End Sub
আপনার কোড এখন রান করার জন্য প্রস্তুত।
- পরে, Run করুন ম্যাক্রোটি এবং আউটপুট দেখতে নিচের ছবিটি দেখুন।
সফল কোড এক্সিকিউশনের পর, কলাম B সেই মানগুলোর সাথে ফিল্টার করা হয়েছে যেগুলো ১২-এর চেয়ে বড় বা সমান অথবা ৭-এর চেয়ে ছোট বা সমান।
VBA কোড ব্যাখ্যা
With ThisWorkbook.Worksheets("OR") .Range("B4").AutoFilter Field:=1, Criteria1:="<" & .Range("E5").Value, Operator:=xlOr, Criteria2:=">" & .Range("E4").Value End With
এই কোডটুকু,
- প্রথমে আমরা যে ওয়ার্কশিট-এর সাথে কাজ করব তার নাম ডিক্লেয়ার করে ("OR" আমাদের ডেটাসেটের শিটের নাম)। আপনাকে আপনার ডেটাসেট অনুযায়ী শিটের নাম লিখতে হবে।
- তারপর, সেল E4 এবং E5-এ সংরক্ষিত মাল্টিপল ক্রাইটেরিয়া এবং xlOr অপারেটর অনুযায়ী সেল B4-থেকে শুরু হয়ে কলাম B ফিল্টার করা হয়েছে।
- তারপর, ওয়ার্কশিট ছেড়ে দেওয়া হয়েছে।
নিচের ডেটাসেটটি দেখুন। কলাম B-তে দেশের নাম রয়েছে। আমরা এই কলামটি ফিল্টার করব ম্যাক্রোতে হার্ডকোড করা দেশের নাম অনুযায়ী। আমরা কলামটি অটোফিল্টার করব দুটি দেশের নাম, অস্ট্রেলিয়া এবং ইংল্যান্ড ভিত্তিক করে।
এটি এক্সিকিউট করার ধাপগুলো নিচে দেওয়া হলো।
ধাপসমূহ:
- প্রথমে, ডেভেলপার ট্যাব থেকে ভিজ্যুয়াল বেসিক এডিটর খুলুন এবং কোড উইন্ডোতে একটি মডিউল ইনসার্ট করুন।
- তারপর, নিচের কোডটি কপি করে কোড উইন্ডোতে পেস্ট করুন।
Sub AutoFilterOnSameColumnWithMultipleTexts() Dim iArray As Variant iArray = Array("Australia", "England") Range("B4", Range("B" & Rows.Count).End(xlUp)).AutoFilter 1, iArray, xlFilterValues, , 0 End Sub
আপনার কোড এখন রান করার জন্য প্রস্তুত।
- এরপর, Run করুন ম্যাক্রোটি। এখন, ফলাফল দেখতে নিচের ছবিটি দেখুন।
ফলস্বরূপ, কলাম B যেটি অনেক দেশের নাম দিয়ে পূরিত ছিল, এখন কোডে দেওয়া দুটি দেশের নাম - অস্ট্রেলিয়া এবং ইংল্যান্ড - দিয়ে শুধু ফিল্টার করা হয়েছে।
VBA কোড ব্যাখ্যা
Dim iArray As Variant
অ্যারে-র জন্য ভেরিয়েবল ডিফাইন করা হয়েছে।
iArray = Array("Australia", "England")
ডিফাইন করা অ্যারে-তে ফিল্টারিং-এর ভিত্তিতে টেক্সট ক্রাইটেরিয়া সংরক্ষণ করা হয়েছে।
Range("B4", Range("B" & Rows.Count).End(xlUp)).AutoFilter 1, iArray, xlFilterValues, , 0
কলাম B ফিল্টার করা হয়েছে সেল B4-থেকে শুরু হয়ে ডিফাইন করা অ্যারে-তে হার্ডকোড করা মাল্টিপল টেক্সট ক্রাইটেরিয়া অনুযায়ী।
চূড়ান্তভাবে, এই আর্টিকেলে আপনাকে VBA ম্যাক্রো দিয়ে এক্সেলে একই ফিল্ড (কলাম)-এ মাল্টিপল ক্রাইটেরিয়া দিয়ে অটোফিল্টার করার ৪টি পদ্ধতি দেখানো হয়েছে। আশা করি এই আর্টিকেলটি আপনার জন্য খুব উপকারী হবে। বিষয়টি নিয়ে যেকোনো প্রশ্ন থাকলে বাধা না মনে করুন।
- VBA অটোফিল্টার: স্মলেস্ট টু লার্জেস্ট সর্ট (৩টি পদ্ধতি)
- এক্সেল VBA: অটোফিল্টার রিমুভ যদি অস্তিত্বে থাকে (৭টি উদাহরণ)