回答編集履歴

2

説明追記

2020/05/30 01:32

投稿

hatena19
hatena19

スコア33740

test CHANGED
@@ -29,3 +29,91 @@
29
29
  '後略
30
30
 
31
31
  ```
32
+
33
+
34
+
35
+ 解説
36
+
37
+ ---
38
+
39
+ > 元のコードと一見同じ内容に見えるので、なぜ動くようになったのか。。
40
+
41
+ もしよろしければご教示いただけないでしょうか。
42
+
43
+
44
+
45
+
46
+
47
+ 修正前
48
+
49
+ ```vba
50
+
51
+
52
+
53
+ If xRngs Is Nothing Then '編集されたセルがなければ、
54
+
55
+ Exit Sub 'End Sub まで跳ぶ = これ以降のコードは実行されない
56
+
57
+
58
+
59
+ For Each xRng In xRngs
60
+
61
+ ....
62
+
63
+ Next xRng
64
+
65
+ End If
66
+
67
+
68
+
69
+ Application.ScreenUpdating = True
70
+
71
+
72
+
73
+ End Sub
74
+
75
+ ```
76
+
77
+
78
+
79
+ つまり、
80
+
81
+ I列で編集がなければ、End Sub まで跳んでしまい`Application.ScreenUpdating = True`が実行されないので`Application.ScreenUpdating`はFalseのままで画面が更新されない。
82
+
83
+ I列で編集があれば、End If まで跳ぶので、End If の前の処理(`For Each ... Next`)は実行されない。
84
+
85
+ 結局、どちらにしても`For Each ... Next` の処理は実行されない。
86
+
87
+
88
+
89
+ 修正後
90
+
91
+ ```vba
92
+
93
+ If Not xRngs Is Nothing Then '※編集セルがNothingでない=編集セルが存在すれば、以下実行
94
+
95
+
96
+
97
+ For Each xRng In xRngs
98
+
99
+ ....
100
+
101
+ Next xRng
102
+
103
+ End If
104
+
105
+
106
+
107
+ Application.ScreenUpdating = True
108
+
109
+
110
+
111
+ End Sub
112
+
113
+ ```
114
+
115
+
116
+
117
+ 編集セルが存在すれば、If内の処理((`For Each ... Next`)を実行
118
+
119
+ 編集セルが存在しなければ、End If まで跳びそれ以降の処理が実行される。

1

コード修正

2020/05/30 01:32

投稿

hatena19
hatena19

スコア33740

test CHANGED
@@ -1,4 +1,4 @@
1
- 下記のようにElseを挿入してください。
1
+ 下記のように修正してください。
2
2
 
3
3
 
4
4
 
@@ -14,11 +14,9 @@
14
14
 
15
15
 
16
16
 
17
- If xRngs Is Nothing Then
17
+ If Not xRngs Is Nothing Then '※修正 Not を挿入
18
18
 
19
- Exit Sub
20
-
21
- Else '※これを挿入
19
+ ' Exit Sub ※この行削除
22
20
 
23
21
  '''''''''''''''
24
22