მასივები Visual Basic-ში აპლიკაციისთვის

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

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

Dim Team_Member1 As String Dim Team_Member2 As String ... Dim Team_Member20 As String

მაგრამ თქვენ შეგიძლიათ გამოიყენოთ ბევრად უფრო მარტივი და ორგანიზებული გზა - შეინახეთ გუნდის წევრების სახელების სია 20 ცვლადის მასივში, როგორიცაა სიმებიანი:

Dim Team_Members (1-დან 20-მდე) როგორც სტრიქონი

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

Team_Members(1) = "ჯონ სმიტი"

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

როგორ მუშაობს ეს ნაჩვენებია ქვემოთ კოდის მაგალითით, რომელიც ბეჭდავს გუნდის თითოეული წევრის სახელებს თანმიმდევრობით სვეტის უჯრედებში. A აქტიური Excel სამუშაო ფურცელი.

i = 1-დან 20 უჯრედამდე(i,1). მნიშვნელობა = გუნდის_წევრები(i) შემდეგი i

ცხადია, მასივთან მუშაობა, რომელიც ინახავს 20 სახელს, გაცილებით ნაკლებად რთული და ზუსტია, ვიდრე 20 ცალკეული ცვლადის გამოყენება. მაგრამ რა მოხდება, თუ ეს სახელები არის არა 20, არამედ 1000? და თუ გარდა ამისა, გვარებისა და პატრონიმების ცალ-ცალკე შენახვაა საჭირო?! ნათელია, რომ მალე სრულიად შეუძლებელი გახდება VBA კოდში მონაცემთა ასეთი მოცულობის დამუშავება მასივის დახმარების გარეშე.

მრავალგანზომილებიანი მასივები Excel Visual Basic-ში

ზემოთ განხილული Visual Basic მასივები განიხილება ერთგანზომილებიანად. ეს ნიშნავს, რომ ისინი ინახავენ სახელების მარტივ ჩამონათვალს. თუმცა, მასივებს შეიძლება ჰქონდეს მრავალი განზომილება. მაგალითად, ორგანზომილებიანი მასივი შეიძლება შევადაროთ მნიშვნელობათა ბადეს.

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

Dim Jan_Sales_Figures(1-დან 31-მდე, 1-დან 5-მდე) ვალუტის სახით

მასივის ელემენტებზე წვდომისათვის Jan_Sales_ფიგურები, თქვენ უნდა გამოიყენოთ ორი ინდექსი, რომელიც მიუთითებს თვის დღეს და ბრძანების ნომერს. მაგალითად, ელემენტის მისამართი, რომელიც შეიცავს გაყიდვების ციფრებს 2-ოჰ გუნდებისთვის მე -15 იანვარი ასე დაიწერება:

Jan_Sales_Figures(15, 2)

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

მასივების გამოცხადება Excel Visual Basic-ში

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

Dim Team_Members (1-დან 20-მდე) როგორც სტრიქონი

ასეთი დეკლარაცია ეუბნება VBA შემდგენელს, რომ მასივი Გუნდის წევრები შედგება 20 ცვლადისგან, რომლებზეც წვდომა შეიძლება 1-დან 20-მდე ინდექსებით. თუმცა, შეიძლება ვიფიქროთ ჩვენი მასივის ცვლადების ნუმერაციაზე 0-დან 19-მდე, ამ შემთხვევაში მასივი უნდა გამოცხადდეს ასე:

Dim Team_Members (0-დან 19-მდე) როგორც სტრიქონი

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

Dim Team_Members(19) როგორც სტრიქონი

VBA შემდგენელი განიხილავს ასეთ ჩანაწერს, როგორც 20 ელემენტისგან შემდგარი მასივის გამოცხადებას ინდექსებით 0-დან 19-მდე.

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

Dim Jan_Sales_Figures(1-დან 31-მდე, 1-დან 5-მდე) ვალუტის სახით

თუმცა, თუ არ მიუთითებთ საწყის ინდექსს მასივის ორივე განზომილებისთვის და გამოაცხადებთ მას ასე:

Dim Jan_Sales_Figures(31, 5) როგორც ვალუტა

მაშინ ეს ჩანაწერი განიხილება როგორც ორგანზომილებიანი მასივი, რომლის პირველი განზომილება შეიცავს 32 ელემენტს ინდექსებით 0-დან 31-მდე, ხოლო მასივის მეორე განზომილება შეიცავს 6 ელემენტს ინდექსებით 0-დან 5-მდე.

დინამიური მასივები

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

დინამიური მასივი გამოცხადებულია ცარიელი ფრჩხილებით, ასე:

Dim Team_Members() როგორც სტრიქონი

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

ReDim Team_Members (1-დან 20-მდე)

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

თუ Team_Size > 20, მაშინ ReDim Team_Members (1 to Team_Size) დასრულდება თუ

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

თუ Team_Size > 20, მაშინ ReDim Preserve Team_Members (1 to Team_Size) დასრულდება თუ

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

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