- ベストアンサー
Excelマクロ(excel4.0)のTODAY関数で日付が正常に表示できない
Excel VBAで開発されたソフトの改造を行っているのですが、初めてのVBAで悪戦苦闘しております。 Excel2000で開発されたソフトでマクロ(excel4.0)が組み込まれてますが、下記の方法で日付を表示すると"2004/10/7"と表示されてしまいます。 =FORMULA(TODAY(),!HIZUKE) 当たり前なのですが、下記だと"2008/10/8"と表示されます。 =FORMULA("2008/10/8",!HIZUKE) パソコンの時計は 2008/10/8 に設定されてます。 HIZUKEのセルの書式設定は「日付-2005/3/15」の種類で設定してます。 Excel2000とExcel2007で確認しましたが、同じ症状です。 違うパソコンで確認しましたが、改善できず困ってます。 原因がわかる方、ご教授いただけると助かります。 <開発環境> ・WindowsXP Pro SP3 ・Celeron 540(1.8GHz) ・メモリ1GB ・Excel2007 SP1 (Office2007)
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
またまた登場、onlyromです。 ACTIVATE、ヒントになったようで何より。 xl2007は持ってないので今回も戯言という程度ですが。。。(^^;;; >コードを確認しましたが、意図的に1900/1904年の切り替えをしている場所は見つかりません >同じソフトの別のマクロで >=FORMULA(TODAY(),!HIZUKE) >を行ってますが、ここでは正常な日付(現在日付)が表示される 1900年、1904年を切り替えしてるコードがないにも拘わらず 同じコード【=FORMULA(TODAY(),!HIZUKE)】の結果表示が違うというのはおかしいので やはりどこかで切り替えしているのではないでしょうか。 確認はシートモジュール、標準モジュール等も確認されましたか? 例えば、以下のような場合はどうでしょう。 セル"HIZUKE" がSheet1にあり、Sheet1のChangeイベントで "HIZUKE"のセルが変化した場合、1904年モード -> 1900年モード それ以外のセルが変化した場合、1900年モード -> 1904年モード にする もちろん1904年モードにするのは別のところでもいいですが。。。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = Range("HIZUKE").Address Then ThisWorkbook.Date1904 = False ElseIf Target.Address = "$B$5" Then ThisWorkbook.Date1904 = True End If End Sub 表示結果のおかしい、=FORMULA(TODAY(),!HIZUKE) を実行する前に このシート、または別のシートのイベントなどで1904年モードにしていたら、 上記コードのような場合、質問のようになりますよね。 ThisWorkbookモジュール、Sheetモジュール、標準モジュール等のコードも 確認したのなら(たぶんしたでしょうが)、この回答はなかったことに。。。。(^^;;;; 以上。
その他の回答 (1)
- redfox63
- ベストアンサー率71% (1325/1856)
これは日付の計算が 1904年を基準にするのか 1900年を基準にするのかの違いによって生まれる現象です 1904年モードで 2008/10/8 と記入したセルがあるとします この状態で ツール > オプション > 計算方法 の『1904年から計算する』のチェックをはずします すると 2008/10/8だったセルが 2004/10/7に変身します 4.0マクロはあまり知らないのですが この1900/19004年の切り替えをマクロの中でやってたりしませんか?
補足
ご回答ありがとうございます。 ヘルプをいろいろ調べてましたら、 Windows 版 Microsoft Excel の標準では 1900 年日付システム、Macintosh 版 Microsoft Excel の標準では 1904 年日付システムが使われているそうです。 コードを確認しましたが、意図的に1900/1904年の切り替えをしている場所は見つかりませんでした。 同じソフトの別のマクロで =FORMULA(TODAY(),!HIZUKE) を行ってますが、ここでは正常な日付(現在日付)が表示できてます。 仰る通り1900/1904年がとても怪しいのですが、その場所を特定できてません。 もう少し頑張って調査してみます。
お礼
ご回答ありがとうございます! シートのマクロ、VBAコードなど調べましたが、見つかりませんでした。 見つからないだけかも? 逃げの手段ですが、 =FORMULA("=TODAY()",!HIZUKE) として、セルにTODAY関数を組み込むようにしたら、正常に表示されるようになりました。 原因はよくわかりませんが、取り合えずこれで対策しようと思います。 いろいろ、教えてくれてありがとうございました。 本当に助かりました。