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

回答編集履歴

2

説明追記

2020/05/30 01:32

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -13,4 +13,48 @@
13
13
  numID = xRng.Offset(0, -7).Value '編集シートのB列
14
14
 
15
15
  '後略
16
- ```
16
+ ```
17
+
18
+ 解説
19
+ ---
20
+ > 元のコードと一見同じ内容に見えるので、なぜ動くようになったのか。。
21
+ もしよろしければご教示いただけないでしょうか。
22
+
23
+
24
+ 修正前
25
+ ```vba
26
+
27
+ If xRngs Is Nothing Then '編集されたセルがなければ、
28
+ Exit Sub 'End Sub まで跳ぶ = これ以降のコードは実行されない
29
+
30
+ For Each xRng In xRngs
31
+ ....
32
+ Next xRng
33
+ End If
34
+
35
+ Application.ScreenUpdating = True
36
+
37
+ End Sub
38
+ ```
39
+
40
+ つまり、
41
+ I列で編集がなければ、End Sub まで跳んでしまい`Application.ScreenUpdating = True`が実行されないので`Application.ScreenUpdating`はFalseのままで画面が更新されない。
42
+ I列で編集があれば、End If まで跳ぶので、End If の前の処理(`For Each ... Next`)は実行されない。
43
+ 結局、どちらにしても`For Each ... Next` の処理は実行されない。
44
+
45
+ 修正後
46
+ ```vba
47
+ If Not xRngs Is Nothing Then '※編集セルがNothingでない=編集セルが存在すれば、以下実行
48
+
49
+ For Each xRng In xRngs
50
+ ....
51
+ Next xRng
52
+ End If
53
+
54
+ Application.ScreenUpdating = True
55
+
56
+ End Sub
57
+ ```
58
+
59
+ 編集セルが存在すれば、If内の処理((`For Each ... Next`)を実行
60
+ 編集セルが存在しなければ、End If まで跳びそれ以降の処理が実行される。

1

コード修正

2020/05/30 01:32

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -1,4 +1,4 @@
1
- 下記のようにElseを挿入してください。
1
+ 下記のように修正してください。
2
2
 
3
3
  ```vba
4
4
  '前略
@@ -6,9 +6,8 @@
6
6
 
7
7
  '''問題の箇所'''
8
8
 
9
- If xRngs Is Nothing Then
9
+ If Not xRngs Is Nothing Then '※修正 Not を挿入
10
- Exit Sub
11
- Else '※これを挿入
10
+ ' Exit Sub ※この行削除
12
11
  '''''''''''''''
13
12
  For Each xRng In xRngs
14
13
  numID = xRng.Offset(0, -7).Value '編集シートのB列