Sunteți pe pagina 1din 11

UNIVERSITATEA TEHNICĂ A MOLDOVEI

Facultatea Informatică, Calculatoare și Microelectronica


Departamentul Informatică și Ingineria Sistemelor

Lucrare de laborator nr. 4


la disciplina Programarea Procedurală

Tema: Obiectul Range

Examinator:Braniște Rodica

Chișinău 2020
Scopul lucrării:

4.1 Să fie elaborată o aplicaţie VBA, care va permite:


1. Pe Pagina1(Numere) în celulele A1-A20 să fie introduse aleator valori din intervalul (-
50;50).
2. Pe Pagina1(Numere) în celula C1 să se înscrie ”Cantitatea +”, iar în celula D1 să fie
introdusă cantitatea numerelor pozitive din celulele A1-A20.
3. Pe Pagina1(Numere) în celula C2 să se înscrie ”Cantitatea -”, iar în celula D2 să fie
introdusă cantitatea numerelor negative din celulele A1-A20.
4. Pe Pagina1(Numere) în celula C3 să se înscrie ”Cantitatea 0”, iar în celula D3 să fie
introdusă cantitatea numerelor egală cu 0 din celulele A1-A20.
5. Pe Pagina2(Pozitive) în celula B1 să se înscrie ”Pozitive” şi, începînd cu celula B2, într-o
coloană să se înscrie toate numerele pozitive.
6. Pe Pagina3(Negative) în celula C1 să se înscrie ”Negative” şi, începînd cu celula D1,
într-un rînd să fie înscrise toate numerele negative.
7. Să se creeze butonul ”Cantitatea” pe Pagina1 ”Numere” .
8. Să se creeze butonul ”Mutare” pe Pagina 1 ”Numere”.

4.2 De găsit elementul minimal și maximal, suma din diapozonul celuleor A1-A20 și media
aritmetică. Aplicația Excel conține în jur de 400 de funcții predefinite pentru pagina de lucru.

4.3 Scrieți un program ce determină maximul, minimul, media aritmetică și produsul numerelor,
ce se află în diapazonul A1:A10 pe pagina ”Numere”. Înscrieți rezultatele calculelor cu titluri
informative în celulele C2:D5. Rezolvați aceste probleme prin 2 metode.

4.4 Scrieți un program, care din perechea de numere A2 și B2, A3 și B3 ,..., va selecta cel mai
mare și-l va înscrie în coloana D, începînd cu celula D2. Creați un buton pentru ștergerea
rezultatelor din coloanele A,B și D.
Condiții:

• Cantitatea perechilor de numere pentru comparare, dar și însăși numerele trebuie să fie
generate aleator.
• În celulele A1, B1, D1 inscripțiile ”1-ul număr”, ”2-lea număr” și ”Cel mai mare” se
introduc din program.
• Programul începe să se execute prin apăsarea pe buton, creat pe aceeși pagină.
Creați un buton pentru ștergerea rezultatelor din coloanele A,B și D prin orice metodă cunoscută
de voi.
Etapele elaborării:
4.1 Am redenumit ”Sheet1” în ”Numere”. În celulele A1:A20 am generat aleatoriu cu ajutorul
funcțiilor Rnd și Integer Function numere cuprinse între diapazonul (-50;50). Pentru aceasta, am
creat butonul Numere, căruia i-am atribuit subprocedura ”Numere()”. Am creat foile de lucru cu
denumirea Pozitive și Negative.
La fel am creat butoanele cu atribuirea subprocedurilor după cum urmează:
 Butonul ”Curăță Numere” - Public Sub Sterge_Numere()
 Butonul ”Cantitatea” – Public Sub Cantit()
 Butonul ”Mutare” - Public Sub Mutare()
 Butonul ”Golire Calcule” - Public Sub Golire_Calcule()

„Screenshot-ul paginii Numere după ce facem click pe butonul Numere”

„Screenshot-ul paginii Numere după ce facem click pe butonul Cantitatea”


„Screenshot-ul paginii Pozitive după ce facem click pe butonul Mutare”

„Screenshot-ul paginii Negative după ce facem click pe butonul Mutare”

4.2 Am creat butonul ”Min, Max, Med, Suma - Met1” care va identifica minimul și maximul și
va calcula suma și media numerelor din diapazonul A1:A20. Rezultatele vor fi afișate în celulele
C5:C9. Pentru butonul respectiv am scris în VBA subprocedura Public Sub
min_max_med_prod().
„Screenshot-ul paginii Numere după ce facem click pe butonul Min,Max,Med,Suma-Met1”

4.3 Am creat butonul ”Min, Max, Med, Prod - Met2” ,care va identifica minimul și maximul și
va calcula produsul și media numerelor din diapazonul A1:A10. Rezultatele vor fi afișate în
celulele C13:C17. Pentru butonul respectiv am scris în VBA subprocedura Public Sub
min_mex_med_prod_V2().

„Screenshot-ul paginii Numere după ce facem click pe butonul Min,Max,Med,Prod-Met2”

4.4 Am creat foaia de lucru Perechi. Am scris subprocedura Sub Perechi_numere() în VBA
pentru generarea în coloana A și B unui număr aleator de perechi (între 6 și 20) de numere
întregi (între -50 și 50). Creez butonul ”Generare perechi”, cărui îi atribui subprocedura Sub
Perechi_numere().
Creez butonul ”Curăță Pagina” căruia îi atribui subprocedura Sub Curata_Pagina().
În colona D, începînd cu celula D2 se va afișa numărul maxim din perechea de pe același rînd.
„Screenshot-ul paginii Perechi după ce facem click pe butonul Generare Perechi”

Codul în VBA a fost structurat în 4 module:


Modulul Calcule
Public Sub min_max_med_prod()

Sheets("Numere").Cells(5, 3) = "Metoda 1 pentru A1:A20"

Dim I As Integer
Dim min As Integer, max As Integer, sum As Integer
Dim med As Double, prod As Double

sum = 0
prod = 1
min = Sheets("Numere").Cells(1, 1)
max = Sheets("Numere").Cells(1, 1)

For I = 1 To 20
If Sheets("Numere").Cells(I, 1) < min Then
min = Sheets("Numere").Cells(I, 1)
End If

If Sheets("Numere").Cells(I, 1) > max Then


max = Sheets("Numere").Cells(I, 1)
End If

sum = sum + Sheets("Numere").Cells(I, 1)


prod = prod * Sheets("Numere").Cells(I, 1)
Next I

med = sum / 20
With Sheets(1)
Range("C6") = "Elem. Minimal"
Range("D6") = min
Range("C7") = "Elem. Maximal"
Range("D7") = max
Range("C8") = "Media Elem."
Range("D8") = med
Range("C9") = "Suma Elem."
Range("D9") = sum
End With

Dim R1 As Range
Set R1 = Sheets("Numere").Range("C5:C10")
With R1
.Font.Italic = True
.Font.Color = RGB(0, 0, 128)
End With

End Sub

Public Sub min_mex_med_prod_V2()


Sheets("Numere").Cells(13, 3) = "Metoda 2 pentru A1:A10"
Range("C14") = "Elem. Minimal"
Range("D14") = Application.min(Range("A1:A10"))
Range("C15") = "Elem. Maximal"
Range("D15") = Application.max(Range("A1:A10"))
Range("C16") = "Media Elem."
Range("D16") = Application.Average(Range("A1:A10"))
Range("C17") = "Produsul Elem."
Range("D17") = Application.Product(Range("A1:A10"))

Dim R1 As Range
Set R1 = Sheets("Numere").Range("C13:C17")
With R1
.Font.Italic = True
.Font.Color = RGB(30, 144, 255)
End With
End Sub

Public Sub Golire_Calcule()


Sheets("Numere").Range("C1:D18").Clear
End Sub
Modulul Mutarea_Datelor

Public Sub Mutare()


Dim I As Integer
Dim nr_celula As Integer

Sheets("Pozitive").Range("C1:C21").Clear
Sheets("Negative").Range("C1:V1").Clear

nr_celula_poz = 2
nr_celula_neg = 4
Sheets("Pozitive").Cells(1, 2) = "Nr.Pozitive"
Sheets("Negative").Cells(1, 3) = "Nr.Negative"
Sheets("Pozitive").Cells(1, 2).Font.Color = RGB(115, 115, 115)
Sheets("Negative").Cells(1, 3).Font.Color = RGB(115, 115, 115)

For I = 1 To 20

If Sheets("Numere").Cells(I, 1) > 0 Then


Sheets("Pozitive").Cells(nr_celula_poz, 2) = Sheets("Numere").Cells(I, 1)
nr_celula_poz = nr_celula_poz + 1

ElseIf Sheets("Numere").Cells(I, 1) < 0 Then


Sheets("Negative").Cells(1, nr_celula_neg) = Sheets("Numere").Cells(I, 1)
nr_celula_neg = nr_celula_neg + 1
End If

Next I

End Sub
Public Sub CantPozNeg()
Rem Declararea variabilelor
Rem Pol - Variabila pentru calcularea cant. numerelor pozitive
Rem Otr - Variabila pentru calc. cant. numerelor negative
Rem Nul - Variabila pentru calc. cant. numerelor nule
Dim I As Integer, Pol As Integer, Otr As Integer, Nul As Integer
Rem Anularea variabilelor
Pol = 0
Otr = 0
Nul = 0
Rem Deschiderea ciclului pentru num?rarea numerelor
For I = 1 To 20
If Sheets("Numere").Cells(I, 1) > 0 Then
Pol = Pol + 1
ElseIf Sheets("Numere").Cells(I, 1) < 0 Then
Otr = Otr + 1
Else
Nul = Nul + 1
End If
Next I
Rem ?nscrierea pe pagina "Numere" rezultatul calculelor
With Sheets("Numere")
.Range("C1") = "Cantitatea +"
.Range("D1") = Pol
.Range("C2") = "Cantitatea -"
.Range("D2") = Otr
.Range("C3") = "Cantitatea 0"
.Range("D3") = Nul
End With
End Sub

Public Sub Golire_Pozitive()


Sheets("Pozitive").Range("B1:B30").Clear
End Sub

Public Sub Golire_Negative()


Sheets("Negative").Range("C1:V1").Clear
End Sub

Modulul Generare_Numere

Public Sub Numere()


Dim I As Integer
Randomize Timer
For I = 1 To 20
Sheets("Numere").Cells(I, 1).Value = Int(Rnd * 100) - 50
Next I
End Sub

Public Sub Sterge_Numere()


Dim I As Integer
For I = 1 To 20
Sheets("Numere").Cells(I, 1) = ""
Next I
End Sub

Public Sub Cantit()


Dim I As Integer
Dim poz As Integer, neg As Integer, nule As Integer
poz = 0
neg = 0
nule = 0
For I = 1 To 20
If Sheets("Numere").Cells(I, 1).Value > 0 Then
poz = poz + 1
ElseIf Sheets("Numere").Cells(I, 1).Value < 0 Then
neg = neg + 1
Else
nule = nule + 1
End If
Next I
With Sheets("Numere")
Range("C1") = "Cantitatea +"
Range("D1") = poz
Range("C2") = "Cantitatea -"
Range("D2") = neg
Range("C3") = "Cantitatea 0"
Range("d3") = nule
End With
Dim R1 As Range
Set R1 = Sheets("Numere").Range("C1:C3")
With R1
.Font.Italic = True
.Font.Color = RGB(115, 115, 115)
End With
End Sub

Modulul Perechi
Sub Perechi_numere()
Dim I As Integer
Sheets("Perechi numere").Cells(1, 1) = "1-ul numar"
Sheets("Perechi numere").Cells(1, 2) = "2-lea numar"
Sheets("Perechi numere").Cells(1, 4) = "Cel mai mare"
Randomize Timer
randnum = Int(6 + Rnd * (20 - 2 + 1)) 'randnum - nr aleatori de perechi formate

For I = 2 To randnum
Sheets("Perechi numere").Cells(I, 1).Value = Int(Rnd * 100) - 50
Sheets("Perechi numere").Cells(I, 2).Value = Int(Rnd * 100) - 50
Next I
For I = 2 To randnum
If Sheets("Perechi numere").Cells(I, 1).Value > Sheets("Perechi numere").Cells(I, 2).Value Then
Sheets("Perechi numere").Cells(I, 4).Value = Sheets("Perechi numere").Cells(I, 1).Value
Else
Sheets("Perechi numere").Cells(I, 4).Value = Sheets("Perechi numere").Cells(I, 2).Value
End If
Next I
End Sub

Sub Curata_Pagina()
Sheets("Perechi Numere").Cells.Clear
End Sub
Concluzii:
În urma realizării lucrării de laborator am învățat cum se declară și se apelează funcțiile în
VBA, structura subrutinei și instrucțiunile simple utilizate în VBA și despre cum se pot modifica
proprietățile obiectelor la etapa de proiectare și de executare. Am ănvățat despre funcția RND de
generare a numerelor aleatorii, cît și despre funcțiile VBA pentru calcularea sumei, mediei
aritmetice, a produsului unor numere, dar și pentru aflarea maximului și minimului dintr-un
vector.

S-ar putea să vă placă și