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

Makro programmieren

Makro programmieren
03.01.2004 15:22:06
Bongo
Liebe Forumsgemeinde!

Ich benötige für meine Diplomarbeit ein Makro, kann aber kein VBA. Daher
möchte ich jemanden bitten, mir folgendes Makro zu schreiben. Auf Wunsch wird
derjenige in der Arbeit lobend erwähnt:

Das Marko hat 2 Ausprägungen:

Es gibt 2 Spalten: H ist die Datenspalte, I ist eine Kriteriumsspalte.
Es gilt: (Siehe https://www.herber.de/bbs/user/2651.xls) :

I...Wert in der Kriteriumsspalte
I-1...Wert bevor I in der Kriteriumsspalte.
1:'endlosschleife
Wenn Spaltenwert I > -20 and (I-1 < I) dann beginne in H mit der
Summenberechnung.
Wenn Spaltenwert I > +10 and (I-1 < I) dann beende in H die
Summenberechnung und weise Summe in Spalte J aus.(siehe zeile 135)
Goto1:

Es gibt also 2 Schranken. 1: Die Summenberechnung startet, wenn die untere
Schranke (-20) nach oben hin durchbrochen wird (I-1 < I).
Die Summenberechnung endet wenn die obere Schranke (+10) von unten erreicht
wird (I-1 < I)(siehe Zeile 135).

Variante2:
Siehe https://www.herber.de/bbs/user/2651.xls :

Es gibt 2 Spalten: H ist die Datenspalte, I ist eine Kriteriumsspalte.
Es gilt:
I...Wert in der Kriteriumsspalte
I-1...Wert bevor I in der Kriteriumsspalte.
1:'endlosschleife
Wenn Spaltenwert I > -20 and (I-1 < I) dann beginne in H mit der
Summenberechnung.
Wenn Spaltenwert I > +10 and (I-1 < I) dann beende in H die
Summenberechnung und weise Summe in Spalte J aus.(siehe zeile 135) goto 2.
Wenn Spaltenwert I < -20 and I-1 > I dann beende in H die Summenberechnung
und weise Summe in Spalte K aus.(zeile 390) Goto 2.

2:'endlosschleife
Wenn Spaltenwert I < -20 and I-1 > I beginne Summenbeechnung
wenn Spaltenwert I > -20 and I-1 < I beende Summenberechnung weise Summe
Spalte L zu.(zeile402)
Goto1.

Es gibt also 2 Schranken. 1: Die Summenberechnung startet, wenn die untere
Schranke (-20) nach oben hin durchbrochen wird (I-1 < I).
Die Summenberechnung endet wenn die obere Schranke (+10) von unten erreicht
wird (I-1 < I)(siehe Zeile 135) oder die untere Schranke von oben ereicht
wird(I-1 > I).
Wird die untere Schranke von oben erreicht I < -20 und (I-1 > I)wird die
Summe bis I > -20 und (i-1 < I) berechnet (die untere Schranke wird nach oben
hin durchbrochen. Goto 1:

Danke im Voraus!

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro programmieren
04.01.2004 14:21:59
Bongo
Hallo!

Will oder kann mir keiner helfen? Ich weis, daß ich da eine ganze Menge verlange, aber es würde mich schon freuen wenn mir jemand zumindest einen Tip geben kann.
AW: Makro programmieren
04.01.2004 15:15:53
Dieter Klemke
Hallo Bongo,
wenn du selbst eine Antwort zu deinem Problem schickst, wird das Problem aus der Liste der ungelösten Probleme entfernt (linke Leiste, Punkt "Offene Fragen") und die Chance dann noch eine echte Antwort zu bekommen wird deutlich reduziert.

Ich bin nicht sicher, ob ich dein Problem richtig verstanden habe, in der Arbeitsmappe summierst du Werte der Spalte B (Formel in K135) im Text sprichst du von Spalte H.
Ich sende dir einen Ansatz zu Variante 1, um die Begriffe zu klären. Wenn das OK ist, kann man über Variante 2 reden.
Falls wir zu einem Erfolg kommen, solltest du Herbers Excel-Server in deiner Diplomarbeit erwähnen.

Sub Variante1()
Dim SummEin As Boolean
Dim Summe As Double
Dim ws As Worksheet
Dim zeile As Long
Set ws = ThisWorkbook.Worksheets(1)
ws.Range("J:L").ClearContents
zeile = 7
' Variante 1
SummEin = False
Do Until IsEmpty(ws.Cells(zeile, "I"))
If SummEin Then
' Summation ist eingeschaltet
Summe = Summe + ws.Cells(zeile, "H")
' Endebedingung prüfen
If ws.Cells(zeile, "I") > 10 And _
ws.Cells(zeile - 1, "I") < ws.Cells(zeile, "I") Then
' Ende erreicht
SummEin = False
ws.Cells(zeile, "L") = "Aus" ' nur Info, später entfernen
ws.Cells(zeile, "J") = Summe
End If
Else
' Summation ist ausgeschaltet
' Anfangsbedingung prüfen
If ws.Cells(zeile, "I") > -20 And _
ws.Cells(zeile - 1, "I") < ws.Cells(zeile, "I") Then
' Anfang
SummEin = True
Summe = ws.Cells(zeile, "H")
ws.Cells(zeile, "K") = "Ein" ' nur Info, später entfernen
End If
End If
zeile = zeile + 1
Loop
End Sub

MfG
Dieter
Anzeige
AW: Makro programmieren
04.01.2004 18:07:57
Bongo
Hallo Dieter!

Erstmal vielen, vielen Dank für Deine Antwort - das mit der Liste der ungelösten Probleme wusste ich nicht.
Du hast das Problem verstanden und es funktioniert mit einer Ausnahme wunderbar:

Das Problem liegt an der Definition des Kriteriums.
Ich hätte gern, daß die Summenberechnung beginnt wenn das Kriterium das erste Mal die Schranke von einem Wert (z.b.: -10 oder - 20) nach oben hin durchbricht.

Schau Dir mal die Graphik an: Die blaue Linie ist das Kriterium während die Schranke die horizontale schwarze Linie bei -20 darstellt.
Das nach oben hin durchbrechen bedeutet nun, daß die blaue Line die schwarze von unten kommend schneidet.
Dieses schneiden nach oben ist aber schwer zu operationalisieren. Mein Vorschlag war das eben die vorangegangene Beobachtung kleiner ist als die nachher kommende ist (i-1 < i).
Leider ist diese Kriterium nicht geeignet, denn in Zeile L135 hört die Summenberechnung richtigerweise auf. Beginnt aber dann wieder bei L136 mit der berechnung der Summe was denn (i-1 < i) und I > -20 aber es wird dabei die Schranke von -20 nicht berührt.
Korrekterweise müsste die Berechnung erst bei h391 starten (siehe auch graphik).

Scheibar muß noch eine dritte Bedingung erfüllt werden z.b.: (i-1) < -20
ich bin aber nicht sicher - was sagst du dazu?
Anzeige
AW: Makro programmieren
04.01.2004 22:25:30
Dieter Klemke
Hallo Bongo,
also die sachliche Verarbeitungslogik musst du schon selber klären. Ich kann dir allenfalls bei der Programmierung helfen.
Dein zusätzliches Kriterium ergibt jedenfalls das folgende Programm:

Sub Variante1()
Dim SummEin As Boolean
Dim Summe As Double
Dim ws As Worksheet
Dim zeile As Long
Set ws = ThisWorkbook.Worksheets(1)
ws.Range("J:L").ClearContents
zeile = 7
' Variante 1
SummEin = False
Do Until IsEmpty(ws.Cells(zeile, "I"))
If SummEin Then
' Summation ist eingeschaltet
Summe = Summe + ws.Cells(zeile, "H")
' Endebedingung prüfen
If ws.Cells(zeile, "I") > 10 And _
ws.Cells(zeile - 1, "I") < ws.Cells(zeile, "I") Then
' Ende erreicht
SummEin = False
ws.Cells(zeile, "L") = "Aus" ' nur Info, später entfernen
ws.Cells(zeile, "J") = Summe
End If
Else
' Summation ist ausgeschaltet
' Anfangsbedingung prüfen
If ws.Cells(zeile, "I") > -20 And _
ws.Cells(zeile - 1, "I") < ws.Cells(zeile, "I") And _
ws.Cells(zeile - 1, "I") <= -20 Then
' Anfang
SummEin = True
Summe = ws.Cells(zeile, "H")
ws.Cells(zeile, "K") = "Ein" ' nur Info, später entfernen
End If
End If
zeile = zeile + 1
Loop
End Sub

MfG
Dieter
Anzeige
AW: Makro programmieren
05.01.2004 14:54:30
Bongo
Hallo Dieter!

Das makro funktioniert jetzt perfekt. *freu* danke auch für die erklärungen sowie das ein und aus.
Bitte programmiere mir noch die Variante 2. Ich habe Sie von den Bedingungen her modifiziert:

Wenn Spaltenwert I > -20 and (I-1 < I) and ( i-1 < -20) dann beginne in H mit der
Summenberechnung.
Wenn Spaltenwert I > +10 and (I-1 < I)and (i-1 < +10) dann beende in H die
Summenberechnung und weise Summe in Spalte J aus. goto 2.
Wenn Spaltenwert I < -20 and (I-1 > I)and (i-1 > -20) dann beende in H die Summenberechnung
und weise Summe in Spalte K aus.Goto 2.

2:'endlosschleife
Wenn Spaltenwert I < -20 and (I-1 > I) and (i-1 > -20) beginne Summenberechnung
wenn Spaltenwert I > -20 and (I-1 < I) and (i-1 < -20) beende Summenberechnung weise Summe
Spalte L zu.
Goto1.

Danke
Anzeige
AW: Makro programmieren
06.01.2004 09:54:00
Dieter Klemke
Hallo Bongo,
die Bedingungen kann man jetzt etwas einfacher und dadurch übersichtlicher formulieren,
z.B. "I-1 < -20 < I" anstelle von "I > -20 and I-1 < I and I-1 < -20".
Die Verarbeitung lässt sich meiner Ansicht nach in zwei hintereinander ablaufenden Schleifen realisieren:

Sub Variante2()
Dim SummEin As Boolean
Dim Summe As Double
Dim ws As Worksheet
Dim zeile As Long
Set ws = ThisWorkbook.Worksheets(1)
ws.Range("J:N").ClearContents
' 1. Duchlauf (Markierung S1 in Spalte M)
zeile = 7
SummEin = False
Summe = 0
Do Until IsEmpty(ws.Cells(zeile, "I"))
If SummEin Then
' Summation ist eingeschaltet
Summe = Summe + ws.Cells(zeile, "H")
' Endebedingung prüfen
If ws.Cells(zeile - 1, "I") < 10 And 10 < ws.Cells(zeile, "I") Then
' Ende J erreicht
SummEin = False
ws.Cells(zeile, "M") = "S1 Aus J" ' nur Info, später entfernen
ws.Cells(zeile, "J") = Summe
Else
If ws.Cells(zeile, "I") < -20 And -20 < ws.Cells(zeile - 1, "I") Then
' Ende K erreicht
SummEin = False
ws.Cells(zeile, "M") = "S1 Aus K" ' nur Info, später entfernen
ws.Cells(zeile, "K") = Summe
End If
End If
Else
' Summation ist ausgeschaltet
' Anfangsbedingung prüfen
If ws.Cells(zeile - 1, "I") < -20 And -20 < ws.Cells(zeile, "I") Then
' Anfang
SummEin = True
Summe = ws.Cells(zeile, "H")
ws.Cells(zeile, "M") = "S1 Ein" ' nur Info, später entfernen
End If
End If
zeile = zeile + 1
Loop
' 2. Durchlauf (Markierung S2 in Spalte N)
zeile = 7
SummEin = False
Summe = 0
Do Until IsEmpty(ws.Cells(zeile, "I"))
If SummEin Then
' Summation ist eingeschaltet
Summe = Summe + ws.Cells(zeile, "H")
' Endebedingung prüfen
If ws.Cells(zeile - 1, "I") < -20 And -20 < ws.Cells(zeile, "I") Then
' Ende erreicht
SummEin = False
ws.Cells(zeile, "N") = "S2 Aus" ' nur Info, später entfernen
ws.Cells(zeile, "L") = Summe
End If
Else
' Summation ist ausgeschaltet
' Anfangsbedingung prüfen
If ws.Cells(zeile, "I") < -20 And -20 < ws.Cells(zeile - 1, "I") Then
' Anfang
SummEin = True
Summe = ws.Cells(zeile, "H")
ws.Cells(zeile, "N") = "S2 Ein" ' nur Info, später entfernen
End If
End If
zeile = zeile + 1
Loop
End Sub

MfG
Dieter
Anzeige
AW: Makro programmieren
06.01.2004 22:22:41
Bongo
Super, es funktioniert - Vielen Dank für alles Dieter !

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige