[[20240719173945]] 『マクロの行の削除について』(たかい) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) |

| 全文検索 | 過去ログ ]

 

『マクロの行の削除について』(たかい)

75未満の数値を含む行を削除するマクロを作成したいのですがLoop文の作成が上手くいかず、?に入る文について教えていただけますでしょうか。

    Dim i As Integer
    For i = 5 To Cells(Rows.Count, 5).End(xlUp).Row
    Do While ?
        If Cells(i, 10) < 75 Then
            Cells(i, 10).EntireRow.Delete
        End If
        i = i + 1
    Loop
    Next i

また、IF文のみで実行すると、何故一行ずつ削除されていき、まだ75未満の数値が残っている状態で終了してしまいます。
こちらの原因がわかる方がいましたらご教示ください。
よろしくお願いいたします。

< 使用 Excel:Excel2021、使用 OS:Windows11 >


 Do ~ Loop自体不要でしょうね。
 i = i + 1 も邪魔してます。

 先に削除対象を確定させておいて、まとめてDelete掛ける。

    Dim i As Long, u As Range
    For i = 5 To Cells(Rows.Count, 5).End(xlUp).Row
        If Cells(i, 10) < 75 Then
            If u Is Nothing Then Set u = Cells(i, 10) Else Set u = Union(u, Cells(i, 10))
        End If
    Next i
    If Not u Is Nothing Then u.EntireRow.Select '.Delete

(白茶) 2024/07/19(金) 18:13:02


>IF文のみで実行すると、何故一行ずつ削除されていき、まだ75未満の数値が残っている状態で終了してしまいます。

コードをステップ実行すると、どの様な動作をしているのか分かると思います。
その際、VBEでローカルウィンドウを表示して、変数iの変化を見るとより良いです。

ステップ実行 〜マクロを1行ずつ実行〜
https://hp.vector.co.jp/authors/VA016119/step/step01.html

私も白茶さんのコードを用いますが、
行削除のマクロで良く使われる方法として、
下の行から削除していく方法もあります。

    Dim i As Long
    For i = Cells(Rows.Count, 5).End(xlUp).Row To 5 Step -1
        If Cells(i, 10) < 75 Then
            Cells(i, 10).EntireRow.Delete
        End If
    Next i

(雨傘) 2024/07/19(金) 18:27:39


白茶様、雨傘様
早々にご教示いただきありがとうございます。
IF文のみで完結するのですね。
おふたりからいただいたコードを反映して実行してみます。
ありがとうございます!
(たかい) 2024/07/20(土) 08:05:39

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.