Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1024to1028
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

Werte neu berechnen

Werte neu berechnen
15.11.2008 17:27:56
Gerhard
Hallo zusammen,
Bitte um Makro Hilfe
Meine Mappe besteht aus den Tabellenblättern:
1. Auswahl
2. Berechnung
3. Daten
Im Blatt Auswahl wähle ich ab der Zelle C17 bis C21 über eine Gültigkeitsliste bis zu 5 Spalten von
bis zu 5 verschiedenen Medien mit den entsprechenden Eichwerten aus dem Blatt Daten aus, und übernehme diese in das Blatt Berechnung.
Die übernommenen Medien werden im Blatt Berechnung wie folgt abgelegt:
Der 1.Eichwert für das 1.Medium steht in der Zelle ab D9 bis ... dynamische Spaltenlänge
Der 2.Eichwert für das 2.Medium steht in der Zelle ab E9 bis ... dynamische Spaltenlänge
Der 3.Eichwert ab F9...
Der 3.Eichwert ab G9...
Der 3.Eichwert ab H9...
Frage:
Wie kann ich in der Tabelle Berechnung die übertragenen Werte jeweils beginnend in den Zellen
D9, E9, F9, G9 und H9 mit einer dynamischen Spaltenlänge mit der Formel z.B für die 1.Spalte D:
D9 ^(D6/D5) bis zum Ende der jeweiligen Spalte neu berechnen und die neuen Werte in den
jeweiligen Spalten via Makro aktuallisieren?
In den Zellen D6 und D5 für die Neuberechnung stehen Faktoren!
In den Zellen E6 und E5 für die 2. Spalte sowie F6 und F5 usw. sind andere Faktoren enthalten!
Einschränkung für eine Neuberechnung:
Abfrage der Zellen D3, E3, F3, G3 oder H3 auf Bindestrich (-) bedeutet, dass keine Auswahl von Werten für diese Spalte durchgeführt wurde und es darf entsprechend auch keine Neu-Berechnung erfolgen, da diese Spalten von mir defaultmäßig mit einem Faktor von "1" belegt wird!
das Makro sollte aus der Tabelle Auswahl gestartet werden können!
Vielen Dank für Eure Hilfe
Gruß derhard

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Werte neu berechnen
16.11.2008 14:46:54
Franc
Denk mal das du das so haben wolltest.
Falls du Erklärungen brauchst frag nochmal ^^ (grad nicht soviel Zeit)

Sub Berechnung()
Dim Spalte As Byte, Zelle As Range, letzteZeile As Long
On Error GoTo ende
Application.ScreenUpdating = False
With Sheets("Berechnung")
For Spalte = 4 To 8
If .Cells(3, Spalte)  "-" Then
letzteZeile = .Cells(65500, Spalte).End(xlUp).Row
For Each Zelle In .Range(.Cells(9, Spalte), .Cells(letzteZeile, Spalte))
If IsNumeric(Zelle) And Zelle  "" Then
Zelle = Zelle ^ (.Cells(6, Spalte) / .Cells(5 / Spalte))
End If
Next Zelle
End If
Next Spalte
End With
Application.ScreenUpdating = True
Exit Sub
ende:
Application.ScreenUpdating = True
MsgBox "Es ist ein Fehler aufgetreten!" & Chr(13) & _
"Letzte Berechnung: " & Zelle.Address
End Sub


Anzeige
AW: Werte neu berechnen
16.11.2008 16:48:00
Gerhard
Hallo Danke für die Hilfe,
aber das Makro läuft leider nicht!
Es kommt die Fehlermeldung:
Es ist ein Fehler aufgetreten
Letzte Berechnung: $D$9
Gruß Gerhard
AW: Werte neu berechnen
16.11.2008 16:55:00
Franc
hmm ist in den Zellen 6 und 5 (bei den Spalten D - H) auch was eingetragen?
Wenn direkt die 1. Berechnung fehlschlägt, dann ist entweder die Zahl in Zelle D9 fehlerhaft oder der Wert der Division aus den Zeilen 6 und 5 der jeweiligen Spalte ist ungültig/verursacht den Fehler.
Eine andere Möglichkeit wäre noch das die Tabelle schreibgeschützt ist.
Wenn es möglich ist, dann post mal plz die Mappe
AW: Werte neu berechnen
16.11.2008 17:13:49
Gerhard
Hallo Franc
anbei eine verkürzte Beispielmappe
Gruß Gerhard
https://www.herber.de/bbs/user/56827.zip
Anzeige
AW: Werte neu berechnen
16.11.2008 18:08:48
Franc
öhm ja .... ka wie das sich eingeschlichen hat aber bei der Zeile
Zelle = Zelle ^ (.Cells(6, Spalte) / .Cells(5, Spalte))
war bei der Anweisung wo der Divisor steht ein "/" anstatt ein "," und das gab dann natürlich nen Fehler
hier nochmal richtig

Sub Berechnung()
Dim Spalte As Byte, Zelle As Range, letzteZeile As Long
On Error GoTo ende
Application.ScreenUpdating = False
With Sheets("Berechnung")
For Spalte = 4 To 8
If .Cells(3, Spalte)  "-" Then
letzteZeile = .Cells(65500, Spalte).End(xlUp).Row
For Each Zelle In .Range(.Cells(9, Spalte), .Cells(letzteZeile, Spalte))
If IsNumeric(Zelle) And Zelle  "" Then
Zelle = Zelle ^ (.Cells(6, Spalte) / .Cells(5, Spalte))
End If
Next Zelle
End If
Next Spalte
End With
Application.ScreenUpdating = True
Exit Sub
ende:
Application.ScreenUpdating = True
MsgBox "Es ist ein Fehler aufgetreten!" & Chr(13) & _
"Letzte Berechnung: " & Zelle.Address
End Sub


Anzeige
AW: Werte neu berechnen
16.11.2008 20:41:18
Gerhard
Hallo Franc
Vielen Dank für Deine Hilfe
Jetzt funktionierts...
Vielleicht könntest Du noch für eventuell spätere Änderungen für mich das Makro
noch mit einigen Funktionskommentaren erläutern!
Vielen Dank nochmals
Gruß Gerhard
AW: Werte neu berechnen
17.11.2008 18:58:24
Franc
hoff die erklärungen sind verständlich

Sub Berechnung()
' Variablen deklarieren - das sollte man immer tun
Dim Spalte As Byte, Zelle As Range, letzteZeile As Long
' tritt ein Fehler auf, dann zum Abschnitt ende
On Error GoTo ende
' schaltet die Aktualisierung des Bildschirminhaltes aus
' dies ist schöner anzusehen und bringt auch teilweise einen
' sehr guten Geschwindigkeitsvorteil beim ausführen
Application.ScreenUpdating = False
' die Änderung findet auf einem anderen Blatt statt und deshalb
' müssen die Anweisungen explizit für diese Tabelle gelten.
' Damit man nicht vor jedem Werte "Sheets(Tabellenname)" schreiben
' muss, sagt man am Anfang "with Sheets(Tabellenname")
' jetzt reicht vor der Anweisung ein "." der stellvertretend für
' Sheets(Tabellenname") steht.
With Sheets("Berechnung")
' die Spalten liegen direkt nebeneinander und es soll auch überall das gleiche
' gemacht werden. Von daher nimmt man am einfachsten eine For to Next Schleife.
' die 4 bis 8 steht stellvertretend für die Spalten D - H
For Spalte = 4 To 8
' Cells(Zeile, Spalte) = Cells(3, 4) = Zelle D3
' prüfen ob auf dem Blatt Berechnung (wegen dem "." vor cells) kein "-" steht
' würde ein "-" drinstehen, dann geht er direkt zum End if und fürht die Anweisungen
' dazwischen nicht aus
' anstatt der Spaltennr. steht hier "Spalte", was die aktuelle Spaltennr. von der
' For to Next Schleife trägt. Beim 1. Durchlauf eine 4, beim 2. eine 5 etc.
' so muß man nicht für jede Spalte ein extra Programm schreiben
If .Cells(3, Spalte)  "-" Then
' wenn kein "-" drinsteht, dann die letzte Zeile in der aktuelle Spalte bestimmen
' Excel soll von der jeweiligen Spalte von Zeile 65500 nach oben bis zur 1. befüllten
' Zeile gehen. Mit dem .row am Ende wird nur die Zeilennummer genommen
' sonst stände da z. Bsp. D30 aber damit können wir nicht rechnen. mit .row hat die
' variable "letzteZeile" jetzt zum Beispiel den Wert 30
letzteZeile = .Cells(65500, Spalte).End(xlUp).Row
' wenn man die Zelle, direkt ändern will, dann nimmt man am besten For Each
' Zelle wurde oben als "Range" deklariert
' Die folgende Zeile heißt "Mit jeder Zelle im Bereich von Zeile 9, Spalte 4
' bis Zeile 30 (hier nur als Beispiel), Spalte 4
For Each Zelle In .Range(.Cells(9, Spalte), .Cells(letzteZeile, Spalte))
' IsNumeric(Zelle) = Wenn eine Zahl drin steht (zum Beispiel im Feld D9) und die Zelle nicht  _
leer ist
If IsNumeric(Zelle) And Zelle  "" Then
' jetzt wird ein neuer Wert für die aktuelle Zelle berechnet
' hierzu wird die Zahl in der aktuelle Zelle genommen und der Quotient von Zeile 6 und 5
' die aktuelle Spalte wird wieder durch die Variable Spalte bestimmt
Zelle = Zelle ^ (.Cells(6, Spalte) / .Cells(5, Spalte))
End If
' Nach der Berechnung der Zelle oder wenn sie leer war, wird die nächste Zelle in der Spalte  _
genommen
Next Zelle
End If
' Nachdem alle Zellen in der Spalte berechnet wurden wird mit der nächsten Spalte weitergemacht
Next Spalte
End With
' Wichtig ist es die Bildschirmaktualisierung wieder einzuschalten
Application.ScreenUpdating = True
Exit Sub
ende:
' auch bei einem Fehler wird die Aktualisierung wieder eingeschalten
Application.ScreenUpdating = True
' zusätzlich wird eine Messagebox angezeigt wo auch die Adresse
' von der Zelle drinsteht wo der Fehler aufgetreten ist. (erleichtert
' manchmal die Suche
MsgBox "Es ist ein Fehler aufgetreten!" & Chr(13) & _
"Letzte Berechnung: " & Zelle.Address
End Sub


Anzeige
AW: Werte neu berechnen
18.11.2008 08:54:00
Gerhard
Hallo Franc,
Vielen Vielen Dank für Deine ausführlichen Kommentare!
Echt super...
Gruß Gerhard

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige