次の方法で共有


Excel 2007 での週番号システムと日付/時刻表示の実装

  

Ron de Bruin、Microsoft Excel MVP
Norman Harker、University of Western Sydney の上席講師
Frank Rice、Microsoft Corporation

2007 年 2 月
日本語版最終更新日 2008 年 4 月 3 日

適用対象:
   Microsoft Excel 97
   Excel 2000
   Excel 2002
   Excel 2003
   Excel 2007

要約: Microsoft Office Excel で使用可能な 4 種類の週番号システムとその使用方法について説明します。また、Excel アプリケーションで ISO8601:2000 規格の日付/時刻表示の実装が重要な理由についても説明します。

目次

Excel の週番号システムについて
ISO8601:2000 規格を使用した週番号システムについて
Excel の WEEKNUM 関数を使用した週番号システムについて
単純な週番号について
週カレンダーのダウンロード
結論

Excel の週番号システムについて

世界中で使用されている週番号システムは主に 4 種類あります。各システムにはそれぞれわずかな相違点があり、注意が必要です。 Excel はこれらのどのシステムにも対応できます。

  • **国際標準化機構 (ISO) ISO8601:2000 規格。**すべての週は月曜日から始まります。第 1 週は、木曜日 1 日を含む暦年の第 1 週目の月曜日から始まります。
  • **Excel の WEEKNUM 関数でオプションの第 2 の引数に 1 (既定) を使用する。**第 1 週は 1 月 1 日から始まり、第 2 週は次の日曜日から始まります。
  • **Excel の WEEKNUM 関数でオプションの第 2 の引数に 2 を使用する。**第 1 週は 1 月 1 日から始まり、第 2 週は次の月曜日から始まります。
  • **単純な週番号。**第 1 週は 1 月 1 日から始まり、第 2 週は 1 月 8 日から始まり、第 53 週は 1 日または 2 日 (うるう年の場合) のみとなります。

ISO8601:2000 規格の週番号について

週番号に関する ISO8601:2000 Standard(英語) は、EU では必須となっており、世界中で最も多く使用されています。

**メモ:   **Excel では ISO 規格の週番号用のワークシート関数は組み込まれていません。

1986 年に初めて発行された ISO8601:2000 規格では、日付は次のいずれかの形式で表現するよう規定されています。

  • yyyymmdd (例: 2005 年 3 月 30 日の場合は、20050330)

  • yyyy-mm-dd (例: 2005 年 3 月 30 日の場合は、2005-03-30)

また ISO 規格では、週番号について、2 通りの方法のいずれか (どちらの方法を使用しても結果は同じ) で定義する次のアルゴリズムを使用するよう規定しています。

  • 第 1 週は 1 月 4 日が含まれる週の月曜から始まる。
  • 第 1 週は、暦年の第 1 木曜日を含む週の月曜日から始まる。

この日付の表現手法に慣れていない Excel 2007 ユーザーにとって、ISO 規格は使いにくい可能性があります。また、ISO の週番号アルゴリズムをサポートする組み込み関数や Analysis ToolPak 関数はありません。

ISO8601:2000 規格の利点

ISO8601:2000 規格で定義されている日付の表現には主に 4 つの利点があります。

  • yyyymmdd または yyyy-mm-dd 形式で日付を表現することにより、日付が正しい順序に並べられる。
  • 数値で日付を表すことで、月の英語名や略語 (Jan、Feb、Mar) に慣れていないユーザーにも理解しやすい。
  • 数値で日付を表すことで、表現のあいまいさが解消される (例: 12-11-2005 は、主に米国では 2005 年 12 月 11 日を意味するのに対し、主にヨーロッパでは 2005 年 11 月 12 日を意味する)。
  • 年を 4 桁で表すことで、世紀が明確になる。

