Folosirea funcției Val pentru a extrage un număr de la începutul unui șir (String)

Funcția Val, la fel ca Asc, nu este folosită prea des.

Ea convertește numerele dintr-un șir de caractere de tip string într-o valoare numerică.

Val urmează regulile:

  • Citește doar numerele din șirul de caractere.
  • Pornește citirea de la începutul șirului și citește șirul doar atâta timp cât recunoaște cifre/numere (digits).
  • Ignoră tab-urile, trecerea la alt rând și spațiile goale.
  • Recunoaște punctul ca separator zecimal separator, dar nu și virgula.

Asta înseamnă că dacă funcția Val va avea ca argumente mai multe cifre cu tab-uri între ele, ca pe linia a doua de mai jos, le va citi ca pe un singur număr (în acest caz, 445634.994711):

Dacă, totuși, funcția primește ca argument ceva care conține o combinație de numere și litere, funcția Val va citi numai numerele și șirurile recunoscute ca expresii numerice (de exemplu Val ("4E5") returnează 400000 deoarece citește expresia ca număr exponențial).

Din adresa afișată în exemplul următor, Val returnează 8661, ignorând celelalte numere din șir (deoarece se oprește la S din Strada, adică la primul caracter care nu este număr, tab, caracter pentru rând nou sau spațiu):

8661 Strada Scurta 15

Sintaxa pentru Val este simplă:

Val(string)

Aici, string este argument obligatoriu, format dintr-o expresie de tip string.

Comanda următoare folosește Val pentru a returna variabila numerică StreetNumber din șirul Address1:

StreetNumber = Val(Address1) 

Folosirea CInt în loc de Val

În general, trebuie utilizată funcția CInt în locul funcției Val atunci când se convertește textul la numere. Motivul este că CInt ia în considerare și setările regionale din Windows.

În America, de exemplu, virgula se folosește pentru a indica miile: 12.000. Funcția CInt se poate ocupa de acest lucru, pe când Val nu poate (și convertește "12.000" în 12):

Dim StrVar As String StrVar = "12,000"
MsgBox "Val = " & Val(StrVar) & " CInt = " & CInt(StrVar)

La executarea acestui cod, va fi afișată următoarea casetă de mesaj.

Astfel se poate vedea de ce se recomandă (în acest caz) folosirea CInt în loc de Val.

Val se oprește când întâlnește un caracter care nu este număr.

Deci, când apare virgula, se oprește.

Folosirea funcției Str pentru a converti un număr într-un șir text (String)

Așa cum se folosește CInt pentru a converti un șir de text într-o valoare numerică (descrierea în secțiunea anterioară), funcția Str se folosește pentru a converti o valoare numerică într-un șir. Dar se recomandă folosirea funcției CStr în locul funcției Str, din aceleași motive pentru care funcția CInt se folosește în locul funcției Val.

Numerele trebuie convertite într-un șir când trebuie concatenate informațiile conținute într-o valoare cu un șir. Concatenarea înseamnă adăugarea unui șir la altul, de exemplu concatenarea "123" cu "654", are ca rezultat textul "123654". Acest rezultat diferă de adunarea celor două cifre.

Concatenarea nu poate fi realizată prin simpla utilizare a operatorului +, deoarece VBA ar încerca să facă adunarea numerelor în loc să le concateneze.

Un șir de text este doar text. Este vorba de unul sau mai multe caractere alfanumerice, cum ar fi "55" – care este diferit de numărul 55. Nu se pot concatena "55" cu 55, pentru că nu sunt de aceleași tip.

Iată un exemplu. Să presupunem că au fost declarate variabilele strVarstaDvs de tip String și intVarsta de tip numeric. Nu se poate folosi instrucțiunea pentru concatenarea strVarstaDvs + intVarsta, deoarece sunt de tipuri diferite de date.

Mai întâi trebuie creat un șir din variabila intVarsta, după care se concatenează cu șirul strVarstaDvs. (Alternativ, se poate utiliza operatorul & pentru a concatena cele două variabile.)

Pentru a converti o valoare într-un șir, se folosește funcția CInt. Sintaxa pentru funcția CInt este următoarea:

CInt(number)

Aici, number este o variabilă care conține o expresie numerică (care poate fi de tip Integer, Long sau Double).

Mai jos este o procedură scurtă care arată cum se poate converti o valoare la un string:

Sub Varsta()
Dim intVarsta As Integer, strVarstaDvs As String 
intVarsta = InputBox("Introduceti varsta dvs:", "Varsta") 
strVarstaDvs = "Varsta dvs. este " & CInt(intVarsta) & "."
MsgBox strVarstaDvs, vbOKOnly + vbInformation, "Varsta"
End Sub

Folosirea unei scurtături de declarație

În exemplul Sub Varsta se poate vedea modul în care instrucțiunea Dim utilizează o scurtătură. Pe aceeași linie de cod sunt declarate două variabile diferite, separate printr-o virgulă, folosind aceeași comandă Dim.

Acest lucru este echivalent cu:

Dim intAge As Integer 
Dim strYourAge As String