! #!! $ % $! & " &'"! & *+ "! " $ $ ""!,-! $!.! $! " # 1!! &' "



Relaterede dokumenter
' #$*# ' # #) * #& #& ' # #* #, #$--

$ %' ) * %' +,! - Myarray %' /0 / /0 /0

! " # $% &'!& & ' '" & # ' "&()(*& + + +,-' "&( # &(! (! " )(!# &!! (!&!! * (! +& (!!! & " " & & / & & (!

+ "&"' +,! ")& - )'.** /, )'.** 1 2 "&"' +,! 3 *4 5

Opret en Powerpoint præsentation automatisk med VBA

Hent filoplysninger fra billeder og filer

Project Step 7. Behavioral modeling of a dual ported register set. 1/8/ L11 Project Step 5 Copyright Joanne DeGroat, ECE, OSU 1

Det er muligt at chekce følgende opg. i CodeJudge: og

Notesæt til Optimering i Microsoft Excel

Erhvervsøkonomisk Institut. Vejleder: Henrik Nørholm BILAG. Analyse og prissætning af JB Ti Aktier I skyggen af en finanskrise

Værktøjer fra værktøjskassen. Søren Breddam, Stevns Kommune

Indholdsfortegnelse Forord...8 Makroer samt aktivere Udvikler-fanen...10 Makrosikkerhed (Sikkerhedsindstillinger)...13

Aktivering af Survey funktionalitet

Visual Basic for begyndere

Programmering for begyndere Lektion 2. Opsamling mm

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 2

Løsning af skyline-problemet

Udvikling af DOTNET applikationer til MicroStation i C#

Programmering og Problemløsning, 2017

vil jeg blive mindet om det af VBA allerede mens jeg skriver koden, da der er tale om en såkaldt kompileringsfejl:

Martin Olsen. DM507 Projekt Del I. 19. marts 2012 FOTO: Colourbox

DIVAR VIGTIGT! / IMPORTANT! MÅL / DIMENSIONS. The DIVAR wall lamp comes standard. with 2.4 m braided cord and a plug in power supply (EU or UK).

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 3

Spil Master Mind. Indledning.

Send fra Access.

Fra ER-Diagram til Relationel model i 7 step

BACK-END OG DATA: ADMINISTRATION HVAD ER DE NYE MULIGHEDER MED VERSION 7.1? STEFFEN BILLE RANNES, 4. FEBRUAR 2015

Skriftlig Eksamen Beregnelighed (DM517)

Noter til kursusgang 8, IMAT og IMATØ

Systemkald DM Obligatoriske opgave. Antal sider: 7 inkl. 2 bilag Afleveret: d. 18/ Afleveret af: Jacob Christiansen,

MS Visual Studio Basic En kort vejledning

Linear Programming ١ C H A P T E R 2

Programmering I Java/C#

DIVAR VIGTIGT! / IMPORTANT! MÅL / DIMENSIONS

LUL s Flower Power Vest dansk version

CHR/chr veksling med sporbarhedssystemet T-doc. Neden stående krav skal være opfyldt vedr. dataudveksling mellem apparater og sporbarhedssystem.

Appendiks A Modeller til Strategisk Analyse

StarWars-videointro. Start din video på den nørdede måde! Version: August 2012

Terese B. Thomsen 1.semester Formidling, projektarbejde og webdesign ITU DMD d. 02/

AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007

Vindpark Øster Børsting. Bilag 7 Vindberegninger og vurderinger

PHP 3 UGERS FORLØB PHP, MYSQL & SQL

Ugeseddel 4 1. marts - 8. marts

PARALLELIZATION OF ATTILA SIMULATOR WITH OPENMP MIGUEL ÁNGEL MARTÍNEZ DEL AMOR MINIPROJECT OF TDT24 NTNU

To the reader: Information regarding this document

Part 5 Leisure Time and Transport

SAX Simple API for XML.

MapBasic brugergruppe. Geografiske objekter. Peter Horsbøll Møller Senior Systems Engineer April 2013

