Moin zusammen,
eigentlich bin ich nicht so ein richtiger Anfänger. Zumindest kenne ich die ein- oder andere Programmiersprache. Aber dieses kleine Progrämmchen hier will nicht so wie ich ... und ich komme nicht weiter. Vielleicht könnt ihr mir helfen.
Was ich tun will:
- Eine Funktion schreiben, der ich eine Range mitgeben kann (also einen markierten Bereich im Excel)
- Die Funktion soll über die einzelnen Zeilen in dem Bereich gehen und umliegende zellen jeder zelle anhand deren inhalte prüfen
- sind bestimmte inhalte vorhanden, so soll ein zähler hochgezählt werden
- Rückgabewert ist die Anzahl positiv geprüfter zellen der range
Das geht bestimmt auch alles irgendwie ganz anders (Formel mit Logik oder andere Logik). Aber ich möchte es gern so ähnlich machen ... es muss ja irgendwie möglich sein und dabei lerne ich bestimmt noch was :)
Hier mein Versuch der Formel Treffer() mit Makro als Test-Aufruf. Eigentlich brauche ich nur die Formel.
Function TREFFER(r As Range) As Integer
'initialisieren
Dim zelle1 As Range
Dim zelle2 As Range
Dim zelle3 As Range
Dim zelle4 As Range
Dim zelle5 As Range
Dim aktuellezelle As Range
Dim couter As Integer
Dim bedingung1 As Boolean
Dim bedingung2 As Boolean
counter = 0
bedingung1 = False
bedingung2 = False
'schleife über range
'dabei gehe ich davon aus, dass r bei jedem schleifendurchlauf eine zelle aus der mitgegebenen range darstellt
For Each r In Selection
'hier möchte ich einer variablen eine zelle zuweisen. die zelle,
'die ich mit der nächsten zeile zuweisen möchte, befindet sich unmittelbar über der aktuellen zelle in r
Set zelle1 = Cells(r.Row - 1, r.Column)
'weitere zuweisungen
Set zelle2 = Cells(r.Row - 2, r.Column)
Set zelle3 = Cells(r.Row - 3, r.Column)
Set zelle4 = Cells(r.Row - 1, r.Column - 1)
Set zelle5 = Cells(r.Row - 1, r.Column + 1)
Set aktuellezelle = Cells(r.Row, r.Column)
If ((zelle1.Value = "X") Or (zelle2.Value = "X") Or (zelle3.Value = "X") Or (zelle4.Value = "X") Or (zelle4.Value = "X")) Then
bedingung1 = True
End If
If aktuellezelle.Value = "X" Then
bedingung2 = True
End If
If ((bedingung1 = True) And (bedingung2 = True)) Then
'beide bedingungen treffen auf die aktuelle zelle zu, dann zähle hoch
counter = counter + 1
End If
Next r
'gebe zähler zurück
TREFFER = counter
End Function
Sub Testlauf()
Dim test As Range
Set test = Sheet1.Range("H7", "BD7")
Debug.Print TREFFER(test)
End Sub
Vielen Dank im Voraus schon mal für eure Unterstützung!
Rolf
|