বিষয়বস্তু
এই মুহুর্তে, মাইক্রোসফ্ট এক্সেলের ফাংশন উইজার্ড উইন্ডো - বোতামের মাধ্যমে প্রায় পাঁচশো ওয়ার্কশীট ফাংশন উপলব্ধ রয়েছে fx সূত্র বারে। এটি একটি খুব শালীন সেট, কিন্তু, তবুও, প্রায় প্রতিটি ব্যবহারকারী শীঘ্রই বা পরে এমন একটি পরিস্থিতির সম্মুখীন হয় যেখানে এই তালিকায় তার প্রয়োজনীয় ফাংশন থাকে না - কেবলমাত্র এটি এক্সেলে নেই।
এখন পর্যন্ত, এই সমস্যাটি সমাধান করার একমাত্র উপায় ছিল ম্যাক্রো, অর্থাৎ ভিজ্যুয়াল বেসিকে আপনার নিজস্ব ব্যবহারকারী-সংজ্ঞায়িত ফাংশন (UDF = User Defined Function) লেখা, যার জন্য উপযুক্ত প্রোগ্রামিং দক্ষতা প্রয়োজন এবং এটি কখনও কখনও সহজ নয়। যাইহোক, সাম্প্রতিক Office 365 আপডেটের সাথে, পরিস্থিতি আরও ভালোর জন্য পরিবর্তিত হয়েছে - এক্সেলে একটি বিশেষ "র্যাপার" ফাংশন যোগ করা হয়েছে ল্যামডা. এর সাহায্যে, আপনার নিজস্ব ফাংশন তৈরি করার কাজটি এখন সহজে এবং সুন্দরভাবে সমাধান করা হয়েছে।
আসুন নিম্নলিখিত উদাহরণে এর ব্যবহারের নীতিটি দেখি।
আপনি সম্ভবত জানেন, এক্সেলের বেশ কয়েকটি তারিখ পার্সিং ফাংশন রয়েছে যা আপনাকে একটি নির্দিষ্ট তারিখের জন্য দিন, মাস, সপ্তাহ এবং বছরের সংখ্যা নির্ধারণ করতে দেয়। কিন্তু কিছু কারণে এমন কোন ফাংশন নেই যা ত্রৈমাসিকের সংখ্যা নির্ধারণ করে, যা প্রায়শই প্রয়োজন হয়, তাই না? আসুন এই ত্রুটিটি ঠিক করি এবং এর সাথে তৈরি করি ল্যামডা এই সমস্যা সমাধানের জন্য নিজস্ব নতুন ফাংশন।
ধাপ 1. সূত্রটি লিখুন
আসুন এই সত্যটি দিয়ে শুরু করি যে ম্যানুয়ালি স্বাভাবিক উপায়ে আমরা একটি শীট ঘরে একটি সূত্র লিখব যা আমাদের যা প্রয়োজন তা গণনা করে। ত্রৈমাসিক সংখ্যার ক্ষেত্রে, এটি করা যেতে পারে, উদাহরণস্বরূপ, এইরকম:
ধাপ 2. LAMBDA তে মোড়ানো এবং পরীক্ষা করা
এখন নতুন LAMBDA ফাংশন প্রয়োগ করার এবং এটিতে আমাদের সূত্র মোড়ানোর সময়। ফাংশন সিনট্যাক্স নিম্নরূপ:
=ল্যাম্বদা(পরিবর্তনশীল 1; পরিবর্তনশীল 2; ... পরিবর্তনশীলN ; অভিব্যক্তি)
যেখানে এক বা একাধিক ভেরিয়েবলের নাম প্রথমে তালিকাভুক্ত করা হয় এবং শেষ যুক্তিটি সর্বদা একটি সূত্র বা একটি গণনাকৃত অভিব্যক্তি যা তাদের ব্যবহার করে। পরিবর্তনশীল নামগুলি ঘরের ঠিকানাগুলির মতো দেখা উচিত নয় এবং বিন্দুগুলি থাকা উচিত নয়৷
আমাদের ক্ষেত্রে, শুধুমাত্র একটি পরিবর্তনশীল হবে - যে তারিখের জন্য আমরা ত্রৈমাসিক সংখ্যা গণনা করি। এর জন্য চলক কল করা যাক, বলুন, ডি. তারপর একটি ফাংশনে আমাদের সূত্র মোড়ানো ল্যামডা এবং একটি কল্পিত পরিবর্তনশীল নাম দিয়ে আসল ঘর A2-এর ঠিকানা প্রতিস্থাপন করে, আমরা পাই:
দয়া করে মনে রাখবেন যে এই ধরনের রূপান্তরের পরে, আমাদের সূত্র (আসলে, সঠিক!) একটি ত্রুটি তৈরি করতে শুরু করেছে, কারণ এখন সেল A2 থেকে আসল তারিখটি এতে স্থানান্তরিত হয় না। পরীক্ষা এবং আত্মবিশ্বাসের জন্য, আপনি ফাংশনের পরে তাদের যুক্ত করে আর্গুমেন্ট পাস করতে পারেন ল্যামডা বন্ধনীর মধ্যে:
ধাপ 3. একটি নাম তৈরি করুন
এখন সহজ এবং মজার অংশ জন্য. আমরা খোলা নাম পরিচালক ট্যাব সূত্র (সূত্র — নাম ব্যবস্থাপক) এবং বোতাম দিয়ে একটি নতুন নাম তৈরি করুন সৃষ্টি (সৃষ্টি). আমাদের ভবিষ্যতের ফাংশনের জন্য একটি নাম লিখুন (উদাহরণস্বরূপ, নমকবর্ততলা), এবং মাঠে লিংক (রেফারেন্স) ফর্মুলা বার থেকে সাবধানে কপি করুন এবং আমাদের ফাংশন পেস্ট করুন ল্যামডা, শুধুমাত্র শেষ যুক্তি ছাড়া (A2):
সবকিছু। ক্লিক করার পর OK তৈরি ফাংশনটি এই ওয়ার্কবুকের যেকোনো শীটে যে কোনো ঘরে ব্যবহার করা যেতে পারে:
অন্যান্য বইয়ে ব্যবহার করুন
LAMBDA এবং গতিশীল অ্যারে
একটি ফাংশন দিয়ে তৈরি কাস্টম ফাংশন ল্যামডা নতুন গতিশীল অ্যারে এবং তাদের ফাংশনগুলির সাথে সফলভাবে কাজ সমর্থন করে (ছাঁকনি, ইউএনআইকে, গ্রেড) 2020 সালে Microsoft Excel এ যোগ করা হয়েছে।
ধরা যাক আমরা একটি নতুন ব্যবহারকারী-সংজ্ঞায়িত ফাংশন তৈরি করতে চাই যা দুটি তালিকার তুলনা করবে এবং তাদের মধ্যে পার্থক্য ফিরিয়ে দেবে - প্রথম তালিকার সেই উপাদানগুলি যা দ্বিতীয়টিতে নেই। জীবনের কাজ, তাই না? পূর্বে, এর জন্য তারা একটি লা ফাংশন ব্যবহার করত VPR (ভলুকআপ), অথবা PivotTables, বা পাওয়ার ক্যোয়ারী ক্যোয়ারী। এখন আপনি একটি সূত্র দিয়ে করতে পারেন:
ইংরেজি সংস্করণে এটি হবে:
=LAMBDA(a;b;ФИЛЬТР(a;СЧЁТЕСЛИ(b;a)=0))(A1:A6;C1:C10)
এখানে ফাংশন COUNTIF দ্বিতীয়টিতে প্রথম তালিকার প্রতিটি উপাদানের সংঘটনের সংখ্যা এবং তারপর ফাংশন গণনা করে ছাঁকনি শুধুমাত্র তাদের মধ্যে যারা এই ঘটনা ছিল না নির্বাচন করে. মধ্যে এই কাঠামো মোড়ানো দ্বারা ল্যামডা এবং একটি নামের সাথে এটির উপর ভিত্তি করে একটি নামযুক্ত পরিসর তৈরি করা, উদাহরণস্বরূপ, সার্চ ডিস্ট্রিবিউশন - আমরা একটি সুবিধাজনক ফাংশন পাব যা একটি ডায়নামিক অ্যারে আকারে দুটি তালিকা তুলনা করার ফলাফল প্রদান করে:
যদি উত্স ডেটা সাধারণ না হয়, তবে "স্মার্ট" টেবিল, আমাদের ফাংশনটিও সমস্যা ছাড়াই মোকাবেলা করবে:
আরেকটি উদাহরণ হল পাঠ্যকে XML-এ রূপান্তর করে গতিশীলভাবে বিভক্ত করা এবং তারপরে আমরা সম্প্রতি পার্স করা FILTER.XML ফাংশন ব্যবহার করে সেল দ্বারা সেল পার্স করা। এই জটিল সূত্রটি প্রতিবার ম্যানুয়ালি পুনরুত্পাদন না করার জন্য, এটি LAMBDA-তে মোড়ানো এবং এর উপর ভিত্তি করে একটি গতিশীল পরিসর তৈরি করা সহজ হবে, যেমন একটি নতুন কমপ্যাক্ট এবং সুবিধাজনক ফাংশন, এটির নামকরণ, উদাহরণস্বরূপ, RAZDTEXT:
এই ফাংশনের প্রথম আর্গুমেন্ট হবে সোর্স টেক্সট সহ সেল, এবং দ্বিতীয়টি – বিভাজক ক্যারেক্টার, এবং এটি একটি অনুভূমিক ডাইনামিক অ্যারের আকারে ফলাফল প্রদান করবে। ফাংশন কোড নিম্নরূপ হবে:
=ল্যাম্বদা(t;d; ট্রান্সপোজ(ফিল্টার.এক্সএমএল(“
উদাহরণগুলির তালিকা অন্তহীন - যে কোনও পরিস্থিতিতে যেখানে আপনাকে প্রায়শই একই দীর্ঘ এবং কষ্টকর সূত্রটি প্রবেশ করতে হয়, LAMBDA ফাংশনটি জীবনকে লক্ষণীয়ভাবে সহজ করে তুলবে।
অক্ষরের পুনরাবৃত্তিমূলক গণনা
পূর্ববর্তী সমস্ত উদাহরণ LAMBDA ফাংশনের শুধুমাত্র একটি, সবচেয়ে সুস্পষ্ট দিকটি দেখিয়েছে - এটিতে দীর্ঘ সূত্রগুলি মোড়ানো এবং তাদের ইনপুটকে সরল করার জন্য একটি "র্যাপার" হিসাবে এর ব্যবহার। প্রকৃতপক্ষে, LAMBDA এর আরও একটি, অনেক গভীর, দিক রয়েছে যা এটিকে প্রায় একটি পূর্ণাঙ্গ প্রোগ্রামিং ভাষায় পরিণত করে।
আসল বিষয়টি হল যে LAMBDA ফাংশনগুলির একটি মৌলিকভাবে গুরুত্বপূর্ণ বৈশিষ্ট্য হ'ল এগুলি বাস্তবায়নের ক্ষমতা পুনরাবৃত্তির - গণনার যুক্তি, যখন গণনার প্রক্রিয়ায় ফাংশনটি নিজেই কল করে। অভ্যাস থেকে, এটা ভয়ঙ্কর শোনাতে পারে, কিন্তু প্রোগ্রামিং, পুনরাবৃত্তি একটি সাধারণ জিনিস. এমনকি ভিজ্যুয়াল বেসিকের ম্যাক্রোতেও, আপনি এটি বাস্তবায়ন করতে পারেন, এবং এখন, আপনি দেখতে পাচ্ছেন, এটি এক্সেলে এসেছে। আসুন একটি বাস্তব উদাহরণ দিয়ে এই কৌশলটি বোঝার চেষ্টা করি।
ধরুন আমরা একটি ব্যবহারকারী-সংজ্ঞায়িত ফাংশন তৈরি করতে চাই যা উত্স পাঠ্য থেকে সমস্ত প্রদত্ত অক্ষর মুছে ফেলবে। এই ধরনের একটি ফাংশনের উপযোগিতা, আমি মনে করি, আপনার প্রমাণ করার দরকার নেই - এটির সাহায্যে জমে থাকা ইনপুট ডেটা পরিষ্কার করা খুব সুবিধাজনক হবে, তাই না?
যাইহোক, পূর্ববর্তী, অ-পুনরাবৃত্ত উদাহরণগুলির তুলনায়, দুটি অসুবিধা আমাদের জন্য অপেক্ষা করছে।
- আমাদের ফাংশনটির কোড লেখা শুরু করার আগে আমাদের একটি নাম নিয়ে আসতে হবে, কারণ এতে, এই নামটি ইতিমধ্যেই ফাংশনটিকে কল করার জন্য ব্যবহার করা হবে।
- একটি কক্ষে এই ধরনের একটি পুনরাবৃত্ত ফাংশন প্রবেশ করা এবং LAMBDA এর পরে বন্ধনীতে আর্গুমেন্ট উল্লেখ করে ডিবাগ করা (যেমন আমরা আগে করেছি) কাজ করবে না। আপনি অবিলম্বে একটি ফাংশন তৈরি করতে হবে "শুরু থেকে" মধ্যে নাম পরিচালক (নাম ম্যানেজার).
আসুন আমাদের ফাংশনকে কল করি, বলুন, CLEAN এবং আমরা চাই এতে দুটি আর্গুমেন্ট থাকুক - পাঠ্যটি পরিষ্কার করা হবে এবং একটি পাঠ্য স্ট্রিং হিসাবে বাদ দেওয়া অক্ষরগুলির তালিকা:
আসুন ট্যাবে তৈরি করি, যেমনটি আমরা আগে করেছি সূত্র в নাম ম্যানেজার নাম পরিসর, এটিকে CLEAR নাম দিন এবং ক্ষেত্রটিতে প্রবেশ করুন পরিসর নিম্নলিখিত নির্মাণ:
=LAMBDA(t;d;IF(d="";t;CLEAR(SUBSTITUTE(t;LEFT(d);"");MID(d;2;255))))
এখানে ভেরিয়েবল টি হল মূল পাঠ্য যা সাফ করা হবে এবং d হল অক্ষরগুলির তালিকা যা মুছে ফেলা হবে।
এটি সব এই মত কাজ করে:
পুনরাবৃত্তি ঘ
টুকরো SUBSTITUTE(t;LEFT(d);””), আপনি অনুমান করতে পারেন, উৎস টেক্সট t-এ মুছে ফেলার জন্য সেট d থেকে বাম অক্ষর থেকে প্রথম অক্ষরটিকে একটি খালি পাঠ্য স্ট্রিং দিয়ে প্রতিস্থাপন করে, অর্থাৎ “কে সরিয়ে দেয়। ক”। মধ্যবর্তী ফলাফল হিসাবে, আমরা পাই:
Vsh zkz n 125 রুবেল।
পুনরাবৃত্তি ঘ
তারপর ফাংশনটি নিজেই কল করে এবং ইনপুট হিসাবে (প্রথম আর্গুমেন্ট) আগের ধাপে পরিষ্কার করার পরে যা অবশিষ্ট থাকে তা গ্রহণ করে এবং দ্বিতীয় আর্গুমেন্টটি প্রথম থেকে নয়, দ্বিতীয় অক্ষর থেকে শুরু করে বাদ দেওয়া অক্ষরগুলির স্ট্রিং, যেমন “BVGDEEGZIKLMNOPRSTUFHTSCHSHSHCHYYYA”। "প্রাথমিক "A" ছাড়াই - এটি MID ফাংশন দ্বারা করা হয়। আগের মতো, ফাংশনটি অবশিষ্টগুলির (B) বাম থেকে প্রথম অক্ষরটি নেয় এবং এটিকে দেওয়া টেক্সটে (Zkz n 125 রুবেল) একটি খালি স্ট্রিং দিয়ে প্রতিস্থাপন করে – আমরা একটি মধ্যবর্তী ফলাফল হিসাবে পাই:
125 রু.
পুনরাবৃত্তি ঘ
ফাংশনটি আবার নিজেকে কল করে, পূর্ববর্তী পুনরাবৃত্তিতে পাঠ্যটি পরিষ্কার করার জন্য যা অবশিষ্ট আছে তা প্রথম যুক্তি হিসাবে গ্রহণ করে (Bsh zkz n 125 ru.), এবং দ্বিতীয় যুক্তি হিসাবে, বাদ দেওয়া অক্ষরগুলির সেটটি আরও একটি অক্ষর দ্বারা কাটা হয়েছে বাম, অর্থাৎ "VGDEEGZIKLMNOPRSTUFHTSCHSHSHSHCHYYYUYA.," প্রাথমিক "B" ছাড়া। তারপরে এটি আবার এই সেট থেকে বাম (B) থেকে প্রথম অক্ষরটি নেয় এবং পাঠ্য থেকে এটি সরিয়ে দেয় - আমরা পাই:
sh zkz n 125 ru.
এবং তাই - আমি আশা করি আপনি ধারণা পাবেন. প্রতিটি পুনরাবৃত্তির সাথে, অপসারণ করা অক্ষরগুলির তালিকাটি বাম দিকে ছেঁটে ফেলা হবে, এবং আমরা অনুসন্ধান করব এবং সেট থেকে পরবর্তী অক্ষরটিকে একটি শূন্য দিয়ে প্রতিস্থাপন করব।
যখন সমস্ত অক্ষর শেষ হয়ে যায়, তখন আমাদের লুপ থেকে প্রস্থান করতে হবে - এই ভূমিকাটি শুধুমাত্র ফাংশন দ্বারা সঞ্চালিত হয় IF (আইএফ), যা আমাদের নকশা মোড়ানো হয়. যদি মুছে ফেলার জন্য কোন অক্ষর অবশিষ্ট না থাকে (d=””), তাহলে ফাংশনটি আর নিজেকে কল করবে না, তবে কেবলমাত্র তার চূড়ান্ত আকারে সাফ করার জন্য পাঠ্যটি ফেরত দেওয়া উচিত (ভেরিয়েবল t)।
কোষের পুনরাবৃত্তিমূলক পুনরাবৃত্তি
একইভাবে, আপনি একটি প্রদত্ত পরিসরে কোষের পুনরাবৃত্তিমূলক গণনা বাস্তবায়ন করতে পারেন। ধরুন আমরা নামের একটি ল্যাম্বডা ফাংশন তৈরি করতে চাই প্রতিস্থাপন তালিকা একটি প্রদত্ত রেফারেন্স তালিকা অনুযায়ী উত্স পাঠ্যের টুকরোগুলির পাইকারি প্রতিস্থাপনের জন্য৷ ফলাফল এই মত হওয়া উচিত:
সেগুলো. আমাদের অনুষ্ঠানে প্রতিস্থাপন তালিকা তিনটি যুক্তি থাকবে:
- প্রক্রিয়া করার জন্য পাঠ্য সহ সেল (উৎস ঠিকানা)
- লুকআপ থেকে অনুসন্ধান করার জন্য মান সহ একটি কলামের প্রথম কক্ষ
- লুকআপ থেকে প্রতিস্থাপন মান সহ কলামের প্রথম ঘর
ফাংশনটি ডিরেক্টরিতে উপরে থেকে নীচে যেতে হবে এবং বাম কলাম থেকে ক্রমানুসারে সমস্ত বিকল্প প্রতিস্থাপন করতে হবে খুঁজতে ডান কলাম থেকে সংশ্লিষ্ট বিকল্পগুলিতে বিকল্প. আপনি নিম্নলিখিত পুনরাবৃত্তিমূলক ল্যাম্বডা ফাংশন দিয়ে এটি বাস্তবায়ন করতে পারেন:
প্রতিটি পুনরাবৃত্তিতে শিফট ডাউন একটি স্ট্যান্ডার্ড এক্সেল ফাংশন দ্বারা প্রয়োগ করা হয় নিষ্পত্তি (অফসেট), যা এই ক্ষেত্রে তিনটি আর্গুমেন্ট আছে – মূল পরিসর, সারি শিফট (1) এবং কলাম শিফট (0)।
ঠিক আছে, যত তাড়াতাড়ি আমরা ডিরেক্টরির (n = “”) শেষে পৌঁছব, আমাদের অবশ্যই পুনরাবৃত্তি শেষ করতে হবে – আমরা নিজেদেরকে কল করা বন্ধ করব এবং সোর্স টেক্সট ভেরিয়েবল t-এ সমস্ত প্রতিস্থাপনের পরে কী জমা হয়েছে তা প্রদর্শন করব।
এখানেই শেষ. কোন কৌশলী ম্যাক্রো বা পাওয়ার কোয়েরি প্রশ্ন নেই – পুরো কাজটি একটি ফাংশন দ্বারা সমাধান করা হয়।
- এক্সেলের নতুন ডাইনামিক অ্যারে ফাংশনগুলি কীভাবে ব্যবহার করবেন: ফিল্টার, সর্ট, ইউনিক
- SUBSTITUTE ফাংশন দিয়ে পাঠ্য প্রতিস্থাপন এবং পরিষ্কার করা
- VBA-তে ম্যাক্রো এবং ব্যবহারকারী-সংজ্ঞায়িত ফাংশন (UDFs) তৈরি করা