Wir haben auf der Arbeit eine recht einfache Excel- Liste zum Pflegen der Mittarbeiteranwesenheit.
Auch wenn ich mich in Excel etwas auskenne, so fehlt mir die Routine darin, da es auch nicht zu meinem Tätigkeitenfeld gehört.
Meine Herangehensweise ist also vermutlich häufig unnötig kompliziert.
Vorab: Ich habe eine Testdatei als Anhang angefügt. Hier Daheim habe ich leider nur open office zur Verfügung.
https://www.herber.de/bbs/user/120645.xls
In dieser Anwesenheit befinden sich also in Spalte "B" die Namen der Mitarbeiter untereinander, ab Spalte "D" dann fortlaufend die Arbeitstage nebeneinander.
Bisher habe ich unter der ganzen Tabelle eine weitere Spalte eingefügt, die mir die Anzahl der anwesenden Mitarbeiter berechnet.
Unter dem jeweiligen Tag addiere ich also die Anzahl Zellen, in dem ein Mitarbeiter anwesend ist.
Das sieht dann so aus: (Die Tabelle beginnt in Zeile 6.)
=SUMME(
WENN(UND(ODER(D6="";D6=" ";D6="x");NICHT(ODER(D6=8;$B6="";$B6=" ")));1);
WENN(UND(ODER(D7="";D7=" ";D7="x");NICHT(ODER(D7=8;$B7="";$B7=" ")));1);
WENN(UND(ODER(D8="";D8=" ";D8="x");NICHT(ODER(D8=8;$B8="";$B8=" ")));1);
WENN(UND(ODER(D9="";D9=" ";D9="x");NICHT(ODER(D9=8;$B9="";$B9=" ")));1)
)
Wenn also ein Tag keine Eintragung oder ein X hat, ist der Mitarbeiter anwesend
solange er existiert (also in Spalte B ein Name steht)
und das Feld nicht mit einer Farbe hinterlegt ist (hier mit "=8" als Platzhalter).
(In Excel habe ich die farbigen Felder mit "Zahl=rot wenn negativ" formatiert, was ich in einer Funktion abfragen kann.
Von open office aus kann ich diesen Befehl leider nicht mehr nachvollziehen.)
Wie man sich vorstellen kann, gibt das Ganze bei dutzenden Mitarbeitern ein heilloses Durcheinander sobald einer ausscheidet, Zeilen gelöscht oder neue eingefügt werden.
Deswegen möchte ich das Ganze irgendwie als eigene Funktion über vba festhalten.
Und hier bräuchte ich eure Hilfe.
Ich stelle mir das ungefähr so vor:
Für die Funktion sollen nur die einzelnen Anwesenheitsfelder eines Tags (Schnittmenge aus allen Namen und einem einzigen Tag) markiert werden müssen.
Die Funktion will ich dann durch Ziehen unter alle Tage erweitern können.
(folgende Syntax ist natürlich Schwachsinn)
function Anwesenheit (Tagbereich as range)
c = 0
for each Tagbereich
dim Name as range
range(Name).value = ("B","Zeile von each Tagbereich") '(in "B" ist der Name)
if Tagbereich = "" or Tagbereich = " " or Tagbereich = "x" and
not Tagbereich = Farbcode1 or Tagbereich = Farbcode2 or Name = "" or Name = " "
then c = c + 1
end if
end each '(oder so)
Anwesenheit = c
end function
Ich hoffe ich konnte mich halbwegs verständlich ausdrücken und dass nicht noch jemand beim Lesen
meiner Funktionsvorstellung Haare verloren oder sich ihm die Zehennägel hochgerollt haben.
Ich denke anhand der Beispieldatei wird die ganze Sache auch klarer.
Ich wäre für Hilfe dankbar : )