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

回答編集履歴

3

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

2019/07/26 12:34

投稿

yokotatsu
yokotatsu

スコア92

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

2019/07/26 12:34

投稿

yokotatsu
yokotatsu

スコア92

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

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

2019/07/26 11:38

投稿

yokotatsu
yokotatsu

スコア92

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