Sunteți pe pagina 1din 3

Laborator VBA pentru Excel 3

Vectori n VBA
Pentru a lucra cu vectori n Excel VBA, vom transmite ca parametrii n func ia VBA o plaj de valori (Range). Func ii Simple care returneaz o singur valoare Suma elementelor unui vector: 1. 2. 3. 4. Lansa i Microsoft Excel Lansa i Visual Basic Editor In VBE aduga i un modul Module1 Tasta i codul de mai jos in modulul Module1

5. Lansa i comanda Compile VBAProject din meniul Debug pentru a verifica codul Public Function SumaVector(rng As Range) As Double 6. Activa i foaia de calcul Excel i insera i Dim i As Integer urmtoarea serie de valori:
Option Explicit Dim n As Integer Dim Suma As Double n = rng.Rows.Count ReDim Vect(1 To n) As Double Suma = 0 For i = 1 To n Vect(i) = rng(i) Suma = Suma + Vect(i) Next i SumaVector = Suma End Function

A 1 2 3 4 5 6 1 3 5 7 9 11

7. Muta i cursorul n celula B6 i lansa i comanda Insert Function. Selecta i func ia SumaVector n categoria User Defined. 8. n fereastra Function Arguments, selecta i plaja de celule A1:A6 i clic OK.

Observa ii Instruc iunea ReDim permite dimensionarea sau redimensionarea unui tablou alocat dinamic care a fost declarat formal cu instruc iunea Dim. Dac instruc iunea formal Dim lipsete, tabloul va fi declarat la prima dimensionare dinamic. Range este un obiect Excel care poate fi o celul, un rnd, o coloan sau un grup de celule. Rows este o proprietate a obiectului Range, iar Count este o proprietate a Rows. Proprietatea Count ne returneaz numrul de rnduri ale obiectului Range.
Public Function MaxVector(rng As Range) As Double Dim i As Integer Dim n As Integer Dim Max As Double ' Preluarea plajei de celule n = rng.Rows.Count ReDim Vect(1 To n) As Double For i = 1 To n: Vect(i) = rng(i): Next i Max = Vect(1) For i = 2 To n If (Vect(i) > Max) Then Max = Vect(i) End If Next i MaxVector = Max End Function

Maximul elementelor unui vector: 1. Aduga i func ia public alturat n modulul Module1. 2. Activa i foaia de calcul Excel i insera i formula MaxVector n celula C6, selectnd aceeai plaj de celule ca n exemplul precedent (=MaxVector(A1:A6)). Observa ii Dei VB nu are un simbol pentru separarea instruc iunilor, putem grupa mai multe instruc iuni pe un singur rnd, dac instruc iunile sunt separate prin : (dou puncte).

Function ScaleVector(rng As Range, sc As Double) As Double() Func ii simple care returneaz un vector nmul irea cu un Dim i As Integer scalar: Dim n As Integer ' Preluarea plajei de celule n = rng.Rows.Count ReDim Vect(1 To n) As Double For i = 1 To n: Vect(i) = rng(i): Next i ReDim Scaled(1 To n) As Double For i = 1 To n Scaled(i) = sc * Vect(i) Next i ScaleVector = Scaled End Function

1. Aduga i func ia public alturat n modulul Module1. 2. Activa i foaia de calcul Excel i insera i formula ScaleVector n celula D1, selectnd aceeai plaj de celule ca n exemplul precedent i da i valoarea 3 scalarului sc (=ScaleVector(A1:A6,3)).

Observa ii Remarcm c la inserarea formulei ScaleVector, Excel va insera n celula care con ine formula doar primul element al vectorului returnat de func ie. Pentru a insera ntreg vectorul returnat de func ie, va trebui s folosim Formulele matrice. Pentru a aduga o formul matrice proceda i astfel: 3. 4. 5. 6. Edita i formula din celula D1 de forma =TRANSPOSE(ScaleVector(A1:A6,3)). Selecta i grupul de celule D1:D6. Edita i formula din D1 apsnd F2. Apsa i CTRL+SHIFT+ENTER.

Pentru a gsi un singur element al vectorului returnat de func ie, putem folosi i func ia INDEX. De exemplu, pentru a insera ntr-o celul elementul al patrulea al vectorului returnat de func ia ScaleVector, inserm formula =INDEX(ScaleVector(A1:A6,3),4).
Public Function Suma2Vec(rng1 As Range, rng2 As Range) As _ Variant Dim i As Integer Dim n1 As Integer Dim n2 As Integer ' Preluarea plajei de celule n1 = rng1.Rows.Count n2 = rng2.Rows.Count If (n1 <> n2) Then Suma2Vec = "Dimensiuni inegale." Exit Function End If ReDim Vect(1 To n1) As Double For i = 1 To n1 Vect(i) = rng1(i) + rng2(i) Next i Suma2Vec = Vect End Function

Suma a 2 vectori: 1. Aduga i func ia public alturat n modulul Module1. 2. Activa i foaia de calcul Excel i insera i formula Suma2Vec n celula E1, i da i parametrii func iei plajele de celule A1:A6 i D1:D6. 3. Modifica i formula din celula E1, imbricnd-o n func ia TRANSPOSE, ca n obseva ia precedent. 4. Aduga i o formul matrice n plaja de celule E1:E6, cum a fost explicat n observa ia precedent (Pentru a aduga o formul matrice).

i := 1

Sortarea unui vector Vom transcrie n VBA algoritmul de sortare Bubble Sort al crui schem logic este prezentat n figura alturat. La prima itera ie dup i, primele dou elemente ale vectorului sunt comparate i sunt interschimbate dac primul element este mai mare dect al doilea. Dup aceea se compar al doilea element cu al treilea. Remarca i c n acest moment elementul al doilea poate fi de fapt primul element care a fost interschimbat cu al doilea n compara ia precedent. n final, rezultatul primei itera ii este c elementul cel mai mare al vectorului este mpins (bubbled) n ultima pozi ie. n a doua itera ie se continu din nou din prima pozi ie a vectorului pn la penultima pozi ie, .a.m.d.

j := 1

A(j) > A (j+1)

temp := A(j) A(j) := A(j+1) A(j+1) := temp

j := j+1

jn-i

i := i + 1

in-1

Public Function Bubble(rng As Range) Dim temp As Double Dim i As Integer, j As Integer Dim n As Integer n = rng.Rows.Count ReDim A(1 To n) For i = 1 To n A(i) = rng(i) Next i For i = 1 To n - 1 For j = 1 To n - i If (A(j) > A(j + 1)) Then temp = A(j) A(j) = A(j + 1) A(j + 1) = temp End If Next j Next i Bubble = A End Function

1. Aduga i func ia public alturat n modulul Module1. 2. Activa i foaia de calcul Excel i aduga i seria de valori 1, 5, 4, 2, 3 n celulele F1:F5. 3. Insera i formula Bubble n celula G1, i da i parametrii func iei plaja de celule F1:F5. 4. Modifica i formula din celula G1, imbricnd-o n func ia TRANSPOSE, ca n obseva ia (Pentru a aduga o formul matrice). 5. Aduga i o formul matrice n plaja de celule G1:G5, cum a fost explicat n observa ia (Pentru a aduga o formul matrice). 6. Aduga i un punct de oprire n linia For i = 1 To n 1, i aduga i variabila de urmrit A la fereastra Inspector(Watch) cum a fost explicat n laboratorul 1 Func ii Simple la punctul Inspectarea variabilelor cu Inspectorul. 7. Executa i codul pas cu pas i urmri i modificarea vectorului A la fiecare pas de execu ie.