Excel VBA質問箱 IV

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

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


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

【44316】ユーザ定義関数について ねもと 06/11/13(月) 11:24 質問[未読]
【44318】Re:ユーザ定義関数について Blue 06/11/13(月) 11:54 発言[未読]
【44321】Re:ユーザ定義関数について ねもと 06/11/13(月) 12:05 質問[未読]
【44323】Re:ユーザ定義関数について Blue 06/11/13(月) 12:31 質問[未読]
【44328】Re:ユーザ定義関数について ねもと 06/11/13(月) 13:42 質問[未読]
【44330】Re:ユーザ定義関数について Blue 06/11/13(月) 13:52 回答[未読]
【44331】Re:ユーザ定義関数について Blue 06/11/13(月) 14:02 発言[未読]
【44334】Re:ユーザ定義関数について ねもと 06/11/13(月) 14:59 お礼[未読]

【44316】ユーザ定義関数について
質問  ねもと  - 06/11/13(月) 11:24 -

引用なし
パスワード
   ユーザ定義関数を作成したんですけど関数の一覧にも出てきませんし、シート上に
し下記のDateAdd3を使用してもエラーになります。
下記の関数ではだめなのでしょうか?
初心者なので本当に申し訳ありませんがよろしくお願いします。

Function DateAdd3(V As Integer, D As Date) As Date
Dim Date1 As Date
Dim Date2 As Date
If V = 32 Then
Date1 = DateAdd("M", 2, DateValue(D))
Date2 = Year(Data1) & "/" & Month(Date2) & "/01"
DateAdd3 = DateAdd("D", -1, Date2)
Else
DateAdd3 = DateAdd("M", 1, DateValue(D))
End If
End Function

【44318】Re:ユーザ定義関数について
発言  Blue  - 06/11/13(月) 11:54 -

引用なし
パスワード
   ▼ねもと さん:
>下記の関数ではだめなのでしょうか?
これって間違っていないでしょうか?

>Date2 = Year(Data1) & "/" & Month(Date2) & "/01"
Data1 ではなく、 Date1 なのでは?

Date2 = Year(Date1) & "/" & Month(Date2) & "/01"

とりあえず、この関数をどこに記述しているのか、セルにどんな値を入れているのか不明なので
適切なアドバイスをすることは難しいです。
(ということなので、これらは再度質問時に明記してください)

私が上記の関数を標準モジュールを追加してそこにコピペして(Date1に直して)、
適当にSheet1のA1のセルに =DateAdd3(1,NOW()) と入力したところ
ちゃんと値が出てきましたけど。(関数が正しいかどうかは知らない)

>ユーザ定義関数を作成したんですけど関数の一覧にも出てきませんし、
ちなみに、ユーザ定義関数は一覧にはでてこなかったと思います。

【44321】Re:ユーザ定義関数について
質問  ねもと  - 06/11/13(月) 12:05 -

引用なし
パスワード
   ▼Blue さん:
ありがとうございます。
指摘のとおりData1です。
この関数は、セルに約定日を入力した場合翌月の約定日を算出したいのです。
DateAddで翌月、翌月で算出した場合、月末のとき
1月は31日、2月は28日、3月は28日になってしまいます。
下記のモジュールで作成して32を入力した場合は月末日を算出したいのです。
32を入力したらエラーになると思います。
よろしくお願いします。


>▼ねもと さん:
>>下記の関数ではだめなのでしょうか?
>これって間違っていないでしょうか?
>
>>Date2 = Year(Data1) & "/" & Month(Date2) & "/01"
>Data1 ではなく、 Date1 なのでは?
>
>Date2 = Year(Date1) & "/" & Month(Date2) & "/01"
>
>とりあえず、この関数をどこに記述しているのか、セルにどんな値を入れているのか不明なので
>適切なアドバイスをすることは難しいです。
>(ということなので、これらは再度質問時に明記してください)
>
>私が上記の関数を標準モジュールを追加してそこにコピペして(Date1に直して)、
>適当にSheet1のA1のセルに =DateAdd3(1,NOW()) と入力したところ
>ちゃんと値が出てきましたけど。(関数が正しいかどうかは知らない)
>
>>ユーザ定義関数を作成したんですけど関数の一覧にも出てきませんし、
>ちなみに、ユーザ定義関数は一覧にはでてこなかったと思います。

