কম্পিউটার টিউটোরিয়াল

VBA দক্ষতা: এক্সেল শিটের মধ্যে ফিল্টার করা ডেটা দ্রুত ও নিরাপদে কপি করুন

যখন আমরা একাধিক এক্সেল শিটের সাথে কাজ করি, কখনো কখনো আমাদের কিছু শর্ত মেনে একটি স্প্রেডশিট থেকে অন্য স্প্রেডশিটে ডেটা কপি করতে হয় ভালো পঠনযোগ্যতার জন্য। VBA বাস্তবায়ন এক্সেলে যেকোনো অপারেশন চালানোর সবচেয়ে কার্যকর, দ্রুততম এবং নিরাপদ পদ্ধতি। এই নিবন্ধে আমরা দেখাব কিভাবে এডভান্সড ফিল্টারের সাথে VBA ম্যাক্রো ব্যবহার করে অন্য শিটে ডেটা কপি করা যায়।

ওয়ার্কবুক ডাউনলোড করুন

আপনি এখান থেকে ফ্রি অনুশীলন এক্সেল ওয়ার্কবুক ডাউনলোড করতে পারেন।

VBA দিয়ে এডভান্সড ফিল্টার সহ অন্য শিটে ডেটা কপির ৩টি পদ্ধতি

নিচের ডেটাসেটটি দেখুন। একটি এক্সেল ওয়ার্কশিট আছে নাম Original। এই শিটে B4 থেকে E12 রেঞ্জে কিছু ডেটা রয়েছে। সেই রেঞ্জে ডুপ্লিকেট মানও আছে। রেঞ্জ G4 থেকে H5-এ ক্রাইটেরিয়া রয়েছে। আমরা যা করতে চাই, সেটি হলো B5:E12 রেঞ্জ থেকে ডেটা কপি করা, যখন Name কলাম থেকে John-এর Marks ৮০-এর কম (ক্রাইটেরিয়া G4:H5 সেলে) এবং সেই নির্দিষ্ট ডেটা এডভান্সড ফিল্টারের মাধ্যমে এক্সেলে তিনটি ভিন্ন পদ্ধতিতে অন্য শিটে পেস্ট করা।

VBA দক্ষতা: এক্সেল শিটের মধ্যে ফিল্টার করা ডেটা দ্রুত ও নিরাপদে কপি করুন

আমরা দেখব কীভাবে হার্ডকোডেড ম্যাক্রো দিয়ে ডেটা কপি করতে হয়, কীভাবে সিলেকশন দিয়ে এডভান্সড ফিল্টার করতে হয় এবং কীভাবে ম্যাক্রো রেকর্ডিং দিয়ে এক শিট থেকে অন্য শিটে ডেটা ট্রান্সফার করতে হয়। এবং উপরের ডেটাসেটটি উल्लিখিত সব পদ্ধতির উদাহরণ হবে।

১. VBA কোড এম্বেড করুন অন্য শিটে এডভান্সড ফিল্টার সহ ডেটা কপি করার জন্য

এখানে আপনি শিখবেন VBA কোড যা Original শিট- থেকে শুধু ডেটা কপি করবে যখন John-এর Marks ৮০-এর কম অন্য একটি শিট যেটির নাম Target এডভান্সড ফিল্টারের মাধ্যমে।

ধাপসমূহ:

  • শুরুতে, আপনার কীবোর্ডে Alt + F11 চাপুন অথবা Developer -> Visual Basic ট্যাবে যান Visual Basic Editor খোলার জন্য।

VBA দক্ষতা: এক্সেল শিটের মধ্যে ফিল্টার করা ডেটা দ্রুত ও নিরাপদে কপি করুন

  • এরপর, পপ-আপ কোড উইন্ডোতে, মেনু বার থেকে, Insert -> Module-এ ক্লিক করুন।

VBA দক্ষতা: এক্সেল শিটের মধ্যে ফিল্টার করা ডেটা দ্রুত ও নিরাপদে কপি করুন

  • তারপর, নিচের কোডটি কপি করে কোড উইন্ডোতে পেস্ট করুন।
Sub AdvancedFilterCode() Dim iRange As Range Dim iCriteria As Range 'set the range to filter and the criteria range Set iRange = Sheets("Original").Range("B4:E12") Set iCriteria = Sheets("Original").Range("G4:H5") 'copy the filtered data to the destination iRange.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=iCriteria, CopyToRange:=Sheets("Target").Range("B4:E4"), Unique:=True End Sub

আপনার কোড এখন রান করার জন্য প্রস্তুত।

