祝祭日でない場合、月の各曜日の発生をカウントしたいと思います。
さらに詳しく言えば、ある月に1人の人が月曜日、火曜日、水曜日、木曜日、金曜日にいくら働かなくてはならないのか知りたいのです。
これまでのところ、私は次のカスタム関数を使用しています:
_function occurrenceOfSpecificDay(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;
}
_
このスクリプトを使用すると、セルに=occurrenceOfSpecificDay("Monday", "September", 2019)
を挿入することで、2019年9月の月曜日の数を返すことができますが、休日の場合は日を数えたくありません。
指定された日がデンマークの祝日である場合にfalseを返す追加の引数を使用して、次の条件を拡張したいと思います。
_if(day === checkDay ){
sumDays ++;
}
_
@tedinozは私に別のアプローチを導きました:カスタム関数の代わりに、私はNETWORKDAYS.INTLを次のように使用することになりました:
=NETWORKDAYS.INTL("8/1/2019",eomonth("8/1/2019", 0), "0111111")
=NETWORKDAYS.INTL("8/1/2019",eomonth("8/1/2019", 0), "1011111")
=NETWORKDAYS.INTL("8/1/2019",eomonth("8/1/2019", 0), "1101111")
=NETWORKDAYS.INTL("8/1/2019",eomonth("8/1/2019", 0), "1110111")
=NETWORKDAYS.INTL("8/1/2019",eomonth("8/1/2019", 0), "1111011")
documentation によると、NETWORKDAYS.INTL
の3番目のパラメータは、曜日を表す「1」と「0」の7文字長のシーケンスです。最初の文字は月曜日、次の文字は火曜日などです。「1」は「週末」を意味し、「0」は「平日」を意味します。
NETWORKDAYS.INTL
は就業日のみをカウントするため、他の日を表す文字を「0」に設定することにより、特定の日をカウントするために使用できます。残りの日は週末として定義されているため、0100000
は火曜日のみをカウントします(休日でない場合のみ)。