EXCEL VBAで質問させてください。


請求書発行などで、当月16日~翌月15日までの日数の算出が必要となっております。

当月16日のデータ(例:2010/11/16)が、ワークシート(1)のB1セルに
格納されているものとして、翌月15日までの日数をMsg出力するマクロ記述をご教授ください。

どうぞよろしくお願いいたします。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2010/11/16 14:45:19
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答3件)

id:windofjuly No.1

回答回数2625ベストアンサー獲得回数1149

ポイント27pt

いろいろな手順や方法がありますので下記は一例です

下記では、年月を取り出し(year関数、month関数)て、年/翌月/15という形に整形(数学的加算と文字列加算)の後に差(DateDiff関数)を求めるという式になっています

Sub Macro1()
    With Worksheets(1).Range("B1")
        If Not IsDate(.Value) Then
            MsgBox "セルの中身は日付ではありません"
        Else
            MsgBox DateDiff("d", .Value, CDate(Year(.Value) & "/" & Month(.Value) + 1 & "/15"))
        End If
    End With
End Sub

 

同様のことはマクロを使わずともワークシート上でも可能です

(結果が1900/1/29 0:00となってしまう場合はセルの書式設定を「標準」などに変更する必要があります)

=DATEVALUE(IF(MONTH(B1)=12,YEAR(B1)+1&"/1/15",YEAR(B1)&"/"&MONTH(B1)+1&"/15"))-B1
id:kitatom

早速にありがとうございます。いろいろな方法があるのですね、たいへん勉強になりました。

2010/11/16 14:42:43
id:SALINGER No.2

回答回数3454ベストアンサー獲得回数969

ポイント53pt

普通にマクロでやるならこんな感じ。

Sub Macro1()
    Dim myDate As Date
    myDate = Range("B1").Value
    
    MsgBox DateSerial(Year(myDate), Month(myDate) + 1, 1) - myDate + 15
End Sub

確か月の最終日を出す関数があったのでそれを使ってみるとこれだけでいけます。

※分析ツールの関数なのでアドインで分析ツールにチェックが必要。

Sub Macro2()
    MsgBox Evaluate("EOMONTH(B1,0)-B1+16")
End Sub
id:windofjuly No.3

回答回数2625ベストアンサー獲得回数1149

ポイント26pt

回答受付中は「コメント・トラックバックを表示しない」になっているので、2回目の回答で失礼します

回答1では年をまたぐ場合を考慮していない習作のほうを投稿してしまいましたので、ここに訂正いたします

Sub Macro2()
    With Worksheets(1).Range("B1")
        If Not IsDate(.Value) Then
            MsgBox "セルの中身は日付ではありません"
        ElseIf Month(.Value) = 12 Then
            MsgBox DateDiff("d", .Value, CDate(Year(.Value) + 1 & "/1/15"))
        Else
            MsgBox DateDiff("d", .Value, CDate(Year(.Value) & "/" & Month(.Value) + 1 & "/15"))
        End If
    End With
End Sub
id:kitatom

ご回答恐縮です。またブラッシュアップ版も再度投稿していただきましてありがとうございます。たいへん参考になりました。

2010/11/16 14:43:40

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません