特定の月の金曜日の数を数える


7

Googleスプレッドシートの関数を使用して、特定の月の金曜日の数を確認したいと思います。

たとえば、2014年1月の場合は52014年2月の場合はになります4

どうやってやるの?

回答:


3

これは、Google Apps Scriptでそれを行う方法です。

コード

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;
}

スクリーンショット

ここに画像の説明を入力してください

備考

メニューの[ツール]> [スクリプトエディター]からスクリプトを追加します。スクリプトを保存すれば、外出中です!!

サンプルファイルを作成しました:月の日名の量


あなたの投稿と素晴らしいスクリプトをありがとう。スクリプトは正常に機能しますが、その計算はおそらく間違っています:-(...たとえば、2014年11月または12月の水曜日の数を要求すると、水曜日が4つしかないため、他の5つが返されます...
Jacob Jan Tuinstra

ポインタトーマスをありがとう。スクリプトを修正しましたが、計算は問題ないようです。
Jacob Jan Tuinstra 2014

3
=NETWORKDAYS.INTL(DATE(2017,10,1),EOMONTH(DATE(2017,10,1),0),"1111011")

構文

NETWORKDAYS.INTL(開始日、終了日、[週末]、[休日])

weekend-[省略可-デフォルトは1]-週末と見なされる曜日を表す数値または文字列。

文字列メソッド:週末は0と1の7つを使用して指定できます。セットの最初の数字は月曜日を表し、最後の数字は日曜日を表します。ゼロはその日が就業日であることを意味し、1はその日が週末であることを意味します。たとえば、「0000011」は、土曜日と日曜日が週末であることを意味します。


3

2014年1月がA1にあり、曜日の数がB1にあると仮定します(金曜日は6)。

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

かなりシンプルだと思います


2

最初の(おそらく部分的)週を見ることで分割しました。

IF(6>=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)

私たちに完全な式を与えます:

=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)

これはの精度に依存しますEOMONTH()。これはおそらく良い呼び出しです-うるう年などに対してより安全でなければなりません。


1

A1を問題の月の最初の日に設定します。次に:

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

これはどの曜日でも機能します。6MOD(を対応する曜日に変更するだけです。

使い方:

6 - WEEKDAY(A1)

これは、月の最初の日から最も近い金曜日までの日数を数えます。ただし、次の金曜日までの日数を調べたいだけです。

MOD(6 - WEEKDAY(A1), 7)

これは、月の最初の日から月の最初の金曜日までの日数を返します。

DAY(EOMONTH(A1, 0))

これは、月の最後の日の日数を返します。つまり、その月の合計日数です。

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

月の合計日数から、月の最初の日と最初の金曜日の間の日数を引きます。これは、月の最初の金曜日から月末までの合計日数を返します。

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

この数を7で割ると、月の最初の金曜日から月の終わりまでの週数がわかります。たとえば、2月が28日で、

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

週の数を切り上げて、金曜日の合計数を決定します。

たとえば、7月1日が水曜日の場合、7月の第1金曜日の前に、7月の丸2日があります。7月は31日なので、最初の金曜日から(およびそれを含めて)29日あります。最初の金曜日から始まる29日間の範囲では、4週間とさらに1日追加できます。金曜日に始めたので、追加の日も金曜日です。


0

月/年がA1であると仮定し、特定の日付が1日である場合は、次を試してください。

=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))

-1

この式も機能します:

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

次のように簡略化できるため、日曜日の数を数える場合は、はるかにクリーンです。

=QUOTIENT((DAY(EOMONTH(A1, 0)) - WEEKDAY(EOMONTH(A1, 0)) + 7), 7)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.