プロが教える店舗&オフィスのセキュリティ対策術

4年に一回うるう年がありますが、そのうち100年に1回はうるう年に当ってもうるう年になりません。またこの100年周期のうち、400年に1回はうるう年にります。

これをVBAで書くとどうなるんでしょうか?
頭が混乱してきました。

A 回答 (3件)

つまりは、プログラム言語的な言い方をすれば、うるう年の定義は「4で割り切れて100で割り切れない年はうるう年である。

または400で割り切れる年はうるう年である。」ということでいいすね?

そうであれば仮に、A1セルに調べたい西暦年を数値でいれてあるとして、

Sub URUU()
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 & "年の2月は28日までです"
End If
End Sub

でいいと思います。

うるう年の定義は自分では調べていませんので念のため。
    • good
    • 0
この回答へのお礼

さっそくありがとうございました。
Andや Orなんですね。
勉強になりました。

お礼日時:2004/09/17 17:29

No.2です。



>なぜ西暦の年数を長整数型に変換しているのでしょうか?
ああ、そうですね、DateSerial関数の引数には、整数型(Integer)とヘルプにありますね。
その場合は、

Dim tempYear As Integer

tempYear = CInt(Range("A1").Value)

また、VBAは自動的に型変換してくれるから、

tempYear = Range("A1").Value

でもいいかも知れませんね。
さらに、DateSerial関数の引数に指定した段階で型変換してますしね。
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2004/09/17 19:16

こんにちは。

maruru01です。

質問の主旨とは違うかも知れません。
VBAでは、100~9999年の閏年はすべて組み込まれているので、それを利用する方法があります。
A1に西暦の年数を入力するとして、


Sub Macro()

  Dim tempYear As Long

  tempYear = CLng(Range("A1").Value)
  If Day(DateSerial(tempYear, 2, 29)) = 29 Then
    MsgBox tempYear & "は閏年です。"
  Else
    MsgBox tempYear & "は閏年ではありません。"
  End If

End Sub
    • good
    • 1
この回答へのお礼

ありがとうございました。
VBAにうるう年が組み込まれているんですか、勉強になりました。


ところで CLng とは見たことが無かったので今調べましたら長整数型とのことでしたが、なぜ西暦の年数を長整数型に変換しているのでしょうか?

お礼日時:2004/09/17 17:41

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