質問するログイン新規登録

回答編集履歴

2

補足説明

2019/09/03 04:49

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -27,4 +27,9 @@
27
27
  nendo = Null
28
28
  End If
29
29
  End Function
30
- ```
30
+ ```
31
+
32
+ n をDate型にするとセルに日付以外に入力されていた場合エラーになります。
33
+ Variant型にしておいてどの型でも許容するようにして、nendo関数側でIsDate関数で日付かどうか判断して分岐処理すればいいでしょう。
34
+
35
+ 年度の求め方としては、If文で月が3以下なら-1するようにするというのが素直な方法だと思いますか、日付を-3か月して年を求めれば年度になるという考え方も式がシンプルになるのでありだと思います。

1

コードの追記

2019/09/03 04:49

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -5,4 +5,26 @@
5
5
 
6
6
  あと、そのコードだとC列の最終行だけが変換されますが、それでいいのかな?
7
7
 
8
- 前行変換したいなら For Next でループ処理するか、m6uさんの回答のように関数を設定するのがいいと思います。
8
+ 前行変換したいなら For Next でループ処理するか、m6uさんの回答のように関数を設定するのがいいと思います。
9
+
10
+ 追記
11
+ ---
12
+ 日付以外が入力されていてもエラーにならないようにするには、下記のコードで。
13
+
14
+ ```vba
15
+ Sub 年度()
16
+ Dim n As Variant, i As Long
17
+
18
+ i = Cells(Rows.Count, "C").End(xlUp).Row
19
+ n = Cells(i, 3)
20
+ Cells(i, 6) = nendo(n, 3)
21
+ End Sub
22
+
23
+ Function nendo(n, x)
24
+ If IsDate(n) Then
25
+ nendo = Year(DateAdd("m", -x, n))
26
+ Else
27
+ nendo = Null
28
+ End If
29
+ End Function
30
+ ```