• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルマクロ行削除)

エクセルマクロ行削除

このQ&Aのポイント
  • エクセル2013で行削除マクロを作成しましたが、セルZ20の値が0だとループして終了しません。
  • 修正しても思うように動作しないため、どこを修正すれば良いのかわかりません。
  • セルZ20の値が1以上なら問題なく動作することを確認しました。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

Z20?? とりあえず、上手くいかない場合F8で1行ずつ、数値の流れを見ていってください。 対象行が最終行より大きい場合とか (対象行=10 最終行=8) 特に考えなくていいんでしょうか? 対象行を増やして、最終行までいけば終了とForループを組んでいるのに Forループのなかで、最終行と対象行をマイナスしてます。 ループするのは当たり前な気がします。 やりたいことはいまいち分かりませんが、 このプログラムの場合、最終行から削除していったほうが良いと思います。 (そうすれば、最終行-1、対象行-1をする必要は無くなる為)

gx9wx
質問者

お礼

おもいだしました。 行削除は最終行から上でした。 ありがとうございます。

gx9wx
質問者

補足

>とりあえず、上手くいかない場合F8で1行ずつ、 >数値の流れを見ていってください。 はい。それでやって、つまづきました。 実験したデータは A列からZ列、8行目から20行目まで すべてのセルに値が有ります。 8行目が各列の先頭データなので、8行目の最終列を取得 でそれがZ列。 A列の最終行は20行目。 セルZ8からZ20までを上から順に見ていき 値が0だったらその行は行削除です。 マクロを走らせる前のZ列の最終行であるセルZ20の 値が1とか2とかなら、終了したのに セルZ20の値が0の場合ははまり込んでしまい F8で調べて1行づつ調べていったら、 Z列で値が有る最後の行20行目(F8でたどり着いた時は、 すでに数行削除されて14行目になっている) の値が0だから行削除されます。 すると、最終行と対象行の値が思っている物と違い ループするのがわかりました。 いくら考えても成り立たないので質問しました。 申し訳ありません。

その他の回答 (2)

回答No.3

最終行を取得した後、一旦For Nextループが始まると、いくら最終行を変更しても、ループの終着点は変わりません。対象行は変更可能です。

gx9wx
質問者

お礼

はい。f8で調べてそれがわかりました。 ありがとうございます。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんばんは! No.1さんが仰っているように行(列)削除・挿入の場合は 最終行・最終列から逆に操作するほうが一般的です。 お示しのコードに手を加えるとすると Sub 行削除() Dim 最終行 As Long Dim 最終列 As Long Dim 対象行 As Long 最終列 = Cells(8, Columns.Count).End(xlToLeft).Column 最終行 = Cells(Rows.Count, "A").End(xlUp).Row For 対象行 = 最終行 To 10 Step -1 If Cells(対象行, 最終列) = 0 Then Rows(対象行).Delete End If Next 対象行 End Sub こんな感じでしょうか。 ※ 余計なお世話かもしれませんが、データ量が極端に多い場合はループさせるとかなりの時間を要しますので 一気に削除する方法の一例です。 尚、8行目は項目行で空白セルがなく最終列まで項目が入っているとします。 (9行目も何らかのデータが入っているとする) Sub Sample1() Dim lastRow As Long, lastCol As Long lastRow = Cells(Rows.Count, "A").End(xlUp).Row lastCol = Cells(8, Columns.Count).End(xlToLeft).Column Range("A8").AutoFilter field:=lastCol, Criteria1:=0 On Error Resume Next '←念のため Rows(10 & ":" & lastRow).SpecialCells(xlCellTypeVisible).Delete AutoFilterMode = False End Sub これでも同様の結果になると思います。m(_ _)m

gx9wx
質問者

お礼

ありがとうございます。 no.1の方からのアドバイスで 下からというのを思い出し 自力で作成できました。

関連するQ&A