5.1k Aufrufe
Gefragt in Tabellenkalkulation von
Hi zusammen,

ich habe folgendes Problem. Bei meinem Makro will ich Daten aus Tabellenblatt2 mit einem Wert aus Tabellenblatt1 vergleichen und zählen. Das ganze funktioniert auch ganz gut wenn ich alles in einem Tabellenblatt mache, aber die Ausgabe und der Vergleichswert soll eben in einem anderen Tabellenblatt stehen.

Hier mein Makro:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)


Dim suchwert As Date
Dim i As Double
Dim counter As Double

suchwert = Range("C11").Value 'Zelle, in der das zu vergleichende Datum steht

For i = 1 To Range("D65536").End(xlUp).Row
If Len(CStr(Worksheets(2).Cells(i, 1))) = 5 Then 'alle Zeilen mit Nr. nach Schema x.x.x
If Not IsError(Worksheets(2).Cells(i, 4)) Then
If Worksheets(2).Cells(i, 4).HasFormula = False Then
If Not IsEmpty(Worksheets(2).Cells(i, 4)) Then
If Worksheets(2).Cells(i, 4) < suchwert Then
counter = counter + 1
End If
End If
End If
End If
End If
Next

Range("D32").Value = counter 'Zelle, in der das Ergebnis stehen soll
End Sub

Vielen Dank für eure Hilfe.

Gruß
Sebastian

8 Antworten

0 Punkte
Beantwortet von hajo_zi Experte (9.1k Punkte)
Hallo Sebastian,

der Code sieht eigentlich ok aus. Ich würde nur die andere Tabelle nicht über die nNummer ansprechen 2 sndern über den Namen "Tabelle2". Es nicht immer sicher das die Tabelle immer an zweiter Stelle ist.

Gruß Hajo
0 Punkte
Beantwortet von
Hallo Hajo,

leider funktionert der Code aber nicht einwandfrei, auch wenn ich "Tabelle2" reinschreibe. Ich bin der Meinung, dass es daran liegt, dass ich über 2 Tabellenblätter gehe, denn wenn ich es nur über eins laufen lasse funktioniert es.

Gruß
Sebastian
0 Punkte
Beantwortet von hajo_zi Experte (9.1k Punkte)
Hallo Sebastian,

ich bin davon ausgegangen der Code ist nicht unter Tabelle2. Da braucht man die Tabelle nicht angeben. Du hatttest geschrieben 2 unterschiedliche Tabelle.
Vielleicht solltest Du mal beschreiben was Du machen willst, vielleicht ist Dein Code falsch. Ich kann mir die Aufgabe nur aus dem Code auslesen.

Gruß Hajo
0 Punkte
Beantwortet von
Hallo Hajo,

ich habe im ersten Tabellenblatt das Datum stehen welches als Suchkriterium bzw. Vergleichswert dienen soll. Die Daten welche mit diesem Suchkriterium verglichen werden, stehen in Tabellenblatt 2. Die Ergebnisausgabe soll dann aber wieder in Tabellenblatt1 ausgegeben werden.

Ich habe nur zum testen den Code einmal nur in einem Tabellenblatt ausgeführt, dafür habe ich dann das Suchkriterium in das Blatt mit den Vergleichsdaten geschrieben und im Makro darauf verwiesen. Auch die Ergebnisausgabe habe ich dann in diesem Tabellenblatt gemacht. Bei diesem Testlauf habe ich dann logischerweise nicht auf andere Blätter verwiesen. Der Test war erfolgreich, nur wenn ich das jetzt über 2 Blätter mache zeigt er mir nicht den richtigen Wert an.

Gruß
Sebastian
0 Punkte
Beantwortet von hajo_zi Experte (9.1k Punkte)
Hallo Sebastian,

Dein Makro wird jedesmal ausgeführt, wenn eine Zelle ausgewählt wir. Das ist bestimmt nicht korrekt?
Du suchst einen Wert aus Zelle C1, Wird dieser eingegeben oder ist das eine Formel?
Falls Eingabe, würde ich doch nur suchen falls ein neuer Wert eingegeben wird.
Ich würde vermuten Du suchst in Spalte D wie oft der Wert aus C4 vorkommt. Das geht auch ohne Schleife und auch ohne VBA

=Zählenwenn(Tabelle2!D:D;C4)

Gruß Hajo
0 Punkte
Beantwortet von
Hi,

leider ist es nicht ganz so einfach. Der Wert in C11 ist eine Formel =heute(). Daher soll der Wert, welcher durch das Makro erzeugt wird auch regelmäßig neu berechnet werden. Dieser Wert soll jetzt mit Werten aus Spalte D in Tabelle2 verglichen werden, und wenn die Bedingung passt gezählt werden. In Spalte D stehen aber teilweise auch Formeln, die auf andere Zellen in Spalte D zugreifen, diese Werte, welche durch die Formeln entstehen sollen nicht mit eingerechnet werden.
Ist blöd zu erklären, kann ich dir evtl. mal meine Arbeitsmappe zuschicken und du schaust dir das mal an, das kann eigentlich nur eine Kleinigkeit sein, die verändert werden muss.

Gruß
Sebastian
0 Punkte
Beantwortet von hajo_zi Experte (9.1k Punkte)
Hallo Sebastian,

wir haben ohne Datei angefangen ud ich versuche es jetzt Live.
Option Explicit
Dim Dawert As Date

Private Sub Worksheet_Calculate()
Dim LoCounter As Long
Dim LoI As Long
Dim Loletzte As Long
If Dawert = 0 Then Dawert = Range("C4")
With Worksheets("Tabelle2")
Loletzte = IIf(IsEmpty(.Cells(.Rows.Count, 4)), .Cells(.Rows.Count, 4).End(xlUp).Row, .Rows.Count)
For LoI = 1 To Loletzte
If Not IsError(.Cells(LoI, 4)) Then
If .Cells(LoI, 4).HasFormula = False Then
If Not IsEmpty(.Cells(LoI, 4)) Then
If IsDate(.Cells(LoI, 4)) < Dawert Then
If .Cells(LoI, 4) = Dawert Then LoCounter = LoCounter + 1
End If
End If
End If
End If
Next LoI
End With
Range("D32") = LoCounter
End Sub

Falls das nicht klappt schicke mal Datei. Auf meiner HP steht eine Mail-Adresse.

Gruß Hajo
0 Punkte
Beantwortet von
Hey Hajo,

super damit klappt es jetzt. Tausend Dank!

Viele Grüße
Sebastian
...