X M Y. What is mediation? Mediation analysis an introduction. Definition

Programmering C RTG

Fejlbeskeder i SMDB. Business Rules Fejlbesked Kommentar. Validate Business Rules. Request- ValidateRequestRegist ration (Rules :1)

VægtAgenten Betjeningsvejledning Version 3.0

Farvekoder på vejeceller leveret af NTT fra 2017

Help / Hjælp

IBM Network Station Manager. esuite 1.5 / NSM Integration. IBM Network Computer Division. tdc - 02/08/99 lotusnsm.prz Page 1

Skriftlig eksamen i Datalogi

Skriftlig Eksamen Automatteori og Beregnelighed (DM17)

Kapitel 9. Optimering i Microsoft Excel 97/2000

Listen Mr Oxford Don, Additional Work

Portal Registration. Check Junk Mail for activation . 1 Click the hyperlink to take you back to the portal to confirm your registration

Programmering og Problemløsning, 2017

MapBasic hvad kan det bruges til? Insights Danmark 2011

Transkript:

""# "" # $ % $ & " &'" & " "()" *+ " " $ $ *+" $ %"&'" "( "",- $. + /"&'"-0 $ " # 1 &' " +"%

$ %'('" 2 ' ) )030 )030) * )033 " )033 // " " 1 1 41 ")035)036 5- " " " *+773,8 *+ % " "

)035& " )036& " 1 %" "/

)03,/ $ &) '*+"#"" 2 '())0301 )035)036/)03,/1 " $6$7)03, )039/ )039/ 1 )03:. ;0, (<4*+ =4*+#

>-?*+@- " )03:1 % $, -" % +) &' "* +&' )037 )037+&'

