এক্সেলে প্রত্যেক সেলসম্যানের জন্য পৃথক পৃথকসেলস রিপোর্ট তৈরী করুন অটোমেটিকলি – Automatically generate sales reports for each salesman in Excel
অটোমেটিকলি সেলস রিপোর্ট:-
শুরু করা যাক
অটোমেটিক দৈনিক সেলস রিপোর্ট তৈরী করার জন্য এই টিউটোরিয়ালে, আমরা প্রথমে ডেটা শীটে প্রবেশ করে একটি এক্সেল স্প্রেডশীট তৈরি করেছি কোন কর্মীরা কোন তারিখে কতগুলি পণ্য বিক্রি করেছে।
✔ ডেটা শীটের শীর্ষে, আমরা Generate Report এবং Delete Report Sheets নামে দুটি VBA বাটন যোগ করেছি।
✔ যখন ব্যবহারকারী জেনারেট রিপোর্ট বাটন করবে তখন কলাম B এর নাম অনুসারে নতুন ওয়ার্কশীট তৈরি হবে এবং তারিখের উপর ভিত্তি করে প্রতিটি কর্মীদের দ্বারা বিক্রি করা পণ্যগুলি এই ওয়ার্কশীটে তালিকাভুক্ত হয়ে যাবে।
✔ যখন “জেনারেট রিপোর্ট” বাটনটি অপ্রয়োজনীয়ভাবে বা বারবার চাপা হয়, তখন তৈরি করা কর্মী শীটে পুনরাবৃত্তি সারি হতে পারে। যদি কর্মীদের জন্য তৈরি করা শীটগুলিতে সদৃশ সারি থাকে তবে সেগুলি নিম্নলিখিত কোডগুলির সাথে ডিলেট করে ফেলা হবে। এইভাবে, পুরানো রেকর্ডগুলি পুনরাবৃত্তি না করে সহজেই নতুন রেকর্ড যোগ করা যেতে পারে: এক্সেল রেপিটেড রো’স ডিলিট করে ফেলুন।: 

Dim Page As String
lastrow = Sheets(Page).Cells(Rows.Count, "B").End(xlUp).Row
Set Rng = Sheets(Page).Range("A3:M" & lastrow)
Rng.RemoveDuplicates Columns:=Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13), Header:=xlYes
✔ B কলামের নাম অনুসারে নতুন শীট তৈরি করার সময় সমস্যা এড়াতে; যদি B কলামে ফাঁকা ঘর থাকে, তাহলে যে সারিটিতে ফাঁকা ঘর রয়েছে তা সেই কোডগুলির সাথে সম্পূর্ণরূপে ডিলিট করে ফেলা হবে: 

Dim hucre As Range, sonsatir As Long
Sheets("DATA").Range("B3").Select
sonsatir = Sheets("DATA").Cells(Rows.Count, "B").End(xlUp).Row
For Each hucre In Sheets("DATA").Range("B3:B" & WorksheetFunction.CountA(Range("B3:B" & sonsatir)))
Do While Not IsEmpty(ActiveCell)
ActiveCell.Offset(1, 0).Select
Loop
ActiveCell.EntireRow.Select
Selection.Delete Shift:=xlUp
Next
✔ কর্মীদের বিক্রির পরিমাণ দেখানো শীট তৈরি করার পরে, Add-Ins নামে একটি নতুন মেনু আইটেম ওয়ার্কশীট মেনু বারে যোগ হবে। পরবর্তীতে, ম্যাক্রো দ্বারা নতুন মেনু আইটেমে একটি ড্রপ-ডাউন তালিকা থাকবে। এই ড্রপ-ডাউন তালিকায় ওয়ার্কবুকের সমস্ত শীট তালিকাভুক্ত করা হয়েছে। সুতরাং, ব্যবহারকারীকে সহজেই ওয়ার্কবুকের শীটগুলির মধ্যে নির্দির্ষ্ট ওয়ার্কবুকটি খুঁজে নিতে পারবে।
✔ যদি ইচ্ছা হয়, তৈরি করা ওয়ার্কশীটগুলি “Delete Report Sheets” বাটনে ক্লিক করে ডিলেট করা যেতে পারে। এই বাটন দ্বারা ট্রিগার হওয়া VBA কোডগুলি: 

Sub Delete_Reports()
Application.DisplayAlerts = False
Again:
For i = 1 To Worksheets.Count
If Worksheets(i).Name = "DATA" Then GoTo Skip
Worksheets(i).Delete
GoTo Again:
Skip:
Next i
Application.DisplayAlerts = True
Call ResetMenu
End Sub
✔ নতুন মেনু আইটেম (অ্যাড-ইন মেনুতে ড্রপ ডাউন তালিকা) রিমোভ হয়ে যায় যখন সেলসম্যানের শীটগুলি ডিলিট করা হয় বা ওয়ার্কবুক বন্ধ করা হয়। অর্থাৎ, ওয়ার্কশীট মেনু বার রিসেট করা হয়ে যায়। অ্যাড-ইন মেনু রিমোভ করতে ম্যাক্রো:

Sub ResetMenu()
On Error Resume Next
Application.CommandBars("Worksheet Menu Bar").Controls("Sheet selector").Delete
Err.Clear
End Sub
✔ যখন ওয়ার্কবুকটি খোলা হয়, ড্রপ-ডাউন তালিকা যা অ্যাড-ইন মেনুতে শীটগুলিকে তালিকাভুক্ত করে তা স্বয়ংক্রিয়ভাবে যুক্ত করতে:

Sub Auto_Open()
Call MakeCBO
End Sub
Sub MakeCBO()
Dim cboSheetz As CommandBarComboBox, ws As Worksheet
With Application
.ScreenUpdating = False
Run "ResetMenu"
With .CommandBars("Worksheet Menu Bar")
Set cboSheetz = .Controls.Add(Type:=msoControlComboBox, before:=.Controls.Count)
End With
With cboSheetz
.Caption = "Sheet selector"
.OnAction = "mySheet"
.Width = 100
End With
For Each ws In Worksheets
If ws.Visible = xlSheetVisible Then cboSheetz.AddItem ws.Name
Next ws
cboSheetz.ListIndex = 1
.ScreenUpdating = True
End With
End Sub
Next:-এক্সেল VBA দিয়ে সেলসম্যান ভিত্তিক দৈনিক বিক্রয় রিপোর্ট তৈরি করুন
আপনাদের কোডিং এর সমস্যা বা বুঝতে সমস্যা কমেন্ট করুন। ধন্যবাদ
আরও শিখুন – ২০টি এক্সেল টিপস, এক্সেল টিউটোরিয়াল, এক্সেল সূত্র প্রয়োগ, লাইব্রেরি ম্যানেজমেন্ট সফ্টওয়্যার, VBA macro Freelancing