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

Spalten und Zeilen berechnen mit bedingungen

Spalten und Zeilen berechnen mit bedingungen
11.12.2015 09:59:02
Andi
Hallo,
habe eine etwas verzwickte berechnung in Spalten und Zeilen.
In Tabelle Stromzähler werden die Zählerstände eingetragen, die werden in Tabelle Stromverbrauch immer von den vorherigen Monat abgezogen z.B. Dezemnber 14 - Januar 15 usw. und in der Spalte G gibt es einen Multiplikator, wenn einer vorhanden, werden die jeweiligen Zählerstände multipliziert.
In der Spalte H sind Kurzzeichen vorhanden. Je nach Kurzzeichen werden die Zeilen der Stromzähler Addiert oder Subtrahiert:
Die Berechnungen sollen über alle Monate gehen Dez 14 - Dez 15
Kurzz. Berechnung
R R-R1-R2
B B-B1
C C-C1
D D-D1
E E-E1-E2
H H-H1
M1 M1+M2
M5 M5a +M7a+M8+M7+M5
M1 M1-M4
P1 (P1-P2)+(P3-P4)
Einen Ansatz habe ich schon aber jetzt komme ich nicht weiter.
Hat einer eine Idee wie man diese Berechnung in VBA lösen kann!
Vielen Dank für eure Hilfe
Gruß Andi
Hier noch eine Beispieldatei:
https://www.herber.de/bbs/user/102180.xlsm
Sub Stromverbrauch1()
Dim i As Integer
Dim letzteZeile As Integer
Set w1 = Tabelle1
Set w2 = Tabelle4
letzteZeile = Cells(Rows.Count, 9).End(xlUp).Row
w2.Activate
For i = 6 To letzteZeile
'Januar
If w1.Cells(i, 7).Value  "" Then
w2.Cells(i, 6).Value = (w1.Cells(i, 10).Value - w1.Cells(i, 9).Value) * w1.Cells(i, 7). _
Value
End If
Next i
End Sub

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

Betreff
Datum
Anwender
Anzeige
AW: Spalten und Zeilen berechnen mit bedingungen
11.12.2015 11:02:17
Andi
Hallo,
Sory noch ein nachtrag, die berechnung soll natürlich so sein:
Die Berechnungen sollen über alle Monate gehen:
wenn(Spalte H ="R" Dann von Zeile die Zählerstände R-R1-R2 Sonst(Jan 15 - Dez 14) * Multiplikator
(Febr 15 - Jan 15)* Multiplikator
(März 15- Febr 15)* Multiplikator
usw.
Danke nochmals
Gruß Andi

AW: Spalten und Zeilen berechnen mit bedingungen
11.12.2015 12:52:00
Andi
Hallo,
habe das soweit für jeden Monat mit Multiplikator hinbekommen.
Wie bekomme ich das hin das die Zeilen mit den Bedingungen der Kurzz. berechnent werden
Kurzz. Berechnung
R______R-R1-R2
B______B-B1
C______C-C1
D______D-D1
E______E-E1-E2
H______H-H1
M1_____M1+M2
M5_____M5a +M7a+M8+M7+M5
M1_____M1-M4
P1____(P1-P2)+(P3-P4)
z.B.
Wenn in Splate H das Kurzzeichen R,R1,R2 steht sollen die Zeilen von R-R1-R2 in der Tabelle Stromverbrauch für die einzelnen Monate berechnent werden.
Gruß Andi
Bedanke mich schon mal in vorraus!
Hier nochmal eine aktuelle Datei:
https://www.herber.de/bbs/user/102183.xlsm
Der aktuelle Code:
Sub Stromverbrauch()
Dim i As Integer
Set w1 = Tabelle1
Set w2 = Tabelle4
letzteZeile = w1.Cells(Rows.Count, 9).End(xlUp).Row
w2.Activate
For i = 6 To letzteZeile
'Januar
If w1.Cells(i, 7).Value  "" Then
w2.Cells(i, 6).Value = (w1.Cells(i, 10).Value - w1.Cells(i, 9).Value) * w1.Cells(i, 7). _
Value
Else
w2.Cells(i, 6).Value = (w1.Cells(i, 10).Value - w1.Cells(i, 9).Value)
End If
If w1.Cells(i, 9).Value = "" Then
w2.Cells(i, 6).Value = ""
End If
'Februar
If w1.Cells(i, 7).Value  "" Then
w2.Cells(i, 7).Value = (w1.Cells(i, 11).Value - w1.Cells(i, 10).Value) * w1.Cells(i, 7). _
Value
Else
w2.Cells(i, 7).Value = (w1.Cells(i, 11).Value - w1.Cells(i, 10).Value)
End If
If w1.Cells(i, 10).Value = "" Then
w2.Cells(i, 7).Value = ""
End If
'März
If w1.Cells(i, 7).Value  "" Then
w2.Cells(i, 8).Value = (w1.Cells(i, 12).Value - w1.Cells(i, 11).Value) * w1.Cells(i, 7). _
Value
Else
w2.Cells(i, 8).Value = (w1.Cells(i, 12).Value - w1.Cells(i, 11).Value)
End If
If w1.Cells(i, 11).Value = "" Then
w2.Cells(i, 8).Value = ""
End If
'April
If w1.Cells(i, 7).Value  "" Then
w2.Cells(i, 9).Value = (w1.Cells(i, 13).Value - w1.Cells(i, 12).Value) * w1.Cells(i, 7). _
Value
Else
w2.Cells(i, 9).Value = (w1.Cells(i, 13).Value - w1.Cells(i, 12).Value)
End If
If w1.Cells(i, 12).Value = "" Then
w2.Cells(i, 9).Value = ""
End If
'Mai
If w1.Cells(i, 7).Value  "" Then
w2.Cells(i, 10).Value = (w1.Cells(i, 14).Value - w1.Cells(i, 13).Value) * w1.Cells(i, 7) _
.Value
Else
w2.Cells(i, 10).Value = (w1.Cells(i, 14).Value - w1.Cells(i, 13).Value)
End If
If w1.Cells(i, 13).Value = "" Then
w2.Cells(i, 10).Value = ""
End If
'Juni
If w1.Cells(i, 7).Value  "" Then
w2.Cells(i, 11).Value = (w1.Cells(i, 15).Value - w1.Cells(i, 14).Value) * w1.Cells(i, 7) _
.Value
Else
w2.Cells(i, 11).Value = (w1.Cells(i, 15).Value - w1.Cells(i, 14).Value)
End If
If w1.Cells(i, 14).Value = "" Then
w2.Cells(i, 11).Value = ""
End If
'Juli
If w1.Cells(i, 7).Value  "" Then
w2.Cells(i, 12).Value = (w1.Cells(i, 16).Value - w1.Cells(i, 15).Value) * w1.Cells(i, 7) _
.Value
Else
w2.Cells(i, 12).Value = (w1.Cells(i, 16).Value - w1.Cells(i, 15).Value)
End If
If w1.Cells(i, 15).Value = "" Then
w2.Cells(i, 12).Value = ""
End If
'August
If w1.Cells(i, 7).Value  "" Then
w2.Cells(i, 13).Value = (w1.Cells(i, 17).Value - w1.Cells(i, 16).Value) * (w1.Cells(i,  _
7).Value)
Else
w2.Cells(i, 13).Value = (w1.Cells(i, 17).Value - w1.Cells(i, 16).Value)
End If
If w1.Cells(i, 16).Value = "" Then
w2.Cells(i, 13).Value = ""
End If
'September
If w1.Cells(i, 7).Value  "" Then
w2.Cells(i, 14).Value = (w1.Cells(i, 18).Value - w1.Cells(i, 17).Value) * (w1.Cells(i,  _
7).Value)
Else
w2.Cells(i, 14).Value = (w1.Cells(i, 18).Value - w1.Cells(i, 17).Value)
End If
If w1.Cells(i, 17).Value = "" Then
w2.Cells(i, 14).Value = ""
End If
'Oktober
If w1.Cells(i, 7).Value  "" Then
w2.Cells(i, 15).Value = (w1.Cells(i, 19).Value - w1.Cells(i, 18).Value) * (w1.Cells(i,  _
7).Value)
Else
w2.Cells(i, 15).Value = (w1.Cells(i, 19).Value - w1.Cells(i, 18).Value)
End If
If w1.Cells(i, 18).Value = "" Then
w2.Cells(i, 15).Value = ""
End If
'November
If w1.Cells(i, 7).Value  "" Then
w2.Cells(i, 16).Value = (w1.Cells(i, 20).Value - w1.Cells(i, 19).Value) * (w1.Cells(i,  _
7).Value)
Else
w2.Cells(i, 16).Value = (w1.Cells(i, 20).Value - w1.Cells(i, 19).Value)
End If
If w1.Cells(i, 19).Value = "" Then
w2.Cells(i, 16).Value = ""
End If
'Dezember
If w1.Cells(i, 7).Value  "" Then
w2.Cells(i, 17).Value = (w1.Cells(i, 21).Value - w1.Cells(i, 20).Value) * (w1.Cells(i,  _
7).Value)
Else
w2.Cells(i, 17).Value = (w1.Cells(i, 21).Value - w1.Cells(i, 20).Value)
End If
If w1.Cells(i, 21).Value = "" Then
w2.Cells(i, 17).Value = ""
End If
Next i
End Sub

Anzeige
AW: Spalten und Zeilen berechnen mit bedingungen
11.12.2015 12:53:01
Andi
Hallo,
habe das soweit für jeden Monat mit Multiplikator hinbekommen.
Wie bekomme ich das hin das die Zeilen mit den Bedingungen der Kurzz. berechnent werden
Kurzz. Berechnung
R______R-R1-R2
B______B-B1
C______C-C1
D______D-D1
E______E-E1-E2
H______H-H1
M1_____M1+M2
M5_____M5a +M7a+M8+M7+M5
M1_____M1-M4
P1____(P1-P2)+(P3-P4)
z.B.
Wenn in Splate H das Kurzzeichen R,R1,R2 steht sollen die Zeilen von R-R1-R2 in der Tabelle Stromverbrauch für die einzelnen Monate berechnent werden.
Gruß Andi
Bedanke mich schon mal in vorraus!
Hier nochmal eine aktuelle Datei:
https://www.herber.de/bbs/user/102183.xlsm
Der aktuelle Code:
Sub Stromverbrauch()
Dim i As Integer
Set w1 = Tabelle1
Set w2 = Tabelle4
letzteZeile = w1.Cells(Rows.Count, 9).End(xlUp).Row
w2.Activate
For i = 6 To letzteZeile
'Januar
If w1.Cells(i, 7).Value  "" Then
w2.Cells(i, 6).Value = (w1.Cells(i, 10).Value - w1.Cells(i, 9).Value) * w1.Cells(i, 7). _
Value
Else
w2.Cells(i, 6).Value = (w1.Cells(i, 10).Value - w1.Cells(i, 9).Value)
End If
If w1.Cells(i, 9).Value = "" Then
w2.Cells(i, 6).Value = ""
End If
'Februar
If w1.Cells(i, 7).Value  "" Then
w2.Cells(i, 7).Value = (w1.Cells(i, 11).Value - w1.Cells(i, 10).Value) * w1.Cells(i, 7). _
Value
Else
w2.Cells(i, 7).Value = (w1.Cells(i, 11).Value - w1.Cells(i, 10).Value)
End If
If w1.Cells(i, 10).Value = "" Then
w2.Cells(i, 7).Value = ""
End If
'März
If w1.Cells(i, 7).Value  "" Then
w2.Cells(i, 8).Value = (w1.Cells(i, 12).Value - w1.Cells(i, 11).Value) * w1.Cells(i, 7). _
Value
Else
w2.Cells(i, 8).Value = (w1.Cells(i, 12).Value - w1.Cells(i, 11).Value)
End If
If w1.Cells(i, 11).Value = "" Then
w2.Cells(i, 8).Value = ""
End If
'April
If w1.Cells(i, 7).Value  "" Then
w2.Cells(i, 9).Value = (w1.Cells(i, 13).Value - w1.Cells(i, 12).Value) * w1.Cells(i, 7). _
Value
Else
w2.Cells(i, 9).Value = (w1.Cells(i, 13).Value - w1.Cells(i, 12).Value)
End If
If w1.Cells(i, 12).Value = "" Then
w2.Cells(i, 9).Value = ""
End If
'Mai
If w1.Cells(i, 7).Value  "" Then
w2.Cells(i, 10).Value = (w1.Cells(i, 14).Value - w1.Cells(i, 13).Value) * w1.Cells(i, 7) _
.Value
Else
w2.Cells(i, 10).Value = (w1.Cells(i, 14).Value - w1.Cells(i, 13).Value)
End If
If w1.Cells(i, 13).Value = "" Then
w2.Cells(i, 10).Value = ""
End If
'Juni
If w1.Cells(i, 7).Value  "" Then
w2.Cells(i, 11).Value = (w1.Cells(i, 15).Value - w1.Cells(i, 14).Value) * w1.Cells(i, 7) _
.Value
Else
w2.Cells(i, 11).Value = (w1.Cells(i, 15).Value - w1.Cells(i, 14).Value)
End If
If w1.Cells(i, 14).Value = "" Then
w2.Cells(i, 11).Value = ""
End If
'Juli
If w1.Cells(i, 7).Value  "" Then
w2.Cells(i, 12).Value = (w1.Cells(i, 16).Value - w1.Cells(i, 15).Value) * w1.Cells(i, 7) _
.Value
Else
w2.Cells(i, 12).Value = (w1.Cells(i, 16).Value - w1.Cells(i, 15).Value)
End If
If w1.Cells(i, 15).Value = "" Then
w2.Cells(i, 12).Value = ""
End If
'August
If w1.Cells(i, 7).Value  "" Then
w2.Cells(i, 13).Value = (w1.Cells(i, 17).Value - w1.Cells(i, 16).Value) * (w1.Cells(i,  _
7).Value)
Else
w2.Cells(i, 13).Value = (w1.Cells(i, 17).Value - w1.Cells(i, 16).Value)
End If
If w1.Cells(i, 16).Value = "" Then
w2.Cells(i, 13).Value = ""
End If
'September
If w1.Cells(i, 7).Value  "" Then
w2.Cells(i, 14).Value = (w1.Cells(i, 18).Value - w1.Cells(i, 17).Value) * (w1.Cells(i,  _
7).Value)
Else
w2.Cells(i, 14).Value = (w1.Cells(i, 18).Value - w1.Cells(i, 17).Value)
End If
If w1.Cells(i, 17).Value = "" Then
w2.Cells(i, 14).Value = ""
End If
'Oktober
If w1.Cells(i, 7).Value  "" Then
w2.Cells(i, 15).Value = (w1.Cells(i, 19).Value - w1.Cells(i, 18).Value) * (w1.Cells(i,  _
7).Value)
Else
w2.Cells(i, 15).Value = (w1.Cells(i, 19).Value - w1.Cells(i, 18).Value)
End If
If w1.Cells(i, 18).Value = "" Then
w2.Cells(i, 15).Value = ""
End If
'November
If w1.Cells(i, 7).Value  "" Then
w2.Cells(i, 16).Value = (w1.Cells(i, 20).Value - w1.Cells(i, 19).Value) * (w1.Cells(i,  _
7).Value)
Else
w2.Cells(i, 16).Value = (w1.Cells(i, 20).Value - w1.Cells(i, 19).Value)
End If
If w1.Cells(i, 19).Value = "" Then
w2.Cells(i, 16).Value = ""
End If
'Dezember
If w1.Cells(i, 7).Value  "" Then
w2.Cells(i, 17).Value = (w1.Cells(i, 21).Value - w1.Cells(i, 20).Value) * (w1.Cells(i,  _
7).Value)
Else
w2.Cells(i, 17).Value = (w1.Cells(i, 21).Value - w1.Cells(i, 20).Value)
End If
If w1.Cells(i, 21).Value = "" Then
w2.Cells(i, 17).Value = ""
End If
Next i
End Sub

Anzeige
Erst mal das
11.12.2015 21:34:13
Michael
Hi Andi,
ich habe Deinen Code erst Mal etwas übersichtlicher gestaltet; die obere Variante macht das gleiche wie die untere, verwendet aber ein sogenanntes Array (bitte zu recherchieren), was a) den Code vereinfacht und b) deutlich fixer ist:
Option Explicit
Sub Stromverbrauch_schnell()
Dim i As Long, m As Long ' m wie monat
Dim letzteZeile As Long
Dim faktor As Long
Dim a As Variant, f As Variant
Const abZeile = 6
letzteZeile = Tabelle1.Cells(Rows.Count, 9).End(xlUp).Row
a = Tabelle1.Range("I" & abZeile & ":U" & letzteZeile)
f = Tabelle1.Range("G" & abZeile & ":G" & letzteZeile)
For i = 1 To UBound(a, 1)
If f(i, 1)  "" Then faktor = f(i, 1) Else faktor = 1
For m = 1 To 12
If Not IsEmpty(a(i, m + 1)) Then
a(i, m) = Round((a(i, m + 1) - a(i, m)) * faktor, 4)
Else
a(i, m) = ""
End If
Next m
Next i
Tabelle4.Range("F6").Resize(UBound(a, 1), 12) = a
End Sub
Sub Stromverbrauch()
Dim i As Long, m As Long ' m wie monat
Dim letzteZeile As Long
Dim faktor As Long
Dim w1 As Worksheet, w2 As Worksheet
Set w1 = Tabelle1
Set w2 = Tabelle4
letzteZeile = w1.Cells(Rows.Count, 9).End(xlUp).Row
For i = 6 To letzteZeile
If w1.Cells(i, 7).Value  "" Then faktor = w1.Cells(i, 7).Value Else faktor = 1
For m = 1 To 12
If w1.Cells(i, 9 + m).Value  "" Then
w2.Cells(i, m + 5).Value = Round( _
(w1.Cells(i, 9 + m).Value - w1.Cells(i, 8 + m).Value) * faktor, 4)
Else
Exit For
End If
Next m
Next i
End Sub
Allerdings ist mir völlig unklar, was Deine sogenannten Kurzzeichen tun sollen.
Was bitte heißt M5a+M7a+M8+M7+M5 auf deutsch?!
Schöne Grüße,
Michael
P.S.: Das "option explicit" in der ersten Codezeile bedeutet, daß alle Variablen sauber deklariert sein müssen; w1 und w2 waren NICHT deklariert, was ich im unteren Beispiel nachgeholt habe - allerdings kann es sein, daß Du in Deinen anderen Subs noch was nachdeklarieren mußt - falls ein Fehler erscheinen sollte.
P.P.S.: In Deiner Tabelle tauchen Werte wie 1533,99999999994 auf; deshalb die Rundung auf 4 Nachkommastellen - das sind nur Excel-interne "Rechenfehler" bzw. Probleme mit der "bitweisen" Darstellung von vielen Stellen.

Anzeige
Kurzzeichen Erklärung
12.12.2015 14:47:47
Andi
Hallo Michael,
erstmal vielen Dank für deine mühe.
Zur deiner Frage:
Allerdings ist mir völlig unklar, was Deine sogenannten Kurzzeichen tun sollen.
Was bitte heißt M5a+M7a+M8+M7+M5 auf deutsch?!
Bei den Kurzzeichen handelt es sich um Zähler die entweder zu einen Verbraucher zusammengefasst werden oder abgezogen werden.
z.B.
wenn in Spalte H M5 steht dann soll zu den Berechnungen diese Zählerstände M5a+M7a+M8+M7+M5 Zeilenweise dazugezählt werden.
oder wenn in Spalte H R steht sollen die Zählerstände von R-R1-R2 Zeilenweise abgezogen werden.
Diese Kurzzeichen sind in der Tabelle Stromzähler Spalte H und wenn die jeweiligen Kurzz in der Spalte so eingetragen sind sollen sie über diese vorgegeben Berechnungen die Zählerwerte Zeilenweise berechnen.
Für das erste Beispiel währe das wen man das mit Zellbezüge machen würde:
=(K6-J6)*$G6-(J$59-J$35-J$41)
=(Jan 15-Dez 14)*Multiplikator-(R-R1-R2)
Jedes Kurzz hat eine andere Berechnung bei den Stromverbracuh
Kurzz. Berechnung
R_______R-R1-R2
B_______B-B1
C_______C-C1
D_______D-D1
E_______E-E1-E2
H_______H-H1
M1______M1+M2
M5______M5a+M7a+M8+M7+M5
M1______M1-M4
P1______(P1-P2)+(P3-P4)
Danke nochmal für deine Hilfe
Gruß Andi

Anzeige
AW: Kurzzeichen Erklärung
12.12.2015 18:51:10
Michael
Hi Andi,
nach einigem Nachdenken habe ich, glaube ich, begriffen, was da passieren soll.
Ich habe mal die Spalte H nach "Kurzzeichen" kopiert, die Zeilennummern daneben eingetragen und das Ganze sortiert; das sieht dann etwa so aus:
Userbild
Diese Zuordnung von Kurzzeichen zu Zeilen kann man natürlich jedesmal neu erzeugen lassen, und ich denke, sie ist der erste (gedankliche) Schritt in Richtung Lösung.
Aber: Deine Angaben sind nicht konsistent (ich hab's jetzt nicht im Wörterbuch nachgeschlagen, hehe):
a) bei den P- und einigen M-Angaben sind Leerzeichen zwischen P und Nr.
b) P2 ist bei der Berechnung aufgeführt, in der Tabelle jedoch nicht vorhanden - entweder Du kümmerst Dich (IMMER) händisch darum, daß ALLE für Berechnungen notwendigen Kurzzeichen da sind, oder man muß eine entsprechende Fehlerbehandlung programmieren - ich weiß nicht, ob ich dazu Lust habe.
c) Rechenvorschriften für M1 sind doppelt vorgegeben. (sowohl im Forumstext als auch in der Datei)
d) zu X gibt es keine Berechnung.
Grundsätzlich möchte ich die Überlegung anstoßen, ob es nicht sinnvoller wäre, die paar Zeilen mit den Ergebnissen der Berechnungen (sind ja nur rund 10) *zusätzlich* in das Blatt einzufügen, d.h. zu jeder Vorschrift eine Zeile ohne eigene Zählerstände, etwa mit dem Kürzel "[Buchstabe]0".
Der Leser der Tabelle wird es Dir danken, wenn alle originalen Werte vorhanden sind PLUS die Berechnungen. Nicht zuletzt ist es so für *uns* in der Testphase einfacher nachzurechnen, ob alles paßt.
Schöne Grüße,
Michael

Anzeige
Ich warte auf ein statement von Dir,
14.12.2015 18:49:42
Dir,
Andi,
bevor ich das Ding wieder anfasse, und evtl. eine neue Datei mit "richtigen" Werten.
Gruß,
Michael

Info:Melde mich nochmal
16.12.2015 23:20:41
Andi
Hallo Michael,
habe leider keine Zeit gehabt dir zu Antworten.
Bei den Leerzeichen ist es kein Problem die zu entfernen, so dass alle Kurzzeichen den gleichen aufbau haben.
Bei der Zuteilung von den Kurzzeichen für die berechneten Zeilen muss ich nochmal drüber schauen und werde dir eine neue Datei hochladen.
Bin leider etwas in Zeitnot, werde dir aber auf jedenfall bescheid geben.
Vielen Dank nochmals
Andi

333 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige