回答編集履歴

2

補足説明

2019/09/03 04:49

投稿

hatena19
hatena19

スコア34347

test CHANGED
@@ -57,3 +57,13 @@
57
57
  End Function
58
58
 
59
59
  ```
60
+
61
+
62
+
63
+ n をDate型にするとセルに日付以外に入力されていた場合エラーになります。
64
+
65
+ Variant型にしておいてどの型でも許容するようにして、nendo関数側でIsDate関数で日付かどうか判断して分岐処理すればいいでしょう。
66
+
67
+
68
+
69
+ 年度の求め方としては、If文で月が3以下なら-1するようにするというのが素直な方法だと思いますか、日付を-3か月して年を求めれば年度になるという考え方も式がシンプルになるのでありだと思います。

1

コードの追記

2019/09/03 04:49

投稿

hatena19
hatena19

スコア34347

test CHANGED
@@ -13,3 +13,47 @@
13
13
 
14
14
 
15
15
  前行変換したいなら For Next でループ処理するか、m6uさんの回答のように関数を設定するのがいいと思います。
16
+
17
+
18
+
19
+ 追記
20
+
21
+ ---
22
+
23
+ 日付以外が入力されていてもエラーにならないようにするには、下記のコードで。
24
+
25
+
26
+
27
+ ```vba
28
+
29
+ Sub 年度()
30
+
31
+ Dim n As Variant, i As Long
32
+
33
+
34
+
35
+ i = Cells(Rows.Count, "C").End(xlUp).Row
36
+
37
+ n = Cells(i, 3)
38
+
39
+ Cells(i, 6) = nendo(n, 3)
40
+
41
+ End Sub
42
+
43
+
44
+
45
+ Function nendo(n, x)
46
+
47
+ If IsDate(n) Then
48
+
49
+ nendo = Year(DateAdd("m", -x, n))
50
+
51
+ Else
52
+
53
+ nendo = Null
54
+
55
+ End If
56
+
57
+ End Function
58
+
59
+ ```