$,$. #/" " ) ) " 4A 2)&" ) Private Sub Workbook_Open() Dim sht As Worksheet Worksheets("Forklaring").Activate Range("F4").Select For Each sht In ActiveWorkbook.Worksheets If sht.name <> "Forklaring" Then sht.visible = False Next SolverForm.Show. ) $0 "&'#"#-". ' +) " / #2;.&@" ) %B;B " )% " ""#2 ; * * #2 #2 ; ;.; #2;$C % >? " 44'' D*+'>*? 4'

)03E+) $0$ (" "'#1#2"+&3#-" #2 &@) #2F;>? #2 G% #2 C ; 2 Private Sub OKButton_Click() ' Vær sikker på at boksen ikke er tom, og at den indeholder et tal. If NProjBox = "" Or Not IsNumeric(NProjBox) Then MsgBox "Indtast et positivt antal projekter.", _ vbinformation, " Fejl i indtastningen" NProjBox.SetFocus Exit Sub NProjects = NProjBox ' Tjek at antallet af projekter er imellem 1 og 50. If NProjects < 1 Or NProjects > 50 Then MsgBox "Indtast et tal imellem 1 og 50.", _ vbinformation, "Fejl i indtastningen" NProjBox.SetFocus Exit Sub Unload Me Private Sub CancelButton_Click() Unload Me End & 2 ( Private Sub UserForm_Initialize() NProjBox = "".% (

Occurs after an object is loaded, but before it's shown. Syntax Private Sub object_initialize() The object placeholder represents an object expression that evaluates to an object in the Applies To list. Remarks The Initialize event is typically used to prepare an application or UserForm for use. Variables are assigned initial values, and controls may be moved or resized to accommodate initialization data. $4 %5 "- " "* ) > 1? />?./>?"+) " $4$ 6 ("(#" Option Explicit Option Base 1 ' Definitioner af modulniveau variable ~ globale variable: ' NProjects - antallet af potentielle projekter (<=50) ' ZeroOne - binært array, indikerer hvilket projekt som vælges af heuristikken ' LeftoverHeur - budgetoverskud som heuristik ikke udnytter ' TotNPVHeur - total NPV fundet af heuristik ' LeftoverOpt - budgetoverskud som optimal løsning ikke udnytter ' TotNPVOpt - total NPV fundet ved den optimale metode Public NProjects As Integer, ZeroOne(50) As Integer, LeftoverHeur As Single, _ TotNPVHeur As Single, LeftoverOpt As Single, TotNPVOpt As Single $4$ 6 " Sub Main() Application.ScreenUpdating = False ' Få antallet af projekter. ProjectsForm.Show ' Udregn tilfældig inputs, som skal indgå i modellen _ ' (NPV værdier, omkostninger og budgettal). Call GetInputs ' Sorter projekter. Call SortProjects ' Udregn den optimale investeringsstrategi. Call RunSolver ' Udregn investeringsstrategi med heuristisk metode. Call Heuristic

' Reporter resultater. Call CreateReport $4$ "& " D. &'%1*. *+ 4 " B%B 2. = & " $.C0 Sub GetInputs() Dim i As Integer ' Vis og aktiver Model arket. With Worksheets("Model").Visible = True.Activate End With With Range("A4") ' Fjern gammel data og range navne. Range(.Offset(0, 1),.Offset(4, 1).End(xlToRight)).ClearContents For i = 1 To NProjects.Offset(0, i) = i Next Range(.Offset(1, 1),.Offset(1, NProjects)).Name = "InvLevel" Range(.Offset(2, 1),.Offset(2, NProjects)).Name = "NPV" Range(.Offset(3, 1),.Offset(3, NProjects)).Name = "InvCost" ' Udregn ratiet NPV / investeringsomkostninger. Range(.Offset(4, 1),.Offset(4, NProjects)).FormulaR1C1 = "=R[-2]C/R[-1]C" End With ' Generer tilfældigt NPV-værdier, omkostninger og budgetter. Anvend Round ' funktionen med andet argument -2, så tallene afrundes ' til nærmeste 100. Hver NPV er normalfordelt med middelværdi på 25000 og ' standardafvigelse på 6000. Range("NPV").Formula = "=Round(NORMINV(RAND(),25000,6000),-2)" ' Hver omkostning er imellem 10% og 40% af korresponderende NPV. Range("InvCost").Formula = "=Round(NPV*(.1+.3*RAND()),-2)" ' Budgettet er mellem 30% og 90% af de totale omkostninger af alle investeringer. Range("Budget").Formula = "=Round(SUM(InvCost)*(.3+.6*RAND()),-2)" ' "Frys" de tilfældige tal. With Union(Range("NPV"), Range("InvCost")).Copy.PasteSpecial Paste:=xlValues End With With Range("Budget").Copy.PasteSpecial Paste:=xlValues End With ' fjern de stiblede linier rundt om det kopierede område. Application.CutCopyMode = False ' Initial løsning => alle sættes lig 1.

Range("InvLevel") = 1 ' Udregn den total investeringsomkostning og den total NPV. Range("TotCost").Formula = "=Sumproduct(InvCost,InvLevel)" Range("TotNPV").Formula = "=Sumproduct(NPV,InvLevel)" $4$, #1#2"+& " + *+= # Sub SortProjects() ' Sorter projekterne i stigende orden i fht. NPV/investeringomkostninger. With Range("A4") Range(.Offset(1, 1),.Offset(4, NProjects)).Sort _ Key1:=Range("B8"), Order1:=xlAscending, _ Orientation:=xlLeftToRight, Header:=xlNo End With $4$0 ("# " 1 "&'"/.4-# " " " Sub RunSolver() ' Opstil og kør løseren for at finde en optimal heltallig løsning. SolverReset SolverOK SetCell:=Range("TotNPV"), MaxMinVal:=1, ByChange:=Range("InvLevel") ' De to forgående linier gentages nu - BUG i løserens VBA funktioner. SolverReset SolverOK SetCell:=Range("TotNPV"), MaxMinVal:=1, ByChange:=Range("InvLevel") ' Tilføj ligninger og kør løseren. SolverOptions IntTolerance:=0, AssumeLinear:=True SolverAdd CellRef:=Range("TotCost"), Relation:=1, FormulaText:="Budget" SolverAdd CellRef:=Range("InvLevel"), Relation:=5 SolverSolve UserFinish:=True ' Opfag den totale NPV og budgetoverskuddet. TotNPVOpt = Range("TotNPV") LeftoverOpt = Range("Budget") - Range("TotCost") $4$4 7"#& " "%")"H#%- )"" *+

H#>?0 " Sub Heuristic() ' Find den heuristiske løsning ved at vælge investeringerne i faldende orden af ' NPV/inv.Omk. Dim i As Integer ' Initialiser værdier så ingen projekter p.t. er valgte og så budgettet er ' tilrådig. For i = 1 To NProjects ZeroOne(i) = 0 Next TotNPVHeur = 0 LeftoverHeur = Range("Budget") ' Loop igennem alle projekter i faldende orden af NPV/inv.Omk. Includer projektet ' hvis omkostningen er mindre end budget som p.t. er tilrådighed. For i = NProjects To 1 Step -1 If Range("InvCost").Cells(i) <= LeftoverHeur Then LeftoverHeur = LeftoverHeur - Range("InvCost").Cells(i) TotNPVHeur = TotNPVHeur + Range("NPV").Cells(i) ZeroOne(i) = 1 Next $4$8 9#"""# " ;1 "1 ")" """.)" " I " &1 $ Sub CreateReport() Dim i As Integer, InvestOpt As String, InvestHeur As String, NOpt As Integer, NHeur As Integer, _ Counter1 As Integer, Counter2 As Integer ' Skjul Model arket og vis og aktiver Report arket. Worksheets("Model").Visible = False With Worksheets("Report").Visible = True.Activate End With Range("A1").Select ' Find antallet af investeringer fundet af den optimale plan (NOpt) og fundet af suboptimale plan (NHeur). NOpt = 0 NHeur = 0 For i = 1 To NProjects If Range("InvLevel").Cells(i) = 1 Then

NOpt = NOpt + 1 If ZeroOne(i) = 1 Then NHeur = NHeur + 1 Next ' Dan strengene InvestOpt og InvestHeur som skal holde de investeringer der deltages i af de to metoder. ' Først initialiseres strenge og tællere. InvestOpt = "" InvestHeur = "" Counter1 = 0 Counter2 = 0 ' Loop igennem alle projekter. For i = 1 To NProjects ' Tjek om dette projekt er i den optimale løsning. If Range("InvLevel").Cells(i) = 1 Then Counter1 = Counter1 + 1 ' Tilføj et komma til strengen hvis dette projekt ikke er det sidste projekt. If Counter1 < NOpt Then InvestOpt = InvestOpt & i & "," Else InvestOpt = InvestOpt & i ' Tjek om dette projekt er med i den heuristiske løsning. If ZeroOne(i) = 1 Then Counter2 = Counter2 + 1 ' Tilføj et komma til strengen hvis dette projekt ikke er det sidste projekt. If Counter2 < NHeur Then InvestHeur = InvestHeur & i & "," Else InvestHeur = InvestHeur & i Next ' Skriv resultaterne i Report arket - range navnene blev defineret på designtidspunktet. Range("InvestOpt") = InvestOpt Range("InvestHeur") = InvestHeur Range("LeftoverOpt") = LeftoverOpt Range("TotNPVOpt") = TotNPVOpt Range("LeftoverHeur") = LeftoverHeur Range("TotNPVHeur") = TotNPVHeur $4$: ( " " " Sub ViewReport() Worksheets("Report").Activate Range("A1").Select

Sub ViewModel() With Worksheets("Model").Visible = True.Activate End With Range("A2").Select $8 &- % " $: ("# 0? D. "( Range("NPV").Formula = "=Round(NORMINV(RAND(),25000,6000),-2)" %*+ / B%B & )"" "%( RandNPV = Round(Application.NormInv(Rnd, 25000, 6000), -2) C*+1*+ " B%B #D. " % 1J% 3? ""( % K" L 5? D %*+ 6? >?

"( " " & " C " ( % *+=