VBA দক্ষতা: এক্সেল শিটের মধ্যে ফিল্টার করা ডেটা দ্রুত ও নিরাপদে কপি করুন

  • এখন আপনার কীবোর্ডে F5 চাপুন অথবা মেনু বার থেকে Run -> Run Sub/UserForm সিলেক্ট করুন। আপনি সাব-মেনু বার ছোট Run আইকন-এ ক্লিক করেও ম্যাক্রো রান করতে পারেন।

VBA দক্ষতা: এক্সেল শিটের মধ্যে ফিল্টার করা ডেটা দ্রুত ও নিরাপদে কপি করুন

কোড এক্সিকিউশনের পর, নিচের ছবি দেখে ফলাফল জানুন।

VBA দক্ষতা: এক্সেল শিটের মধ্যে ফিল্টার করা ডেটা দ্রুত ও নিরাপদে কপি করুন

ফলস্বরূপ, শুধু সে ডেটা যেখানে John-এর Marks ৮০-এর কম সেটি VBA-র Advanced Filter দিয়ে Original শিট- থেকে Target শিট-এ কপি হয়েছে।

আরও পড়ুন: এক্সেলে এডভান্সড ফিল্টার ব্যবহার করে অন্য শিটে ডেটা কপি করা

২. ব্যবহারকারী-নির্দিষ্ট সিলেকশন দিয়ে ডেটা ফিল্টার করতে VBA ম্যাক্রো বাস্তবায়ন

এখন, আপনি শিখবেন কীভাবে Original শিট- থেকে শুধু ডেটা ফিল্টার করতে হয় যখন John-এর Marks ৮০-এর কম অন্য একটি শিট যেটির নাম Destination ব্যবহারকারী-নির্বাচিত রেঞ্জ থেকে VBA-র এডভান্সড ফিল্টারের মাধ্যমে।

ধাপসমূহ:

  • আগের মতো Developer ট্যাব থেকে Visual Basic Editor খুলুন এবং কোড উইন্ডোতে Insert একটি Module করুন।
  • তারপর, কোড উইন্ডোতে, নিচের কোডটি কপি করে পেস্ট করুন।
Sub AdvancedFilterBySelection() Dim iTrgt As String Dim iRange As Range Dim iCriteria As Range Dim iDestination As Range On Error Resume Next iTrgt = ActiveWindow.RangeSelection.Address Set iRange = Application.InputBox("Select Range to Filter", "Excel", iTrgt, , , , , 8) If iRange Is Nothing Then Exit Sub Set iCriteria = Application.InputBox("Select Criteria Range", "Excel", "", , , , , 8) If iCriteria Is Nothing Then Exit Sub Set iDestination = Application.InputBox("Select Destination Range", "Excel", "", , , , , 8) If iDestination Is Nothing Then Exit Sub iRange.AdvancedFilter xlFilterCopy, iCriteria, iDestination, False iDestination.Worksheet.Activate iDestination.Worksheet.Columns.AutoFit End Sub

আপনার কোড এখন রান করার জন্য প্রস্তুত।

VBA দক্ষতা: এক্সেল শিটের মধ্যে ফিল্টার করা ডেটা দ্রুত ও নিরাপদে কপি করুন

  • এখন Run করুন ম্যাক্রো।
  • তবে একটি পপ-আপ বক্স আসবে। সেই রেঞ্জটি সিলেক্ট করুন যা আপনি ফিল্টার করতে চান (আমাদের কেসে, সেটি রেঞ্জ B4 থেকে E12-এ)।
  • পরবর্তীতে, OK চাপুন।

VBA দক্ষতা: এক্সেল শিটের মধ্যে ফিল্টার করা ডেটা দ্রুত ও নিরাপদে কপি করুন

  • পরবর্তীতে, আরেকটি পপ-আপ বক্স আসবে। এইবার আপনাকে আপনার ডেটাসেটে সংরক্ষিত ক্রাইটেরিয়া রেঞ্জটি সিলেক্ট করতে হবে (আমাদের ডেটাসেটের জন্য G4 থেকে H5 সেল থেকে ক্রাইটেরিয়া রেঞ্জ)।
  • আরেকবার, OK চাপুন।

VBA দক্ষতা: এক্সেল শিটের মধ্যে ফিল্টার করা ডেটা দ্রুত ও নিরাপদে কপি করুন

  • শেষবার, আরেকটি পপ-আপ বক্স আসবে। এবং এখন, আপনাকে ডেস্টিনেশন রেঞ্জটি সিলেক্ট করতে হবে যেখানে আপনি কপি করা ডেটা সংরক্ষণ করতে চান। আমাদের কেসে, সেটি Destination শিট-এ B2 সেল।
  • তারপর, OK চাপুন।

VBA দক্ষতা: এক্সেল শিটের মধ্যে ফিল্টার করা ডেটা দ্রুত ও নিরাপদে কপি করুন

ফলাফল দেখতে নিচের ছবি দেখুন।

VBA দক্ষতা: এক্সেল শিটের মধ্যে ফিল্টার করা ডেটা দ্রুত ও নিরাপদে কপি করুন

চূড়ান্তভাবে, শুধু সে ডেটা যেখানে John-এর Marks ৮০-এর কম সেটি VBA-র Advanced Filter দিয়ে Original শিট- থেকে Destination শিট-এ কপি হয়েছে।

সম্পর্কিত বিষয়: এক্সেল এডভান্সড ফিল্টার কাজ না করলে (২ কারণ ও সমাধান)

সদৃশ পাঠ্য

  • এক্সেলে যদি ক্রাইটেরিয়া রেঞ্জে টেক্সট থাকে তবে এডভান্সড ফিল্টার কীভাবে ব্যবহার করবেন
  • ডাইনামিক এডভান্সড ফিল্টার এক্সেল (VBA ও ম্যাক্রো)
  • ক্রাইটেরিয়া রেঞ্জসহ এক্সেল এডভান্সড ফিল্টার (১৮ অ্যাপ্লিকেশন)
  • এক্সেলে একাধিক ক্রাইটেরিয়ারসহ এডভান্সড ফিল্টার (১৫ উপযুক্ত উদাহরণ)
  • ক্রাইটেরিয়ারসহ এক্সেল VBA উদাহরণ: এডভান্সড ফিল্টার ব্যবহার (৬ ক্রাইটেরিয়া)

৩. এক্সেলে ম্যাক্রো রেকর্ডিং দিয়ে অন্য শিটে ডেটা কপি করতে VBA ম্যাক্রো প্রয়োগ

এই বিভাগে, আপনি একই সমস্যা সমাধানের সমাধান পাবেন Original শিট- থেকে শুধু ডেটা এক্সট্র্যাক্ট করার, যখন John-এর Marks ৮০-এর কম অন্য একটি শিট যেটির নাম Filtered VBA-র ম্যাক্রো রেকর্ডিং দিয়ে।

ধাপসমূহ:

  • প্রথমে, একটি নতুন ওয়ার্কশিট খুলুন (আমাদের কেসে, সেটি শিট Filtered)।
  • সেই শিটে, মূল ডেটাসেটের শুধু হেডার সারি সংরক্ষণ করুন।

VBA দক্ষতা: এক্সেল শিটের মধ্যে ফিল্টার করা ডেটা দ্রুত ও নিরাপদে কপি করুন

  • এরপর, Original শিট-এ যান। আপনি শিটের বাম নিচে একটি ছোট ম্যাক্রো সাইন দেখবেন। সাইনটি ক্লিক করুন ম্যাক্রো রেকর্ডিং শুরু করতে।

VBA দক্ষতা: এক্সেল শিটের মধ্যে ফিল্টার করা ডেটা দ্রুত ও নিরাপদে কপি করুন

  • তবে একটি Record Macro পপ-আপ উইন্ডো আসবে। আপনি যা চান এমন একটি Macro name দিন। আমরা AdvancedFilter আমাদের Macro name হিসেবে ডিফাইন করলাম।
  • এরপর, আপনি কোথায় ম্যাক্রো সংরক্ষণ করতে চান সেটি সিলেক্ট করুন। আমরা এক্সিস্টিং ওয়ার্কবুকে সংরক্ষণ করতে চেয়েছিলাম, তাই This Workbook সিলেক্ট করলাম।
  • পরে, OK চাপুন।

VBA দক্ষতা: এক্সেল শিটের মধ্যে ফিল্টার করা ডেটা দ্রুত ও নিরাপদে কপি করুন

  • এখন, আবার Original শিট-এ যান এবং আপনি লক্ষ্য করবেন যে আপনি যা ম্যাক্রো শুরু করলেন সেটি রেকর্ডিং শুরু করেছে।

VBA দক্ষতা: এক্সেল শিটের মধ্যে ফিল্টার করা ডেটা দ্রুত ও নিরাপদে কপি করুন

  • তারপর, আপনাকে সেই শিট-এ যেতে হবে যেটি কপি করা ডেটা ধারণ করবে (যেমন Filtered শিট)।
  • সেই শিটে একটি এক্টিভ সেল রেখে Data -> Advanced-এ যান।

VBA দক্ষতা: এক্সেল শিটের মধ্যে ফিল্টার করা ডেটা দ্রুত ও নিরাপদে কপি করুন

  • এরপর, একটি Advanced Filter পপ-আপ বক্স আসবে।
  • প্রথমে, Action থেকে Copy to another location অপশনটি চেক করুন।
  • এখন, List range-এর পাশের টেক্সট বক্সে, Original শিট-এ যান এবং ফিল্টার করার রেঞ্জটি সিলেক্ট করুন (আমাদের ডেটাসেটের জন্য, রেঞ্জ হলো B4:E12)।

VBA দক্ষতা: এক্সেল শিটের মধ্যে ফিল্টার করা ডেটা দ্রুত ও নিরাপদে কপি করুন

  • তারপর, Criteria range-এর পাশের টেক্সট বক্সে, Original শিট-এ সংরক্ষিত ক্রাইটেরিয়া রেঞ্জ সিলেক্ট করুন (John-এর Marks ৮০-এর কম) (আমাদের ডেটাসেটের জন্য, রেঞ্জ হলো G4:H5)।

VBA দক্ষতা: এক্সেল শিটের মধ্যে ফিল্টার করা ডেটা দ্রুত ও নিরাপদে কপি করুন

  • এখন, Copy to-এর পাশের টেক্সট বক্সে, Filtered শিট-এ যান, শিট যেখানে আপনি কপি করা ডেটা সংরক্ষণ করতে চান এবং হেডার রেঞ্জটি সিলেক্ট করুন (আমাদের ডেটাসেটের জন্য, রেঞ্জ হলো B4:E4)।
  • শেষে, OK চাপুন।

VBA দক্ষতা: এক্সেল শিটের মধ্যে ফিল্টার করা ডেটা দ্রুত ও নিরাপদে কপি করুন

এই পুরো প্রক্রিয়া থেকে ফলাফল দেখতে নিচের ছবি দেখুন। শুধু সে ডেটা যেখানে John-এর Marks ৮০-এর কম সেটি ম্যাক্রো রেকর্ডিং দিয়ে Original শিট- থেকে Filtered শিট-এ কপি হয়েছে।

VBA দক্ষতা: এক্সেল শিটের মধ্যে ফিল্টার করা ডেটা দ্রুত ও নিরাপদে কপি করুন

  • এখন, শিটের বাম নিচে ম্যাক্রো সাইন-এ ক্লিক করুন ম্যাক্রো রেকর্ডিং বন্ধ করতে। এখন আপনার কাছে একটি রেকর্ড করা ম্যাক্রো আছে যা প্রতিবার রান করলে উপরের প্রক্রিয়া করবে।

কিন্তু এই পদ্ধতির একটি অসুবিধা আছে। আপনি যদি Original শিট-এ নতুন ডেটা যোগ করেন, Filtered শিট আপডেট হবে না এমনকি ডেটা ক্রাইটেরিয়া পূরণ করলেও।

আমরা চাই আমাদের নতুন Filtered শিট স্বয়ংক্রিয়ভাবে আপডেট হয় কোড এক্সিকিউট করলে যখন আমরা Original শিট-এ নতুন ডেটা যোগ করি। সেটি করার জন্য কোড কিছুটা মডিফাই করতে হবে।

আমরা যা চাই সেটি পাওয়ার সব ধাপ নিচে দেখানো হয়েছে।

ধাপসমূহ:

  • প্রথমে, ট্যাব থেকে, View -> Macros -> View Macros সিলেক্ট করুন।

VBA দক্ষতা: এক্সেল শিটের মধ্যে ফিল্টার করা ডেটা দ্রুত ও নিরাপদে কপি করুন

  • পরবর্তীতে, একটি Macro পপ-আপ উইন্ডো আসবে। আপনি যা রেকর্ডিং দিয়ে তৈরি করেছেন সেটি Macro name সিলেক্ট করুন (AdvancedFilter আমাদের কেসে)।
  • তারপর, Edit ক্লিক করুন।

VBA দক্ষতা: এক্সেল শিটের মধ্যে ফিল্টার করা ডেটা দ্রুত ও নিরাপদে কপি করুন

  • রেকর্ড করা ম্যাক্রোর পেছনের কোড কোড উইন্ডোতে আসবে (নিচের ছবি দেখুন)।

VBA দক্ষতা: এক্সেল শিটের মধ্যে ফিল্টার করা ডেটা দ্রুত ও নিরাপদে কপি করুন

  • এখন, নীল চিহ্নিত অংশটি (ছবিতে দেখানো অনুযায়ী) কোড থেকে ডিলিট করুন।

VBA দক্ষতা: এক্সেল শিটের মধ্যে ফিল্টার করা ডেটা দ্রুত ও নিরাপদে কপি করুন

  • তারপর, কোডটি মডিফাই করুন নিচের ছবির মতো।

VBA দক্ষতা: এক্সেল শিটের মধ্যে ফিল্টার করা ডেটা দ্রুত ও নিরাপদে কপি করুন

  • এখন, আপডেট করা কোড হবে:
Sub AdvancedFilter() Sheets("Original").Range("B4").CurrentRegion.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Sheets("Original").Range("G4:H5"), CopyToRange:=Sheets("Filtered").Range("B4:E4"), Unique:=False End Sub
  • এই কোডটি Save করুন।
  • এখন, Original শিট-এ ফিরে যান এবং নতুন ডেটা যোগ করুন যা ক্রাইটেরিয়ার অধীনে পড়বে। উদাহরণস্বরূপ, আমরা John-এর আরেকটি সারি যোগ করলাম যেখানে প্রাপ্ত Marks ৭৬ যা ক্রাইটেরিয়া Marks<80-এর অধীনে পড়ে।

VBA দক্ষতা: এক্সেল শিটের মধ্যে ফিল্টার করা ডেটা দ্রুত ও নিরাপদে কপি করুন

  • তারপর, Run করুন কোডটি এবং ফলাফল নিচের ছবিতে দেখুন।

VBA দক্ষতা: এক্সেল শিটের মধ্যে ফিল্টার করা ডেটা দ্রুত ও নিরাপদে কপি করুন

  • Filtered শিট-এ Marks ৭৬ সহ John-এর তথ্যের একটি নতুন কপি করা সারি আছে যা ক্রাইটেরিয়া পূরণ করে (Marks<80)।

আরও পড়ুন: এক্সেলে শুধু ইউনিক রেকর্ডের জন্য এডভান্সড ফিল্টার কীভাবে ব্যবহার করবেন

উপসংহার

উপসংহারে, এই নিবন্ধে আপনাকে ৩টি ভিন্ন পদ্ধতি দেখানো হয়েছে কীভাবে এডভান্সড ফিল্টারের মাধ্যমে এক্সেলে VBA ম্যাক্রো দিয়ে অন্য শিটে ডেটা কপি করা যায়। আশা করি এই নিবন্ধটি আপনার জন্য খুব ফলদায়ক হবে। বিষয়টি সংক্রান্ত যেকোনো প্রশ্ন জানাতে দ্বিধা করবেন না।

সম্পর্কিত নিবন্ধসমূহ

  • এক্সেলে এডভান্সড ফিল্টার ব্যবহার করে খালি সেল বাদ দেওয়া (৩টি সহজ কৌশল)
  • এক্সেল VBA: একটি রেঞ্জে একাধিক ক্রাইটেরিয়ারসহ এডভান্সড ফিল্টার (৫ পদ্ধতি)
  • এক্সেলে শুধু ইউনিক রেকর্ডের জন্য এডভান্সড ফিল্টার কীভাবে ব্যবহার করবেন
  • এক্সেলে এডভান্সড ফিল্টার প্রয়োগ করে অন্য লোকেশনে কপি করা
  • এক্সেল এডভান্সড ফিল্টার: “Does Not Contain” প্রয়োগ (২ পদ্ধতি)
  • এক্সেলে একটি কলামে একাধিক ক্রাইটেরিয়ার ভিত্তিক এডভান্সড ফিল্টার প্রয়োগ
  1. এক্সেলে VBA-উন্নত ৭টি ডেটা ভ্যালিডেশন ড্রপ-ডাউন লিস্ট برای দক্ষতা

  2. ডেটা ভ্যালিডেশন ড্রপ-ডাউন লিস্ট দিয়ে এক্সেল ডেটা ফিল্টার করুন - ২টি ব্যাবহারিক উদাহরণ

  3. এক্সেল ভিবিএ-এ ডেটা এন্ট্রি ফর্ম তৈরি করুন – ধাপে ধাপে গাইড

  4. দক্ষ এক্সেল টেকনিক: শিটস জুড়ে ডেটা ম্যাপ করার ৬টি প্রমাণিত পদ্ধতি