Lezione 12
Esercizi
Lez. 12 (13/14)
Elementi di Programmazione
1
Esercizio 1
• Scrivere la funzione sommaDis() da
aggiungere a quelle definite nel foglio
elettronico in uso in modo che calcoli la
somma algebrica dei numeri contenuti in
un intervallo.
– L’intervallo di celle può essere formato da più
intervalli.
• Il parametro ha quindi un numero variabile di
argomenti quindi è un ParamArray
Lez. 12 (13/14)
Elementi di Programmazione
2
Esercizio 1
Function sommaDis(ParamArray r() As Variant) As Double
Dim i As Integer, y As Variant
Dim x As Range
sommaDis = 0
Indispensabile per gestire
For i = LBound(r) To UBound(r)
più intervalli di valori
Set x=r(i)
For Each y In x
If (IsNumeric(y)) Then
sommaDis = sommaDis + y
End If
Next
Next
End Function
Lez. 12 (13/14)
Elementi di Programmazione
3
Esercizio 2
• Calcolare in valor medio dell’intervallo di celle
A1:B8 usando la funzione predefinita dei fogli di
lavoro Excel
– Tutte le funzioni contenute nel foglio di lavoro si
possono utilizzare mediante l’oggetto
Application.WorksheetFunction
– I nomi delle funzioni sono quelle usate nella versione
in Inglese
• L’elenco delle funzioni disponibili si può ottenere
– Selezionare la voce Guida di Riferimento a Visual Basic per
Microsoft Excel
– Quindi selezionare Concetti della programmazione
– Quindi Eventi, funzioni di Foglio di lavoro, Forme
– Infine la guida contiene un collegamento a tutte queste funzioni
Lez. 12 (13/14)
Elementi di Programmazione
4
Esercizio 2
Option Explicit
Sub calcola()
Range("D3") = _
Application.WorksheetFunction. _
Average(Range("A1:B8"))
End Sub
L’intervallo è di tipo Range
Lez. 12 (13/14)
Elementi di Programmazione
5
Esercizio 2
• Ripetere l’esercizio precedente quando i
valori sono nell’intervallo A1:B8 ed F1:F8
– Appoggiare nella soluzione i valori nella
variabile x
• La variabile sarà di tipo Variant o Double
Lez. 12 (13/14)
Elementi di Programmazione
6
Esercizio 2
Option Explicit
Sub calcola()
Dim x As Double
x = _
Application.WorksheetFunction. _
Average(Range("A1:B8", "F1:F8"))
Range("D3") = x
End Sub
Lez. 12 (13/14)
Elementi di Programmazione
7
Esercizio 3
• Leggere il contenuto del file mieiDati.txt contenuto nella
stessa cartella del foglio di lavoro. Questo file contiene
su ogni riga due numeri decimali. Scrivere il contenuto
del file nel foglio di lavoro a partire dalla cella A3 in
questo modo:
– Nella colonna A il primo valore della riga di dati
– Nella colonna B il secondo valore della riga di dati
– Utilizzando le funzione predefinite dal foglio elettronico min e
max calcolare per ogni colonna questi valori e scriverli nelle
righe 1 e 2 del foglio di lavoro.
– Utilizzando la formula ben formata per Excel scritta come stringa
nella cella D1 che ha come variabile _x, applicarla ad ogni
elemento della colonna A a partire da A3 scrivendo il risultato
nella colonna C nella riga corrispondente
Lez. 12 (13/14)
Elementi di Programmazione
8
Esercizio 3 (sol v1)
Option Explicit
Sub scaricaCalcola()
Dim riga As Integer
Dim v1 As Double, v2 As Double
Dim rg As Range, frm As String
Dim frms As String, i As Integer
riga = 2
Open ThisWorkbook.Path & "\" & _
"mieiDati.txt" For Input As #1
Do While Not EOF(1)
riga = riga + 1
Input #1, v1, v2
Cells(riga, 1) = v1
Cells(riga, 2) = v2
Loop
Close #1
If riga <> 2 Then
Set rg = Range("A3:A" & riga)
Range("A1") = Application.WorksheetFunction.Min(rg)
Range("A2") =
Application.WorksheetFunction.Max(rg)
Set rg = Range("B3:B" & riga)
Range("B1") = Application.WorksheetFunction.Min(rg)
Range("B2") =
Application.WorksheetFunction.Max(rg)
End If
frm = Range("D1").Value
For i = 3 To riga
frms = Replace(frm, "_x", CStr(Cells(i, 1).Value))
frms = "=" & Replace(frms, ",", “.")
Cells(i, 3).Formula = frms
Next
End Sub
Lez. 12 (13/14)
Elementi di Programmazione
9
Esercizio 3 (sol v2)
Option Explicit
Option Base 1
Sub esercizio()
Dim v1 As Double, v2 As Double
Dim i As Integer, r As Range
Dim formula As String, fmls As String
Open ThisWorkbook.Path & _
"\mieiDati.txt" For Input As #1
Set r = Range("A3:A" & (i - 1))
Cells(1, 1).Value =
_
Application.WorksheetFunction.Min(r)
Cells(2, 1).Value =
_
Application.WorksheetFunction.Max(r)
Set r = Range("B3:B" & (i - 1))
Cells(1, 2).Value = _
Application.WorksheetFunction.Min(r)
formula = Range("D1")
i = 3
Do While Not EOF(1)
Input #1, v1, v2
Cells(i, 1).Value = v1
Cells(i, 2).Value = v2
Cells(2, 2).Value = _
Application.WorksheetFunction.Max(r)
Close #1
End Sub
fmls = "=" & Replace(formula, _
"_x", _
Replace(CStr(v1), ",", "."))
Cells(i, 3).formula = fmls
i = i + 1
Loop
Lez. 12 (13/14)
Elementi di Programmazione
10
Esercizio 4
• Eliminare dal foglio di lavoro tutti i valori
non numerici contenuti nell’intervallo
A1:C7
– Usare la funzione isnumeric()
Lez. 12 (13/14)
Elementi di Programmazione
11
Esercizio 4
Option Explicit
Sub cancella()
Dim el As Range
For Each el In Range("A1", "C7")
If Not IsNumeric(el.Value) Then
el.Value = ""
End If
Next
End Sub
Lez. 12 (13/14)
Elementi di Programmazione
12
Esercizio 5
• Dato un foglio di lavoro in cui nella
colonna A e nella colonna B ci sono dei
valori numerici disegnare il grafico di
dispersione della colonna B in funzione
della colonna A
– Non so dove finiscono le due colonne
Lez. 12 (13/14)
Elementi di Programmazione
13
Esercizio 5
Sub Macro2()
'
' Macro2 Macro
' Macro recorded 12/18/2009 by %USERNAME%
'
Ricavato col registratore di macro;
Poi è adattato nella pagina
successiva
'
Charts.Add
ActiveChart.ChartType = xlXYScatterSmooth
ActiveChart.SetSourceData Source:=Sheets("Sheet4").Range("B1:B" & ), PlotBy:= _
xlColumns
ActiveChart.SeriesCollection(1).XValues = "=Sheet4!R1C1:R3C1"
ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet4"
ActiveSheet.Shapes("Chart 1").IncrementLeft 157.5
ActiveSheet.Shapes("Chart 1").IncrementTop -80.25
ActiveChart.PlotArea.Select
Selection.Left = 1
Selection.Top = 16
ActiveChart.ChartArea.Select
ActiveSheet.Shapes("Chart 1").IncrementLeft -135#
ActiveSheet.Shapes("Chart 1").IncrementTop 165.75
End Sub
Lez. 12 (13/14)
Elementi di Programmazione
14
Esercizio 5
Option Explicit
Sub disegna()
Dim riga As Integer
riga = 1
While Not IsEmpty(Cells(riga, 1))
riga = riga + 1
Wend
riga = riga - 1
Punti in cui è stato modificato
If riga = 0 Then
Exit Sub
End If
Charts.Add
ActiveChart.ChartType = xlXYScatterSmooth
ActiveChart.SetSourceData Source:=Sheets("Sheet4").Range("B1:B" & riga), PlotBy:= _
xlColumns
ActiveChart.SeriesCollection(1).XValues = "=Sheet4!R1C1:R" & riga & "C1"
ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet4"
ActiveChart.ChartArea.Select
End Sub
Lez. 12 (13/14)
Elementi di Programmazione
15
Scarica

EP1314Lz12