Anzeige
Archiv - Navigation
1292to1296
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA: Simulation funktioniert nicht richtig

VBA: Simulation funktioniert nicht richtig
04.01.2013 15:31:43
Daniel
Sehr geehrte Excel-Anwender,
erstmal eine Frohes Neues Jahr noch allerseits.
Auch möchte ich mich schon vorrab für die freundliche Unterstützung und Hilfe bedanken! Ich komme ohne Hilfe derzeit alleine einfach nicht weiter...
Die komplette Datei mit Beschreibung und Code kann in der nachfoldenden Datei eingesehen werden. Die Beschreibung samt Beispielrechnung steht oberhalb des Codes in Modul 1.
https://www.herber.de/bbs/user/83254.xlsm
Allgemein:
Es soll ein Batterie-Fotovoltaik-System simuliert werden.
Programm macht Probleme bei:
- einlesen der Werte aus Tabellenblatt "roh" funkt nicht richtig (evtl. Variablen Variant zu Double etc.)
(zum testen nutzte ich dann eine schleife zum füllen mit Werten...)
- Probleme mit der Anzeige des Batterieinhalts - zeigt immer den alten Wert nicht den neuen errechneten an

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA: Simulation funktioniert nicht richtig
04.01.2013 19:33:02
ransi
Hallo
Ich habs mal überflogen.
Teste mal:
Sub Berechnungtest()
'Variablen mit Rechenergebnissen über die komplette Zeitreihe
Dim i As Long
Dim Last As Variant
Dim Ueberschuss(1 To 50000) As Variant
Dim Battery(0 To 50000) As Variant
Dim Einspeise(1 To 50000) As Variant
Dim Bezug(1 To 50000) As Variant
Dim EV(1 To 50000) As Variant
Dim VerlusteBat(1 To 50000) As Variant
Dim VerlusteNetz(1 To 50000) As Variant
Dim PV As Variant
'Alles auf Null stellen (beziehungsweise zum testen der Werte...)
For i = 1 To 50000
'PV(i) = 100
'Battery(i) = 0
'Last(i) = 75
'EV(i) = 0
'Ueberschuss(i) = 0
'Einspeise(i) = 0
'Bezug(i) = 0
'VerlusteBat(i) = 0
'VerlusteNetz(i) = 0
Next i
'PV und Lastdaten in die Variablen übergeben
PV = Worksheets("roh").Range("B2:B50001").Value
Last = Worksheets("roh").Range("C2:C50001").Value
'Anzeige der vorhandenen Eingangsdaten
Sheets("ziel").Range("B2:B50001") = PV
Sheets("ziel").Range("C2:C50001") = Last
'Variablen mit Rechenergebnissen in einem Zeitschritt
Dim temp_PV As Double
Dim temp_Last As Double
Dim temp_EV As Double
Dim temp_Ueberschuss As Double
Dim temp_Einspeise As Double
Dim temp_Bezug As Double
Dim temp_BatteryNeu As Double
Dim temp_VerlusteBat As Double
Dim temp_VerlusteNetz As Double
'Variablen der Parameterdaten
Dim temp_BatteryAlt As Double
Dim max_Kapazitaet As Double
Dim Platz As Double
Dim PV_Anlagengroesse As Double
Dim Wirkungsgrad_Bat As Double
Dim Netzknotenmaximum As Double
'fixe Parameter Festlegen:
max_Kapazitaet = 10   'Batteriegröße festlegen (später aus Userform uebernehmen)
Wirkungsgrad_Bat = 0.88  '(später aus Userform uebernehmen)
PV_Anlagengroesse = 50 '(kWp)(später aus Userform uebernehmen)
Netzknotenmaximum = 0.7 '(%) (später aus Userform uebernehmen)
Battery(0) = 0   'Batterie-Inhalt bei Rechnungsbeginn festlegen (ungeladen = 0 , geladen =  _
max_Kapazitaet)
'für alle einzelnen Zeitschritte durchrechnen
For i = 1 To 50000
temp_PV = CDbl(PV(i, 1))
temp_Last = CDbl(Last(i, 1))
temp_EV = CDbl(EV(i))
temp_Ueberschuss = CDbl(Ueberschuss(i))
temp_Einspeise = CDbl(Einspeise(i))
temp_Bezug = CDbl(Bezug(i))
temp_VerlusteBat = CDbl(VerlusteBat(i))
temp_VerlusteNetz = CDbl(VerlusteNetz(i))
'Rechnung Start:
temp_Ueberschuss = temp_PV - temp_Last    'PV - Last = Überschuss
temp_BatteryAlt = CDbl(Battery(i - 1))    'Inhalt der Batterie prüfen
' -> Wenn mehr Last als Erzeugung vorhanden ist
If temp_Ueberschuss = temp_BatteryAlt Then
temp_Bezug = temp_Ueberschuss - temp_BatteryAlt
temp_BatteryNeu = 0#
Else
temp_BatteryNeu = temp_BatteryAlt - temp_Ueberschuss
temp_Bezug = 0#
End If
temp_Ueberschuss = temp_Ueberschuss * (-1)
' -> Wenn mehr Erzeugung als Last vorhanden ist
Else
temp_Bezug = 0#
Platz = max_Kapazitaet - temp_BatteryAlt
If temp_Ueberschuss = PV_Anlagengroesse Then
temp_Einspeise = (temp_Ueberschuss - Platz) * Netzknotenmaximum
temp_VerlusteNetz = (temp_Ueberschuss - Platz) * (1 - Netzknotenmaximum)
Else
temp_VerlusteNetz = 0#
End If
End If
End If
'_____
'Verluste durch Batteriewirkungsgrad einberechnen
'temp_BatteryNeu = temp_BatteryNeu * Wirkungsgrad_Bat
'temp_VerlusteBat = (1 - Wirkungsgrad_Bat) * temp_BatteryNeu
'_____
'temporär errechnete Werte in die Variable zurückschreiben
PV(i, 1) = temp_PV
Last(i, 1) = temp_Last
EV(i) = temp_EV
Ueberschuss(i) = temp_Ueberschuss
Einspeise(i) = temp_Einspeise
Bezug(i) = temp_Bezug
Battery(i) = temp_BatteryNeu
VerlusteBat(i) = temp_VerlusteBat
VerlusteNetz(i) = temp_VerlusteNetz
Next i
'Werte anzeigen im Tabellenblatt
Sheets("ziel").Range("B2:B50001") = PV
Sheets("ziel").Range("C2:C50001") = Last
Sheets("ziel").Range("D2:D50001") = WorksheetFunction.Transpose(Ueberschuss)
Sheets("ziel").Range("E2:E50001") = WorksheetFunction.Transpose(Battery)
Sheets("ziel").Range("F2:F50001") = WorksheetFunction.Transpose(Einspeise)
Sheets("ziel").Range("G2:G50001") = WorksheetFunction.Transpose(Bezug)
Sheets("ziel").Range("H2:H50001") = WorksheetFunction.Transpose(EV)
Sheets("ziel").Range("I2:I50001") = WorksheetFunction.Transpose(VerlusteBat)
Sheets("ziel").Range("J2:J50001") = WorksheetFunction.Transpose(VerlusteNetz)
End Sub
ransi

Anzeige
AW: VBA: Simulation funktioniert nicht richtig
05.01.2013 16:22:25
Daniel
Hallo ransi,
herzlichen Dank! so klappt das hervorragend. Lag wohl am einlesen und ausgeben der Variablen.
Es sind zwar noch jede Menge Fehler in der Rechenlogik aufgetaucht, die konnte ich aber danach bereinigen. Deine Hilfe war wirklich sehr gut und hat mir sehr geholfen. Danke! Sehr nett!
Freundliche Grüße
Daniel

313 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige