Zählen Sie die Anzahl der Freitage in einem bestimmten Monat

7

Ich möchte die Anzahl der Freitage für einen bestimmten Monat über die Funktion in Google Spreadsheets ermitteln.

Zum Beispiel wäre der Wert für Januar 20145 und für Februar 2014 der Wert 4.

Wie kann ich das machen?

Bcardarella
quelle

Antworten:

3

So geht's mit Google Apps Script.

Code

function specificDays(dayName, monthName, year) {
  // set names
  var monthNames = ["January", "February", "March", 
    "April", "May", "June",
    "July", "August", "September", 
    "October", "November", "December"
  ];
  var dayNames = ["Sunday", "Monday", "Tuesday", "Wednesday", 
    "Thursday", "Friday", "Saterday"
  ];

  // change string to index of array
  var day = dayNames.indexOf(dayName);
  var month = monthNames.indexOf(monthName)+1;

  // determine the number of days in month
  var daysinMonth = new Date(year, month, 0).getDate();

  // set counter
  var sumDays=0;

  // iterate over the days and compare to day
  for(var i=1; i<=daysinMonth; i++) {
    var checkDay = new Date(year, month-1, parseInt(i)).getDay();    
    if(day == checkDay) {
      sumDays ++;
    }
  }

  // show amount of day names in month
  return sumDays;
}

Bildschirmfoto

Geben Sie hier die Bildbeschreibung ein

Bemerkungen

Fügen Sie das Skript über Extras> Skripteditor im Menü hinzu. Speichern Sie das Skript und Sie sind unterwegs!

Beispiel

Ich habe eine Beispieldatei für Sie erstellt: Anzahl der Tagesnamen im Monat

Jacob Jan Tuinstra
quelle
Vielen Dank für Ihren Beitrag und das tolle Skript. Das Skript funktioniert einwandfrei, aber die darin enthaltenen Berechnungen sind wahrscheinlich falsch: - (... Wenn Sie beispielsweise im November 2014 oder im Dezember nach der Anzahl der Mittwochs fragen, gibt es 5 zurück, da es nur 4 Mittwochs gibt ...
Jacob Jan Tuinstra
Danke für den Hinweis Thomas. Ich habe das Skript überarbeitet und die Berechnungen scheinen jetzt in Ordnung zu sein.
Jacob Jan Tuinstra
3
=NETWORKDAYS.INTL(DATE(2017,10,1),EOMONTH(DATE(2017,10,1),0),"1111011")

SYNTAX

NETWORKDAYS.INTL (Startdatum, Enddatum, [Wochenende], [Feiertage])

Wochenende - [OPTIONAL - 1 standardmäßig] - Eine Zahl oder Zeichenfolge, die angibt, welche Wochentage als Wochenenden gelten.

String-Methode: Wochenenden können mit sieben Nullen und Einsen angegeben werden, wobei die erste Zahl im Satz für Montag und die letzte für Sonntag steht. Eine Null bedeutet, dass der Tag ein Arbeitstag ist, eine 1 bedeutet, dass der Tag ein Wochenende ist. Zum Beispiel würde "0000011" bedeuten, dass Samstag und Sonntag Wochenenden sind.

Der Meister
quelle
3

Angenommen, der Januar 2014 ist in A1 und die Anzahl der Wochentage ist in B1 (Freitag ist 6):

=CEILING((DATEDIF(A1,EDATE(A1,1), "D")-MOD(B1-WEEKDAY(A1)+7, 7))/7, 1)

Ganz einfach finde ich

Daphnis
quelle
2

Ich habe es aufgeteilt, indem ich mir die erste (wahrscheinlich teilweise) Woche angesehen habe:

IF(6>=WEEKDAY(A1),1,0)

Dann die Anzahl der ganzen Wochen:

QUOTIENT(DAY(EOMONTH(A1,0))-(7-WEEKDAY(A1)+1),7)

Dann die letzte teilweise oder leere Woche:

IF(MOD(DAY(EOMONTH(A1,0))-(7-WEEKDAY(A1)+1),7)>=6,1,0)

Geben Sie uns die ganze Formel:

=IF(3>=WEEKDAY(A1),1,0)+QUOTIENT(DAY(EOMONTH(A1,0))-(7-WEEKDAY(A1)+1),7)+IF(MOD(DAY(EOMONTH(A1,0))-(7-WEEKDAY(A1)+1),7)>=6,1,0)

Dies setzt Vertrauen in die Genauigkeit von EOMONTH(), was wahrscheinlich ein guter Anruf ist - sollte sicherer gegen Schaltjahre usw. sein.

andrewb
quelle
1

Stellen Sie A1 als ersten Tag des betreffenden Monats ein. Dann:

=CEILING((DAY(EOMONTH(A1, 0)) - MOD(6 - WEEKDAY(A1), 7)) / 7)

Dies funktioniert für jeden Wochentag. Ändern Sie einfach das 6Nachher MOD(in den entsprechenden Wochentag.

Wie es funktioniert:

6 - WEEKDAY(A1)

Dies zählt die Tage zwischen dem ersten Tag des Monats und dem nächsten Freitag. Wir wollen jedoch nur die Anzahl der Tage bis zum nächsten Freitag suchen .

MOD(6 - WEEKDAY(A1), 7)

Dies gibt die Anzahl der Tage zwischen dem ersten Tag des Monats und dem ersten Freitag des Monats zurück.

DAY(EOMONTH(A1, 0))

Dies gibt die Tagesnummer des letzten Tages des Monats zurück. Mit anderen Worten, die Gesamtzahl der Tage im Monat.

DAY(EOMONTH(A1, 0)) - MOD(6 - WEEKDAY(A1), 7)

Subtrahieren Sie die Tage zwischen dem ersten des Monats und dem ersten Freitag des Monats von den gesamten Tagen im Monat. Dies gibt die Gesamtzahl der Tage ab (einschließlich) des ersten Freitags des Monats und des Monatsendes zurück.

DAY(EOMONTH(A1, 0)) - MOD(6 - WEEKDAY(A1), 7)) / 7

Teilen Sie diese Zahl durch 7, die angibt, wie viele Wochen zwischen dem ersten Freitag des Monats und dem Ende des Monats liegen. Zum Beispiel, wenn der Februar 28 Tage hat und die

CEILING((DAY(EOMONTH(A1, 0)) - MOD(6 - WEEKDAY(A1), 7)) / 7)

Runden Sie die Anzahl der Wochen auf, um die Gesamtzahl der Freitage zu ermitteln.

Wenn beispielsweise der erste Juli ein Mittwoch ist, gibt es im Juli zwei volle Tage vor dem ersten Freitag im Juli. Der Juli hat 31 Tage, also gibt es 29 Tage ab (und einschließlich) dem ersten Freitag. Ein 29-Tage-Bereich, der am ersten Freitag beginnt, ermöglicht 4 volle Wochen plus einen zusätzlichen Tag. Da wir an einem Freitag angefangen haben, ist der zusätzliche Tag auch ein Freitag.

ibhhvc
quelle
0

Angenommen, der Monat / das Jahr ist in A1 und wenn mit einem bestimmten Datum das erste ist, versuchen Sie bitte:

=IF(AND(WEEKDAY(EOMONTH(A1,0))=6,EOMONTH(A1,0)-EOMONTH(A1,-1)=29),5,IF(OR(AND(EOMONTH(A1,0)-EOMONTH(A1,-1)=31,WEEKDAY(A1)>3),AND(EOMONTH(A1,0)-EOMONTH(A1,-1)=30,OR(WEEKDAY(A1)=5,WEEKDAY(A1)=6))),5,4))
pnuts
quelle
-1

Diese Formel funktioniert auch:

=QUOTIENT(DAY(EOMONTH(A1, 0)) - WEEKDAY(EOMONTH(A1, 0)) + 6, 7) + IF(WEEKDAY(EOMONTH(A1, 0)) > 5, 1, 0)

Es ist viel sauberer, wenn Sie die Anzahl der Sonntage zählen möchten, da dies vereinfacht werden kann, um:

=QUOTIENT((DAY(EOMONTH(A1, 0)) - WEEKDAY(EOMONTH(A1, 0)) + 7), 7)
arjones6
quelle