Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

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

Frage Microsoft Microsoft Office

Mitglied: tom-kinbaku

tom-kinbaku (Level 1) - Jetzt verbinden

22.07.2011, aktualisiert 11:15 Uhr, 13029 Aufrufe, 24 Kommentare

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

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!
Mitglied: felixcc
22.07.2011 um 11:36 Uhr
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
Bitte warten ..
Mitglied: tom-kinbaku
22.07.2011 um 12:02 Uhr
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 ...
Bitte warten ..
Mitglied: felixcc
22.07.2011 um 13:16 Uhr
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
Bitte warten ..
Mitglied: 76109
22.07.2011 um 13:18 Uhr
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 langsam [/edit]
Bitte warten ..
Mitglied: tom-kinbaku
22.07.2011 um 13:50 Uhr
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
Bitte warten ..
Mitglied: tom-kinbaku
22.07.2011 um 13:53 Uhr
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
Bitte warten ..
Mitglied: Xolger
22.07.2011 um 14:41 Uhr
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
Bitte warten ..
Mitglied: tom-kinbaku
22.07.2011 um 15:08 Uhr
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
Bitte warten ..
Mitglied: felixcc
22.07.2011 um 15:50 Uhr
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
Bitte warten ..
Mitglied: Xolger
22.07.2011 um 22:57 Uhr
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
Bitte warten ..
Mitglied: tom-kinbaku
23.07.2011 um 18:29 Uhr
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
Bitte warten ..
Mitglied: Biber
23.07.2011 um 20:00 Uhr
Moin tom-kinbaku,

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

Grüße
Biber
Bitte warten ..
Mitglied: bastla
23.07.2011 um 20:13 Uhr
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
Bitte warten ..
Mitglied: Biber
23.07.2011 um 20:44 Uhr
Moin bastla,

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

Grüße
Biber
Bitte warten ..
Mitglied: tom-kinbaku
26.07.2011 um 09:29 Uhr
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
Bitte warten ..
Mitglied: Xolger
26.07.2011 um 13:15 Uhr
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
Bitte warten ..
Mitglied: tom-kinbaku
26.07.2011 um 13:34 Uhr
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
Bitte warten ..
Mitglied: Xolger
26.07.2011 um 22:18 Uhr
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
Bitte warten ..
Mitglied: tom-kinbaku
27.07.2011 um 12:06 Uhr
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
Bitte warten ..
Mitglied: bastla
27.07.2011 um 13:36 Uhr
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:
01.
Private Sub Worksheet_Change(ByVal Target As Range) 
02.
If Not Intersect(Target, Range("A1")) Is Nothing Then 
03.
    If Cells.Range("A1").Value = 1 Then Cells.Range("B1").Value = Cells.Range("B1").Value + 1 
04.
End If 
05.
If Not Intersect(Target, Range("C1")) Is Nothing Then 
06.
    If Cells.Range("C1").Value = 1 Then Cells.Range("D1").Value = Cells.Range("D1").Value + 1 
07.
End If 
08.
End Sub
Grüße
bastla
Bitte warten ..
Mitglied: tom-kinbaku
27.07.2011 um 15:04 Uhr
hallo bastla,

danke, das war's! sehr aufmerksam!

akte geschlossen. danke fuer die mithilfe, werte forumsmitglieder.

lg und noch einen schoenen tag,

euer tom
Bitte warten ..
Mitglied: tom-kinbaku
29.07.2011 um 14:07 Uhr
"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
Bitte warten ..
Mitglied: bastla
29.07.2011 um 17:39 Uhr
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 ) noch anders formulieren:
01.
Private Sub Worksheet_Change(ByVal Target As Range) 
02.
Select Case Target.Address 
03.
Case "$A$1" 
04.
    If Range("A1").Value = 1 Then Range("B1").Value = Range("B1").Value + 1 
05.
Case "$C$1" 
06.
    If Range("C1").Value = 1 Then Range("D1").Value = Range("D1").Value + 1 
07.
End Select 
08.
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
Bitte warten ..
Mitglied: tom-kinbaku
30.07.2011 um 23:02 Uhr
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
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Microsoft Office
gelöst Excel: Text in Zellbereich prüfen mit Vergleichstext ggf. mit Exact-Funktion (5)

Frage von Michi1 zum Thema Microsoft Office ...

JavaScript
AngularJS Variable über Input in Funktion ausführen

Frage von badkilla zum Thema JavaScript ...

VB for Applications
Excel VBA Sortierung von Daten (5)

Frage von easy4breezy zum Thema VB for Applications ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (20)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...