質問: 【excel vba】条件つき行削除 excel2003を使用しています。 システムからcsvで落としたデータで、データの並び方に規則性があるので、それを利用して、不要部分のデータをマクロで削除できないかと思い、質問させていただきます。 a列に『累計』を含む文字があった場合、その行のd列が0だったら、その行より上の行のa列に『計上日』と入力されている行までを削除するということをしたいです。 下記でいうと、2~5行までを削除したいです。 a b c d 1 2 計上日 3 4 5 累計 0 6 7 計上日 8 9 累計 1000 上記では、b列、c列には何も書いていませんが、実際はデータが入力されていたり、空欄だったりです。 d列が0の行を削除するコードはわかるのですが、さらに、条件が加わっても同じように処理は可能でしょうか? よろしくお願いします。
回答: ロジックの一例 fornextでやると、行削除は最下行からやるほうが都合がいい。 コード データのあるシートをアクチブシートにして実行。 sub tet01() d = range("a65536").end(xlup).row for i = d to 2 step -1 if dl = "y" and cells(i, "a") = "計上日" and dl = "y" then 'この行が計上日で、累計行 and d列0が先にあり(dl=”y")なら msgbox i & "-" & x & " 削除処理" rows(x & ":" & i).entirerow.delete dl = "n" '累計とのペアー待ち状態解消 end if if cells(i, "a") = "累計" and cells(i, "d") = 0 then dl = "y" 'd列0で累計行現れた x = i 'その行を記憶 end if next end sub ーーー 例データ 質問者の意図に沿わない部分があるかも知れないが、ご容赦を a列 b列 d列 集計計数 1 計上日 3 4 累計0<ーーd列,以下累計の跡の数字はd列 計上日 5 6 累計11 計上日 7 8 累計0 12 計上日 13 14 累計0 15 計上日 16 17 累計20 計上日 18 累計1000 ーーー 結果 集計計数 1 計上日 5 6 累計11 12 15 計上日 16 17 累計20 計上日 18 累計1000 ーー 少数例のテストしかやってないこと、 万一ロジックの不完全があるかも知れないが、コード数は少ないと思う。