回答編集履歴

3

バグがあったので修正します。"学習"でない結合セルの直前行のセルが"学習"の時、学習でないセルを学習としてカウントしていました。

2019/07/26 12:34

投稿

yokotatsu
yokotatsu

スコア92

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を追記しました。これはなくても問題ありませんが、明示的に記述したほうが良いためです。

2019/07/26 12:34

投稿

yokotatsu
yokotatsu

スコア92

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

コメントを追記しました。

2019/07/26 11:38

投稿

yokotatsu
yokotatsu

スコア92

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
+ 結合セルを扱うとマクロの難易度が一気に上がります。見た目を重視したいのはわかりますが、結合セルにする強い理由がないなら、結合セルは(マクロが上達する迄は)使わないことをお勧めします。