Clever-Excel-Forum

Normale Version: Tage berechnen mit mehreren Unterbrechungen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallo Elex,

also auf einem Windows Excel 2016 funktioniert es einwandfrei, aber auf dem Mac Excel 2019 nicht! Ist auch egal, da es auf Windows laufen soll!!

Also erstmal tausend dank für Deine Unterstützung!

Aber einen hab ich noch!

Wie müsste ich dieses Modul ändern, um nur die Unterbrechungstage zu berechnen? :46: 

Die Originaldatei sieht natürlich ein bisschen anders aus, sprich Anfangsdatum und Enddatum stehen nicht am Anfang sondern in z.B. C u. D. und Unterbrechungstage in z.B. I bis N

Gruß Torsden
Hi

Nur die Unterbrechungstage mit dem Code. 
Code:
Public Function Test(rng As Range)
Dim dict As Object
Dim n As Long, j As Long

Set dict = CreateObject("Scripting.Dictionary")
For j = 0 To 2
  If rng.Cells(j * 2 + 1).Value <> "" And rng.Cells(j * 2 + 2).Value <> "" Then
    For n = rng.Cells(j * 2 + 1).Value To rng.Cells(j * 2 + 2).Value
      dict(n) = 1
    Next n
  End If
Next j
Test = dict.Count
End Function
für Zeile 2   =Test(I2:N2)    'oder wo auch immer die 6 Zellen sind (J2:O2)


Gesamt mit gesplitteten Bereich.
Code:
Public Function Test2(rng1 As Range, rng2 As Range)
Dim dict As Object
Dim n As Long, j As Long

Set dict = CreateObject("Scripting.Dictionary")
For j = 0 To 2
  If rng2.Cells(j * 2 + 1).Value <> "" And rng2.Cells(j * 2 + 2).Value <> "" Then
    For n = rng2.Cells(j * 2 + 1).Value To rng2.Cells(j * 2 + 2).Value
      dict(n) = 1
    Next n
  End If
Next j
Test2 = (1 + rng1.Cells(2).Value - rng1.Cells(1).Value) - dict.Count
End Function
=Test2(C2:D2;I2:N2)
Hallo Elex,

also ich hab das Modul getestet und ich muss sagen, ich bin begeistert!! 

Danke dafür!

Gruß Torsden
Hallöchen,

hier mal noch die Formellösung:

Arbeitsblatt mit dem Namen 'Tabelle1'
BCDEFGHI
105. Jan12. Jan15. Jan17. Jan11

ZelleFormel
I1=((C1-B1)+1)*((B1*C1)>0)-(C1>=D1)*((C1-D1)+1)*(D1>0)+(((E1-D1)+1)-(E1>=F1)*((E1-F1)+1))*((D1*E1)>0)+(((G1-F1)+1)*((F1*G1)>0))
Verwendete Systemkomponenten: [Windows (32-bit) NT 10.00] MS Excel 2016
Diese Tabelle wurde mit Tab2Html (v2.6.0) erstellt. ©Gerd alias Bamberg
Hallo Elex,

in Functions verwendet man aber m.W. keine feststehenden Objekte (Cells, selbst, wenn relativ), sondern nur Argumente oder globale Variablen. Das wäre dann kein gutes Programmierbeispiel.
Hi @LCohen
 
Thanks for the hint.

Denn da ich weder gelernt noch beruflich mit Excel oder VBA zu tun habe, sondern sich die Sache auf das beschränkt was ich rein privat damit veranstalte, lerne ich nur durch das Forum (euch) dazu.
Mal sehen evtl. steige ich ja beruflich noch mal um. Werde langsam zu alt für den Bau. Idea

Bis dahin
Hallöchen,

- "in Functions verwendet man aber m.W. keine feststehenden Objekte" - würde ich nicht unterschreiben Sad
- man sollte aber prüfen, ob Bereiche korrekt übergeben wurden und für den Fehlerfall einen entsprechenden Rückgabewert definieren
- zudem sollte man auch das Rückgabeformat definieren

Unabhängig davon ist auch von Relevanz, ob eine Function als Arbeitsblattfunktion bereitgestellt werden soll oder für Subs. Im letzten Fall kann man die Parameter meist byRef übergeben und den Formelrückgabewert z.B. für einen Fehler- bzw. Erfolgsflag / Code oder einen entsprechenden Text oder...
Seiten: 1 2