Frage von marceldaas247, 91

Suche Excel Formel, die Zeilenwerte aus einer Spalte solange KONTINUIERLICH absucht bis immer Wert X erreicht ist, und dann Werte aus Nachbarzeile addiert?

Hallo,

also mein Problem ist das Folgende: Ich habe zwei Spalten. In der einen Spalte (A) befinden sich in den Zeilen entweder der Wert 1 oder 0. In der zweiten Spalte (B) steht immer der gleiche Wert in Millisekunden. Ich würde Excel gerne den Befehl geben, dass die Spalte B solange (und KONTINUIERLICH!) abgesucht wird bis dass der Wert X erreicht ist UND mir dann die SUMME aus den zugehörigen Zeilenwerten aus der Spalte A herausgibt.

Ich versuch's nochmal zu verdeutlichen: Angenommen die Zeilen in Spalte B haben immer den 20ms. Der Wert X beträgt 5s (also 5000ms). Mithilfe der Gleichung sollte Excel nun Spalte B immer solange durchfahren bis ein Intervall von <= (Kleiner/Gleich) 5000ms erreicht ist, gleichzeitig die entsprechenden Zeilenwerte in Spalte A addiert, und im besten Fall diesen Vorgang solange wiederholt bis zum Spaltenende. Damit möchte ich mit anderen Worten feststellen können, wie häufig ein Event in einem Intervall (in diesem Beispiel von 5000ms!!) stattfand. Weitergedacht würde also in diesem Beispiel pro Intervall 250 Events stattfinden, wenn in Spalte A immer der Wert 1 ständ.

Ich hoffe Ihr könnt mir helfen...Wenn nicht, versuche ich mich nochmal besser auszudrücken, aber das ist zunächst alles, was ich sagen kann. Beste Grüße und danke schon mal für jegliche Hilfe! Marcel

Expertenantwort
von Ninombre, Community-Experte für Excel, 61

Mir fällt nur eine Lösung mit Hilfsspalte C sein: Dort folgende Formel ab C2 bis Ende der Werte:

=WENN(UND(SUMME(B$1:B2)>=G$1;SUMME(B$1:B1)<G$1);"X";"")

In G1 steht bei mir der Wert X, bspw. 5 für die 5s

Wenn es richtig funktioniert, sollte also die Zeile ein X bekommen, bei der erstmals die Summe der Zeilen davor den Wert X überschreitet

Dann, an einen Ort Deiner Wahl:

=SUMME(A1:INDIREKT("A"&ZEILE(INDEX(C:C;VERGLEICH("X";C:C;0);1));WAHR))

Prinzip: Die Zeile ermitteln, in der das X steht. Dann Spalte A von A1 bis Axx (also der gefundenen Zeile) aufaddieren.

Kommentar von marceldaas247 ,

Hallo Ninombre,

also das kommt der Lösung schon sehr nahe. Vielen Dank schon mal. Jetzt habe ich quasi das erste Intervall erschlossen. Was müsste ich noch an der Formel ändern, damit Excel das wiederholt? Nachdem ein X in der Zeile in Spalte C auftaucht, sobald erstmals der Wert in C1 erreicht ist, soll Excel wieder mit dem Zählen beginnen, und zwar ab der nächsten Zeile nach dem X (solange bis wieder der Wert in C1 erreich ist usw.). Ist das möglich?! Vielen Dank schon mal für die Mühen.

Expertenantwort
von Iamiam, Community-Experte für Excel, 51

Es ist sinvoll, das vom anderen Ende her anzugehen: Wenn in allen Zellen 20ms steht und Du bis 5000 summiert haben willst, dann weißt Du ja schon, dass es 5000/20 = 250 Zellen sind. Und dann wirds einfach (Zeile 1 für Überschrift, Einträge abZelle A2 bzw B2):

=Zählenwenn(A2:A251;1)

fertig. (geht mit 0 genauso und mit jedem anderemn Eintrag auch.

Oder habe ich da was missverstanden?

Kommentar von marceldaas247 ,

Das war nur zur Verdeutlichung. Ich kenne vorher den Intervall-Wert X nicht (also den Wert, den im Beispiel die 5000 einnimmt.) Danke trotzdem! :)

Kommentar von Iamiam ,

ah, ich dachte, Du stellst alle 20 ms ein Ereignis fest!

Werde mich morgen nachmittag/abend nochmal dransetzen! (ist nicht so einfach! hast Du mal mit einem Makro gearbeitet? Da ginge das relativ problemlos!)

Kommentar von Iamiam ,

ich hätts gleich mit einem Makro versuchen sollen, mit Formeln habe ich mich vergeblich 2x einen halben Tag abgemüht!

Hier das Makro:


Sub SummierelinkeSpalteInAbschnittenNachAbschnittsSumme()
Dim c, NullEins, TrennZl, ZwiWert ' , SumWert
NullEins = 0: ZwiWert = 0 ' Cursor auf oberste auszuwertende Zelle der Summenspalte (B) setzen!
For Each c In Range(ActiveCell, ActiveCell.End(xlDown))
TrennZl = ActiveCell.Row
ZwiWert = ZwiWert + c.Value: NullEins = NullEins + c.Offset(0, -1).Value 'geht nur mit 0, x, da +0 gleichbleibt, x beliebig
If ZwiWert > 50 Then c.Offset(0, 1) = ZwiWert: c.Offset(0, 2) = NullEins: ZwiWert = 0: NullEins = 0: TrennZl = c.Row + 1
Next
End Sub

Das Makro läuft recht langsam (für Deine vielen Daten wohl am besten übernacht), aber es tut. (ließe sich vllt optimieren, aber ich hab ich keinen Nerv mehr dafür!

Du hast nicht mehr geantwortet. Falls Du nicht weißt, wie man Makros installiert, melde Dich!

Kommentar von Iamiam ,

Den Grenzwert der Summe kannst Du selbst definieren, ich weiß ja nicht, ob Du 5000 (ms) oder 5 (sec) drinstehen hast und ob als Zahl oder im Zeitformat (1sec = 1[Tag]/24/60/60). 50 ist jedenfalls nur mein Demo-/Entwicklungsgrenzwert.

Das Makro überschreibt vorhandene Einträge in den zwei Spalten rechts daneben (nur in den Zeilen, wo es einträgt, woanders bleiben Einträge unverändert (ggf vorher löschen/verschieben), da hab ich keine Sicherung mehr eingebaut!

Kommentar von marceldaas247 ,

Okay. Vielen Dank! Ich versuch es mal auf diese Weise! =)

Keine passende Antwort gefunden?

Fragen Sie die Community