Excel მაკროში ცვლადების და მუდმივების გაგება

ამ სტატიაში შეიტყობთ, რა მუდმივები და ცვლადებია მაკროებში, სად შეიძლება მათი გამოყენება და რა არის ძირითადი განსხვავება მონაცემთა სხვადასხვა ტიპებს შორის. ასევე გამოვლინდება, თუ რატომ არის საჭირო მუდმივები, თუ შეგიძლიათ უბრალოდ დაწეროთ ცვლადი და არასოდეს შეცვალოთ იგი.

სხვა პროგრამირების ენების მსგავსად, მონაცემები შეიძლება ინახებოდეს ცვლადებში ან მუდმივებში (ორივეს ასევე ხშირად მოიხსენიებენ როგორც მონაცემთა კონტეინერებს). ეს არის მთავარი განსხვავება ამ ცნებებს შორის. პირველი შეიძლება შეიცვალოს იმის მიხედვით, თუ რა ხდება პროგრამაში. თავის მხრივ, მუდმივები დაყენებულია ერთხელ და არ ცვლის მათ მნიშვნელობას.

მუდმივები შეიძლება სასარგებლო იყოს, თუ თქვენ გჭირდებათ იგივე დიდი მნიშვნელობის მრავალჯერ გამოყენება. ნომრის კოპირების ნაცვლად, შეგიძლიათ უბრალოდ დაწეროთ მუდმივის სახელი. მაგალითად, შეგიძლიათ გამოიყენოთ მუდმივი "Pi" Pi-ს შესანახად, რომელიც არის მუდმივი მნიშვნელობა. ის ძალიან დიდია და ყოველ ჯერზე მისი დაწერა ან მოძიება და კოპირება საკმაოდ რთულია. ასე რომ, საკმარისია ორი სიმბოლოს დაწერა და გარემო ავტომატურად იყენებს სასურველ რიცხვს.

Excel-ის მომხმარებელმა უნდა გამოაცხადოს ცვლადები, თუ მას დროდადრო სჭირდება მათში შენახული მნიშვნელობის შეცვლა. მაგალითად, შეგიძლიათ დააყენოთ ცვლადი სახელწოდებით sVAT_Rate, რომელიც შეინახავს პროდუქტის მიმდინარე დღგ-ს განაკვეთს. თუ ის შეიცვალა, შეგიძლიათ სწრაფად გამოასწოროთ. ეს განსაკუთრებით სასარგებლოა მათთვის, ვინც ბიზნესს აწარმოებს შეერთებულ შტატებში, სადაც ზოგიერთ საქონელს შეიძლება საერთოდ არ დაექვემდებაროს დღგ (და ეს გადასახადი ასევე განსხვავდება შტატში).

მონაცემთა ტიპები

თითოეული მონაცემთა კონტეინერი შეიძლება იყოს რამდენიმე ტიპის. აქ არის ცხრილი, რომელიც აღწერს დამუშავებული ინფორმაციის სტანდარტულ ტიპებს. ბევრი მათგანია და დამწყებთათვის თავიდან შეიძლება ჩანდეს, რომ ისინი ერთმანეთს იმეორებენ. მაგრამ ეს მოჩვენებითი გრძნობაა. წაიკითხეთ, რომ გაიგოთ, რატომ არის მონაცემთა სწორი ტიპის მითითება ასე მნიშვნელოვანი.

არ არის რეკომენდებული მონაცემთა ტიპის გამოყენება, რომელიც მეხსიერებაში მეტ ადგილს იკავებს მცირე რიცხვებისთვის. მაგალითად, ნომრისთვის 1, საკმარისია გამოიყენოთ ბაიტის ტიპი. ეს დადებითად იმოქმედებს შესრულებადი მოდულის მუშაობაზე, განსაკუთრებით სუსტ კომპიუტერებზე. მაგრამ მნიშვნელოვანია, რომ აქ ძალიან შორს არ წავიდეთ. თუ იყენებთ მონაცემთა ტიპს, რომელიც ძალიან კომპაქტურია, დიდი მნიშვნელობა შეიძლება არ მოერგოს მას.

მუდმივებისა და ცვლადების გამოცხადება

კატეგორიულად აკრძალულია მონაცემთა კონტეინერის გამოყენება წინასწარ გამოცხადების გარეშე. შემდეგ შეიძლება წარმოიშვას მთელი რიგი პრობლემები, რომელთა თავიდან აცილების მიზნით აუცილებელია კოდის რამდენიმე მცირე ხაზის დაწერა ცვლადების ან მუდმივების ჩამოთვლებით.

ცვლადის გამოსაცხადებლად გამოიყენება Dim განცხადება. მაგალითად, ასე:

Dim Variable_Name როგორც მთელი რიცხვი

Variable_Name არის ცვლადის სახელი. შემდეგ იწერება As ოპერატორი, რომელიც მიუთითებს მონაცემთა ტიპზე. სტრიქონების „Variable_Name“ და „Integer“ ნაცვლად, შეგიძლიათ ჩაწეროთ თქვენი საკუთარი სახელი და მონაცემთა ტიპი.

მუდმივები ასევე შეიძლება გამოცხადდეს, მაგრამ ჯერ უნდა მიუთითოთ მათი მნიშვნელობა. ერთ-ერთი ვარიანტია:

Const iMaxCount = 5000

სამართლიანობისთვის, ზოგიერთ შემთხვევაში შეგიძლიათ გააკეთოთ ცვლადის გამოცხადების გარეშე, მაგრამ ამ შემთხვევაში მათ ავტომატურად მიენიჭებათ ტიპი Variant. თუმცა, ეს არ არის რეკომენდებული შემდეგი მიზეზების გამო:

  1. ვარიანტი გაცილებით ნელა მუშავდება და თუ ასეთი ცვლადები ბევრია, ინფორმაციის დამუშავება შეიძლება მნიშვნელოვნად შენელდეს სუსტ კომპიუტერებზე. როგორც ჩანს, ეს წამები გადაწყვეტს? მაგრამ თუ თქვენ მოგიწევთ კოდის დიდი რაოდენობის სტრიქონების დაწერა, შემდეგ კი მისი გაშვება სუსტ კომპიუტერებზე (რომლებიც ჯერ კიდევ იყიდება, იმის გათვალისწინებით, რომ თანამედროვე საოფისე კომპლექტი მოითხოვს დიდ RAM-ს), შეგიძლიათ მთლიანად შეაჩეროთ მუშაობა. არის შემთხვევები, როდესაც მაკროების არასწორად ჩანაწერმა გამოიწვია სმარტბუქების გაყინვა, რომლებსაც აქვთ მცირე რაოდენობით ოპერატიული მეხსიერება და არ არის შექმნილი რთული ამოცანების შესასრულებლად. 
  2. დაშვებულია სახელებში არასწორი ბეჭდვა, რომლის თავიდან აცილება შესაძლებელია Option Explicit განცხადების გამოყენებით, რომელიც საშუალებას გაძლევთ იპოვოთ გამოუცხადებელი ცვლადი, თუ ის აღმოჩნდება. ეს არის მარტივი გზა შეცდომების აღმოსაჩენად, რადგან მცირედი შეცდომა იწვევს თარჯიმანს ცვლადის იდენტიფიცირებას. და თუ ჩართავთ ცვლადის დეკლარაციის რეჟიმს, თარჯიმანი უბრალოდ არ მოგცემთ საშუალებას გაუშვათ მაკრო, თუ აღმოჩნდება მონაცემთა კონტეინერები, რომლებიც არ იყო გამოცხადებული მოდულის დასაწყისში.
  3. მოერიდეთ შეცდომებს, რომლებიც გამოწვეულია ცვლადი მნიშვნელობებით, რომლებიც არ ემთხვევა მონაცემთა ტიპს. ჩვეულებრივ, ტექსტის მნიშვნელობის მინიჭება მთელი რიცხვის ცვლადს გამოიწვევს შეცდომას. დიახ, ერთი მხრივ, ზოგადი ტიპი ენიჭება დეკლარაციის გარეშე, მაგრამ თუ ისინი წინასწარ არის გამოცხადებული, მაშინ შემთხვევითი შეცდომების თავიდან აცილება შესაძლებელია.

ამიტომ, ყველაფრის მიუხედავად, რეკომენდირებულია ყველა ცვლადის გამოცხადება Excel მაკროში.

კიდევ ერთი რამ უნდა გვახსოვდეს ცვლადების გამოცხადებისას. შესაძლებელია ცვლადს არ მივანიჭოთ რაიმე მნიშვნელობა მისი გამოცხადებისას, მაგრამ ამ შემთხვევაში ის იძენს ნაგულისხმევ მნიშვნელობას. Მაგალითად:

  1. ხაზები ცარიელია.
  2. რიცხვები იღებენ მნიშვნელობას 0.
  3. Boolean ტიპის ცვლადები თავდაპირველად განიხილება მცდარი.
  4. ნაგულისხმევი თარიღია 30 წლის 1899 დეკემბერი.

მაგალითად, თქვენ არ გჭირდებათ 0-ის მინიჭება მთელი რიცხვის ცვლადისთვის, თუ მანამდე არ იყო მითითებული მნიშვნელობა. ის უკვე შეიცავს ამ ნომერს.

ვარიანტი აშკარა განცხადება

ეს განცხადება საშუალებას გაძლევთ გამოაცხადოთ ყველა ცვლადი, რომელიც გამოიყენება VBA კოდში და დაადგინოთ ნებისმიერი არადეკლარირებული კონტეინერის არსებობა კოდის გაშვებამდე. ამ ფუნქციის გამოსაყენებლად, უბრალოდ ჩაწერეთ Option Explicit კოდის ხაზი მაკრო კოდის ზედა ნაწილში.

თუ თქვენ გჭირდებათ ეს განცხადება ყოველ ჯერზე შეიტანოთ თქვენს კოდში, ამის გაკეთება შეგიძლიათ VBA რედაქტორში სპეციალური პარამეტრის გამოყენებით. ამ პარამეტრის გასააქტიურებლად, თქვენ უნდა:

  1. გადადით განვითარების გარემოში ბილიკის გასწვრივ – ინსტრუმენტები > ოფციები.
  2. ამის შემდეგ გახსნილ ფანჯარაში გახსენით რედაქტორის ჩანართი.
  3. და ბოლოს, მონიშნეთ ველი Require Variable Declaration ელემენტის გვერდით.

ამ ნაბიჯების დასრულების შემდეგ დააჭირეთ ღილაკს "OK". 

ესე იგი, ახლა ყოველი ახალი მაკროს დაწერისას ეს ხაზი ავტომატურად ჩაიდება კოდის ზედა ნაწილში.

მუდმივებისა და ცვლადების ფარგლები

თითოეულ ცვლადს ან მუდმივას აქვს მხოლოდ შეზღუდული ფარგლები. ეს დამოკიდებულია სად აცხადებთ.

დავუშვათ, გვაქვს ფუნქცია Საერთო ღირებულება()და ის იყენებს ცვლადს sVAT_Rate. მოდულში პოზიციიდან გამომდინარე, მას ექნება განსხვავებული ფარგლები:

ვარიანტი აშკარა

sVAT_Rate როგორც მარტოხელა

ფუნქცია Total_Cost() როგორც ორმაგი

.

.

.

ბოლო ფუნქცია

თუ ცვლადი გამოცხადებულია თავად მოდულის ზედა ნაწილში, ის ვრცელდება მთელ მოდულში. ანუ მისი წაკითხვა ყველა პროცედურის საშუალებით შეიძლება.

უფრო მეტიც, თუ ერთ-ერთმა პროცედურამ შეცვალა ცვლადის მნიშვნელობა, მაშინ მომდევნო ასევე წაიკითხავს ამ შესწორებულ მნიშვნელობას. მაგრამ სხვა მოდულებში ეს ცვლადი მაინც არ იკითხება.

ვარიანტი აშკარა

ფუნქცია Total_Cost() როგორც ორმაგი

sVAT_Rate როგორც მარტოხელა

   .

   .

   .

ბოლო ფუნქცია

ამ შემთხვევაში, ცვლადი დეკლარირებულია პროცედურის შიგნით და თარჯიმანი დაუშვებს შეცდომას, თუ ის გამოიყენება სხვა პროცედურაში.

თუ გსურთ, რომ ცვლადი წაიკითხოს სხვა მოდულებმა, უნდა გამოიყენოთ საჯარო საკვანძო სიტყვა Dim საკვანძო სიტყვის ნაცვლად. ანალოგიურად, თქვენ შეგიძლიათ შეზღუდოთ ცვლადის ფარგლები მხოლოდ მიმდინარე მოდულზე საჯარო განცხადების გამოყენებით, რომელიც იწერება სიტყვის Dim-ის ნაცვლად.

თქვენ შეგიძლიათ დააყენოთ მუდმივების ფარგლები ანალოგიურად, მაგრამ საკვანძო სიტყვა აქ იწერება Const ოპერატორთან ერთად.

აქ არის ცხრილი კარგი მაგალითით, თუ როგორ მუშაობს ის მუდმივებთან და ცვლადებთან.

ვარიანტი აშკარა

საჯარო sVAT_Rate As single

Public Const iMax_Count = 5000

ამ მაგალითში თქვენ ხედავთ, თუ როგორ გამოიყენება საჯარო საკვანძო სიტყვა ცვლადის გამოსაცხადებლად და რა უნდა ჩაწეროთ Visual Basic რედაქტორში საჯარო მუდმივის გამოსაცხადებლად. ამ ღირებულების კონტეინერების ფარგლები ვრცელდება ყველა მოდულზე.
ვარიანტი აშკარა

პირადი sVAT_Rate As single

პირადი Const iMax_Count = 5000

აქ ცვლადები და მუდმივები გამოცხადებულია პირადი საკვანძო სიტყვის გამოყენებით. ეს ნიშნავს, რომ მათი ნახვა შესაძლებელია მხოლოდ მიმდინარე მოდულში და სხვა მოდულების პროცედურებში მათი გამოყენება შეუძლებელია.

რატომ არის საჭირო მუდმივები და ცვლადები

მუდმივების და ცვლადების გამოყენება საშუალებას გაძლევთ გაზარდოთ კოდის გაგების ხარისხი. და თუ ზოგადად დამწყებებს არ აქვთ კითხვები იმის შესახებ, თუ რატომ არის საჭირო ცვლადები, მაშინ ბევრი ბუნდოვანებაა მუდმივების საჭიროებასთან დაკავშირებით. და ეს კითხვა, ერთი შეხედვით, საკმაოდ ლოგიკური ჩანს. ბოლოს და ბოლოს, შეგიძლიათ ერთხელ გამოაცხადოთ ცვლადი და აღარასდროს შეცვალოთ იგი.

პასუხი სადღაც იმავე სიბრტყეშია, რაც შეეხება მონაცემთა ტიპების გამოყენებას, რომლებიც მეხსიერებაში დიდ ადგილს იკავებენ. თუ საქმე გვაქვს ცვლადების უზარმაზარ რაოდენობასთან, შეიძლება შემთხვევით შევცვალოთ არსებული კონტეინერი. თუ მომხმარებელი განსაზღვრავს, რომ გარკვეული მნიშვნელობა არასოდეს შეიცვლება, მაშინ გარემო ავტომატურად გააკონტროლებს ამას.

ეს განსაკუთრებით მნიშვნელოვანია, როდესაც მაკრო დაწერილია რამდენიმე პროგრამისტის მიერ. შეიძლება იცოდეს, რომ ზოგიერთი ცვლადი არ უნდა შეიცვალოს. და მეორე არა. თუ თქვენ მიუთითებთ Const ოპერატორს, სხვა დეველოპერი გაიგებს, რომ ეს მნიშვნელობა არ იცვლება.

ან, თუ არის მუდმივი ერთი სახელით და ცვლადს აქვს განსხვავებული, მაგრამ მსგავსი სახელი. დეველოპერს შეუძლია უბრალოდ დააბნიოს ისინი. მაგალითად, ერთ ცვლადს, რომელიც არ საჭიროებს შეცვლას, ეწოდება ცვლადი11, ხოლო მეორეს, რომლის რედაქტირებაც შესაძლებელია, ეწოდება ცვლადი1. ადამიანს შეუძლია ავტომატურად, კოდის დაწერისას, შემთხვევით გამოტოვოს დამატებითი ერთეული და არ შეამჩნიოს იგი. შედეგად, შეიცვლება მნიშვნელობების კონტეინერი, რომელსაც არ უნდა შეეხოთ.

ან თავად დეველოპერმა შეიძლება დაივიწყოს რომელ ცვლადებს შეუძლია შეეხოს და რომელს არა. ეს ხშირად ხდება, როდესაც კოდი იწერება რამდენიმე კვირის განმავლობაში და მისი ზომა ხდება დიდი. ამ დროს ძალიან ადვილია დაივიწყო თუნდაც რას ნიშნავს ესა თუ ის ცვლადი.

დიახ, ამ სიტუაციაში კომენტარების გაკეთება შეგიძლიათ, მაგრამ უფრო ადვილი არ არის სიტყვა Const-ის მითითება?

დასკვნები

ცვლადები მაკრო პროგრამირების აუცილებელი კომპონენტია, რომელიც საშუალებას გაძლევთ შეასრულოთ რთული ოპერაციები, გამოთვლებიდან მომხმარებლის ინფორმირებამდე გარკვეული მოვლენების შესახებ ან ელცხრილის უჯრედებში კონკრეტული მნიშვნელობების მითითებით.

მუდმივები უნდა იქნას გამოყენებული, თუ დეველოპერმა ზუსტად იცის, რომ ამ კონტეინერების შინაარსი მომავალში არ შეიცვლება. მიზანშეწონილია არ გამოიყენოთ ცვლადები, რადგან შესაძლებელია შეცდომის შემთხვევით დაშვება.

დატოვე პასუხი