tom-kinbaku
Goto Top

Wie lautet die richtige funktion fuer einen zaehler? (excel 2002)

nicht boes sein, liebe excel-rennboliden, leider bin ich noch ein excel-fussgaenger ...
fuer hilfe wuerde ich mich artigst bedanken!
der schlichte tom face-wink

das raetsel:

a) in zelle a1 erscheinen durch eingabe laufend andere zahlen von 0-unendlich.
b) immer wenn der wert "1" erscheint, soll dieser in zelle b1 laufend mitgezaehlt werden.
c) bei 0,2,3,4,5 bis unendlich soll der zaehler in b1 nur seinen augenblicklichen hoechstwert beibehalten.
d) erscheint in zelle a1 wieder eine "1" soll sich der wert in zelle b1 wiederum um den wert 1 erhoehen.
e) wenn moeglich und wuenschenswert waere eine loesung in form einer funktionsformel (funktionszeile).

vermutlich gibt es eine kurze praegnante loesung, aber auch nach verzweifeltem zermartern meines bescheidenen grosshirns bahnt sich keine solche an ...

wer kann dem kleinen tom schluessig helfen?
ein grosses dankeschoen im voraus!

Content-ID: 170239

Url: https://administrator.de/forum/wie-lautet-die-richtige-funktion-fuer-einen-zaehler-excel-2002-170239.html

Ausgedruckt am: 23.12.2024 um 10:12 Uhr

felixcc
felixcc 22.07.2011 um 11:36:00 Uhr
Goto Top
Hallo Tom,

ich glaube nicht, dass es mit einer Funktionsformel zu erledigen ist, da diese sich eigentlich immer statisch auf die aktuellen Werte von Zellen beziehen.
Mit einem Makro kannst du das aber auch relativ einfach implementieren.
ich würde dir vorschlagen, im onchange-Ereginis deines Tabellenblattes zu überprüfen ob sich die Zelle A1 geändert hat und dann den Wert zu überprüfen und im Falle einer eins, den Wert der Zelle B1 zu erhöhen.
Ich weiß nicht ob es eine einfacherer Lösung gibt und ob diese Lösung sich stark auf die Performance deiner Tabelle auswirkt.

http://www.office-loesung.de/ftopic183237_0_0_asc.php hier gibts einen Hinweis zum onchange Ereignis.

Wenn dir der Ansatz reicht zum selbstständig weiterarbeiten, sag bescheid obs geklappt hat oder nicht.
Solltest du dich mit VBA noch nicht so gut auskennen, sag bescheid, dann kann ich -vermutlich heute Abend- mal versuchen dein Problem zu lösen..

Gruß
Felix
tom-kinbaku
tom-kinbaku 22.07.2011 um 12:02:23 Uhr
Goto Top
lieber felix,

erstmal danke fuer deine zeit und muehe!

der link sagt mir nix, da ich nur rudimentaeres vba beherrsche.

gegenfrage: warum klappt mein ansatz nicht:

fx=WENN(A1=1;B1+1;0)+WENN(A1<>1;MAX(B1);0)

hier erhoeht er immer um 11. anscheinend bedeutet "A1" hier nicht "zelle", sondern den wert 10.

offenbar alles nicht so einfach, wie es sich der kleine tom so vorstellt ...
felixcc
felixcc 22.07.2011 um 13:16:53 Uhr
Goto Top
Wie hast du das denn genau gemacht?
Wenn du die Formel die du angegeben hast in B1 schreibst, dann hast du einen sogenannten "Zirkelbezug"
und da gibt Excel bei mir dei Fehlermeldung aus, dass es bei der Berechnung zu Problemen kommen könnte.

Mit Makros würde das folgendermaßen aussehen:
in Excel ALT+F11 drücken, dadurch öffnet sich ja Microsoft visual Basic
Jetzt auf Tabelle1 (oder die, wo deine Zellen drin sind) doppelklicken und den Quelltext eingeben:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1")) Is Nothing Then
If Cells.Range("A1").Value = 1 Then
Cells.Range("B1").Value = Cells.Range("B1").Value + 1
End If
End If
End Sub

Dann abspeichern und visual Basic Editor schließen.

Als Erklärung: Es wird bei einer Änderung geprüft ob Zelle A1 bearbeitet wurde, dann wird überprüft ob ihr Wert 1 ist und wenn dies der Fall ist, wird zum Wert aus B1 eins dazugezählt
Es kommt zu einer Fehlermeldung die nciht abgefangen wird, wenn in B1 ein Text statt einer Zahl steht. Mit etwas mehr Zeit kannst du die ja noch abfangen.

