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

回答編集履歴

2

しゅうせい

2016/03/15 03:51

投稿

lilithchan
lilithchan

スコア249

answer CHANGED
@@ -18,7 +18,6 @@
18
18
  endRow = Sheet6.UsedRange.Rows.Count
19
19
  Debug.Print "最終行は" & endRow & "行目"
20
20
 
21
- With Sheet6.Cells(i, "O").MergeArea
22
21
  For i = endRow To 6 Step -1
23
22
  i = i + 1
24
23
  → Set rng = Sheet6.Cells(i, "O").MergeArea
@@ -29,7 +28,6 @@
29
28
  i = i - mergeRows
30
29
  Debug.Print "現在" & i & "行目" + vbLf
31
30
  Next i
32
- End With
33
31
 
34
32
  End Sub
35
33
  ```

1

追記

2016/03/15 03:50

投稿

lilithchan
lilithchan

スコア249

answer CHANGED
@@ -3,4 +3,35 @@
3
3
  With Sheet6.Cells(0, "O").MergeArea
4
4
 
5
5
  になっているからだと思います。
6
- iを初期化してあげて下さい。
6
+ iを初期化してあげて下さい。
7
+
8
+ iの部分を可変にしてwith句としたいのでしょうけどたぶん無理です。
9
+ 素直にsheet6までの括りにしてください。
10
+ どうしてもやりたいなら、with句ではなく、rangeを変数にいれるとか。
11
+
12
+ ```VBA
13
+ Sub Rows_Extract()
14
+
15
+ Dim i, mergeRows, endRow As Long
16
+ → Dim rng as Range
17
+
18
+ endRow = Sheet6.UsedRange.Rows.Count
19
+ Debug.Print "最終行は" & endRow & "行目"
20
+
21
+ With Sheet6.Cells(i, "O").MergeArea
22
+ For i = endRow To 6 Step -1
23
+ i = i + 1
24
+ → Set rng = Sheet6.Cells(i, "O").MergeArea
25
+ → mergeRows = rng.Rows.Count
26
+ If Not .Offset(0, 0).Rows Like "[フロント,リア,サイド]*" Then
27
+ → rng.EntireRow.Delete
28
+ End If
29
+ i = i - mergeRows
30
+ Debug.Print "現在" & i & "行目" + vbLf
31
+ Next i
32
+ End With
33
+
34
+ End Sub
35
+ ```
36
+
37
+ あと、Forで使用しているカウンタをループ内で触るのは危険なのでやめた方がいいです。