Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


6393 / 13644 ツリー ←次へ | 前へ→

【45458】うるう年の判定 URA 06/12/25(月) 16:00 質問[未読]
【45459】Re:うるう年の判定 Blue 06/12/25(月) 16:09 質問[未読]
【45460】Re:うるう年の判定 URA 06/12/25(月) 16:12 回答[未読]
【45461】Re:うるう年の判定 Blue 06/12/25(月) 16:19 回答[未読]
【45462】Re:うるう年の判定 かみちゃん 06/12/25(月) 16:22 発言[未読]
【45463】Re:うるう年の判定 りん 06/12/25(月) 16:26 回答[未読]

【45458】うるう年の判定
質問  URA  - 06/12/25(月) 16:00 -

引用なし
パスワード
   かなり定番な質問なのですが、よろしければご質問にお答えください。
OS XP
Excel 2003


1900年から2006年までのうるう年を判定するプログラムを作成する。
うるう年は次のように判定する。西暦が4で割り切れかつ、100で割り切れない
年、または400で割り切れる年がうるう年である。

↓まではできたのですが、一気に表示することができなくて困っております。
Dim y As Integer
  For y = 1900 to 2006
  If (y mod 400) =0 Then

   ElseIf(y mod 100) =0 Then
   Else If(y mod 4) =0 Then
 
   MsgBox y
  End If
  Next

End Sub

【45459】Re:うるう年の判定
質問  Blue  - 06/12/25(月) 16:09 -

引用なし
パスワード
     >一気に表示することができなくて
とはどんなことを望んでいるのでしょうか?

1904
1908
・・・・・・
2004


とMsgBoxで表示させたいのでしょうか?
(カナリ縦長(もしくは横長)になってしまうと思いますが。)

【45460】Re:うるう年の判定
回答  URA  - 06/12/25(月) 16:12 -

引用なし
パスワード
   ▼Blue さん:
>  >一気に表示することができなくて
>とはどんなことを望んでいるのでしょうか?
>
>1904
>1908
>・・・・・・
>2004
>
>
>とMsgBoxで表示させたいのでしょうか?
>(カナリ縦長(もしくは横長)になってしまうと思いますが。)

舌足らずですみませんでした。1900年から2006年までに含まれる
うるう年をMsgBoxで一気に表示するということです(かなり縦長or横長になることはまちがいなさそうですが・・・)

上に書いたプログラムだとひとつづつでしか表示できないんですよね。

Blueさん
早速のレスありがとうございます

【45461】Re:うるう年の判定
回答  Blue  - 06/12/25(月) 16:19 -

引用なし
パスワード
   ループの中で1つずつMsgBox関数を呼ぶとそうなります。
MsgBox関数で表示する文字列をループの中でためてゆき、ループの外で
その文字列をMsgBoxで表示するようにすればよいです。

例)
Dim s As String
Dim i As Long

For i = 1 To 10
  s = s & vbCrLf & i
Next
MsgBox s

ちなみに、その閏年判定ロジック間違っていませんか?
2000年は閏年ですけど、該当していません。

【45462】Re:うるう年の判定
発言  かみちゃん  - 06/12/25(月) 16:22 -

引用なし
パスワード
   こんにちは。かみちゃん です。

横から失礼します。

>うるう年をMsgBoxで一気に表示するということです

MsgBox に表示するには、限界があると思いますが、以下のような感じでできます。
アクティブシートのA1を先頭に各年ごとの2月末日の日をB列に表示して、
最後にうるう年の年をMsgBox表示しています。
なお、うるう年かどうかは、各年の3月0日で前月の末日を取得することで判断
しています。

Sub Test()
 Dim yyyy As Integer
 Dim y As Integer
 Dim strYYYY As String
 
 yyyy = Year(Date)
 ReDim vntResult(1 To yyyy - 1900 + 1, 1 To 2)
 
 For y = 1900 To yyyy
  vntResult(y - 1899, 1) = y
  vntResult(y - 1899, 2) = Day(DateSerial(y, 3, 0))
  If Day(DateSerial(y, 3, 0)) = 29 Then
   strYYYY = strYYYY & y & vbCrLf
  End If
 Next
 Range("A1").Resize(y - 1900, 2).Value = vntResult
 MsgBox "うるう年は" & vbCrLf & strYYYY
End Sub

【45463】Re:うるう年の判定
回答  りん E-MAIL  - 06/12/25(月) 16:26 -

引用なし
パスワード
   URA さん、こんにちわ。

>かなり定番な質問なのですが、よろしければご質問にお答えください。
>OS XP
>Excel 2003

邪道かもしれませんが、うるう年かどうか知りたいだけならこんな感じ。

Sub test()
  Dim yy As Integer, msg As String
  For yy = 1900 To 2006
   Select Case Day(DateSerial(yy, 3, 1) - 1) '3月1日の前日
     Case 28
      msg = "通常"
     Case 29
      msg = "うるう年"
   End Select
   MsgBox msg, vbInformation, yy & "年は"
  Next
End Sub

条件で分岐するならば。
>西暦が4で割り切れかつ、100で割り切れない年、
>または400で割り切れる年がうるう年である。
  tf = False
  If (YY Mod 4 = 0) Then '4で割れる
   '400で割れるか100で割れない
   If (YY Mod 400 = 0) Or (YY Mod 100 <> 0) Then
     tf = True
   End If
  End If
  '
  If tf = True Then
   MsgBox "うるう年"
  Else
   MsgBox "通常"
  End If

こんな分岐ですかね。

6393 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free