Einziges Problem:
Wenn in A1 ein Verweis oder eine Formel steht werden die Änderungen nicht als solche erkannt.

Gruß
Felix
76109
76109 22.07.2011 um 13:18:19 Uhr
Goto Top
Hallo Tom!

Wie felixcc schon erwähnt hat, ist dies per Funktions-Formel nicht möglich. Dazu benötigst Du das von felixcc vorgeschlagene VBA-Change-Event. Aber das funktioniert dann aber auch nur, wenn die Zellen überwacht werden, deren Eingaben die Zelle A1 verändern. Eine Wertänderung durch eine Formel löst kein Change-Erreignis aus, sondern nur eine direkte Eingabe in eine Zelle.

Gruß Dieter

[Edit] War ich wohl etwas zu langsamface-wink [/edit]
tom-kinbaku
tom-kinbaku 22.07.2011 um 13:50:50 Uhr
Goto Top
lieber felix,

it works!

ich nehme an, du bist bereits reich geworden durch dein genie und schreibst mir von deinem schloss aus, zigarre paffend im morgenmantel waehrend du die neuesten boersenwerte begutachtest - kann gar nicht anders sein!

dankeschoen, muss mich nur noch mit der loesung auseinandersetzen, damit ich sie auch richtig schnalle.

tom wuenscht dir ein schoenes wochenende und nimm mich mal mit auf ein plauderstuendchen in deinem privatjet!

lg,

tom face-wink
tom-kinbaku
tom-kinbaku 22.07.2011 um 13:53:50 Uhr
Goto Top
lieber dieter,

danke ebenfalls fuer deine muehe - mein wissensstand ist noch sehr begrenzt, aber ich werde ueber die wunder, die du in deinem kommentar beschreibst ausgiebig meditieren und dir mein verstehen per aetherischer uebertragung so bald als moeglich zukommen lassen.

watch out!

auch dir ein schoenes weekend von

tom face-wink
Xolger
Xolger 22.07.2011 um 14:41:41 Uhr
Goto Top
Hallo Tom,

eine nette Aufgabe hast du da gefunden.
Das Problem ist der entstehende Zirkelbezug beim Eintragen der Formel in B1:

In B1 eintragen=WENN(A1=1,B1+1,0)+WENN(A1<>1,MAX(B1),0)

Wenn mann sein Excel aber so einrichtet, das die interaktive Berechnung mit einer Iteration von 1
zulässig ist, dann funktioniert die Formel.


Gruß Xolger
tom-kinbaku
tom-kinbaku 22.07.2011 um 15:08:50 Uhr
Goto Top
hallo xolger,

hm. die iteration ist bei mir auf eins eingestellt, aber es geht nicht. welcher wert muss in "maximale aenderung" stehen, oder gibt es sonst noch relevante werte, die ich anpassen muss?

lg,

tom face-wink
felixcc
felixcc 22.07.2011 um 15:50:18 Uhr
Goto Top
Hallo Xolger,

das ist eine interessante Funktion von Excel, die ich noch garnicht kannte.
Vielen Dank dafür!

Deine Lösung hat allerdings einen Haken, wenn in A1 eine 1 steht, und ich ein anderes Feld ändere,
dann wird (nach der Änderung der anderen Zelle) in B1 trotzdem um 1 hochgezählt.

Gruß
Felix
Xolger
Xolger 22.07.2011 um 22:57:49 Uhr
Goto Top
Hallo Tom,

bei mir ist die maximale Änderung mit 0.001 eingetragen.
Mehr habe ich nicht eingestellt.

@Felix
Das ist mir beim Testen gar nicht aufgefallen, da ich nur A1 geändert habe.
Aber das ist wahrscheinlich das Problem der interaktiven Berechnung, dass
bei jeder Änderung im Blatt neu gerechnet wird.

Ich bin auch nur durch Zufall auf die interaktive Berechnung gestoßen,
in praktischen Einsatz habe ich diese Einstellung nicht aktiviert.


Gruß
Xolger
tom-kinbaku
tom-kinbaku 23.07.2011 um 18:29:57 Uhr
Goto Top
hallo xolger,

das problem dürfte diese spezielle excel-datei sein.
öffne ich eine neue (leere) excel-datei, aktiviere die iteration und gebe die formel ein, funktioniert die sache tadellos.

