アプリ版:「スタンプのみでお礼する」機能のリリースについて

Excelの行削除について。

sheetが300sheetあります。それぞれ同じ形式のデータが貼り付いていて、A列の始まりが01-00と02-00で始まるデータのみを残して、あとのデータは行削除したいです。sheetの数が多いため、フィルタを使って1sheetずつするのは厳しく、質問させていただきました。よろしくお願いします。

質問者からの補足コメント

  • 画像を付けたかったのですが、何度やっても投稿できませんでした。わかりにくいと思いますが、よろしくお願いします。

      補足日時:2021/10/23 09:49

A 回答 (6件)

全シートの9行目からが削除対象になります。


以下のマクロを標準モジュールに登録してください。

Option Explicit


Public Sub 全シートの行削除()
Dim ws As Worksheet
Application.ScreenUpdating = False
For Each ws In Worksheets
Call delete_rows(ws)
Next
Application.ScreenUpdating = True
MsgBox ("完了")
End Sub


Private Sub delete_rows(ByVal ws As Worksheet)
Dim wrow As Long
Dim maxrow As Long
Dim drows As Range
Dim rs As String
Dim str As String
Dim ctr As Long
maxrow = ws.Cells(Rows.Count, 1).End(xlUp).row 'sheetの最大行取得
ctr = 0
For wrow = 9 To maxrow
str = Left(ws.Cells(wrow, 1).Value, 5)
If str = "01-00" Or str = "02-00" Then
Else
rs = wrow & ":" & wrow
If ctr = 0 Then
Set drows = ws.Range(rs)
Else
Set drows = Union(drows, ws.Range(rs))
End If
ctr = ctr + 1
End If
Next
If ctr > 0 Then
drows.Delete
End If
End Sub
    • good
    • 0

マクロの記録で自動生成したものをちょっと直しただけなので、かなり雑なコードですが・・・。


データ量も少なそうなので、こんなので十分でしょう!!

Sub Macro1()
Dim ws As Worksheet
For Each ws In Worksheets
ws.Range("A8:A" & Rows.Count).AutoFilter Field:=1, Criteria1:="<>01-00*", Operator:=xlAnd, Criteria2:="<>02-00*"
ws.Range("A9:A" & Rows.Count).SpecialCells(xlCellTypeVisible).EntireRow.Delete
ws.Range("A8").AutoFilter
Next ws
End Sub
    • good
    • 0

No4です。


念のため、本ファイルのバックアップをとってから、マクロを実行してください。
    • good
    • 0

1行目は見出しでしょうか。

(見出しなら削除対象外)
1つのシートにおよそ何行のデータがありますか。
    • good
    • 0
この回答へのお礼

ご返答ありがとうございます。
1行めから7行めまでが見出しになります。8行めが項目、その下からデータが並んでいます。sheetによって違いますが、最低10行、最高で50行ほどあります。よろしくお願いします。

お礼日時:2021/10/24 09:08

たかがシート300枚分です。


手作業で行いましょう。

まずは対象のシートをすべて選択します。
 Ctrl + Shift + PageUp
または
 Ctrl + Shift +PageDown
で連続した複数のシートを選択できるので活用してください。

その後1行目を挿入です。
対象のシートすべてのシートに行が追加されます。
その状態でA1セルに「a」とでも入力してください。
仮のタイトル行が出来上がりです。

次に作業するシートを1つだけを選択します。
 Ctrl + PageUP
または
 Ctrl + PageDown
でシートを選択すると良いでしょう。

ここからは各シートで繰り返しの作業になります。

 Ctrl + Shift + L 
これでフィルタを有効/無効にできます。
フィルタを有効にして、A1セルの▼をクリックし、フィルタの一覧から
 01-00
 02-00
を除外すれば、削除したいデータが入力された行と、追加した1行目だけが表示されます。

 Ctrl + A
で、値や数式が入力されているセルの範囲を選択できますので、
あとは行削除するだけです。

 Ctrl + PageUP
または
 Ctrl + PageDown
で次に作業をするシートを選択しましょう。

・・・

これは、マウスを一切使わない手順です。
慣れれば30分もあれば余裕で終わりますよ。
(1分で10シートなんて余裕でしょ?)

なお、これはデータが入力されている行だけを削除……ではなく、タイトル行も含めて削除する手順です。
必要なら本来のタイトル行もフィルタで表示対象から外しておきましょう。

そんなわけで、マクロを作る時間で終わる作業ですので、マクロなんて不要ですよね。
    • good
    • 1

おはようございます。



削除するのは大変なので、必要なものを表示して、それを新しいブックか、シートにコピーして作った方が早いかと思います。
削除するのは、処理に時間が掛かるので、コピーの方が早いかと。

因みに、sheetが300sheetって、1ブックに300シート?
それとも、幾つかブックがあって、その総数でしょうか?

VBAでの作業が良いかと思いますが、レイアウトは全て同じなのでしょうか?
    • good
    • 0
この回答へのお礼

こんにちは。返答ありがとうございます。

1ブックに300sheetです。レイアウトは全て同じで、中の数字が違うだけです。

お礼日時:2021/10/23 12:28

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!