[[20081017135138]] 『年度のVBA記述は?』(万年太郎) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『年度のVBA記述は?』(万年太郎)
 3月締め4月始まりの年度内の数え月数を変数として利用するVBAを考えており、
[[20080715123945]] を参考にして下記のサンプルプログラムを作ったのですが、
 「オブジェクトはこのプロパティまたはメソッドをサポートしていません」と
エラーメッセージが出てしまいます。どこに問題があるのでしょうか?
     A
1   2007/8
2   2007/9
3   2007/10
4   2007/11
5   2007/12
6   2008/1
7   2008/2
8   2008/3
9   2008/4
10  2008/5
11  2008/6
12  2008/7
13  2008/8
14  2008/9
15  2008/10
16  2008/11
17  2008/12
18  2009/1
19  2009/2
20  2009/3

 Sub 月数表示テスト()
  Dim i, y, LrA As Integer

  LrA = Range("A65536").End(xlUp).Row 

  For i = 1 To LrA
   y = Application.Date(Year(Range("A" & i)), Month(Range("A" & i)) - 3, 1)
   Cells(i, 3).Value = y
  Next i
End Sub

WInXp,EXcel2003


 >どこに問題があるのでしょうか

 1.引用されたトピックとは、A列のデータ型が異なります。あちらはシリアル値です。
   
 2.Date関数は、VBAとワークシート関数とでは意味が違います。

 3.あちらの解決は最終的にシリアル値にして、「書式で年を表示」するものです。
     こちらの方もそれでいいのですか?

 (半平太)


 つまり、データ型を統一する必要があるわけですね?y=整数(1〜12)を求める為にはVBAでは
どういう記述をすればいいか、試行錯誤しているのですが、うまくいきません。
例えば 
 y = Format(Year(Range("A" & i)), Month(Range("A" & i)) - 2, 1) とやってみましたが、
 
     A   C
1    2008/3 2008
2    2008/4  1
3	2008/5	2
4	2008/6	3
5	2008/7	4
6	2008/8	5
7	2008/9	6
8	2008/10	7
9	2008/11	8
10	2008/12	9
11	2009/1	-2
12	2009/2	-1
13	2009/3	2009
14	2009/4	1
15	2009/5	2
16	2009/6	3
17	2009/7	4
18	2009/8	5
19	2009/9	6
20	2009/10	7
21	2009/11	8
22	2009/12	9
23	2010/1	-2
24	2010/2	-1
25	2010/3	2010

 と想定外の数値が出てしまうのです。(-1,-2,2008,2009,2010)
 (万年太郎)


 A列に/1を付け足して、2008/3/1という日付に直してしまえば良いのではないですか。
 ところでA列にはどのようにして入力していますか。

 (川野鮎太郎)

 今、/1とやってみたのですが、結果は先程と同じです。
@A列は2008/10/1 と入力する
AA列を全部選択する
Bマウスを右クリック→セルの書式設定→表示形式→ユーザー定義→種類(T)yyyy/mm/dd で
設定していますが、間違っていますか?

 (><)(万年太郎)


 >A列は2008/10/1 と入力する
 あれっ! すみません、それじゃ、同じシリアル値ですね (^^ゞ

 なら、これで
    ↓
 Sub 月数表示テスト()
  Dim i, y, LrA As Integer

  LrA = Range("A65536").End(xlUp).Row

  For i = 1 To LrA
        y = Year(DateAdd("M", -3, Range("A" & i).Value))
     Cells(i, 3).Value = y
  Next i

 End Sub

 (半平太)


 衝突しました。

 ってことは、元々シリアル値になっているってことですね。(^_^A;
 では、
If Month(Range("A" & i)) < 4 Then
    y = Month(Range("A" & i)) + 12 - 3
Else
    y = Month(Range("A" & i)) - 2
End If

 でいけますか。

 (川野鮎太郎)

 川野さんの事例を修正して
If Month(Range("A" & i)) < 4 Then
    y = Month(Range("A" & i)) + 12 - 3
Else
    y = Month(Range("A" & i)) - 3
End If

 とやったら、こちらの期待通りの結果が出ました。川野さんの事例だったら
年度に左右されずにすみますね。今回で得られたy、という変数を手かがりに
来週、計算するルーチン作成にチャレンジしてみます。
半平太さん、川野さんありがとうございます。m(_ _)m m(_ _)m
 (万年太郎)

 あれー、月数だったのですね。すっかり引用されたトピックと同じだと思っていました。
 今さらですが、、

  y = Year(DateAdd("M", -3, Range("A" & i).Value))
     ↑
    Month へ変更 

 (半平太)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.