aber in meiner "alten" excel-datei, die ich verwende, rechnet er bei "1" gleichmal bis zum zähler 140 (!), wenn die zahl "2" erscheint (wo ja nichts mehr in B1 passieren sollte, zählt er nochmal 28 hinzu (ergebnis jetzt 168). egal, welche zahl jetzt noch in A1 erscheint, es passiert nichts mehr.

hat die excel-datei was?

liebe grüße aus wien,

tom face-wink
Biber
Biber 23.07.2011 um 20:00:44 Uhr
Goto Top
Moin tom-kinbaku,

was spricht denn dagegen, einfach in die Zelle B1 einzutragen
=ZÄHLENWENN(A:A;1)
??

Grüße
Biber
bastla
bastla 23.07.2011 um 20:13:48 Uhr
Goto Top
Hallo Biber!
was spricht denn dagegen
Es soll (zumindest laut "Rätselbeschreibung") eine Erfassung der Werte nur von A1, dies aber dynamisch, erfolgen ...

Grüße
bastla
Biber
Biber 23.07.2011 um 20:44:59 Uhr
Goto Top
Moin bastla,

okay, dann hilft natürlich mein Schnellschuss wenig face-wink
Frage falsch verstanden - bitte meinen Kommentar ignorieren.

Grüße
Biber
tom-kinbaku
tom-kinbaku 26.07.2011 um 09:29:51 Uhr
Goto Top
kein problem, biber!

schnellschuesse sind doch manchmal auch volltreffer!

vielleicht kann nochmal irgendwer mutmassen, ob mein problem an einer kaputten excel-datei liegt oder an einer art "datenueberfuellung"?

wie gesagt, in einer leeren,neuen excel-datei geht die formel plus iteration von xolger tadellos!
nur meine alte, viel beanspruchte, mit formeln vollgepfropfte datei reagiert mit dieser formel nicht wunschgemaess. warum nicht?

laesst mir keine ruhe! nur zur info: beide dateien sind die gleiche version inkl. updates (excel 2002/sp3).

kommt maenner, da geht noch was!

lg, tom face-wink
Xolger
Xolger 26.07.2011 um 13:15:38 Uhr
Goto Top
Hallo Tom,

ich denke mal das durch die Formeln in deiner vorhandenen Tabelle und die dadurch von Excel
vollzogene Neuberechnung einen Einfluß auf die Berechnung hat.
Evtl. wird durch eine oder mehrere Formel A1 aktualisiert und B1 rechnet deshalb jedesmal neu.
Mit deiner Originaltabelle könnte man evtl. das Phänomen nachvollziehen oder auch nur
verwundert mit den Achseln zucken. Aber das Bereitstellen der Datei fällt bestimmt aus.

Und warum legst du keine neue Datei an und verweist evtl auf die alte?


Gruß
Xolger
tom-kinbaku
tom-kinbaku 26.07.2011 um 13:34:24 Uhr
Goto Top
hallo xolger,

da es eine furchtbar geheime datei ist, kann ich sie leider nicht publizieren (nationale sicherheit und blablabla, du kennst das sicher).

- aber neue datei anlegen und auf die alte verweisen: du meinst sicher ein neues blatt in derselben datei, denn kann man selbststaendige excel-dateien untereinander verknuepfen?

- deine formel funktioniert doch super - leider nur einmal, dann gibt's (mit veraenderten zellangaben natuerlich) kompilierungsfehler: soll heissen, dass obengenannter zellbezug ja nicht der einizge in der datei bleiben soll. (wie muss ich die bezeichnung abaendern, dass er mehrere solcher formeln akzeptiert, wie du sie mir geschrieben hast?

- weisst du zufaellig, wie man eine "linie" am ende einer formeleingabe erzeugt, also um die formeln voneinander zu trennen. manchmal macht excel das selbst, manchmal meint er, dass nach "end sub" ein kommentar kommen muss (offenbar fehlt die abschliessende linie, da die naechste formel gleich danach beginnt.

fragen ueber fragen: noch lust, mir zu helfen?

danke im voraus!

lg,

tom face-wink
Xolger
Xolger 26.07.2011 um 22:18:20 Uhr
Goto Top
Hallo Tom,

also man kann in einer Exceliste mit Formel/Zellbezügen zu anderen Excellisten arbeiten. (Einfach mal austeste, beide Dateien öffnen und in der Zieldatei = eingeben und in der Quelldatei eine Zelle wählen.)
Ein Kompilierungsfehler und "Linien" nach Formeln im Zusammenhang mit End Sub hört sich doch stark nach VBA an. Wenn du Makros einsetzt kann die Iterative Berechnung evtl. bei jedem
Berechnungsschritt greifen. Und wenn du eh mit Makros arbeitest, dann sollte man eine bessere Lösung als die iterative Berechnung finden.

Von daher klär uns mal auf, Makro oder Formeln?


Gruß
Xolger
tom-kinbaku
tom-kinbaku 27.07.2011 um 12:06:44 Uhr
Goto Top
hallo xolger,

naja, felix hat ja freundlicherweise ein makro zur verfuegung gestellt; also makros.
- die iterationsgeschichte von dir geht ja offenbar nur bei dokumenten, wo nur ein zellbezug zur gleichen zeit vorhanden ist, also bei umfangreicheren tabellen nicht mehr.

wie gesagt, leider geht die sache beim makro mit A1 und B1 noch. es folgt automatisch eine trennlinie nach "end sub" und gut.
- schreibe ich darunter denselben codeinhalt, aber jetzt mit C1 und D1 isses auf einmal ein kompilierungsfehler, es gibt keine trennlinie und excel sagt, dass nach "end sub" nur ein kommentar folgen kann (und nicht der naechste code, nehme ich an).

ich weiss, ich habe wirklich keine ahnung von der materie, es ist schrecklich.
ist ehrlich mein letztes anliegen inn der sache, dann gehe ich wieder meiner wege, versprochen!

ein ahnungsloser tom
bastla
bastla 27.07.2011 um 13:36:01 Uhr
Goto Top
Hallo tom-kinbaku!

Wenn Du das Script von oben auch für andere Zellen benötigst, musst Du alles in ein einziges "Sub" packen - es gibt nur ein "Worksheet_Change"-Ereignis pro Blatt - daher also etwa:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1")) Is Nothing Then  
    If Cells.Range("A1").Value = 1 Then Cells.Range("B1").Value = Cells.Range("B1").Value + 1  
End If
If Not Intersect(Target, Range("C1")) Is Nothing Then  
    If Cells.Range("C1").Value = 1 Then Cells.Range("D1").Value = Cells.Range("D1").Value + 1  
End If
End Sub
Grüße
bastla
tom-kinbaku
tom-kinbaku 27.07.2011 um 15:04:55 Uhr
Goto Top
hallo bastla,

danke, das war's! sehr aufmerksam!

akte geschlossen. danke fuer die mithilfe, werte forumsmitglieder.

lg und noch einen schoenen tag,

euer tom face-wink
tom-kinbaku
tom-kinbaku 29.07.2011 um 14:07:26 Uhr
Goto Top
"prozedur zu gross!"

nach eingabe saemtlicher daten kommt jetzt aber, dass die prozedur zu gross ist, verdammt!

also habe ich (entgegen dem rat von bastla) den code auf mehrere teile aufgeteilt und die worksheet_changes numeriert (1-4).

nun werden zwar keine fehler mehr angezeigt, aber excel ignoriert den code einfach, heisst, es werden bei tabellenverwendung keine berechnungen angestellt.

was, zum geier, laeuft jetzt falsch?

muss ich hier mit "call prozedur" arbeiten (weil worksheet_change wirklich nur einmal verwendet werden darf)?

excel ist teufelswerk.

liebe gruesse von tom
bastla
bastla 29.07.2011 um 17:39:46 Uhr
Goto Top
Hallo tom-kinbaku!

Mit der Fehlermeldung kann ich leider nix anfangen, aber Du könntest das Sub (und es kann wirklich nur ein einziges "Worksheet_Change" automatisch ausgeführt werden face-wink) noch anders formulieren:
Private Sub Worksheet_Change(ByVal Target As Range)
Select Case Target.Address
Case "$A$1"  
    If Range("A1").Value = 1 Then Range("B1").Value = Range("B1").Value + 1  
Case "$C$1"  
    If Range("C1").Value = 1 Then Range("D1").Value = Range("D1").Value + 1  
End Select
End Sub
Anstelle der Zeile 4 kannst Du auch noch
    Range("B1").Value = Range("B1").Value - (Range("A1").Value = 1)
versuchen (analog dann auch für Zeile 6).

Grüße
bastla
tom-kinbaku
tom-kinbaku 30.07.2011 um 23:02:39 Uhr
Goto Top
hallo bastla,

deine version vereinfacht das ganze zwar, aber die datenmenge ist offenbar einfach zu gross!
"prozedur zu gross" ist natürlich witzig - wie gross ist denn nun zu gross?

egal, ich habe das jetzt so gelöst, dass ich einfach die worksheet_change-zeile anführe und dann "call prozedur1". end sub
- dann kommt prozedur1, am ende der prozedur call prozedur 2. end sub. usw.

so prozediere ich mich durch meinen datenberg. funktioniert, jetzt ist es excel "genehm".

danke für deine hilfe, bastla!

lg, tom face-wink