Sono pigro, lo so, ma io leggo la descrizione e la descrizione sul forum era scarsa, sul foglio era quella che ho trascritto.
Vediamo se ora facciamo un passo avanti...
1) Calcolare il "voto medio probabile": da come l' hai descritta basterebbe creare una colonna "Voti minimi" e una "Voti massimi", calcolare due voti di laurea basati su queste colonne e da questi due il risultato che cerchi.
Ogni VotoMinimo lo calcoli con la formula
- Codice: Seleziona tutto
=Se(VotoInColonnaD=0;18;VotoInColonnaD)
Analogamente per il voto massimo:
- Codice: Seleziona tutto
=Se(VotoInColonnaD=0;30;VotoInColonnaD)
In modo precauzionale e' meglio cambiare anche la formula che calcola la media ponderata in
- Codice: Seleziona tutto
=MATR.SOMMA.PRODOTTO(C2:C22;D2:D22)/MATR.SOMMA.PRODOTTO(--VAL.NUMERO(D2:D22);C2:C22)
Questo per svincolarsi dalla colonna Si/No
2) Simulazione esito: fissato un obiettivo di voto, simulare i voti mancanti necessari per ottenerlo
Allo scopo ti suggerisco di creare una ULTERIORE colonna "VotoSimulato"; questa colonna serve a evidenziare i voti reali, quelli di col D nel tuo file, da quelli immaginari.
Supponiamo che questi voti si troviano in col E (colonna da inserire, spostando le colonne compilate verso destra); per prima cosa saranno da variare le formule di VotoMinimo e VotoMassimo modificandole rispettivamente in
- Codice: Seleziona tutto
=Se(VotoInColonnaD=0;se(VotoInColonnaE=0;18;VotoInColonnaE);VotoInColonnaD)
=Se(VotoInColonnaD=0;se(VotoInColonnaE=0;30;VotoInColonnaE);VotoInColonnaD)
Avevi gia' calcolato il voto di laurea corrispondente ai VotiMinimi e ai VotiMassimi; per questo calcolo useremo il calcolo basato sui VotiMassimi.
Metti in una cella il voto Desiderato (io ho usato K18), e in un' altra cella la formula
- Codice: Seleziona tutto
=Ass(VotoDesiderato - VotoLaureaVotiMax)
Supponiamo che questa formula sia in L18.
A questo punto installa e lancia questa macro:
- Codice: Seleziona tutto
Sub Myvotes()
'Vedi http://www.pc-facile.com/forum/viewtopic.php?f=26&t=96590
Dim mySim As String, Voto, VotoR As String
VotoR = "D2:D22" '<<< L' area che contiene i voti "guadagnati sul campo"
' alla Destra dei voti veri si trovera' la colonna VotiSimulati
'
mySim = ""
Range(VotoR).Offset(0, 1).Clear
SolverReset
SolverOk SetCell:="$L$18", MaxMinVal:=2, ValueOf:=0, ByChange:="$E$20:$E$22", _
Engine:=3, EngineDesc:="GRG Nonlinear" '"Evolutionary"
For Each Voto In Range(VotoR)
If Voto = "" Then
mySim = mySim & "," & Voto.Offset(0, 1).Address
SolverAdd CellRef:=Voto.Offset(0, 1).Address, Relation:=1, FormulaText:="30"
SolverAdd CellRef:=Voto.Offset(0, 1).Address, Relation:=3, FormulaText:="18"
SolverAdd CellRef:=Voto.Offset(0, 1).Address, Relation:=4, FormulaText:="integer"
End If
Next Voto
mySim = Mid(mySim, 2, 999)
If Len(mySim) < 2 Then Exit Sub
'
SolverOk SetCell:="$L$18", MaxMinVal:=2, ValueOf:="0", ByChange:= _
mySim
SolverSolve '(True)
End Sub
La macro imposta una simulazione coerente con le celle vuote in colonna D (i voti reali)
Il risultato e' mostrato in questa immagine:
Uploaded with
ImageShack.us(click sull' immagine per vedere l' immagine completa)
Le frecce mostrano i "precedenti" delle celle coinvolte, limitatamente ai primi 3 livelli; le colonne VotoSimulati, VotoMin e VotoMax corrispondono a quanto detto prima. Il calcolo "Voto di Laurea" e' fatto secondo le formule che avevi scritto tu, non ho motivo di dubitare della loro precisione. La cella gialla e' L18a cui e' agganciato il Risolutore, la cella verde e' quella in cui ho scritto il voto desiderato.
Ho usato la modalita' di simulazione GRG Nonlinear, credo che per gli obiettivi del calcolo sia ampiamente sufficiente; comunque i tempi di ricerca della simulazione sono dipendenti dal numero di voci da simulare e hanno un andamento esponenziale, quindi sii paziente quando chiedi all' oracolo una proiezione molto futura.
Per un infelice "taglio" non si vedono le intestazioni di colonna, che vanno semplicemente dalla A in avanti.
Se sfrutti questi suggerimenti (anche parzialmente) ti prego di rimuovere l' indicazione (C) che hai inserito sul foglio
Ciao, fai sapere.