Supportnet / Forum / Tabellenkalkulation
Suche lösung für : Wenn feld A1 = (zeichen+) dann Feld ...
Frage
Hallo,
ich bin gerade dabei eine lösung für eine Umfrageauswertung zu suchen und habe mir das so vorgestellt.
Ich habe die Abtwortmöglichkeiten und dann ein Feld in Excel in dem ich das zeichen + eingebe kann um die gegebene antwort zu markeiren.
Wenn dann in einem Feld ein + steht soll das feld daneben den wert +1 setzen so das quasi ein counter entsteht und das feld in dem die eingebe stattfindet soll nach der zählung gelöscht werden.
Ich glaube ja das es nicht so kompliziert sein sollte aber ich bekomme das nicht hin.
Hat da jemand einen Lösungsvorschlag für mich?
Antwort 1 von Beverly
Hi,
das ließe sich mit VBA lösen
Bei Eingabe von "+" in Spalte A wird in Spalte B um 1 hochgezählt.
Bis später,
Karin
das ließe sich mit VBA lösen
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 1 Then Exit Sub
If Target = "+" Then Target.Offset(0, 1) = Target.Offset(0, 1) + 1
End Sub
Bei Eingabe von "+" in Spalte A wird in Spalte B um 1 hochgezählt.
Bis später,
Karin
Antwort 2 von panik
Das hört sich schon mal interessant an.
Aber wie definiere ich Spalte A und B?
Und wie füge ich das VBA objekt überhaupt ein :)
Ich möchte das ja für mehrere Fragen verwirklichen, wie definiere ich dann die verscheidenen Spalten?
Ich kenne mich mit VBA leider überhaupt nicht aus.
Aber schon mal danke für die Schnelle hilfe, werde mal sehen ob ich es mit basteln vieleicht selber hinbekomme.
Aber wie definiere ich Spalte A und B?
Und wie füge ich das VBA objekt überhaupt ein :)
Ich möchte das ja für mehrere Fragen verwirklichen, wie definiere ich dann die verscheidenen Spalten?
Ich kenne mich mit VBA leider überhaupt nicht aus.
Aber schon mal danke für die Schnelle hilfe, werde mal sehen ob ich es mit basteln vieleicht selber hinbekomme.
Antwort 3 von Beverly
Hi,
mache einen Rechtsklick auf den Tabellereiter -> Code anzeigen und du gelangst in die VBA-Umgebung im Klassenmodul der Tabelle. Kopiere den Code dort hinen. Die Spalte A ist durch Target.Coloumn definiert - die 2. Codezeile bedeutet: wenn der Eintrag nicht in Spalte A erfolgt, dann tue nichts. Die 3. Zeile bewirkt, dass bei dem Eintrag von "+" in eine beliebige Zelle in Spalte A in der Zelle rechts daneben hochgezählt wird.
Ich hatte noch vergessen, dass das "+" ja wieder gelöscht werden soll. Dann müsste der Code so heißen
Bis später,
Karin
mache einen Rechtsklick auf den Tabellereiter -> Code anzeigen und du gelangst in die VBA-Umgebung im Klassenmodul der Tabelle. Kopiere den Code dort hinen. Die Spalte A ist durch Target.Coloumn definiert - die 2. Codezeile bedeutet: wenn der Eintrag nicht in Spalte A erfolgt, dann tue nichts. Die 3. Zeile bewirkt, dass bei dem Eintrag von "+" in eine beliebige Zelle in Spalte A in der Zelle rechts daneben hochgezählt wird.
Ich hatte noch vergessen, dass das "+" ja wieder gelöscht werden soll. Dann müsste der Code so heißen
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 1 Then Exit Sub
If Target = "+" Then Target.Offset(0, 1) = Target.Offset(0, 1) + 1
Target = "" ' Eintrag wieder löschen
End Sub
Bis später,
Karin
Antwort 4 von panik
Erst mal vielen dank für die schnelle und sehr kompetente Hilfe.
Das scheint nun auch halb zu klappen,
ich habe hinter "If Target.Column <" meine Zelle eingetragen also so "If Target.Column < D7 > 1 Then Exit Sub" in der geprüft werden soll ob dort das zeichen + steht.
Wenn ich nun also in die dort angegebene zelle + das Plus mache zappelt meine maus kurz und dann ist das Plus weg :)
So sollte es ja auch sein und das geht schon mal super, aber wo werden die + quasi gezählt?
Wo gebe ich das feld an in dem der wert dann steht?
Das scheint nun auch halb zu klappen,
ich habe hinter "If Target.Column <" meine Zelle eingetragen also so "If Target.Column < D7 > 1 Then Exit Sub" in der geprüft werden soll ob dort das zeichen + steht.
Wenn ich nun also in die dort angegebene zelle + das Plus mache zappelt meine maus kurz und dann ist das Plus weg :)
So sollte es ja auch sein und das geht schon mal super, aber wo werden die + quasi gezählt?
Wo gebe ich das feld an in dem der wert dann steht?
Antwort 5 von Beverly
Hi,
wenn die Maus zwar zappelt, aber der Zähler nicht in der Falle bleibt, ist da noch ein Schlupfloch ;-). Und zwar ist es genau die Zeile, die du verändert hast. Du hast zwar schon an der richtigen Stelle gedreht, aber noch nicht ganz den Nagel auf den Kopf getroffen. In meinem Code wird eine gesamte Spalte angesprochen (Column) - so hatte ich das aus deinem ersten Beitrag entnommen. Wenn nur eine einzelne Zelle gefragt ist, dann muss die Zeile so heißen
Übersetzt in etwa: wenn die Eingabezelle nicht die Adresse D7 hat, dann husch aus der Falle...
Bis später,
Karin
wenn die Maus zwar zappelt, aber der Zähler nicht in der Falle bleibt, ist da noch ein Schlupfloch ;-). Und zwar ist es genau die Zeile, die du verändert hast. Du hast zwar schon an der richtigen Stelle gedreht, aber noch nicht ganz den Nagel auf den Kopf getroffen. In meinem Code wird eine gesamte Spalte angesprochen (Column) - so hatte ich das aus deinem ersten Beitrag entnommen. Wenn nur eine einzelne Zelle gefragt ist, dann muss die Zeile so heißen
If Target.Address <> "$D$7" Then Exit SubÜbersetzt in etwa: wenn die Eingabezelle nicht die Adresse D7 hat, dann husch aus der Falle...
Bis später,
Karin
Antwort 6 von panik
Es funktioniert :-D
Jetzt bekomme ich lust mit VB zu arbeiten :)
Mir tun sich da aber noch 2 Problemchen auf,
erstes ist das übernehemen für mehrere zellen.
Also für D7 funktoniert das jetzt wunderbar aber wenn ich das auch für D8 haben will bekomme ich das nicht hin
ich habe schon ein paar sachen probiert aber nichts hat funktioniert.
z.B.
oder auch
aber auch das war zum scheitern verurteilt :)
habe glaube ich noch ein paar abenteuerluche sachen probiert aber keine hat funktioniert :)
Das zweite problemchen ist das ich noch ein - einbauen wollte.
Also wenn ich - eingebe dann wird einfach einer abgezogen.
Aber das geht anscheinend auch nicht, ich habe erst probiert wo ich - eintragen muß damit einer abgezogen wird und dann die zeite einfach eingefügt aber ... naja wie sollte es anders sein, es ging nicht :(
schon wieder kleine problemchen und ich kann es nicht lösen, kann ich noch mal mit hilfe rechnen :D
Jetzt bekomme ich lust mit VB zu arbeiten :)
Mir tun sich da aber noch 2 Problemchen auf,
erstes ist das übernehemen für mehrere zellen.
Also für D7 funktoniert das jetzt wunderbar aber wenn ich das auch für D8 haben will bekomme ich das nicht hin
ich habe schon ein paar sachen probiert aber nichts hat funktioniert.
z.B.
Zitat:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$D$7;$D$8" Then Exit Sub
If Target = "+" Then Target.Offset(0, 1) = Target.Offset(0, 1) + 1
Target = "" ' Eintrag wieder löschen
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$D$7;$D$8" Then Exit Sub
If Target = "+" Then Target.Offset(0, 1) = Target.Offset(0, 1) + 1
Target = "" ' Eintrag wieder löschen
End Sub
oder auch
Zitat:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$D$7" Then Exit Sub
If Target = "+" Then Target.Offset(0, 1) = Target.Offset(0, 1) + 1
Target = "" ' Eintrag wieder löschen
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$D$8" Then Exit Sub
If Target = "+" Then Target.Offset(0, 1) = Target.Offset(0, 1) + 1
Target = "" ' Eintrag wieder löschen
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$D$9" Then Exit Sub
If Target = "+" Then Target.Offset(0, 1) = Target.Offset(0, 1) + 1
Target = "" ' Eintrag wieder löschen
End Sub
halt einfach untereinander
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$D$7" Then Exit Sub
If Target = "+" Then Target.Offset(0, 1) = Target.Offset(0, 1) + 1
Target = "" ' Eintrag wieder löschen
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$D$8" Then Exit Sub
If Target = "+" Then Target.Offset(0, 1) = Target.Offset(0, 1) + 1
Target = "" ' Eintrag wieder löschen
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$D$9" Then Exit Sub
If Target = "+" Then Target.Offset(0, 1) = Target.Offset(0, 1) + 1
Target = "" ' Eintrag wieder löschen
End Sub
halt einfach untereinander
aber auch das war zum scheitern verurteilt :)
habe glaube ich noch ein paar abenteuerluche sachen probiert aber keine hat funktioniert :)
Das zweite problemchen ist das ich noch ein - einbauen wollte.
Also wenn ich - eingebe dann wird einfach einer abgezogen.
Zitat:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$D$9" Then Exit Sub
If Target = "+" Then Target.Offset(0, 1) = Target.Offset(0, 1) + 1
If Target = "-" Then Target.Offset(0, 1) = Target.Offset(0, 1) - 1
Target = "" ' Eintrag wieder löschen
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$D$9" Then Exit Sub
If Target = "+" Then Target.Offset(0, 1) = Target.Offset(0, 1) + 1
If Target = "-" Then Target.Offset(0, 1) = Target.Offset(0, 1) - 1
Target = "" ' Eintrag wieder löschen
End Sub
Aber das geht anscheinend auch nicht, ich habe erst probiert wo ich - eintragen muß damit einer abgezogen wird und dann die zeite einfach eingefügt aber ... naja wie sollte es anders sein, es ging nicht :(
schon wieder kleine problemchen und ich kann es nicht lösen, kann ich noch mal mit hilfe rechnen :D
Antwort 7 von Beverly
Hi,
um mehrere Zeleln anzusprechen, gibt es verschiedene Möglichkeiten. Wenn es nur sehr wenige sind, dann reicht dieser Code
Wenn es eine ganze Reihe nicht zusammenhängender Zellen sind, kann man das so machen
Für einen größeren zusammenhängenden Bereich könnte der code so aussehen
Ich habe auch schon das Subtrahieren mit eingebaut.
Es kann in einer Tabelle aber nur jeweils ein Worksheet_Change Ereignis geben. Hat man mehrere Bedingungen, muss man den Code entsprechend schreiben, dass alles dort hineinpasst.
Bis später
Karin
PS: noch einen Hinweis am Rand: es heißt nicht VB (Visual Basic) sondern VBA (Visual Basic for Applications) und ist eine Programmiersprache, die zwar auf VB basiert, aber speziell für MS Office-Anwendungen geschaffen wurde.
um mehrere Zeleln anzusprechen, gibt es verschiedene Möglichkeiten. Wenn es nur sehr wenige sind, dann reicht dieser Code
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$D$7" And Target.Address <> "$D$8" Then Exit Sub
If Target = "+" Then Target.Offset(0, 1) = Target.Offset(0, 1) + 1
If Target = "-" Then Target.Offset(0, 1) = Target.Offset(0, 1) - 1
Target = ""
End Sub
Wenn es eine ganze Reihe nicht zusammenhängender Zellen sind, kann man das so machen
Private Sub Worksheet_Change(ByVal Target As Range)
Select Case Target.Address
Case "$D$7", "$D$8", "$G$10", "$T$19"
If Target = "+" Then Target.Offset(0, 1) = Target.Offset(0, 1) + 1
Target = ""
End Select
End Sub
Für einen größeren zusammenhängenden Bereich könnte der code so aussehen
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Intersect(Target, Range("D7:G20")) Is Nothing Then Exit Sub
Application.EnableEvents = False
If Target = "+" Then Target.Offset(0, 1) = Target.Offset(0, 1) + 1
Target = ""
Application.EnableEvents = True
End Sub
Ich habe auch schon das Subtrahieren mit eingebaut.
Es kann in einer Tabelle aber nur jeweils ein Worksheet_Change Ereignis geben. Hat man mehrere Bedingungen, muss man den Code entsprechend schreiben, dass alles dort hineinpasst.
Bis später
Karin
PS: noch einen Hinweis am Rand: es heißt nicht VB (Visual Basic) sondern VBA (Visual Basic for Applications) und ist eine Programmiersprache, die zwar auf VB basiert, aber speziell für MS Office-Anwendungen geschaffen wurde.
Antwort 8 von panik
Vielen Vielen Dank für die SUPER hilfe.
Es läuft nun alles so wie ich mir das gewünscht habe :)
Jetzt kann ich die Auswertung der umfrage schnell hinter mich bringen und habe dadruch ne menge zeit gespart.
Vielen dank noch mal an dieser Stelle an Beverly aka. Karin!!!
Ich glaube das VBA werde ich mir mal ansehen, scheint interessant zu sein.
Grüße
Panik
Es läuft nun alles so wie ich mir das gewünscht habe :)
Jetzt kann ich die Auswertung der umfrage schnell hinter mich bringen und habe dadruch ne menge zeit gespart.
Vielen dank noch mal an dieser Stelle an Beverly aka. Karin!!!
Ich glaube das VBA werde ich mir mal ansehen, scheint interessant zu sein.
Grüße
Panik
Antwort 9 von Beverly
Hi,
ja, VBA ist schon eine feine Sache und wenn man einmal damit angefangen hat, kommt man nicht mehr davon los...
Ich habe dir mal eine Excel-Arbeitsmappe hochgeladen Link zur Datei. In dieser befindet sich eine PDF-Datei (ließ sich nicht anders hochladen). Dort findest du einiges an Grundlagen für die VBA-Programmierung. Vielleicht hilft es dir ein wenig.
Bis später,
Karin
ja, VBA ist schon eine feine Sache und wenn man einmal damit angefangen hat, kommt man nicht mehr davon los...
Ich habe dir mal eine Excel-Arbeitsmappe hochgeladen Link zur Datei. In dieser befindet sich eine PDF-Datei (ließ sich nicht anders hochladen). Dort findest du einiges an Grundlagen für die VBA-Programmierung. Vielleicht hilft es dir ein wenig.
Bis später,
Karin

