Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


12463 / 13646 ツリー ←次へ | 前へ→

【10385】ループで該当する行を削除 チリ 04/1/22(木) 21:03 質問
【10386】Re:ループで該当する行を削除 かみちゃん 04/1/22(木) 23:40 回答
【10387】Re:ループで該当する行を削除 ichinose 04/1/23(金) 7:18 発言
【10388】Re:ループで該当する行を削除 BOTTA 04/1/23(金) 10:54 発言
【10389】Re:ループで該当する行を削除 チリ 04/1/23(金) 12:33 お礼

【10385】ループで該当する行を削除
質問  チリ  - 04/1/22(木) 21:03 -

引用なし
パスワード
   こんばんは チリといいます。

ループでぐるぐる回して、
条件にあったセルを行ごと削除しようとしています。

そこで下記のようにしてみましたが、行をSelectする部分で「実行時エラー(1004)」となってしまいます。

Do Until i > aaa
  If (Worksheets("bbb").Cells(i, 3) = "") Then
    Worksheets("bbb").Rows("i:i").Select
    Selection.Delete Shift:=xlUp
  End If

  i = i + 1

Loop

これって出来ないのでしょうか・・・?
どなたか宜しくお願いします。

【10386】Re:ループで該当する行を削除
回答  かみちゃん  - 04/1/22(木) 23:40 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>そこで下記のようにしてみましたが、行をSelectする部分で「実行時エラー(1004)」となってしまいます。
>
>Do Until i > aaa
>  If (Worksheets("bbb").Cells(i, 3) = "") Then
>    Worksheets("bbb").Rows("i:i").Select

iは変数ですので、"i:i"が間違いです。

Worksheets("bbb").Rows(i).Select
または、
Worksheets("bbb").Rows(i & ":" & i).Select
とします。

【10387】Re:ループで該当する行を削除
発言  ichinose  - 04/1/23(金) 7:18 -

引用なし
パスワード
   ▼かみちゃん さん、チリさん、おはようございます。

>>そこで下記のようにしてみましたが、行をSelectする部分で「実行時エラー(1004)」となってしまいます。
>>
>>Do Until i > aaa
>>  If (Worksheets("bbb").Cells(i, 3) = "") Then
>>    Worksheets("bbb").Rows("i:i").Select
>
>iは変数ですので、"i:i"が間違いです。
>
>Worksheets("bbb").Rows(i).Select
>または、
>Worksheets("bbb").Rows(i & ":" & i).Select
>とします。
↑でエラーはなくなると思いますが、このままだと
チリさんの意図する仕様で動いてくれない可能性があります
(連続してC列に""が行に入っている場合)。

以下は、一例ですが、
'=================================
Sub test()
  aaa = 30
  i = aaa
  Do Until i = 0
  If (Worksheets(1).Cells(i, 3) = "") Then
    Worksheets(1).Rows(i). _
     Delete Shift:=xlUp
'    selectしなくても削除するだけならできます。
  End If
  i = i - 1
  Loop
End Sub

のように行の下から上にセルの値をチェックしていくと、
漏れがないかと・・・。

【10388】Re:ループで該当する行を削除
発言  BOTTA  - 04/1/23(金) 10:54 -

引用なし
パスワード
   ichinoseさん、かみちゃんさん、チリさん、こんにちは。

該当行のみをUnionメソッドで複数指定して、一気にDelete。

Sub DelRow()
Dim rngDel As Range, LastRow As Long, topR As Long, i As Long
  topR = 3 'この行まで削除(1,2行目は無視)
  LastRow = Range("C" & Rows.Count).End(xlUp).Row
  If LastRow < topR Then Exit Sub
  Set rngDel = Range("C" & LastRow + 1)
  For i = LastRow To topR Step -1
    If Range("C" & i).Value = "" Then
      Set rngDel = Union(rngDel, Range("C" & i))
    End If
  Next
  rngDel.EntireRow.Delete
  Set rngDel = Nothing
End Sub

【10389】Re:ループで該当する行を削除
お礼  チリ  - 04/1/23(金) 12:33 -

引用なし
パスワード
   かみちゃんさん、ichinoseさん、BOTTAさん
こんにちは

参考になりました。
ありがとうございました。

▼BOTTA さん:
>ichinoseさん、かみちゃんさん、チリさん、こんにちは。
>
>該当行のみをUnionメソッドで複数指定して、一気にDelete。
>
>Sub DelRow()
>Dim rngDel As Range, LastRow As Long, topR As Long, i As Long
>  topR = 3 'この行まで削除(1,2行目は無視)
>  LastRow = Range("C" & Rows.Count).End(xlUp).Row
>  If LastRow < topR Then Exit Sub
>  Set rngDel = Range("C" & LastRow + 1)
>  For i = LastRow To topR Step -1
>    If Range("C" & i).Value = "" Then
>      Set rngDel = Union(rngDel, Range("C" & i))
>    End If
>  Next
>  rngDel.EntireRow.Delete
>  Set rngDel = Nothing
>End Sub

12463 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free