アプリ版:「スタンプのみでお礼する」機能のリリースについて

エクセルVBAで、うるう年の判定をしなければなりません。

簡単に判定できる方法があったら、教えてください。

A 回答 (5件)

さらに失礼しました。

。。

Day(CDate("March 1, " & CStr( 西暦 As Integer )) - 1)

が正解です

この回答への補足

#1だと1900年はうるう年って出ちゃうのに
これだと1900年でもうるう年ではないって正しく判定されますね。
同じように3/1-1が29日か判定しているのに。

不思議ですがどうしてなんですか?

VBAと関数は同じようで違う
というマジックなのでしょうか。

補足日時:2005/02/26 21:39
    • good
    • 1
この回答へのお礼

この方法で、処理したいと思います

お礼日時:2005/02/27 08:36

#1,2,3のmatsu_junです。


ご指摘いただくまで知りませんでしたが、シート上のDATE関数については、Excelのバグのようです。
どちらにしても1900年の1月1日を起点(Macの場合は1904年)としていることもありますし、「そんな昔のこと知らないよ」というスタンスなのかもしれませんね。ちなみにVBAではそのような問題は起きないと明言されています。
私自身も勉強になりました。大昔についてはDATE関数は使わないようにします。

参考URL:http://support.microsoft.com/default.aspx?scid=k …
    • good
    • 0
この回答へのお礼

参考URLありがとうございます。

大変よく分かりました。

VBA の WEEKDAY 関数では正しい値が返ります。
とも、書いてありますね。

#4さんの
=IF(OR(MOD(A1,400)=0,AND(MOD(A1,4)=0,MOD(A1,100)<>0)),"うるう年","うるう年ではない")
で判定するように書かれておりましたね。


#3の方法で判定しようと思います。

お礼日時:2005/02/27 08:35

うるう年の定義は「4で割り切れて100で割り切れない年はうるう年である。

または400で割り切れる年はうるう年である。」ということであるとして、A1セルに数値(年)を入れてあるとします。

Sub TEST01()
y = Cells(1, 1).Value
If ((y Mod 4) = 0 And (y Mod 100) <> 0) Or (y Mod 400) = 0 Then
MsgBox y & "年はうるう年です"
Else
MsgBox y & "年はうるう年ではありません。"
End If
End Sub
    • good
    • 0
この回答へのお礼

if文の入れ子にしないとダメかと思っていたのですが
If ((y Mod 4) = 0 And (y Mod 100) <> 0) Or (y Mod 400) = 0 Then

の1文で聞けるんですね。
ありがとうございます

お礼日時:2005/02/26 21:40

#1のmatsu_junです。

失礼しました。VBAでしたね。それならソース中に

Day(CDate("March 1, " & CStr( 西暦 As Integer ) - 1)

の式を入れ、その返り値が29か28かで判別できます。
要するにその年の3月1日の前の日が2月29日なのか28日なのかを見るということです。
    • good
    • 0

A1のセルに西暦を入力して、どこかのセルに以下の式を入力してください。



=IF(DAY(DATE(A1,3,1)-1)=29,"うるう年","うるう年でない")
    • good
    • 0
この回答へのお礼

=IF(DAY(DATE(A1,2,29))=29,"うるう年","うるう年でない")

でも、同じかな。
これは、思いつきました。
が、1900年に対応できないんですよね
(「うるう年」って出ちゃう)

お礼日時:2005/02/26 21:23

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!