Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Eigene Funktion aktualisiert alle Blätter
#1
Hallo zusammen

ich benutze folgende Funktion um jeweils in den Spalten A und B 1sen aus den letzten 20 Einträgen zu zählen


Code:
Public Function fctZaehlen(intSpalte As Integer) As Long
Dim lngLetzte As Long
Dim lngErste As Long
Application.Volatile
With ActiveSheet
   lngLetzte = .UsedRange.Rows.Count
   If lngLetzte < 20 Then
       lngErste = 1
   Else
       lngErste = lngLetzte - 19
   End If
   fctZaehlen = Application.WorksheetFunction.CountIf(.Range(.Cells(lngErste, intSpalte), _
                                                   .Cells(lngLetzte, intSpalte)), 1)
End With
End Function

jeweils in den Zellen F1 und G1 lasse ich mir das Ergebnis per Formel

=fctZaehlen(1)

bzw.

=fctZaehlen(2)

anzeigen

diese Formeln habe ich nun in Tabelle1 und in Tabelle2 stehen
wenn ich nun in Tabelle1 eine weitere 1 unten anschreibe
wird das Ergebnis richtig in den Zellen angezeigt
wechsel ich nun in Tabelle2 steht in den Formelzellen das gleiche Ergebnis wie in den Zellen aus Tabelle1
und umgekehrt
wie kriege ich das nun hin, dass das jeweilig richtige Ergebnis im richtigen Tabellenblatt steht?


MfG Tom

hier noch die Datei


Angehängte Dateien
.xls   FunktionZaehlen.xls (Größe: 34 KB / Downloads: 3)
Antworten Top
#2
Moin Tom!
Dass Du auch mal ne Frage hast …  :19:
Der Knackpunkt ist ActiveSheet in der UDF.
Übergib den Tabellennamen als Text der UDF:

Public Function fctZaehlen(TName As String, intSpalte As Integer) As Long
Dim lngLetzte As Long
Dim lngErste As Long
Application.Volatile
With Worksheets(TName)
    lngLetzte = .UsedRange.Rows.Count
    If lngLetzte < 20 Then
        lngErste = 1
    Else
        lngErste = lngLetzte - 19
    End If
    fctZaehlen = Application.WorksheetFunction.CountIf(.Range(.Cells(lngErste, intSpalte), _
                                                    .Cells(lngLetzte, intSpalte)), 1)
End With
End Function

Aufruf im Tabellenblatt dann so:
FG
1118
Formeln der Tabelle
ZelleFormel
F1=fctzaehlen("Tabelle1";1)
G1=fctzaehlen("Tabelle1";2)

Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4.8

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
[-] Folgende(r) 1 Nutzer sagt Danke an RPP63 für diesen Beitrag:
  • Crazy Tom
Antworten Top
#3
Noch ein Zusatz:
Die Unzuverlässigkeit von .UsedRange sollte Dir doch bekannt sein?
Code:
lngLetzte = .Cells(.Rows.Count, intSpalte).End(xlUp).Row

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#4
Hallo Ralf

danke

die Übergabe der Tabelle hatte ich auch schon versucht
hatte aber nicht gedacht den Namen in Gänsfüßchen zu packen

hatte es so versucht

=fctZaehlen(Tabelle1!;1)

und das mochte die Funktion gar nicht :@ Blush

so komme ich nun weiter

MfG Tom
Antworten Top
#5
Hallo Ralf

das mit der UsedRange ist mir bewusst

allerdings brauche ich die letzte Zeile aus den Spalten A und B
denn aus den beiden Spalten zusammen sollen die letzten 20 Einträge betrachtet werden

MfG Tom
Antworten Top
#6
Ach so, dies hatte ich mir fast gedacht!
Dann würde ich zur Sicherheit folgenden Code verwenden:
lngLetzte = WorksheetFunction.Max _
   (.Cells(.Rows.Count, 1).End(xlUp).Row, _
    .Cells(.Rows.Count, 2).End(xlUp).Row)

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
[-] Folgende(r) 1 Nutzer sagt Danke an RPP63 für diesen Beitrag:
  • Crazy Tom
Antworten Top
#7
Hallo Ralf

danke das macht es perfekt

MfG Tom
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste