1.6k Aufrufe
Gefragt in Tabellenkalkulation von
Hallo Zusammen,
ich benötige eure Hilfe, da ich neu bin in VBA also wenig Ahnung, hab ich eine Bitte an euch
Ich bin dabei eine Wenn Abfrage zu schreiben in VBA. In Excel hab ich kein Problem mit der Wenn Funktion nur ein Makro zu schreiben da happert es. Meine Wenn Formel für ein Tabellenblatt würde z.B. so aussehen:
=WENN(UND(D1>F1;B1="A");"1";WENN(UND(F1>D1;C1="A");"1";WENN(D1=F1;"0";"-1")))
man könnte es auch so schreiben:
=WENN(UND(D1>F1;B1="A")+ODER(UND(F1>D1;C1="A"));"1";WENN(D1=F1;"0";"-1"))
Ich habe im Internet recherchiert und habe folgendes gefunden:

Eintrag im Modul
Code:

Sub FA()
Dim x As Double
Dim a As Worksheet

If ActiveSheet.Range("D1") > ActiveSheet.Range("F1") And _
ActiveSheet.Range("B1") = "A" Then
ActiveSheet.Range("A1") = "1"
ElseIf ActiveSheet.Range("F1") > ActiveSheet.Range("D1") And _
ActiveSheet.Range("C1") = "A" Then
ActiveSheet.Range("A1") = "1"
ElseIf ActiveSheet.Range("D1") = ActiveSheet.Range("F1") Then
ActiveSheet.Range("A1") = "0"
Else
ActiveSheet.Range("A1") = "-1"
End If
End Sub

und im Tabellenblatt
den Code:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("D1:F10")) Is Nothing Then
FA

End If
End Sub

Das ganze funktioniert so, aber nur in einer Zeile .
Ich hätte gerne das es über mehrere Zeilen z.B. von Zeile 1 bis Zeile 50 funktioniert
Ich benötige deshalb dieses Makro weil ich möchte das die Zellen in Spalte A im Excelblatt frei von Inhalt bleiben und erst durch dieses Makro beschriftet werden.
Ich habe Windows 7 und Excel 2010

Vielen vielen Dank schon mal
Gruß Peter

5 Antworten

0 Punkte
Beantwortet von rainberg Profi (14.9k Punkte)
Hallo Peter,

nach meinen Verständnis reicht da folgender Code, den Du in das Codemodul des relevanten Arbeitsblattes einfügst.
Option Explicit

Sub test()
Dim intI As Integer
For intI = 1 To 50
If (Cells(intI, 4) > Cells(intI, 6) And Cells(intI, 2) = "A") Or (Cells(intI, 6) > Cells(intI, 4) And Cells(intI, 3) = "A") Then
Cells(intI, 1).Value = 1
ElseIf Cells(intI, 4) = Cells(intI, 6) Then
Cells(intI, 1).Value = 0
Else
Cells(intI, 1).Value = -1
End If
Next
End Sub


Gruß
Rainer
0 Punkte
Beantwortet von
Hallo Rainer,
tut mir leid wenn ich mich nicht ganz konkret ausgedrückt habe, das mit der Wenn Abfrage in VBA funktioniert noch nicht ganz richtig, eben weil ich
das ganze nicht detailliert beschrieben habe.

Also in Zelle A1 soll erst dann die 1 oder die 0 oder die -1 erscheinen wenn ich in Zelle D1 bzw. in Zelle F1 die Zahlen eingetragen und Enter gedrückt habe, vorausgesetzt die Zellen B1:B50 und C1:C50 sind schon beschriftet, alle anderen Zellen in Spalte A sollen leer bleiben.
Das ganze soll sich wiederholen wenn ich danach in Zelle D2 bzw. F2 die Zahlen eintrage und Enter drücke soll in A2 der Wert eingetragen werden.
Und dann wieder D3 bzw. F3 eintrage + Enter danach Wert in A3 - usw. usw.

Ich hoffe ich hab mich jetzt deutlich ausgedrückt, die Werte in Spalte A brauche ich für ein Diagramm das sich automatisch aktualisiert z.B.
in Spalte B und Spalte C steht der Name einer Fußballmannschaft und in Spalte D und Spalte F trage ich das Ergebnis von jedem Spieltag ein,
danach sieht man im Diagramm folgendes: 1 bedeutet Sieg für die betreffende Mannschaft, 0 bedeutet Remis und -1 bedeutet Niederlage.
Mein Diagramm funktioniert jetzt schon wenn ich in Spalte A die richtigen Werte von Hand eintrage, nur möchte ich diese Werte in Spalte A
abhängig machen vom Spielergebnis und ob Heimspiel oder Auswärtsspiel.

Sollte es diesmal vielleicht klappen mit dem Code würde mich das sehr, sehr freuen
Trotzdem vielen, vielen herzlichen Dank für deine Mühe
Gruß Peter
0 Punkte
Beantwortet von
Tut mir Leid habe deinen Namen irrtümlich in das Feld eingetragen.
----------------------------------------------------------------------------------------

Hallo Rainer,
tut mir leid wenn ich mich nicht ganz konkret ausgedrückt habe, das mit der Wenn Abfrage in VBA funktioniert noch nicht ganz richtig, eben weil ich
das ganze nicht detailliert beschrieben habe.

Also in Zelle A1 soll erst dann die 1 oder die 0 oder die -1 erscheinen wenn ich in Zelle D1 bzw. in Zelle F1 die Zahlen eingetragen und Enter gedrückt habe, vorausgesetzt die Zellen B1:B50 und C1:C50 sind schon beschriftet, alle anderen Zellen in Spalte A sollen leer bleiben.
Das ganze soll sich wiederholen wenn ich danach in Zelle D2 bzw. F2 die Zahlen eintrage und Enter drücke soll in A2 der Wert eingetragen werden.
Und dann wieder D3 bzw. F3 eintrage + Enter danach Wert in A3 - usw. usw.

Ich hoffe ich hab mich jetzt deutlich ausgedrückt, die Werte in Spalte A brauche ich für ein Diagramm das sich automatisch aktualisiert z.B.
in Spalte B und Spalte C steht der Name einer Fußballmannschaft und in Spalte D und Spalte F trage ich das Ergebnis von jedem Spieltag ein,
danach sieht man im Diagramm folgendes: 1 bedeutet Sieg für die betreffende Mannschaft, 0 bedeutet Remis und -1 bedeutet Niederlage.
Mein Diagramm funktioniert jetzt schon wenn ich in Spalte A die richtigen Werte von Hand eintrage, nur möchte ich diese Werte in Spalte A
abhängig machen vom Spielergebnis und ob Heimspiel oder Auswärtsspiel.

Sollte es diesmal vielleicht klappen mit dem Code würde mich das sehr, sehr freuen
Trotzdem vielen, vielen herzlichen Dank für deine Mühe
Gruß Peter
0 Punkte
Beantwortet von rainberg Profi (14.9k Punkte)
Hallo Peter,

anbei die Änderung.
Bei jedem Eintrag in eine Zelle der Spalte F mit Enter-Bestätigung wird die relevante Zelle der Spalte A berechnet.

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 6 Then Exit Sub
If (Cells(Target.Row, 4) > Cells(Target.Row, 6) And Cells(Target.Row, 2) = "A") Or (Cells(Target.Row, 6) > Cells(Target.Row, 4) And Cells(Target.Row, 3) = "A") Then
Cells(Target.Row, 1).Value = 1
ElseIf Cells(Target.Row, 4) = Cells(Target.Row, 6) Then
Cells(Target.Row, 1).Value = 0
Else
Cells(Target.Row, 1).Value = -1
End If
End Sub


Gruß
Rainer
0 Punkte
Beantwortet von
Hallo Rainer
bin erst von der Arbeit gekommen und hab gleich nachgeschaut, hat super geklappt mit der Wenn Abfrage

nochmals vielen, vielen Dank für die Mühe
Gruß Peter
...