回答編集履歴
3
バグがあったので修正します。"学習"でない結合セルの直前行のセルが"学習"の時、学習でないセルを学習としてカウントしていました。
answer
CHANGED
@@ -24,7 +24,15 @@
|
|
24
24
|
prev = True
|
25
25
|
GoTo END99
|
26
26
|
Else
|
27
|
+
Dim addr As String
|
28
|
+
Dim pos As Variant
|
29
|
+
Dim wlen As Long
|
30
|
+
Dim start_row As Long
|
31
|
+
addr = Cells(wrow, col).MergeArea.Item(1).Address
|
32
|
+
pos = InStrRev(addr, "$")
|
33
|
+
wlen = Len(addr) - pos
|
34
|
+
start_row = CLng(Right(addr, wlen))
|
27
|
-
If Cells(wrow, col).MergeCells = True And prev = True Then
|
35
|
+
If start_row <> wrow And Cells(wrow, col).MergeCells = True And prev = True Then
|
28
36
|
ctr = ctr + 1
|
29
37
|
GoTo END99
|
30
38
|
End If
|
2
prev = Falseを追記しました。これはなくても問題ありませんが、明示的に記述したほうが良いためです。
answer
CHANGED
@@ -17,6 +17,7 @@
|
|
17
17
|
Dim ctr As Long
|
18
18
|
Dim prev As Boolean
|
19
19
|
ctr = 0
|
20
|
+
prev = False
|
20
21
|
For wrow = 5 To 42
|
21
22
|
If Cells(wrow, col).Value = "学習" Then
|
22
23
|
ctr = ctr + 1
|
1
コメントを追記しました。
answer
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
検索範囲の行は5行から42行とします。
|
2
2
|
Private Sub GakuCount(ByVal col As Long)が指定列の「学習」のセル数をカウントします。
|
3
|
+
考え方は、以下のようになります。
|
4
|
+
このセルの値が"学習"なら、1カウントアップする。そうでないなら、このセルが結合セルでかつ前の行が"学習"なら、1カウントアップする。上記の2条件以外は、カウントアップしない。(結合セルが先頭が"学習"なら、その範囲の行は全て"学習"として扱う)
|
3
5
|
これを、3列から7列まで繰り返します(月~金迄)
|
4
6
|
```VBA
|
5
7
|
Public Sub 学習カウント()
|
@@ -31,5 +33,5 @@
|
|
31
33
|
Next
|
32
34
|
Cells(43, col).Value = ctr
|
33
35
|
End Sub
|
34
|
-
|
35
|
-
```
|
36
|
+
```
|
37
|
+
結合セルを扱うとマクロの難易度が一気に上がります。見た目を重視したいのはわかりますが、結合セルにする強い理由がないなら、結合セルは(マクロが上達する迄は)使わないことをお勧めします。
|