• ベストアンサー

空白行の削除

エクセルのシートに下記のようなデータがあったとします。 A B C D E 1 1 2   1 2 2 3 5 3 3 3 4   3 4 4 5 4 4 このようなデータが複数のシートにあり Dの欄が空白の時、その行を削除して A B C D E 2 2 3 5 3 4 4 5 4 4 このような形にしたいのです。 一つのシート毎にはマクロを記録し、実行することでできたのですが いっぺんに複数のシートに同じ処理をかけるにはどうしたらよいでしょうか。 シートの数が多いので、いちいちシートを移動して記録したマクロを実行 するのがとても手間なのです。

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

  • ベストアンサー
  • hal_n
  • ベストアンサー率43% (7/16)
回答No.1

下記のコードは参考になりますでしょうか。 (正しく動く保障はありませんので、必ずファイルのバックアップを取ることをお勧めします) Sub ProcessAllSheets()  Dim sheet As Worksheet   For Each sheet In Worksheets    sheet.Activate    '行削除処理を呼び出す   Next End Sub

momopita
質問者

お礼

ありがとうございます。 時間の節約になりました。

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

この質問に対するやり方は定石みたいなものですよ。 Sub test01() For Each sh In Worksheets MsgBox sh.Name Next End Sub を実行してみて、全てのシート名が表示されることを確認する。 ーー 次に Sub test01() Dim sh As Worksheet For Each sh In Worksheets 'MsgBox sh.Name d = sh.Range("A65536").End(xlUp).Row MsgBox d For i = d To 1 Step -1 bl = WorksheetFunction.CountBlank(Range(sh.Cells(i, "A"), sh.Cells(i, "E"))) ' MsgBox bl If bl = 0 Then Else sh.Rows(i).Delete End If Next i Next End Sub をつくり実行する。 下の行から判別していること COUNTBLANKを使うとコード行数が短くなる などが上記の特色か。 上記以外も色々なロジックが考えられよう。 データファイルをコピーしてそちらでテストすること。 マクロの記録のレベルの後に、長い長いVBAの個別問題に対する経験の期間が必要と思います。