Welcome to Scribd, the world's digital library. Read, publish, and share books and documents. See more
Download
Standard view
Full view
of .
Look up keyword
Like this
1Activity
0 of .
Results for:
No results containing your search query
P. 1
Lab4-FctiiSimple

Lab4-FctiiSimple

Ratings: (0)|Views: 2|Likes:
Published by Martin Barbarozas
Lab4-FctiiSimple
Lab4-FctiiSimple

More info:

Categories:Types, School Work
Published by: Martin Barbarozas on Mar 14, 2013
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

02/16/2015

pdf

text

original

 
Laborator VBA pentru Excel 4
Tablouri
ş
i Sumar Vectori în VBA
În laboratorul precedent am v
ă
zut cum putem apela func
ţ
ii simple care accept
ă
ca parametrii vectori, respectivcum putem returna vectori în foaia Excel. În cazul tablourilor cu dou
ă
dimensiuni, lucrurile se simplific
ă
, nefiindnecesar
ă
folosirea func
ţ
iei de libr
ă
rie TRANSPOSE pentru a transforma vectorul VB într-un tablou Excel.
Func
ţ
ii Simple care returneaz
ă
un tablou:
 1. Lansa
ţ
i Microsoft Excel2. Lansa
ţ
i Visual Basic Editor
Public Function TestVariant(rng As Range)Dim Arr()Dim R As Integer, C As IntegerDim i As Integer, j As IntegerDim OneDimension As BooleanR = rng.Rows.CountC = rng.Columns.CountOneDimension = FalseIf R > 1 ThenIf C > 1 ThenReDim Arr(1 To R, 1 To C)ElseReDim Arr(1 To R): OneDimension = TrueEnd IfElseReDim Arr(1 To C): OneDimension = TrueEnd IfIf OneDimension ThenIf R > 1 ThenFor i = 1 To RArr(i) = rng(i)Next iElseFor i = 1 To CArr(i) = rng(i)Next iEnd IfElseFor i = 1 To RFor j = 1 To CArr(i, j) = rng(i, j)Next jNext iEnd IfIf OneDimension ThenTestVariant = WorksheetFunction.Transpose(Arr)ElseTestVariant = ArrEnd IfEnd Function
3. In VBE ad
ă
uga
ţ
i un modul
Module1
 4. Tasta
ţ
i codul de mai jos in modululModule15. Lansa
ţ
i comanda
Compile VBAProject
 din meniul
Debug
pentru a verifica codul6. Activa
ţ
i foaia de calcul Excel
ş
i insera
ţ
iurm
ă
toarea serie de valori:A B C D1 1 2 32 4 5 63 7 8 94 10 11 12567. Insera
ţ
i formula TestVariant în celula D1cu argumentul A1:C4.8. Transforma
ţ
i plaja de celule D1:F4 într-oformul
ă
matrice cum am v
ă
zut înlaboratorul 3.9. Insera
ţ
i în alte celule formula
TestVariant
dar selectând doar un vectorca argument.10. Ad
ă
uga
ţ
i un punct de oprire în linia EndFunction
ş
i ad
ă
uga
ţ
i variabila TestVariantla fereastra Watch cu comanda
AddWatch
. Rula
ţ
i codul pentru a vedea cumeste returnat tabloul Arr în cazul unuivector, sau în cazul unui tablou cu dou
ă
 dimensiuni.
 
Suma elementelor de deasupra diagonaleiprincipale:
1. Ad
ă
uga
ţ
i func
ţ
ia public
ă
al
ă
turat
ă
înmodulul Module1.2. Activa
ţ
i foaia de calcul Excel
ş
i insera
ţ
iformula
SumaDiagSup
într-o celul
ă
goal
ă
 din foaia de calcul Excel, dându-i caparametru plaja de celule A1:C4.
Public Function SumaDiagSup(rng As Range)As DoubleDim Arr()Dim Suma As DoubleDim R As Integer, C As IntegerDim i As Integer, j As IntegerR = rng.Rows.CountC = rng.Columns.CountArr = rngSuma = 0For i = 1 To RFor j = i To CSuma = Suma + Arr(i, j)Next jNext iSumaDiagSup = SumaEnd Function
Observa
ţ
ii
Remarca
ţ
i c
ă
am preluat elementele plajei decelule (Range) rng printr-o singur
ă
instruc
ţ
iunede atribuire în linia Arrr = rng pentru c
ă
Arr() afost definit ca Variant.Observ
ă
m c
ă
algoritmul SumaDiagSup nu arenici o problem
ă
dac
ă
matricea nu estep
ă
tratic
ă
.3. Modifica
ţ
i func
ţ
ia
SumaDiagSup
astfel încât în cazul unei matrice nep
ă
tratice,func
ţ
ia s
ă
returneze un mesaj de eroare.
Maximul elementelor de deasupra diagonalei principale:
1. Crea
ţ
i o nou
ă
func
ţ
ie denumit
ă
 
MaxDiagSup
în modulul Module1.2. Ad
ă
uga
ţ
i codul care ne va returna elementul maxim de deasupra diagonalei principale, dup
ă
modelulfunc
ţ
iei
SumaDiagSup
.3. Activa
ţ
i foaia de calcul Excel
ş
i insera
ţ
i formula
MaxDiagSup
într-o celul
ă
goal
ă
din foaia de calcul Excel,dându-i ca parametru plaja de celule A1:C4.
Public Function ScaleArr(rng As Range, ByVal sc As Double) _ As VariantDim Arr()Dim R As Integer, C As IntegerDim i As Integer, j As IntegerR = rng.Rows.CountC = rng.Columns.CountArr = rngFor i = 1 To RFor j = i To CArr(i, j) = Arr(i, j) * scNext jNext iScaleArr = ArrEnd Function
Func
ţ
ii simple care returneaz
ă
 un tablou – Înmul
ţ
irea cu unscalar:
1. Ad
ă
uga
ţ
i func
ţ
ia public
ă
 al
ă
turat
ă
în modulul Module1.2. Activa
ţ
i foaia de calcul Excel
ş
iinsera
ţ
i formula
ScaleArr
într-o celul
ă
liber
ă
, selectândaceea
ş
i plaj
ă
de celule ca înexemplul precedent
ş
i da
ţ
ivaloarea 3 scalarului sc(=ScaleArr(A1:C4,3)).3. Selecta
ţ
i un grup de 9 celule(3x3) cu celula care con
ţ
ineformula noastr
ă
în col
ţ
ulstânga sus.4. Transforma
ţ
i selec
ţ
ia într-oformul
ă
matrice.
Observa
ţ
ii
Remarc
ă
m c
ă
atât tabloul noastr
ă
Arr() l-am definit ca Variant, cât
ş
i func
ţ
ia
ScaleArr
.Dac
ă
declar
ă
m tabloul Arr() ca Variant putem face opera
ţ
ia de atribuire Arr = rng. Dac
ă
tabloul Arr() nu estedeclarat ca Variant, la atribuirea Arr = rng, se produce o eroare.
 
 
i := 1 j := 1c
ij
:= 0 j := j+1 j
pi := i + 1i
mk := 1c
ij
:= c
ij
 
+ a
ik
·
b
kj
 k := k + 1
 
k
n j := j + 1
Produsul a 2 matrice
Vom transcrie în VBA algoritmul prezentat înfigura al
ă
turat
ă
(produsul a dou
ă
matrice).Citi
ţ
i observa
ţ
ia prezentat
ă
în caseta de mai jos.1. Ad
ă
uga
ţ
i func
ţ
ia public
ă
 
ProdusMatrice
înmodulul Module1.2. Activa
ţ
i foaia de calcul Excel
ş
i crea
ţ
i dou
ă
 tablouri care s
ă
respecte condi
ţ
ia canum
ă
rul de linii al primului tablou sa fieegal cu num
ă
rul de coloane al celui de-aldoilea.3. Insera
ţ
i formula simpl
ă
 
ProdusMatrice
  într-o celul
ă
liber
ă
a foii.4. Selecta
ţ
i un grup de celule de forma mxp(num
ă
rul de rânduri al primei matrice xnum
ă
rul de coloane al celei de-a douamatrice) astfel încât celula care con
ţ
ineformula
ProdusMatrice
s
ă
se g
ă
seasc
ă
încol
ţ
ul din stânga sus al selec
ţ
iei.5. Transforma
ţ
i formula într-o formul
ă
 matriceal
ă
în toat
ă
selec
ţ
ia.
Observa
ţ
ii
Daca matricele care se înmul
ţ
esc sunt A(m,n)
ş
i B(n,p), matricea rezultant
ă
C=A·B va fi de rang (m,p).
=
 pmmm  p p pnnn  pnnn  p pnmnmmm nnnn
cccccccccbbbbbbbbbbbbaaaa aaaa aaaa
,2,1, ,22,21,2 ,12,11,1 ,2,1, ,12,11,1 ,22,21,2 ,12,11,1 ,1,2,1, ,21,22,21,2 ,11,12,11,1
LMOMM LLLLMOMM LLLMMOLM LL
 Un element
i,j 
al matricei C va fi ob
ţ
inut prin rela
ţ
ia:
=
=++++=
n jinni jnni ji ji ji
bababababac
1,,,1,,11,,22,,11,,
K
 

You're Reading a Free Preview

Download
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->