Excel VBA質問箱 IV

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

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


3196 / 13646 ツリー ←次へ | 前へ→

【63639】1日からの日付を表示したい かつこ 09/11/23(月) 21:19 質問[未読]
【63640】Re:1日からの日付を表示したい よろずや 09/11/23(月) 21:43 回答[未読]
【63641】Re:1日からの日付を表示したい ichinose 09/11/24(火) 6:56 発言[未読]

【63639】1日からの日付を表示したい
質問  かつこ  - 09/11/23(月) 21:19 -

引用なし
パスワード
   日程表を作成中です。

以下のコードでは日付が表示されません。
(Loop〜 構文がよく理解できていません)

条件設定用シートに開始セル位置(B2)、年月(2009.12)が入力してあります。
そして、その条件をチェックするコードのあります。

よろしくお願いします。


Public Function MonthLastDay(yy As Integer, mm As Integer) As Integer
  Dim i As Integer
  Dim tdate As Date
  
  tdate = Format(yy & "/" & mm & "/1", "yyyy/mm/dd")
  i = 28
  Do
    i = i + 1
  Loop Until Day(tdate + i - 1) = 1
  MonthLastDay = i - 1
End Function

【63640】Re:1日からの日付を表示したい
回答  よろずや  - 09/11/23(月) 21:43 -

引用なし
パスワード
   月末の日付を求めたいなら
DateSerial(year, month + 1, 0)

【63641】Re:1日からの日付を表示したい
発言  ichinose  - 09/11/24(火) 6:56 -

引用なし
パスワード
   おはようございます。
その月の末日を求めたいなら、よろずやさんの方法で解決されるはずですが・・・。

かつこさんが投稿された下記のコードだって、正常に作動はします。

>Public Function MonthLastDay(yy As Integer, mm As Integer) As Integer
>  Dim i As Integer
>  Dim tdate As Date
>  
>  tdate = Format(yy & "/" & mm & "/1", "yyyy/mm/dd")
>  i = 28
>  Do
>    i = i + 1
>  Loop Until Day(tdate + i - 1) = 1
>  MonthLastDay = i - 1
>End Function

Sub test()
  Dim mm As Integer
  Dim yy As Integer
  For yy = 8 To 9
   For mm = 1 To 12
     Debug.Print yy & "年" & mm & "月の末尾は、" & MonthLastDay(yy, mm) & " 日です"
   Next
  Next
End Sub

上記のtestを実行すると、イミディエイトウインドーに正常な結果が表示されます。
(VBEにて、Ctrl+Gキーで、イミディエイトウインドーが表示されます)


問題は、

>開始セル位置(B2)、年月(2009.12)が入力してあります。

ここですか?

このセルB2に入力されている内容から、年と月を取り出すことができない

ということでしょうか?

Sub test1()
  Dim dd As Variant
  dd = Split(Range("b2").Text, ".")
  MsgBox MonthLastDay(Mid(dd(0), 2, 2), dd(1))
End Sub
'====================================================================
Public Function MonthLastDay(ByVal yy As Integer, ByVal mm As Integer) As Integer
'上記のパラメータを ByVal (値渡し)にしました
>  Dim i As Integer
>  Dim tdate As Date
>  
>  tdate = Format(yy & "/" & mm & "/1", "yyyy/mm/dd")
>  i = 28
>  Do
>    i = i + 1
>  Loop Until Day(tdate + i - 1) = 1
>  MonthLastDay = i - 1
>End Function

繰り返しますが、末日を求めるならよろずやさんの方法が簡単だと思いますが、
今回は、それ以前に問題があるような気がしたので・・・。

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