回答編集履歴

2

G~I列が数字で入力されていることのチェックを追加

2018/10/08 11:28

投稿

TanakaHiroaki
TanakaHiroaki

スコア1063

test CHANGED
@@ -3,3 +3,81 @@
3
3
  以下のようなチェックで安心できるのではないでしょうか。
4
4
 
5
5
  ・マクロは、生徒の並び順を変えても結果が同じになる
6
+
7
+
8
+
9
+ <解決後追記>
10
+
11
+  論理的に正しいコードでも、数字で入力されていない場合、誤った結果となります。
12
+
13
+  G~I列が数字で入力されていることのチェックを追加してみました。
14
+
15
+ ```VBA
16
+
17
+ Public Function CountFamily(ByVal Grade As Long, ByVal Class As Long) As Long
18
+
19
+
20
+
21
+ Dim i As Long
22
+
23
+ Dim lngDataCnt As Long
24
+
25
+ Dim lngFamilyCnt As Long
26
+
27
+
28
+
29
+ With Worksheets("児童名簿")
30
+
31
+ lngDataCnt = .Range("A1").End(xlDown).Row
32
+
33
+
34
+
35
+ For i = 2 To lngDataCnt
36
+
37
+ If .Cells(i, 1).Value = Grade And .Cells(i, 2).Value = Class Then
38
+
39
+ '数字で入力されていることをチェック
40
+
41
+ If IsNumeric(.Cells(i, 7).Value) And _
42
+
43
+ IsNumeric(.Cells(i, 8).Value) And _
44
+
45
+ IsNumeric(.Cells(i, 9).Value) Then
46
+
47
+
48
+
49
+ If .Cells(i, 7).Value < (Grade * 10 + Class) And _
50
+
51
+ .Cells(i, 8).Value < (Grade * 10 + Class) And _
52
+
53
+ .Cells(i, 9).Value < (Grade * 10 + Class) Then
54
+
55
+ lngFamilyCnt = lngFamilyCnt + 1
56
+
57
+ End If
58
+
59
+ Else
60
+
61
+ MsgBox "数字で入力されていない箇所があります。"
62
+
63
+ CountFamily = -1
64
+
65
+ Exit Function
66
+
67
+ End If
68
+
69
+ End If
70
+
71
+ Next i
72
+
73
+ End With
74
+
75
+
76
+
77
+ CountFamily = lngFamilyCnt
78
+
79
+
80
+
81
+ End Function
82
+
83
+ ```

1

誤った回答の訂正

2018/10/08 11:28

投稿

TanakaHiroaki
TanakaHiroaki

スコア1063

test CHANGED
@@ -2,6 +2,4 @@
2
2
 
3
3
  以下のようなチェックで安心できるのではないでしょうか。
4
4
 
5
-  ①マクロは、生徒の並び順を変えても結果が同じになる
5
+ マクロは、生徒の並び順を変えても結果が同じになる
6
-
7
-  ②合計=A列の数-(G列の数+H列の数+I列の数)÷2