Supportnet Computer
Planet of Tech

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

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

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.

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

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.

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.

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

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ß

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

Antwort 10 von fürLau

ROFL
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

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: