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

回答編集履歴

2

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

2018/10/08 11:28

投稿

TanakaHiroaki
TanakaHiroaki

スコア1065

answer CHANGED
@@ -1,3 +1,42 @@
1
1
  正確にカウントできていると思います。
2
2
  以下のようなチェックで安心できるのではないでしょうか。
3
- ・マクロは、生徒の並び順を変えても結果が同じになる
3
+ ・マクロは、生徒の並び順を変えても結果が同じになる
4
+
5
+ <解決後追記>
6
+  論理的に正しいコードでも、数字で入力されていない場合、誤った結果となります。
7
+  G~I列が数字で入力されていることのチェックを追加してみました。
8
+ ```VBA
9
+ Public Function CountFamily(ByVal Grade As Long, ByVal Class As Long) As Long
10
+
11
+ Dim i As Long
12
+ Dim lngDataCnt As Long
13
+ Dim lngFamilyCnt As Long
14
+
15
+ With Worksheets("児童名簿")
16
+ lngDataCnt = .Range("A1").End(xlDown).Row
17
+
18
+ For i = 2 To lngDataCnt
19
+ If .Cells(i, 1).Value = Grade And .Cells(i, 2).Value = Class Then
20
+ '数字で入力されていることをチェック
21
+ If IsNumeric(.Cells(i, 7).Value) And _
22
+ IsNumeric(.Cells(i, 8).Value) And _
23
+ IsNumeric(.Cells(i, 9).Value) Then
24
+
25
+ If .Cells(i, 7).Value < (Grade * 10 + Class) And _
26
+ .Cells(i, 8).Value < (Grade * 10 + Class) And _
27
+ .Cells(i, 9).Value < (Grade * 10 + Class) Then
28
+ lngFamilyCnt = lngFamilyCnt + 1
29
+ End If
30
+ Else
31
+ MsgBox "数字で入力されていない箇所があります。"
32
+ CountFamily = -1
33
+ Exit Function
34
+ End If
35
+ End If
36
+ Next i
37
+ End With
38
+
39
+ CountFamily = lngFamilyCnt
40
+
41
+ End Function
42
+ ```

1

誤った回答の訂正

2018/10/08 11:28

投稿

TanakaHiroaki
TanakaHiroaki

スコア1065

answer CHANGED
@@ -1,4 +1,3 @@
1
1
  正確にカウントできていると思います。
2
2
  以下のようなチェックで安心できるのではないでしょうか。
3
-  ①マクロは、生徒の並び順を変えても結果が同じになる
3
+ マクロは、生徒の並び順を変えても結果が同じになる
4
-  ②合計=A列の数-(G列の数+H列の数+I列の数)÷2