Supportnet Computer
Planet of Tech

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

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.

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

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?

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

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.
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

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

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

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

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

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

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


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: