23

週番号と年があり、MicrosoftExcelでその特定の週の月曜日の日付を計算したいと思います。

Year   Week   Date (Monday)
2012   1      January 2, 2012
2013   16     April 15, 2013
2014   42     October 13, 2014

暦週を特定の日付に変換するために使用できる数式は何ですか?

4

8 に答える 8

57

ISOの週番号の場合、この式を使用して月曜日を取得できます

=DATE(A2,1,-2)-WEEKDAY(DATE(A2,1,3))+B2*7

A2に年、B2に週番号を想定

ここでの私の答えと同じですhttps://stackoverflow.com/a/10855872/1124287

于 2012-06-12T13:05:22.603 に答える
2

次の式は毎年適切です。もう調整する必要はありません。前提条件は、月曜日が週の最初の日であるということです。

If A2 = Year and Week = B2
=IF(ISOWEEKNUM(DATE($A$2;1;1)-WEEKDAY(DATE($A$2;1;1);2)+1)>1;DATE($A$2;1;1)-WEEKDAY(DATE($A$2;1;1);2)+1+B2*7;DATE($A$2;1;1)-WEEKDAY(DATE($A$2;1;1);2)-6+B2*7)
于 2015-01-07T10:31:37.763 に答える
1

週番号がA1で、年がA2の場合、次のスニペットで1週間の日付を取得できます。

=$A$1*7+DATE($B$1,1,-4) through =$A$1*7+DATE($B$1,1,2)

もちろん、-4から2までのシリーズを完了すると、日曜日から土曜日までの日付があります。

お役に立てれば。

于 2016-04-05T13:24:40.417 に答える
0

週番号がでA1、年がA2である場合は、次のことを試すことができます。

A1*7+DATE(A2,1,1)
于 2012-06-12T11:47:25.523 に答える
0

簡単な解決策は、次の式を実行することです。

A1*7+DATE(A2,1,1)

水曜日が返される場合は、数式を次のように変更するだけです。

(A1*7+DATE(A2,1,1))-2

これは、1暦年以内の日付でのみ機能します。

于 2013-05-02T02:39:40.047 に答える
0

A1の週番号と年がwwYYの形式の3桁または4桁の整数である場合、式は次のようになります。

=INT(A1/100)*7+DATE(MOD([A1,100),1,1)-WEEKDAY(DATE(MOD(A1,100),1,1))-5

平日を引くと、一貫した週の開始日が返されます。最後の減算を使用して、開始日を調整します。

于 2014-05-24T19:55:19.817 に答える
0

=(MOD(R [-1] C-1,100)* 7 + DATE(INT(R [-1] C / 100 + 2000)、1,1)-2)

与えられた週のexp:week51年2014としてのyywwは1451になります

于 2014-10-30T04:40:20.813 に答える
0

あなたが週番号から日付を取得する反対を探しているなら、私はオンラインで解決策を見つけてそれを少し変更しました:

Function fnDateFromWeek(iYear As Integer, iWeek As Integer, iWeekDday As Integer)
  ' get the date from a certain day in a certain week in a certain year
  fnDateFromWeek = DateSerial(iYear, 1, (iWeek * 7) _
          + iWeekDday - Weekday(DateSerial(iYear, 1, 1)) + 1)
End Function

asap-utilities.com/からフォーミュラを取得し、変更しました

DateSerial(iYear, 1, ((iWeek - 1) * 7) 

DateSerial(iYear, 1, (iWeek * 7)

アップデート

少なくともドイツでは、2016年のうるう年にフォーミュラが期待どおりに機能していないようですので、これに変更しました

Function fnDateFromWeek(iYear As Integer, iWeek As Integer, iWeekDday As Integer)
' get the date from a certain day in a certain week in a certain year
  
    If isLeapYear(iYear) Then
        curDate = DateSerial(iYear, 1, ((iWeek) * 7) _
          + iWeekDday - Weekday(DateSerial(iYear, 1, 1)) + 1)
    Else
        curDate = DateSerial(iYear, 1, ((iWeek - 1) * 7) _
          + iWeekDday - Weekday(DateSerial(iYear, 1, 1)) + 1)
    End If
    fnDateFromWeek = curDate
End Function

2016年のハードコーディングは理想的ではないため、この関数を使用して1年がうるう年かどうかを確認できます。

Function isLeapYear(iYear As Integer) As Boolean

    If (Month(DateSerial(iYear, 2, 29)) = 2) Then
        isLeapYear = True
    Else
        isLeapYear = False
    End If
    
End Function

うるう年以外の場合は、3月DateSerial(iYear,2 ,29)1日を返します

これはまだ間違っているかもしれませんが、私の限られたテストは期待された結果をもたらしました:

Sub TestExample()
   Debug.Print Format(fnDateFromWeek(2014, 48, 2), "ddd dd mmm yyyy") ' mo 24 Nov 2014
   Debug.Print Format(fnDateFromWeek(2015, 11, 6), "ddd dd-mmm-yyyy") ' fr 13 Mar 2015
   Debug.Print Format(fnDateFromWeek(2016, 36, 2), "ddd dd-mmm-yyyy") ' Mo 05 Sep 2015
End Sub
于 2015-03-16T13:48:09.010 に答える