ISO 規格の週番号アルゴリズムでは、見慣れない結果になる場合があります。たとえば、第 1 週は 1 月 1 日から始まるとは限りません。 第 1 週は、前暦年の 12 月 28 日から始まる場合があります。 また、第 52 週または第 53 週が翌暦年の 1 月 3 日になる場合もあります。

ISO システムの利点は次のとおりです。

  • すべての週が同じ長さである。他のシステムでは、年の始めまたは終わりの週の日数が 7 日未満になります。
  • すべての週は月曜日から始まる。つまり、第 7 週の第 3 日は常に水曜日となります。
  • 1 年には必ず 52 週または 53 週ある。他のシステムでは、54 週になる場合があります。

ISO 規格の日付表現に関する Excel 関連事項

ISO システムの性質のうちで、Excel ユーザーに最も重要な事項は次のとおりです。

  • Excel のすべての言語のすべてのバージョン (Excel 1997 以降) には、標準的な日付の形式として yyyy-mm-dd がある。

  • 日付は、さまざまな日付関数の中で文字列として指定される。yyyy-mm-dd 形式を使用すると、コンピュータの地域の設定や 2 桁で記述された年の解釈の設定に関係なく、正しい解釈が行われます。 yyyy-mm-dd 以外の日付形式では、コンピュータの地域の設定や 2 桁で記述された年の解釈の設定によって異なって解釈される場合があります。 多くの場合、そのエントリがテキスト エントリに変換されてしまいます。

    • 入力が日付であることが明確でない可能性がある。

    • 以降の日付計算で使用する場合、日付の連番は "0" とみなされ、"1899 年 12 月 31 日" と解釈される。たとえば、03-07-05 と入力すると、地域の設定や 2 桁で記述された年の解釈の設定によって次の 6 通りに解釈されます。

      2005 年 7 月 3 日

      1905 年 7 月 3 日

      2005 年 3 月 7 日

      1905 年 3 月 7 日

      2003 年 7 月 5 日

      1903 年 7 月 5 日

  • 日付関数に他の文字列を入力すると、形式が変わったり、解釈が正しくなかったりする可能性がある。

    Excel 2000 以降、ユーザーは、日付関数への入力として文字列引数を使用しないよう推奨されています。これは、コンピュータの地域の設定や 2 桁で記述された年の解釈の設定によって、解釈方法が異なるためです。 ISO 規格で指定されている日付の区切り方法を使用することで、これらの問題を回避できます。 たとえば、次のように記述します。

    =WEEKDAY("2005-02-23",1)
    

    次のようには記述しません。

    =WEEKDAY(DATE(2005,02,23),1)
    

    "2005 年 2 月23 日" という日付を返すには、次のように記述します。

    ="2005-02-23"
    
  • INDIRECT 関数を使用して文字列を構築できる。

    ブックを使用するコンピュータの地域の設定や 2 桁で記載された年の解釈の設定が、ブックを作成したコンピュータの設定と異なる場合、他の文字列形式を使用するとエラーが発生することがあります。ISO 規格の文字列形式では、便利で簡単な方法で日付を数式にハード コード化できます。

  • TEXT 関数に問題点がある。Excel の他の言語バージョンでブックを開いた場合に、書式文字列が正しく変換されない場合があります。 たとえば、次の例を考えます。

    ="Today is " & TEXT(TODAY(),"yyyy-mm-dd")
    

    Excel の英語バージョンでは、この数式は以下を返します。

    Today is 2005-02-23

    ドイツ語バージョンでは、年の形式に jaar "jjjj-mm-dd" を使用しているため、数式は以下を返します。

    Today is yyyy-02-23

    Excel のドイツ語バージョンで TEXT 関数を使用し、次に英語バージョンでブックを開いた場合にも、同様の問題が発生します。ISO 規格の日付文字列と異なる形式の日付の文字列が使用されている場合は必ず、この種類のエラーが起こる可能性があります。

  • Excel のすべての言語とすべてのバージョンで、意図する日付が正しく解釈される日付の入力形式は 2 通りしかない。正しく解釈されるのは、yyyy-mm-dd と yyyy/mm/dd です。

    ISO 規格の区切り記号であるハイフン (-) を使用せずにスラッシュ (/) を使用することは利点がないため、ISO 規格を使用することが最良の方法です。

  • ある範囲のセルをテキストとしてあらかじめ書式設定している場合は、すべての日付を 1900-01-01 (または 1904 日付システムを使用している場合は 1904-01-02) 以前の日付を含め、yyyy-mm-dd の形式で入力できる。

    これにより、以降、簡単に日付順に並べ替えることができます。あらかじめ日付をテキストとして書式設定していない場合、日付の連番が日付順に並べ替えられ、1900 より前のテキストがアルファベット順に並べ替えられます。

  • 既定では、Microsoft Windows の Excel では 1900 日付システムを使用する。一方、Apple Macintosh ユーザーの多くは 1904 日付システムを使用しています。 Excel の日付は実際には数字です。 つまり、空のセルに 1 と入力して、セルを日付として書式設定した場合、1900 日付システムでは 1900-01-01 と表示され、1904 日付システムでは 1904-01-02 と表示されます。

    Excel 97 ~ Excel 2003 でこの設定を変更するには、[ツール] メニューの [オプション] をクリックし、次に [計算方法] タブをクリックします。Excel 2007 でこの設定を変更するには、[Microsoft Office ボタン] をクリックし、[Excel のオプション] ダイアログ ボックスをクリックします。次に [詳細設定] タブをクリックします。 異なる日付システムを使用するブック間の日付をコピーする場合は、日付に 4 年間 (1462 日) の差があります。

    この相違を補正するための 1 つの方法を次の手順で示します。

    1. ブック内の任意の空のセルに 1462 と入力します。

    2. セルを選択し、Ctrl キーを押しながら C キーを押して、内容をコピーします。

    3. 更新する日付が含まれているセルを選択します。

      Excel 2007 の場合のみ:

      [ホーム] タブの [クリップボード] グループで、[貼り付け]、[形式を選択して貼り付け] の順にクリックして [加算] (または、貼り付け先のブックによっては [減算] を選択して [OK] をクリックします。

      または

      Excel 97、Excel 2000、Excel 2002、Excel 2003 の場合のみ:

      [編集] メニューで [形式を選択して貼り付け] をクリックして [加算] (または貼り付け先のブックによっては [減算])をクリックした後、[OK] をクリックします。

1900-01-01以前の日付を Excel で処理する方法については、MVP である John Walkenbach 氏の「XDate: Extended Date Functions Add-In (英語)」を参照してください。

ISO 規格日付表現の週番号を計算する

ISO 規格では、第 1 週は、前暦年の 12 月 29 日から始まる場合があります。すべての週には 7 日あり、月曜日から始まります。 暦年によって 52 週の年と 53 週の年があります。

次の数式 (開発者: 故 Frank Kabel 氏) では、ISO 規格に基づき、セル B4 に日付に対する週番号が返されます。

=INT((B4-DATE(YEAR(B4-WEEKDAY(B4-1)+4),1,3)+WEEKDAY(DATE(YEAR(B4-WEEKDAY(B4-1)+4),1,3))+5)/7)

すべての週は月曜日から始まり、第 1 週は、暦年の第 1 木曜日を含む週の月曜日から始まります。

週番号を計算するもう 1 つ方法は、ブックの標準モジュールでユーザー定義関数 (UDF) を使用する方法です。操作方法を次の手順で説明します (Daniel Maher 氏による)。

**メモ:   **この手順が正常に動作するためには、ユーザーのセキュリティ設定でマクロを許可する必要があります。

  1. Excel 2007 の場合、[開発] タブで [Visual Basic] をクリックして Visual Basic Editor を開きます。

    Excel 97 ~ Excel 2003 の場合、[ツール]、[マクロ] の順にクリックし、[Visual Basic Editor] をクリックします。

    またすべてのバージョンで、Alt キーを押しながら F11 キーを押すと Visual Basic Editor が開きます。

  2. [挿入] メニューの [モジュール] をクリックします。

  3. 次の関数をコード ウィンドウに入力するか貼り付けます。

    Public Function IsoWeekNum(d1 As Date) As Integer
    ' Provided by Daniel Maher.
       Dim d2 As Long
       d2 = DateSerial(Year(d1 - Weekday(d1 - 1) + 4), 1, 3)
       IsoWeekNum = Int((d1 - d2 + Weekday(d2) + 5) / 7)
    End Function
    
  4. [ファイル] メニューで [終了して Microsoft Excel へ戻る] をクリックするか、Alt キーを押しながら Q キーを押して Visual Basic Editor を終了します。

    たとえば、次のコードではワークシートのセル B4 に関数を呼び出します。

    =IsoWeekNum(B4)
    

ISO 規格の詳細と、ISO 規格の日付と週番号を使用する方法を示すサンプル ブックについては、Ron de Bruin 氏の 「ISO Date Representatation and Week Numbering (英語)」を参照してください。

WEEKNUM 関数を使用した週番号システムの実装

WEEKNUM 関数を使用して週番号を実装することもできます。Excel 2007 では、WEEKNUM 関数は標準で組み込まれています。 Excel 97 ~ 2003 の場合は、Analysis ToolPak (英語) アドインを使用する必要があります。アドインのインストール後、[ツール] メニューの [Analysis ToolPak] オプションを選択して、[アドイン] をクリックします。この操作を行わない場合、関数を使用すると NAME? というエラーが返されます。

**メモ:   **[アドイン] ダイアログ ボックスに [Analysis ToolPak] オプションが表示されない場合は、コントロール パネルの [アプリケーションの追加と削除] (Windows Vista の場合は [プログラムと機能]) をクリックし、[Microsoft Office Professional] を選択して [変更] をクリックします。このオプションは既定では選択されていません。

**注意:   **[Analysis ToolPak] アドインの WEEKNUM 関数を使用していて、ブックを Excel の他の言語バージョンで開いた場合、Excel では数式が変換されないため、数式がテキストとして表示されます。たとえば、Excel ドイツ語バージョンで作成したブックを、地域の設定で言語が英語に設定されているコンピュータで開くとします。 ブックにドイツ語バージョンの WEEKNUM 関数 (WEEKNUMMER) が含まれている場合は、数式の評価で #NAME? エラーが表示されます。

WEEKNUM 関数に関する潜在的な問題

Analysis ToolPakWEEKNUM 関数を使用するアルゴリズムでは、最初または最後の週に日数が 7 日間含まれていないことがあり、数式が不正確になる場合があります。この結果、年によっては 54 週になる可能性があります。

WEEKNUM 関数を使用することによって発生する可能性のある潜在的な問題の例を以下に示します。これらのステートメントはワークシートのセル B4 の日付を想定しています。

=WEEKNUM(B4,1)

または

=WEEKNUM(B4)

同様に、これらのステートメントでは、第 1 週は 1 月 1 日から始まり (1 月 1 日が何曜日になるかに関係なく)、第 2 週は次の日曜日から始まります。これにより、1 週分が年に追加されます。

=WEEKNUM(B4,2)

このステートメントでは、第 1 週は 1 月 1 日に始まり、第 2 週は次の月曜日から始まります。これにより、1 週分が年に追加されます。

計算で関数を使用する前に、エラーがあるかどうかについて結果をテストしておく必要があります。

組み込みの WEEKNUM 関数の代わりに代替数式を使用する

代替数式またはユーザー定義数式 (UDF) を使用することには、次の利点があります。

  • ブックのユーザーが Analysis ToolPak アドインをインストールしていない場合や、使用可能な Excel アドインのリストでこのアドインを選択していない場合でも、問題がない。
  • Analysis ToolPak で使用する数式は、ブックを Excel の他の言語バージョンで開いた場合に変換されないのに対し、代替数式または UDF は Excel のすべての言語バージョンで動作する。

Analysis ToolPakWEEKNUM 関数で発生するこうした問題を回避するために、次の代替数式を使用できます

(これらのサンプルは Daniel Maher 氏提供)。

次の数式

 [Visual Basic]
=WEEKNUM(B4,1)

を次の数式に置き換えます。

=1+INT((B4-(DATE(YEAR(B4),1,2)-WEEKDAY(DATE(YEAR(B4),1,1))))/7)

または、次の数式

=WEEKNUM(B4,2)

を次の数式に置き換えます。

=1+INT((B4-(DATE(YEAR(B4),1,2)-WEEKDAY(DATE(YEAR(B4),1,0))))/7)

または、ブックの標準モジュールで次の UDF を使用して、週番号を計算できます。

Function VBAWeekNum(D As Date, FWDayArg As Integer) As Integer
' You can see examples of this at 
' http://www.cpearson.com/excel/weeknum.htm
   VBAWeekNum = CInt(Format(D, "ww", FWDayArg))
End Function

この UDF を使用するには、ワークシートのセルに以下を追加します。

=VBAWeekNum(B4,1)

第 1 週は 1 月 1 日から始まり、第 2 週は次の日曜日から始まります。

=VBAWeekNum(B4,2)

第 1 週は 1 月 1 日から始まり、第 2 週は次の月曜日から始まります。

単純な週番号について

単純な週番号を使用することもできます。単純な週番号を使用する場合は、週がさまざまな曜日から始まり、年は常に 53 週で、この週の日数が 1 日または 2 日となることに注意してください。

たとえば、次の数式では、セル B4 に日付を入力すると、第 1 週は 1 月 1 日から始まり、第 2 週は 1 月 8 日から始まり、第 53 週は 1 日または 2 日 (うるう年の場合) のみとなると想定しています。

=INT((B4-DATE(YEAR(B4),1,1))/7)+1

週カレンダーのダウンロード

週カレンダー ファイルは、Ron de Bruin氏の「Week Numbers in Excel (英語)」からダウンロードできます。週カレンダー ファイルは 1 ページで 1 年のすべての日付と週番号を表示します。 また、4 つの週番号システムそれぞれに対応する個別のシートがあります。

結論

Excel で週番号と日付を表現する方法は多数あります。どの方法を使用するかは、ご使用のアプリケーションの必要条件を十分に調べた上で、ブックを使用するコンピュータの地域と日付の設定に基づいて選択する必要があります。

謝辞

John Green、Excel MVP。オーストラリア、シドニー在住

Daniel Maher (Excel ニュースグループでは "Daniel M" という名前で投稿)

故 Frank Kabel、Excel MVP

追加情報

Excel での週番号と日付の表現に関する詳細については、次の情報を参照してください。

  • 週番号の実装に関する情報については、Chip Pearson 氏の「Week Numbers In Excel (英語)」で詳しく説明されています。
  • Excel の日付に関連する問題全般については、Chip Pearson 氏の「Topic Index (英語)」のインデックスを参照してください。
  • ISO 規格の週番号システムと、その他 3 種類の一般的な週番号システムのカレンダに対応するアプリケーションの無料ダウンロードと、週番号に関するその他の情報については、Ron de Bruin 氏の「Week Numbers in Excel (英語)」を参照してください。
  • 詳しい情報とISO 規格の日付と週番号を説明したサンプル用ブックについては、Ron de Bruin 氏の「ISO Date Representation and Week Numbering (英語)」を参照してください。

著者について

Ron de Bruin 氏は、Excel の Most Valuable Professional (MVP) であり、ニュースグループへも頻繁に投稿しています。

Norman Harker 氏は、University of Western Sydney の上席講師です。

Frank Rice 氏は Microsoft の社員で、「Office Developer Center」へ頻繁に投稿しています。