回答編集履歴
3
バグがあったので修正します。"学習"でない結合セルの直前行のセルが"学習"の時、学習でないセルを学習としてカウントしていました。
test
CHANGED
@@ -50,7 +50,23 @@
|
|
50
50
|
|
51
51
|
Else
|
52
52
|
|
53
|
+
Dim addr As String
|
54
|
+
|
55
|
+
Dim pos As Variant
|
56
|
+
|
57
|
+
Dim wlen As Long
|
58
|
+
|
59
|
+
Dim start_row As Long
|
60
|
+
|
61
|
+
addr = Cells(wrow, col).MergeArea.Item(1).Address
|
62
|
+
|
63
|
+
pos = InStrRev(addr, "$")
|
64
|
+
|
65
|
+
wlen = Len(addr) - pos
|
66
|
+
|
67
|
+
start_row = CLng(Right(addr, wlen))
|
68
|
+
|
53
|
-
If Cells(wrow, col).MergeCells = True And prev = True Then
|
69
|
+
If start_row <> wrow And Cells(wrow, col).MergeCells = True And prev = True Then
|
54
70
|
|
55
71
|
ctr = ctr + 1
|
56
72
|
|
2
prev = Falseを追記しました。これはなくても問題ありませんが、明示的に記述したほうが良いためです。
test
CHANGED
@@ -36,6 +36,8 @@
|
|
36
36
|
|
37
37
|
ctr = 0
|
38
38
|
|
39
|
+
prev = False
|
40
|
+
|
39
41
|
For wrow = 5 To 42
|
40
42
|
|
41
43
|
If Cells(wrow, col).Value = "学習" Then
|
1
コメントを追記しました。
test
CHANGED
@@ -1,6 +1,10 @@
|
|
1
1
|
検索範囲の行は5行から42行とします。
|
2
2
|
|
3
3
|
Private Sub GakuCount(ByVal col As Long)が指定列の「学習」のセル数をカウントします。
|
4
|
+
|
5
|
+
考え方は、以下のようになります。
|
6
|
+
|
7
|
+
このセルの値が"学習"なら、1カウントアップする。そうでないなら、このセルが結合セルでかつ前の行が"学習"なら、1カウントアップする。上記の2条件以外は、カウントアップしない。(結合セルが先頭が"学習"なら、その範囲の行は全て"学習"として扱う)
|
4
8
|
|
5
9
|
これを、3列から7列まで繰り返します(月~金迄)
|
6
10
|
|
@@ -64,6 +68,6 @@
|
|
64
68
|
|
65
69
|
End Sub
|
66
70
|
|
71
|
+
```
|
67
72
|
|
68
|
-
|
69
|
-
|
73
|
+
結合セルを扱うとマクロの難易度が一気に上がります。見た目を重視したいのはわかりますが、結合セルにする強い理由がないなら、結合セルは(マクロが上達する迄は)使わないことをお勧めします。
|