Supportnet / Forum / Tabellenkalkulation
Eingabe aufaddieren
Frage
Hallo,
bei Eingabe von x, soll in einer Zelle, bei Ersteingabe 1, und dann später eine reine Aufaddierung von (+1+1+1+1+1+1) erfolgen.
Beispiel: Ersteingabe x Zelle mit 1 belegt
Zweiteingabe x Zelle alter Wert + 1 = 2
Dritteingabe x Zelle alter Wert + 1 = 3
usw.
Danke und Gruß
triman
Antwort 1 von CaroS
Hallo triman,
bitte etwas genauer, wo (in welcher Zelle?) und wie gibst Du ein x (einen kleinen Buchstaben x?) ein, oder ist das x Ergebnis irgendeiner Formel/Berechnung? Und in welcher Zelle soll die Zahl hochgezählt werden?
Wird das x dann zwischendurch auch irgendwann mal gelöscht und wenn ja wie? (Per Hand/Entf-Taste?)
Ich frage deshalb so genau, weil es eigentlich ein sehr einfaches Problem sein dürfte, nur dass ich dabei nichts missverstehe oder übersehe.
Soll es eine reine Formellösung sein oder wäre auch VBA für Dich ok?
Gruß,
CaroS
bitte etwas genauer, wo (in welcher Zelle?) und wie gibst Du ein x (einen kleinen Buchstaben x?) ein, oder ist das x Ergebnis irgendeiner Formel/Berechnung? Und in welcher Zelle soll die Zahl hochgezählt werden?
Wird das x dann zwischendurch auch irgendwann mal gelöscht und wenn ja wie? (Per Hand/Entf-Taste?)
Ich frage deshalb so genau, weil es eigentlich ein sehr einfaches Problem sein dürfte, nur dass ich dabei nichts missverstehe oder übersehe.
Soll es eine reine Formellösung sein oder wäre auch VBA für Dich ok?
Gruß,
CaroS
Antwort 2 von triman
Hallo CaroS,
in meinem Exel Arbeitsblatt soll händisch mit der Eingabe des Kleinbuchstaben "x", in mehreren Zellen, als Zahl dargestellt werden.
Beispiel:
In Zelle B6 wird händisch ein kleines "x" eingeben und soll als 1 dargestellt werden. Bei erneuter Eingabe von "x", in Zelle B6, soll dann 2 dargestellt werden, usw.
Es gibt hierzu natürlich weitere Zellen die ebenfalls so bearbeitet werden sollen.
In der Ergebniszelle, B15, soll dann mit der Summenfunktion [=SUMME(B6:B13)] die aufaddierten Zellenwerte von B6, B7, bis B13 dargestellt werden.
Je einfacher, desto besser.
Vielen Dank
triman
in meinem Exel Arbeitsblatt soll händisch mit der Eingabe des Kleinbuchstaben "x", in mehreren Zellen, als Zahl dargestellt werden.
Beispiel:
In Zelle B6 wird händisch ein kleines "x" eingeben und soll als 1 dargestellt werden. Bei erneuter Eingabe von "x", in Zelle B6, soll dann 2 dargestellt werden, usw.
Es gibt hierzu natürlich weitere Zellen die ebenfalls so bearbeitet werden sollen.
In der Ergebniszelle, B15, soll dann mit der Summenfunktion [=SUMME(B6:B13)] die aufaddierten Zellenwerte von B6, B7, bis B13 dargestellt werden.
Je einfacher, desto besser.
Vielen Dank
triman
Antwort 3 von fürLau
Hallo
Hätte hier eine Alternativlösung anzubieten;
Kopiere nachstehendes Makro in den codebereich des Tabellenblattes auf dem es wirken soll.
Dieser Code bewirkt, daß wenn im Bereich B6:B13 muit der rechten Maustaste auf eine Zelle geklickt wird, Die darin enthaltene Zahl jeweils um eins erhöht wird.
Gruß
Hätte hier eine Alternativlösung anzubieten;
Kopiere nachstehendes Makro in den codebereich des Tabellenblattes auf dem es wirken soll.
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
If Target.Row < 6 Or Target.Row > 13 Or Target.Column <> 2 Then Exit Sub
Dim wertx As Long
wertx = Target.Value
wertx = wertx + 1
Target = wertx
Cancel = True
End Sub
Dieser Code bewirkt, daß wenn im Bereich B6:B13 muit der rechten Maustaste auf eine Zelle geklickt wird, Die darin enthaltene Zahl jeweils um eins erhöht wird.
Gruß
Antwort 4 von CaroS
Hallo triman,
habe ich soweit verstanden, wird aber nicht ganz so einfach, wie ich mir das anfangs gedacht habe. Eine Formellösung scheidet - meiner Meinung nach - aus.
Was man jetzt noch wissen müsste:
Kann so eine x- Eingabe in jeder beliebigen Zelle des Tabellenblattes vorkommen oder oder nur in einer "Handvoll" Zellen, sagen wir bis max. 50, die man von vornherein im VBA-Code angeben kann? (Die müsstest Du dann hier mal aufzählen oder später selber in den VBA-Code eingeben.)
Noch ´ne Frage: In Zelle B6 steht inzwischen eine 1, jetzt kommst Du und überschreibst diese 1, indem Du ein x eingibst. Habe ich das richtig verstanden?
Dann steht im nächsten Moment, noch bevor irgendein Makro etwas machen kann, ein x in der Zelle und nicht mehr die 1. Der alte Zählerstand ist also weg! Keine leichte Aufgabe, denn ein normales Makro weiß ja vorher nicht, wann es passiert, und es arbeitet auch vorher nicht. Wenn es dann passiert ist und daraufhin das Makro startet, dann ist es eigentlich schon zu spät, denn dann ist der alte Zählerstand schon durch ein x überschrieben und das Makro "sieht" nur noch das x.
Man könnte das Problem so lösen, dass man den aktuellen Zählerstand (für jede betroffene Zelle einzeln!) immer (versteckt) in eine zweite Zelle als Zwischenspeicher schreibt, für die keine Gefahr des Überschreibens besteht. Dann müsste ich noch wissen, welche Zellen man dafür verwenden könnte (wo jetzt und in Zukunft "nichts los" ist) oder, falls eine zumutbare Anzahl überschritten wird, gleich einzusätzliches Tabellenblatt (ausschließlich dafür) anlegen, in dem nur zwischengespeichert und ansonsten nicht gearbeitet wird.
Gruß,
CaroS
habe ich soweit verstanden, wird aber nicht ganz so einfach, wie ich mir das anfangs gedacht habe. Eine Formellösung scheidet - meiner Meinung nach - aus.
Was man jetzt noch wissen müsste:
Kann so eine x- Eingabe in jeder beliebigen Zelle des Tabellenblattes vorkommen oder oder nur in einer "Handvoll" Zellen, sagen wir bis max. 50, die man von vornherein im VBA-Code angeben kann? (Die müsstest Du dann hier mal aufzählen oder später selber in den VBA-Code eingeben.)
Noch ´ne Frage: In Zelle B6 steht inzwischen eine 1, jetzt kommst Du und überschreibst diese 1, indem Du ein x eingibst. Habe ich das richtig verstanden?
Dann steht im nächsten Moment, noch bevor irgendein Makro etwas machen kann, ein x in der Zelle und nicht mehr die 1. Der alte Zählerstand ist also weg! Keine leichte Aufgabe, denn ein normales Makro weiß ja vorher nicht, wann es passiert, und es arbeitet auch vorher nicht. Wenn es dann passiert ist und daraufhin das Makro startet, dann ist es eigentlich schon zu spät, denn dann ist der alte Zählerstand schon durch ein x überschrieben und das Makro "sieht" nur noch das x.
Man könnte das Problem so lösen, dass man den aktuellen Zählerstand (für jede betroffene Zelle einzeln!) immer (versteckt) in eine zweite Zelle als Zwischenspeicher schreibt, für die keine Gefahr des Überschreibens besteht. Dann müsste ich noch wissen, welche Zellen man dafür verwenden könnte (wo jetzt und in Zukunft "nichts los" ist) oder, falls eine zumutbare Anzahl überschritten wird, gleich einzusätzliches Tabellenblatt (ausschließlich dafür) anlegen, in dem nur zwischengespeichert und ansonsten nicht gearbeitet wird.
Gruß,
CaroS
Antwort 5 von CaroS
Hallo triman,
nachdem fürLau einige Minuten vor mir eine alternative Lösung vorgeschlagen hat und ich im Zweifel bin, ob ich meinen Weg weiter fortsetzen soll (und die benötigten Antworten von Dir bekomme), fallen mir natürlich auch noch jede Menge günstige Alternativen für den fall ein, dass sich das ganze Problem auf sehr wenige Zellen beschränkt, z. B. auf die 8 zellen B6:B13.
Dann sind 8 kleine Formularschaltflächen unmittelbar neben den Zellen (in C6:C13 - falls da noch Platzt ist) - ohne Beschriftung und ohne weiteren Aufwand - schnell angelegt und 8 winzige Makros schnell zugewiesen.
Die Makros kopierst du (alle auf einmal) in den VBA-Bereich der Tabelle oder der Arbeitsmappe, dann blendest Du die Formular-Symbolleiste ein und legst die Schaltflächen an. Das Zuweisen der Makros ergibt sich fast von selbst, die Makro-Namen sprechen für sich.
Gruß,
CaroS
nachdem fürLau einige Minuten vor mir eine alternative Lösung vorgeschlagen hat und ich im Zweifel bin, ob ich meinen Weg weiter fortsetzen soll (und die benötigten Antworten von Dir bekomme), fallen mir natürlich auch noch jede Menge günstige Alternativen für den fall ein, dass sich das ganze Problem auf sehr wenige Zellen beschränkt, z. B. auf die 8 zellen B6:B13.
Dann sind 8 kleine Formularschaltflächen unmittelbar neben den Zellen (in C6:C13 - falls da noch Platzt ist) - ohne Beschriftung und ohne weiteren Aufwand - schnell angelegt und 8 winzige Makros schnell zugewiesen.
Die Makros kopierst du (alle auf einmal) in den VBA-Bereich der Tabelle oder der Arbeitsmappe, dann blendest Du die Formular-Symbolleiste ein und legst die Schaltflächen an. Das Zuweisen der Makros ergibt sich fast von selbst, die Makro-Namen sprechen für sich.
Sub Addiere_1_zu_B6()
´ In Schaltfläche für B6 einfügen
If ActiveSheet.Range("B6") = "" Then
ActiveSheet.Range("B6") = "1"
Else
ActiveSheet.Range("B6") = CInt(ActiveSheet.Range("B6")) + 1
End If
End Sub
Sub Addiere_1_zu_B7()
´ In Schaltfläche für B7 einfügen
If ActiveSheet.Range("B7") = "" Then
ActiveSheet.Range("B7") = "1"
Else
ActiveSheet.Range("B7") = CInt(ActiveSheet.Range("B7")) + 1
End If
End Sub
Sub Addiere_1_zu_B8()
´ In Schaltfläche für B8 einfügen
If ActiveSheet.Range("B8") = "" Then
ActiveSheet.Range("B8") = "1"
Else
ActiveSheet.Range("B8") = CInt(ActiveSheet.Range("B8")) + 1
End If
End Sub
Sub Addiere_1_zu_B9()
´ In Schaltfläche für B9 einfügen
If ActiveSheet.Range("B9") = "" Then
ActiveSheet.Range("B9") = "1"
Else
ActiveSheet.Range("B9") = CInt(ActiveSheet.Range("B9")) + 1
End If
End Sub
Sub Addiere_1_zu_B10()
´ In Schaltfläche für B10 einfügen
If ActiveSheet.Range("B10") = "" Then
ActiveSheet.Range("B10") = "1"
Else
ActiveSheet.Range("B10") = CInt(ActiveSheet.Range("B10")) + 1
End If
End Sub
Sub Addiere_1_zu_B11()
´ In Schaltfläche für B11 einfügen
If ActiveSheet.Range("B11") = "" Then
ActiveSheet.Range("B11") = "1"
Else
ActiveSheet.Range("B11") = CInt(ActiveSheet.Range("B11")) + 1
End If
End Sub
Sub Addiere_1_zu_B12()
´ In Schaltfläche für B12 einfügen
If ActiveSheet.Range("B12") = "" Then
ActiveSheet.Range("B12") = "1"
Else
ActiveSheet.Range("B12") = CInt(ActiveSheet.Range("B12")) + 1
End If
End Sub
Sub Addiere_1_zu_B13()
´ In Schaltfläche für B13 einfügen
If ActiveSheet.Range("B13") = "" Then
ActiveSheet.Range("B13") = "1"
Else
ActiveSheet.Range("B13") = CInt(ActiveSheet.Range("B13")) + 1
End If
End Sub
Gruß,
CaroS
Antwort 6 von fürLau
..weil ich die "x"-Lösung nun schon gemacht habe:
Kopiere nachstehendes in den codebereich des Tabellenblattes auf dem es wirken soll.
und in ein Modul:
Gruß
Kopiere nachstehendes in den codebereich des Tabellenblattes auf dem es wirken soll.
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> Zelle Then Exit Sub
If UCase(Target) = "X" Then
wert = wert + 1
Range(Zelle).Value = wert
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error Resume Next
wert = Range(Zelle).Value
If Target.Address <> Zelle Then Exit Sub
End Sub
und in ein Modul:
Option Explicit
Public Const Zelle = "$B$6"
Public wert As Long
Gruß
Antwort 7 von CaroS
Hallo fürLau,
findest Du Public wert As Long nicht ein bisschen übertrieben? Das geht dann aber ganz schön auf die Finger! (Kleiner Scherz.)
Aber das Merken über eine Public-Variable zu machen ist eine gute Idee, da werde ich in Zukunft bestimmt öfter mal dran denken.
Gruß,
CaroS
findest Du Public wert As Long nicht ein bisschen übertrieben? Das geht dann aber ganz schön auf die Finger! (Kleiner Scherz.)
Aber das Merken über eine Public-Variable zu machen ist eine gute Idee, da werde ich in Zukunft bestimmt öfter mal dran denken.
Gruß,
CaroS
Antwort 8 von fürLau
Hallo CaroS,
..danke für den Honig, leider versteh´ ich Deinen Scherz nicht.;-(
weil Public want ass shorts gibt´s nicht!
..man liest sich
Gruß
..danke für den Honig, leider versteh´ ich Deinen Scherz nicht.;-(
weil Public want ass shorts gibt´s nicht!
..man liest sich
Gruß
Antwort 9 von CaroS
Hallo fürLau,
viel einfacher als Du dachtest: triman will per Hand lauter kleine x eingeben und den Zähler damit jedesmal um den stattlichen Wert 1 erhöhen. Um den Wertebereich von Public wert As Integer auszuschöpfen muss er/sie oft tippen, um den von Public wert As Long auszuschöpfen sehr oft.
Das geht dann wirklich ganz schön auf die Finger, aber man kann Dir jedenfalls nicht vorwerfen, dass Du kleinlich warst.
Schönes Wochenende!
CaroS
viel einfacher als Du dachtest: triman will per Hand lauter kleine x eingeben und den Zähler damit jedesmal um den stattlichen Wert 1 erhöhen. Um den Wertebereich von Public wert As Integer auszuschöpfen muss er/sie oft tippen, um den von Public wert As Long auszuschöpfen sehr oft.
Das geht dann wirklich ganz schön auf die Finger, aber man kann Dir jedenfalls nicht vorwerfen, dass Du kleinlich warst.
Schönes Wochenende!
CaroS
Antwort 10 von fürLau
ROFL
ebensolches...
ebensolches...
Antwort 11 von triman
hallo zusammen,
erstmal allen helfern ein super grosses DANKE !!!!
aus meiner not heraus habe ich mich an dieses forum gewendet und muss sagen, ist wirklich eine gute sache.
vielleicht kann ich mal meinen senf (lösung) abgeben.
gruss
triman
erstmal allen helfern ein super grosses DANKE !!!!
aus meiner not heraus habe ich mich an dieses forum gewendet und muss sagen, ist wirklich eine gute sache.
vielleicht kann ich mal meinen senf (lösung) abgeben.
gruss
triman