開発製品:
Visual Basic for Applications (VBA) |
バージョン:
5.0 32-Bit Win |
デザイン時: 対応 |
このツールを使って 「マイクロソフト西暦 2000 年対応」 に準拠するアプリケーションを構築できますか
はい |
言語: English, Chinese (Simplified), Chinese (Traditional), French, German, 日本語, Korean, Portuguese, Spanish, Czech, Danish, Dutch, Greek, Finnish, Hungarian, Italian, Norwegian, Polish, Russian, Swedish, Turkish, Iberian Portuguese, Slovenian |
対応期間: システムに依存
|
発売日:
1997 年 5 月 1 日 |
必要なソフトウェア: なし |
依存する製品: Windows 95, または Windows NT 3.51 with Service Pack 5 以上, または Windows NT 4.0 (Service Pack 2以上を推奨) |
依存するクロック: システムクロック |
カテゴリ: 開発製品 |
このツールを使って 「マイクロソフト西暦 2000 年対応」に準拠するアプリケーションを構築できますか?
はい。開発者が Visual Basic for Applications (VBA) に用意されている DATE データ型および日付処理関数を使用し、VBA を使用するアプリケーションから渡されたデータは日付に 4 桁の西暦を使用する場合。
Visual Basic for Applications 5.0 を含む製品には、Excel 97、Access 97、Word 97、Word 98、PowerPoint 97 および Project 98 などがあります。
日付の処理
VBA は内部的に 8 バイトの浮動小数点数の値で日付を保存します。値は、1899 年 12 月 30 日 0 時 0 分 0 秒からの経過日数 (整数と分数) を表わします。この値の整数部は日数を表わし、小数部は一日の分数値を表わします。たとえば、1997 年 5 月 22 日 午後 3 時 0 分の場合には、35572.625 が保存されます。つまり、1997 年 5 月 22 日は、1899 年 12 月 30 日から計算すると 35,572 日になり、午後 3 時 0 分は、一日の 625/1000 になります。VBA では、100 年 1 月 1 日~ 9999 年 12 月 31 日までの日付を保存することができます。
VBA には、日付処理のための関数が多数あります。これらの関数は、VBA の対応期間内で正確に日付を処理するように設計されています。日付を処理する組み込み関数には、次のものがあります。
Now()、Date()、および Time() 関数から返される日付と時刻は、オペレーティング システムのクロックから取得されます。
日付は下 2 桁の西暦形式で表示されますが (Visual Basic の format 関数などを使用して)、値は 4 桁の長い西暦で処理されます。
西暦の下 2 桁のみが指定された場合、次に説明する規則に従って上 2 桁が取得されます。
下 2 桁の西暦の処理
日付に下 2 桁の西暦のみが指定された場合、次の規則に従って上 2 桁の西暦が取得されます。規則は次のとおりです。
- 下 2 桁が 00 ~ 29 年の場合は、上 2 桁は 20XX 年と解釈されます。
- 下 2 桁が 30 ~ 99 年の場合は、上 2 桁は 19XX 年と解釈されます。
これらの規則は、Windows 95 と Windows NT 4.0 でのデフォルトの設定です。ただし、VBA では OLE オートメーションを使用して日付が解析されます。そのため、OLE オートメーションの規則に従って、下 2 桁の西暦が処理されます。旧バージョンの OLE オートメーション (2.30.00.0000 より前のバージョン) を使用しているマシンでは、西暦の上 2 桁は現在の西暦として解釈されます。 Windows 98 の場合は、新しいバージョンの OLE オートメーションでは、この 100 年ウィンドウはコントロール パネルで設定できます。
詳細については、次の OLE オートメーションの Web サイトを参照してください。
西暦 2000 年問題に対応するアプリケーションの開発に関する注意点
西暦 2000 年対応のアプリケーションを開発する場合、次の事項に注意してください。
- 日付が VBA 関数にどのように渡されるか
- 日付が VBA 関数でどのように処理されるか
- 日付が VBA 関数からどのように返されるか、また表示されるか
日付値を VBA 関数に渡す場合は、組み込み DATE データ型を使用します。たとえば次の関数は、日付を入力値として受け取ります。
Function DaysInMonth(AnyDate As Date) As Integer
DaysInMonth = DateSerial(Year(AnyDate), Month(AnyDate) + 1, 1) - _
DateSerial(Year(AnyDate), Month(AnyDate), 1)
End Function
VBA は、プロシージャに渡されているデータを解析するルーチンを実行します。値が日付以外の場合に、ランタイム エラーが発生します。
また、ユーザー指定の値が直接またはユーザー インターフェイス経由で関数に渡される場合には、4 桁の値が日付の西暦部分を表わしていることを確認してください。
関数内の日付処理に関しては、組み込み VBA 関数のみが使用されていることを確認してください。上記の例では、DateSerial、Year、および Month 関数を使用して1ヶ月の日数を計算しています。
データが VBA 関数から返される場合は、DATE データ型を使用してそのデータを定義する必要があります。
西暦 2000 年問題に関するよくある開発時のエラー
ユーザー定義の関数は、日付処理で起こる問題の大きな要因です。関数が正しく定義されていないと、問題が起こる場合があります。 前のセクションで説明されているガイドラインに従って開発するようにしてください。
文字列として保存できる日付も、その情報の中に間違いがあると、問題を引き起こします。Visual Basic では、年/月/日の順序を並び替えることで有効な日付を取得できた場合、文字列は日付として解釈されます。たとえば、 87/3/1 (1987 年 3 月 1 日) と 3/30/98 (1998 年 3 月 30 日) は年/月/日の順序が違いますが、有効な日付として解釈されます。
文字列関数を使用して日付を処理しないでください。日付形式 (2 桁または 4 桁の西暦) が結果に影響するからです。
通常、VBA のカスタム ルーチンでは、日付の保存には組み込みの DATE データ型を使用する必要があります。
ガイドラインと推奨事項
MSDN オンライン ライブラリには、Visual Studio および Visual Basic を使用して西暦 2000 年対応のアプリケーションを開発するための情報が含まれています (