Andmete organisatsioon, liigid ja tüübid

Organisatsiooni järgi võib andmed jagada

  • skalaarandmeteks,
  • struktuurandmeteks ja
  • objektideks.

Skalaarandmed esindavad üksikuid suurusi. Programmides kasutatakse neid konstantidena ja lihtmuutjatena, millel saab igal ajahetkel olla ainult üks väärtus.

Struktuurandmed ehk struktuurmuutujad on omavahel seotud väärtuste kogumikud. Andmekogumik tähistatakse programmis ühe nimega, viitamisviis üksikutele elementidele sõltub andmekogumiku liigist. Igale andmekogumiku elemendile eraldatakse koht mälus tema väärtuste salvestamiseks ning nende kasutamine on analoogiline skalaarmuutujate kasutamisega. Neile saab omistada väärtusi ning neid võib kasutada avaldistest väärtuste leidmisel. VBAs kasutatakse järgmisi andmekogumikke: massiive, kirjeid ja kirjemassiive.

Objekte käsitletakse sageli omaette olemitena, kuid teatud üldistusena võib neid vaadelda kui eriliiki struktureeritud andmeid. Näiteks graafikaobjekte nimetatakse sageli graafikaandmeteks. Siin vaadeldakse objekte eraldi.

Andmete põhiliikideks VBAs on stringid ehk tekstid,  arvud, ajaväärtused ja tõeväärtused. Iga andmeliigi jaoks on määratletud võimalikud väärtused ja nende diapasoon, lubatavad tehted ja operatsioonid.

Arvutisüsteemides on iga andmeliigi  jaoks ette nähtud kindel esitusviis ehk vorming, mida kasutatakse väärtuste salvestamiseks mälus ja tehete täitmisel protsessoris. Vorminguga on määratletud väärtuste salvestamiseks eraldatavate väljade struktuur ja pikkused. Ühe andmeliigi jaoks võib olla kasutusel mitu erinevat vormingut ehk tüüpi.

Stringi väärtuseks võib olla suvaline märgijada, mida saab arvutis esitada. Märkide valik ja nende arvutisisene esitus põhineb standarditega fikseeritud kodeerimissüsteemidel. Kasutatakse ASCII-või Unicode kooditabelite süsteemi. ASCII süsteemis vastab igale märgile kindel 8-bitine arv (kood), mis esitatakse ühe baidi abil,  Unicode’s – 16 bitine.  Stringmuutujate väärtuste salvestamiseks kasutatakse tavaliselt muutuva pikkusega välju: välja pikkus vastab märkide arvule muutuja jooksvas väärtuses. Stringi pikkusele (märkide arvule stringis) VBAs piiranguid praktiliselt ei ole.

Arvude salvestamiseks kasutatakse erinevaid vorminguid. Nad võivad olla esitatud üldises tekstivormingus (ASCII-koodis), kus igale numbrile eraldatakse üks bait. Kuna aga erinevate märkide hulk on arvude esituses üsna väike (numbrid, arvu märk ja võimalik murdosa eraldaja), siis on nende salvestamiseks ja töötlemiseks ette nähtud erivormingud, mis on ökonoomsemad üldisest tekstivormingust. Täisarvude ja reaalarvude jaoks kasutatakse fikseeritud pikkusega välju ning erinevaid esitusviise.
Täisarvud teisendatakse arvutis kahendsüsteemi ning esitatakse kahendnumbrite (bittide) jadana, ühte bitti kasutatakse arvu märgi esitamiseks. Arvu maksimaalne väärtus sõltub temale eraldatud välja pikkusest max = 2^(n-1) - 1, kus n on välja pikkus bittides. Kasutatakse kahe- ja neljabaidilisi välju (16 või 32 bitti), mille­le vastavad arvude maksimaalsed väärtused 2^15 ‑ 1 = 32 767  ja  2^31 ‑ 1 = 2 147 483 647.
Reaalarvud esitatakse mantissi ja eksponendi abil: arv = m•p^n, kus m on mantiss, n - eksponent ja p - arvu­süsteemi alus (2, 10 või 16). Mantiss esitab arvu numbreid, eksponent koma mõttelist asukohta. Kasutatakse nelja- ja kaheksabaidilisi välju, millele vastavad esitustäpsused 6‑7 (ühekordne täpsus) ja 15‑16 (topelttäpsus) numbrikohta ning maksimaalsed väärtused umbes 10^37 ja 10^307.

Ajaväärtus koosneb üldjuhul kuupäevast ja kellaajast. Need salvestatakse ühe reaalarvuna. Arvu täisosa näitab päevade arvu alates 01.01.1900, murdosa  kellaaega päeva osades alates keskööst. VBAs saab kasutada ajaväärtusi alates 01.01.100 kuni 31.12.9999.

Tõeväärtusi on kaks - tõene (True) ja väär (False). VBAs esitatakse nad täisarvudena: väärtusele väär vastab 0, väärtusele tõene vastab tavaliselt -1, kuid sellena käsitletakse ka suvalist nullist erinevat väärtust.

Programmi koostamisel saab määrata lihtmuutujate ja struktuurmuutujate elementide väärtuste jaoks sobivad esitusviisid ehk tüübid, kasutades spetsiaalseid deklareerimislauseid, millest peamine on Dim-lause. Järgnev Dim-lause deklareerib väärtuste tüübid nelja muutuja jaoks

Dim n As Integer, a As Single, b As Double, nimi As String

Lause määrab, et muutuja n väärtusteks võivad olla täisarvud, a väärtusteks  ühekordse täpsusega reaalarvud, d väärtusteks topelttäpsusega reaalarvud ning muutuja nimi väärtusteks stringid. Arvmuutujate jaoks tulenevad siit ka väljade pikkused: n - 2 baiti, a - 4 baiti ning b - 8 baiti. Stringuutuja nimi välja pikkus on muutuv ning sõltub talle omistatavatest väärtustest.

Andmetüüp määratletakse deklaratsioonis võtmesõna abil. Igale tüübile vastab kindel väärtuste esitusviis ja diapasoon ning välja pikkus. Mitme andmetüübi määramiseks võib kasutada ka tüübitunnuseid - kindla tähendusega sümboleid, mis lisatakse muutuja nime lõppu. Näiteks on järgnev lause samaväärne eelmisega

Dim n%, a!, b#, nimi$

Andmete tüübid VBAs

 Tüübi
 nimetus
Tüübi
tähis
 Väärtuse tüüp Välja pik­kus (B)  Väärtuste diapasoon
 Integer % Täisarv 2  -32 768 ... 32 767
 Long &  Pikk täisarv 4  -2 147 483 648 ...
  2 147 483 647
 Single !  Ühekordse täp-
susega  reaalarv
4  suurim väärtus umbes 10^37
 täpsus  6...7 numbrikohta
 Double #  Topelttäpsusega
 reaalarv
8  suurim väärtus umbes 10^307
 täpsus  15...16 numbrikohta
 String $  String (tekst)  märkide arv + 10 B  0 kuni umbes 2 mln märki
 Date    Kuupäev 8  01.01.100 ... 32.12.9999
 Boolean    Tõeväärtus 2  True või False
 Variant
 arvuga
   Suvaline arvu
 tüüp
16  suurim väärtus umbes 10^307
 täpsus  15...16 numbrikohta
 Variant
 stringiga
   String (tekst)  märkide arv + 22 B  0 kuni umbes 2 mln märki
 Objeki­
 muutujad
 Range
 Shape

 ...
   Viit objektile.  Määratletakse
 Set‑lausega
4
 

Vaikimisi, s.t kui muutuja ei ole deklareeritud, võetakse tema tüübiks abstraktne ehk universaalne andmetüüp Variant.   Taolisele muutujatele võib omistada suvalist tüüpi väärtusi. Väljade pikkused võetakse nende jaoks varuga ning väärtuse esitusviisi valib interpretaator sõltuvalt omistatava väärtuse tüübist. Näiteks arvu salvestamiseks, sõltumata tema tüübist ja suurusest, eraldatakse alati väli pikkusega 16 baiti. Variant-tüübi kasutamine arvandmete jaoks on üldiselt väga ebaökonoomne nii mäluruumi kasutamise kui ka programmi töökiiruse poolest. Selle tüübi korral on vajalik mälumaht keskmiselt 3...5 korda suurem ning arvutuste kiirus 2...3 väiksem kui spetsiaalselt arvude jaoks ettenähtud tüüpide kasutamisel.
Objektimuutujate jaoks määratakse tüüp klassi nime abil: Range, Shape, Worksheet jne.