人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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

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

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


●質問者: kitatom
●カテゴリ:コンピュータ
✍キーワード:Excel VBA セル データ マクロ
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● うぃんど
●27ポイント

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

下記では、年月を取り出し(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
◎質問者からの返答

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


2 ● SALINGER
●53ポイント

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

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

3 ● うぃんど
●26ポイント

回答受付中は「コメント・トラックバックを表示しない」になっているので、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
◎質問者からの返答

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