Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
424to428
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
424to428
424to428
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Makro: Summe und Teilen in jeder Zelle

Makro: Summe und Teilen in jeder Zelle
08.05.2004 11:06:01
Daniel
Hallo Liebe Forumsteilnehmer!
Ich habe folgendes Makro. Gerne würde ich nun die Berechnung im unteren Teil des Makro so abändern, dass die Summe noch durch den Wert der jewiligen Zeile in Spalte B des Sheets "Drei" geteilt wird. Also, wenn die Summe im Sheet "Vier2 in Zeile 135 stehen soll, dann muss noch durch B135 in "Drei" geteilt werden.
Dies soll nun für JEDE gefüllte Zelle im Sheet "Eins" germacht werden, wobei Spalte B im Sheet "Drei" fest bleiben soll.
Die Bestimmung der zu berechnenden Zeile durch den Wert in J5 des Sheets Steuerung ist bereits korrekt.
Naja. Ich hoffe ich konnte mein Problem verständlich beschreiben.
Vielen Dank für Hilfe!
Schönes WE!
Daniel

Sub EinsZwei()
Dim i%, k%, IntCnt%, LRow%
Dim ws1 As Worksheet, ws2 As Worksheet, ws3 As Worksheet
Dim ws4 As Worksheet
Dim ws5 As Worksheet
Set ws1 = Worksheets("Eins")
Set ws2 = Worksheets("Zwei")
Set ws3 = Worksheets("Drei")
Set ws4 = Worksheets("Vier")
Set ws5 = Worksheets("Fünf")
'Lösche
ws4.Cells.ClearContents
ws5.Cells.ClearContents
'Übertrage Erste Spalte
ws1.Columns("A:A").Copy ws4.Range("A1")
ws2.Columns("A:A").Copy ws5.Range("A1")
ws1.Rows("1:1").Copy ws4.Range("A1")
ws2.Rows("1:1").Copy ws5.Range("A1")
IntCnt = Sheets("Steuerung").Range("J5").Value
With ws1
LRow = .Cells(Rows.Count, 3).End(xlUp).Row
For i = 3 To LRow - IntCnt + 1
k = k + 1
'Hier wird die Zelle definiert ,1 heißt A'
wsOff.Cells(IntCnt + k + 1, 2) = _
Application.Sum(.Range("B" & i & ":B" & i + IntCnt - 1))
Next i
End With
End Sub

18
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro: Summe und Teilen in jeder Zelle
08.05.2004 11:10:16
Michael
Hallo Daniel
wo wird die Variable wsOff festhelegt
wsOff.Cells(IntCnt + k + 1, 2) = _
Application.Sum(.Range("B" & i & ":B" & i + IntCnt - 1)) / ws3.Range("B" & i)
Gruß Michael
AW: Makro: Summe und Teilen in jeder Zelle
08.05.2004 11:44:10
Daniel
Ups...Statt ws.Off muss es ws.4 heißen!
AW: Makro: Summe und Teilen in jeder Zelle
08.05.2004 11:56:38
Michael
Halo Daniel
Problem gelöst?
Gruß Michael
AW: Makro: Summe und Teilen in jeder Zelle
08.05.2004 12:09:27
Daniel
Nein. Ich habe das Makro nur fürs Forum etwas abgeändert und eine Änderung falsch vorgenommen. Das Problem belibt.
AW: Makro: Summe und Teilen in jeder Zelle
09.05.2004 16:19:10
Christoph
Hallo Daniel,
ich hab dir damals das Makro geschrieben.
- teile einfach das Ergebnis durch den gewünschten Wert.
Also so:
ws4.Cells(IntCnt + k + 1, 2) = _
Application.Sum(.Range("B" & i & ":B" & i + IntCnt - 1)) / ws3.Cells(IntCnt + k + 1, 2)
Gruß
Christoph
Anzeige
AW: Makro: Summe und Teilen in jeder Zelle
09.05.2004 17:36:31
Daniel
Hallo Christoph!
Das Problem ist, dass ich diese Berechnung gerne
- für jede Spalte in ws4 machen würde (da die Anzahl variabel ist)
- nur bis zur letzten gefüllten Zeile in ws3 und die Spalte in ws3 für jede Rechnung gleich bleibt. Also hier keine Anpassung.
Ich habe keine Ahnung, wie diese Anpassung möglich ist.
Grüße
Daniel
AW: Makro: Summe und Teilen in jeder Zelle
10.05.2004 00:35:23
Christoph
Hi Daniel,
ehrlich gesagt ist es nicht ganz so einfach durch deine Formuliereung durchzusteigen.
Das liegt nicht an dir, sondern eher daran, dass ich deine Tabelle nicht kenne.
Wenn du jetzt also für jede Spalte diese Berechnung durchführen willst, dann hab ich dir im Bsp unten mal gezeigt, wie das für die Spalten A bis E (For j = 1 To 5)aussehen müsste. Die Zahlen kannst du ja entsprechend anpassen.
ich schätze, dass wird immer noch nicht genau das sein, was du willst, aber ich denke, das Schema ist auf jeden Fall erkennbar.
Gruß
Christoph

Sub EinsZwei()
Dim i%, k%, j%, IntCnt%, LRow%
Dim ws1 As Worksheet, ws2 As Worksheet, ws3 As Worksheet
Dim ws4 As Worksheet
Dim ws5 As Worksheet
Set ws1 = Worksheets("Eins")
Set ws2 = Worksheets("Zwei")
Set ws3 = Worksheets("Drei")
Set ws4 = Worksheets("Vier")
Set ws5 = Worksheets("Fünf")
'Lösche
ws4.Cells.ClearContents
ws5.Cells.ClearContents
'Übertrage Erste Spalte
ws1.Columns("A:A").Copy ws4.Range("A1")
ws2.Columns("A:A").Copy ws5.Range("A1")
ws1.Rows("1:1").Copy ws4.Range("A1")
ws2.Rows("1:1").Copy ws5.Range("A1")
IntCnt = Sheets("Steuerung").Range("J5").Value
With ws1
For j = 1 To 5                                   'Spalten A bis E
LRow = .Cells(Rows.Count, j).End(xlUp).Row    'letzte Zeile in der Spalte
For i = 3 To LRow - IntCnt + 1
k = k + 1
ws4.Cells(IntCnt + k + 1, j) = _
Application.Sum(.Range(.Cells(i, j), .Cells(i + IntCnt - 1, j))) / _
ws3.Cells(IntCnt + k + 1, 2)
Next i
Next j
End With
End Sub

Anzeige
Division durch Null verhindern
10.05.2004 06:49:40
Daniel
Hallo Christoph.
Ja, das Schema scheint zu stimmen.
Ich werde in Zukunft versuchen eine Beispieltabelle anzufertigen.
Das Problem ist nun, dass eine Division durch Null vorliegt.
Es muss hier
LRow = .Cells(Rows.Count, j).End(xlUp).Row 'letzte Zeile in der Spalte
die letzte Zeile in der Spalte vom Blatt ws3, durch welche dividiert, geprüft werden, damit keine Division durch Null vorkommt.
Vielen Dank für die Mühe!!
Grüße
Daniel
AW: Division durch Null verhindern
10.05.2004 13:03:08
Christoph
Hi Daniel,
das Script bezieht sich jetzt immer auf die letzte Zeile der jeweiligen Spalte in ws1.
Wenn die Anzahl der Zeilen größer ist als in ws3 gibt es eine Division durch Null - das ist richtig. Hier komme ich allerdings in den Bereich der Spekulation, was denn in dem Fall passieren soll.
zur weiteren beliebigen Anpassung...
Gruß
Christoph
...
k = k + 1
If ws3.Cells(IntCnt + k + 1, 2) 0 Then
...
Else
...
End If
Next i
...
Anzeige
AW: Division durch Null verhindern
10.05.2004 15:43:11
Daniel
Hallop Christoph,
wenn die Zelle nicht gefüllt ist in ws3, so soll erst gar keine Berechnung stattfinden.
Tut mir leid, dass ich mich so blöd ausdrücke.
Grüße
Daniel
auf ein letztes
10.05.2004 18:45:01
Christoph
dann so
Gruß
Christoph

Sub EinsZwei()
Dim i%, k%, j%, IntCnt%, LRow%
Dim ws1 As Worksheet, ws2 As Worksheet, ws3 As Worksheet
Dim ws4 As Worksheet
Dim ws5 As Worksheet
Set ws1 = Worksheets("Eins")
Set ws2 = Worksheets("Zwei")
Set ws3 = Worksheets("Drei")
Set ws4 = Worksheets("Vier")
Set ws5 = Worksheets("Fünf")
'Lösche
ws4.Cells.ClearContents
ws5.Cells.ClearContents
'Übertrage Erste Spalte
ws1.Columns("A:A").Copy ws4.Range("A1")
ws2.Columns("A:A").Copy ws5.Range("A1")
ws1.Rows("1:1").Copy ws4.Range("A1")
ws2.Rows("1:1").Copy ws5.Range("A1")
IntCnt = Sheets("Steuerung").Range("J5").Value
With ws1
For j = 1 To 5                                   'Spalten A bis E
LRow = .Cells(Rows.Count, j).End(xlUp).Row    'letzte Zeile in der Spalte
For i = 3 To LRow - IntCnt + 1
k = k + 1
If ws3.Cells(IntCnt + k + 1, 2).Value <> "" Then
ws4.Cells(IntCnt + k + 1, j) = _
Application.Sum(.Range(.Cells(i, j), .Cells(i + IntCnt - 1, j))) / _
ws3.Cells(IntCnt + k + 1, 2)
End If
Next i
Next j
End With
End Sub

Anzeige
AW: auf ein letztes
10.05.2004 19:07:41
Daniel
Hi!
Ok, so funktioniert die Berechnung.
Ich habe npch abgeändert for j = 2 To 5.
Es berechnet mir aber nur Werte für Spalte B.
Dabei möchte ich doch, dass für jede gefüllte Zelle in ws1
die Berechnung durchgeführt werden soll...... :-((
Grüße
Daniel
AW: auf ein letztes
11.05.2004 14:30:39
Daniel
Hallo!
Leier komme ich mit dem Makro nicht voran.
Es soll die Berechnung für JEDE gefüllte Zelle (außer A und 1) in ws1 ausführen
und in ws4 schreiben. An sich ist das Makro korrekt- es macht die Berechnung nur nicht für jede gefüllte Zelle.
Ich hoffe mir kann doch jemand helfen...
Danke,
Daniel

Sub EinsZwei()
Dim i%, k%, j%, IntCnt%, LRow%
Dim ws1 As Worksheet, ws2 As Worksheet, ws3 As Worksheet
Dim ws4 As Worksheet
Dim ws5 As Worksheet
Set ws1 = Worksheets("Eins")
Set ws2 = Worksheets("Zwei")
Set ws3 = Worksheets("Drei")
Set ws4 = Worksheets("Vier")
Set ws5 = Worksheets("Fünf")
'Lösche
ws4.Cells.ClearContents
ws5.Cells.ClearContents
'Übertrage Erste Spalte
ws1.Columns("A:A").Copy ws4.Range("A1")
ws2.Columns("A:A").Copy ws5.Range("A1")
ws1.Rows("1:1").Copy ws4.Range("A1")
ws2.Rows("1:1").Copy ws5.Range("A1")
IntCnt = Sheets("Steuerung").Range("J5").Value
With ws1
For j = 1 To 5                                   'Spalten A bis E
LRow = .Cells(Rows.Count, j).End(xlUp).Row    'letzte Zeile in der Spalte
For i = 3 To LRow - IntCnt + 1
k = k + 1
If ws3.Cells(IntCnt + k + 1, 2).Value <> "" Then
ws4.Cells(IntCnt + k + 1, j) = _
Application.Sum(.Range(.Cells(i, j), .Cells(i + IntCnt - 1, j))) / _
ws3.Cells(IntCnt + k + 1, 2)
End If
Next i
Next j
End With
End Sub

Anzeige
AW: auf ein letztes
11.05.2004 16:17:30
Christoph
Hi Daniel,
wie schon gesagt, ohne deine Tabelle im Detail zu kennen ist es nicht immer einfach.
Insofern waren die letzten Antworten von mir eher als Tipp zu verstehen und nicht als Komplett-Lösung. Ich denke aber, dass es daran liegt, dass der Zähler k nicht zurückgesetzt wurde.
also so:
...
With ws1
For j = 1 To 5
k = 0
LRow = .Cells(Rows.Count, j).End(xlUp).Row
For i = 3 To LRow - IntCnt + 1
k = k + 1
....
Gruß
Christoph
AW: auf ein letztes
11.05.2004 16:27:20
Daniel
Hallo Christop,
ok, das geht.
Wenn ich nun aber statt
...
With ws1
For j = 1 To 5
die Berechnung bis zur letzten gefüllten Spaalte von ws1 vornehmen will.
Wie muss ich das dann schreiben?
Ich meine das so:
For j = 1 To "letzte gefüllte Spalte"
Danke,
Daniel
Anzeige
letzte Spalte
11.05.2004 16:37:31
Christoph
zB die letzte Spalte, die in Zeile1 einen Eintrag hat:
For j = 1 To .Cells(1, Columns.Count).End(xlToLeft).Column
Gruß
Christoph
AW: letzte Spalte
11.05.2004 17:46:38
Daniel
Hi!
Danke. Das ist es!!!
Ich bin froh. Und tut mir echt Leid, dass ich das alles so kompliziert erklärt hatte.
Hoffe ich habe Dich nicht zu sehr genervt.
Grüße
Daniel
Danke für die Rückmeldung
11.05.2004 18:08:36
Christoph
Hi Daniel,
du hast mich nicht genervt - es ist eben schwierig bestimmte Sachverhalte zu erklären, bzw die Erklärungen zu verstehen.
bis dann
Gruß Christoph

305 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige