Excel VBA質問箱 IV

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

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


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

【44338】日付の算出について ねもと 06/11/13(月) 16:39 質問[未読]
【44339】Re:日付の算出について Blue 06/11/13(月) 16:47 質問[未読]
【44343】Re:日付の算出について ねもと 06/11/13(月) 17:17 質問[未読]
【44347】Re:日付の算出について Blue 06/11/13(月) 17:37 回答[未読]
【44340】Re:日付の算出について inoue 06/11/13(月) 16:50 発言[未読]
【44344】Re:日付の算出について ねもと 06/11/13(月) 17:21 質問[未読]
【44364】Re:日付の算出について りん@昼休み 06/11/14(火) 13:05 発言[未読]
【44369】できました。 ねもと 06/11/14(火) 14:42 お礼[未読]
【44370】Re:できました。 Blue 06/11/14(火) 14:57 質問[未読]

【44338】日付の算出について
質問  ねもと  - 06/11/13(月) 16:39 -

引用なし
パスワード
   ユーザ定義関数で日付を算出したいのですがどうすればいいでしょうか?
DateAddなのでがんばっているのですがなかなかうまくいきません。
下記のデータがあるのですがどのように作成すればいいのでしょうか?
よろしくお願いします。
  貸出日     返済日
H17.2.1    30
貸出日と返済日を入力して返済予定を作成します。
結果としては

完済予定日
H17.2.28
H17.3.30
H17.4.30
H17.5.30

  貸出日     返済日
H17.2.1    31(月末日を意味します)
結果としては
完済予定日
H17.2.28
H17.3.31
H17.4.30
H17.5.31

H  貸出日     返済日
H17.2.1    28
結果としては
完済予定日
H17.2.28
H17.3.28
H17.4.28
H17.5.28

【44339】Re:日付の算出について
質問  Blue  - 06/11/13(月) 16:47 -

引用なし
パスワード
   >H17.2.1    30
>結果としては
>
>完済予定日
>H17.2.28
>H17.3.30
>H17.4.30
>H17.5.30
入力が1つに対して4つの結果が出力されるのでしょうか?

それとも
H17.2.1   30 → H17.2.28
H17.3.1   30 → H17.3.30
H17.4.1   30 → H17.4.30
H17.5.1   30 → H17.5.30
という意味合いでしょうか?

【44340】Re:日付の算出について
発言  inoue E-MAIL  - 06/11/13(月) 16:50 -

引用なし
パスワード
   >  貸出日     返済日
>H17.2.1    30
>完済予定日
>H17.2.28
>H17.3.30
>H17.4.30
>H17.5.30
例示を見ているだけなので仕様は分かりませんが
DateSerial関数で一旦返済日の日付を作り上げ、
返された日付の月が異なる場合は、返された日付の年月の「1日」の前日と
すれば良いのではないでしょうか。

【44343】Re:日付の算出について
質問  ねもと  - 06/11/13(月) 17:17 -

引用なし
パスワード
   ▼Blue さん:
いつもいつもありがございます。
結果は
ひとつです。
H17.2.1   30 → H17.2.28
H17.3.1   30 → H17.3.30
H17.4.1   30 → H17.4.30
H17.5.1   30 → H17.5.30
と言う意味です。

【44344】Re:日付の算出について
質問  ねもと  - 06/11/13(月) 17:21 -

引用なし
パスワード
   ▼inoue さん:
ありがとうございます。
大変申し訳ないのですが
DateSerial関数はどのようなものですか?
関数の中にはありませんでした。
よろしくお願いします。

【44347】Re:日付の算出について
回答  Blue  - 06/11/13(月) 17:37 -

引用なし
パスワード
   ならば、先の関数を応用すれば出来ますね。

1.まず、もらった月の末日を取得
2.指定された日付と比べて、小さいほうを採用

という感じですか。

Option Explicit

Public Function GetMonthEnd(ByVal targetDate As Date, ByVal endDay As Integer) As Date
  Dim endDate As Date
 
  ' 月の末日を取得
  endDate = DateSerial(Year(targetDate), Month(targetDate) + 1, 1)
  endDate = DateAdd("D", -1, endDate)

  ' 渡された値と比較
  If Day(endDate) <= endDay Then
    GetMonthEnd = endDate
  Else
    GetMonthEnd = DateSerial(Year(targetDate), Month(targetDate), endDay)
  End If
End Function

使い方は

=GetMonthEnd(日付, 最終日)

【44364】Re:日付の算出について
発言  りん@昼休み  - 06/11/14(火) 13:05 -

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

>  貸出日     返済日
>H17.2.1    30
>貸出日と返済日を入力して返済予定を作成します。
>結果としては
>
>完済予定日
>H17.2.28
>H17.3.30
>H17.4.30
>H17.5.30

 セルB2に貸出日(数値)
 セルC2に返済日(数値)
A列に回数(数値)が入っているとして、
A4が1のとき(1回目)B4の数式を
=DATE(YEAR($B$2),MONTH($B$2)+A4-1,MIN(DAY(DATE(YEAR($B$2),MONTH($B$2)+A4,DAY($B$2))-1),$C$2))

とし、以下コピペ。

↓シートのイメージ
A列    B列    C列
    貸出日    返済日
    H17.2.1    31
        
1    H17.2.28(実際は数式)
2    H17.3.31(実際は数式)    
3    H17.4.30(実際は数式)
4    H17.5.31(実際は数式)

【44369】できました。
お礼  ねもと  - 06/11/14(火) 14:42 -

引用なし
パスワード
   みなさんありがとうございました。
また何かありましたらよろしくお願いします。

【44370】Re:できました。
質問  Blue  - 06/11/14(火) 14:57 -

引用なし
パスワード
   ▼ねもと さん:
>みなさんありがとうございました。
>また何かありましたらよろしくお願いします。
どのようにして解決したのでしょうか?

掲示板を利用させてもらっている以上、その末路を書くべきです。

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