【44323】Re:ユーザ定義関数について
質問  Blue  - 06/11/13(月) 12:31 -

引用なし
パスワード
   ▼ねもと さん:
>指摘のとおりData1です。
Date1ですよね?

>下記のモジュールで作成して32を入力した場合は月末日を算出したいのです。
>32を入力したらエラーになると思います。
32だけ入力されても何月なのか不明だと思うのですが。

結局どんな値を入力して、どんな値を取得したいのか明確化してくれませんか?


それと、
>
からはじまる引用文ですが、自分の返信の際には必要分だけ引用してください。
意味ない部分をやたら引用しないほうがいいです。
私のように、話に関係ありそうな箇所だけ残しておくようにしましょう。
(余分なリソース(容量)を使ってしまいますので)

【44328】Re:ユーザ定義関数について
質問  ねもと  - 06/11/13(月) 13:42 -

引用なし
パスワード
   ▼Blue さん:
ありがとうございます。
Vに32が入力されたときDの翌月の月末日を算出したいのです。
たとえばVが32以外の場合はDの翌月が算出されます。
Dは日付なのでVが28でDがH17.11.28の場合
関数の値はH17.12.28になります。
Vが32の場合でDがH18.2.28の場合は
関数の値はH18.3.31にしたいのです。
下記のモジュールでは、32以外の場合は正常な値が帰ってきますが、
32のときはエラーになります。
Function DateAdd3(V As Integer, D As Date) As Date
Dim Date1 As Date
Dim Date2 As Date
If V = 32 Then
Date1 = DateAdd("M", 2, DateValue(D))
Date2 = Year(Data1) & "/" & Month(Data1) & "/01"
DateAdd3 = DateAdd("D", -1, Date2)
Else
DateAdd3 = DateAdd("M", 1, DateValue(D))
End If
End Function
よろしくお願いします。

【44330】Re:ユーザ定義関数について
回答  Blue  - 06/11/13(月) 13:52 -

引用なし
パスワード
   ということは
>If V = 32 Then
>Date1 = DateAdd("M", 2, DateValue(D))
>Date2 = Year(Data1) & "/" & Month(Data1) & "/01"
>DateAdd3 = DateAdd("D", -1, Date2)
が問題なんでしょう。

というか、
>Date2 = Year(Data1) & "/" & Month(Data1) & "/01
も、Data1→Date1 の間違いなのでは?

こういう間違いをしないように標準モジュールの先頭に

Option Explicit

を入れておきましょう。

Dim 〜

等で変数宣言されていない変数名を使うと実行時にエラーが発生し、
記述違いしていることがわかります。

【44331】Re:ユーザ定義関数について
発言  Blue  - 06/11/13(月) 14:02 -

引用なし
パスワード
   私ならこんな感じですかね。
(DateSerialは意外と賢いです。)

Option Explicit

Public Function DateAdd3(ByVal V As Integer, ByVal D As Date) As Date
  Dim date1 As Date
  
  If V = 32 Then
    date1 = DateSerial(Year(D), Month(D) + 2, 1)
    DateAdd3 = DateAdd("D", -1, date1)
  Else
    DateAdd3 = DateAdd("M", 1, D)
  End If
End Function


ちなみに
>Dは日付なのでVが28でDがH17.11.28の場合
>関数の値はH17.12.28になります。
のパターンのとき、

V が 28 で
D が H17.11.13

ってパターンはありえないでしょうか?
このときにどう出力するかによって、Else文を変える必要があるかも。

【44334】Re:ユーザ定義関数について
お礼  ねもと  - 06/11/13(月) 14:59 -

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

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