Lezione 12

15
Lez. 12 (13/14) Elementi di Programmazione 1 Lezione 12 Esercizi

description

Lezione 12. Esercizi. 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. - PowerPoint PPT Presentation

Transcript of Lezione 12

Page 1: Lezione 12

Lez. 12 (13/14) Elementi di Programmazione 1

Lezione 12

Esercizi

Page 2: Lezione 12

Lez. 12 (13/14) Elementi di Programmazione 2

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

Page 3: Lezione 12

Lez. 12 (13/14) Elementi di Programmazione 3

Esercizio 1Function sommaDis(ParamArray r() As Variant) As Double Dim i As Integer, y As Variant

Dim x As Range sommaDis = 0 For i = LBound(r) To UBound(r) Set x=r(i) For Each y In x If (IsNumeric(y)) Then sommaDis = sommaDis + y End If Next Next End Function

Indispensabile per gestirepiù intervalli di valori

Page 4: Lezione 12

Lez. 12 (13/14) Elementi di Programmazione 4

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

Page 5: Lezione 12

Lez. 12 (13/14) Elementi di Programmazione 5

Esercizio 2

Option ExplicitSub calcola() Range("D3") = _ Application.WorksheetFunction. _ Average(Range("A1:B8"))End Sub

L’intervallo è di tipo Range

Page 6: Lezione 12

Lez. 12 (13/14) Elementi di Programmazione 6

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

Page 7: Lezione 12

Lez. 12 (13/14) Elementi di Programmazione 7

Esercizio 2Option ExplicitSub calcola() Dim x As Double x = _ Application.WorksheetFunction. _ Average(Range("A1:B8", "F1:F8")) Range("D3") = xEnd Sub

Page 8: Lezione 12

Lez. 12 (13/14) Elementi di Programmazione 8

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

Page 9: Lezione 12

Lez. 12 (13/14) Elementi di Programmazione 9

Esercizio 3 (sol v1)Option ExplicitSub 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 LoopClose #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

Page 10: Lezione 12

Lez. 12 (13/14) Elementi di Programmazione 10

Esercizio 3 (sol v2)Option ExplicitOption Base 1Sub 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 formula = Range("D1") i = 3 Do While Not EOF(1) Input #1, v1, v2 Cells(i, 1).Value = v1 Cells(i, 2).Value = v2 fmls = "=" & Replace(formula, _ "_x", _ Replace(CStr(v1), ",", ".")) Cells(i, 3).formula = fmls i = i + 1 Loop

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) Cells(2, 2).Value = _ Application.WorksheetFunction.Max(r) Close #1End Sub

Page 11: Lezione 12

Lez. 12 (13/14) Elementi di Programmazione 11

Esercizio 4

• Eliminare dal foglio di lavoro tutti i valori non numerici contenuti nell’intervallo A1:C7– Usare la funzione isnumeric()

Page 12: Lezione 12

Lez. 12 (13/14) Elementi di Programmazione 12

Esercizio 4Option ExplicitSub 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

Page 13: Lezione 12

Lez. 12 (13/14) Elementi di Programmazione 13

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

Page 14: Lezione 12

Lez. 12 (13/14) Elementi di Programmazione 14

Esercizio 5Sub Macro2()'' Macro2 Macro' Macro recorded 12/18/2009 by %USERNAME%'

'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.75End Sub

Ricavato col registratore di macro;Poi è adattato nella paginasuccessiva

Page 15: Lezione 12

Lez. 12 (13/14) Elementi di Programmazione 15

Esercizio 5Option ExplicitSub disegna() Dim riga As Integer riga = 1 While Not IsEmpty(Cells(riga, 1)) riga = riga + 1 Wend riga = riga - 1 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

Punti in cui è stato modificato