プロが教えるわが家の防犯対策術!

下記のように、コピペのマクロはできています、この後「成績 大中小の中小のみ」のシートの行削除を一気に処理したいのですが、うまくできません。教えて頂けませんか。(3000件程あります)
Sub ②コピペする()
'Sheet1のA3から最終行までをコピー
With Sheets("成績順")
.Range("A3:J" & .Cells(Rows.Count, "A").End(xlUp).Row).Copy
End With
'Sheet2のA列の最終行の次の行に貼付け
Sheets("成績 大中小の中小のみ").Cells(Rows.Count, "A").End(xlUp).Offset(1).PasteSpecial
Application.CutCopyMode = False
End Sub

条件に一致した行を削除するというようにしたい
 「成績 大中小の中のみ」の名前のシート、J列に大中小のセルがあります。条件として、「大」を削除して「中と小」だけにしたいのです。
 マクロは初心者で試行錯誤していますが、うまくできず困っています。この後の削除をどのようにしたらよいか、教え頂けませんか。よろしくお願いします。

   因みに参考として
     Sub 条件に一致した行を削除する()
       Dim i As Long

     For i = Range("A1").End(xlDown).Row To 2 Step -1
      With Cells(i, "J")
         If _
          .Value Like "大*" Then
          .EntireRow.Delete
             End If
         End With
         Next i
         End Sub

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

  • 下の方のシート名を間違っていました。

    「成績 大中小の中のみ」ではなく、正しくは「成績 大中小の小中のみ」でした。

      補足日時:2022/01/20 16:06
  • 他にも多くのシートがありまして、シートの特定のやり方が分からないのです。これを変更したらよいように思うのですが・・・、どうでしょうか。Range("A1").End(xlDown).Row To 2 Step -1
    また、このモジュールのなかで処理できませんか。わがまま言いますが、教えて頂けませんか。

      補足日時:2022/01/20 16:29

A 回答 (4件)

>他にも多くのシートがありまして、シートの特定のやり方が分からないのです。


以下のようにしてください。


Sub 条件に一致した行を削除する()
Dim i As Long
With Worksheets("成績 大中小の小中のみ")
For i = .Range("A1").End(xlDown).Row To 2 Step -1
With .Cells(i, "J")
If _
.Value Like "大*" Then
.EntireRow.Delete
End If
End With
Next i
End With
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございました。できました。今後ともよろしくお願いします。

お礼日時:2022/01/21 20:32

No.1の者です。



他にも多くのシートがありまして、シートの特定のやり方が分からないのです。
幾つかのシートを処理したいという事でしょうか?
それとも、特定のシートを選択したい?

特定のシートなら、Worksheets("シート名").Select で、そのシートを
選択できます。その後に、提示のマクロで、そのシートが処理できます。

>このモジュールのなか
→すみません、何を伝えたいのかが、分かりません。
マクロは、標準モジュールに記載で良いかと思います。
特定のシートを選択して、その中で提示のマクロで問題ないかと。


Option Explicit
Sub 条件に一致した行を削除する()
Dim I As Long
  Worksheets("処理したいシート名").Select
For I = Range("A1").End(xlDown).Row To 2 Step -1
With Cells(I, "J")
If .Value Like "大*" Then
.EntireRow.Delete
End If
End With
Next I
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございました。できました。今後ともよろしくお願いします。

お礼日時:2022/01/21 20:32

J列が”大"だったら、行DELETEすれば1行上に詰められます。


それを使ってfor文で実行。

Dim Sh1 As Worksheet
Set Sh1 = Worksheets("成績 大中小の中のみ")

END1 = Sh1.Range("J65536").End(xlUp).Row

For CNT = 1 To END1
If Sh1.Range("J" & Cnt1).Value = "大" Then
 Sh1.Rows(Cnt1).Delete
 CNT = CNT - 1
End If
Next Cnt1
    • good
    • 0
この回答へのお礼

ありがとうございました。できました。今後ともよろしくお願いします。

お礼日時:2022/01/21 20:33

こんにちは。



提示されたコードで、問題なさそうに見えますが、どの様な問題が出て
いるのでしょうか?

ただ、データ件数が多いと、削除するのも時間が掛かるかも知れません。
フィルターで、"大"以外を表示させて、それをコピーという手もあるかも
知れません。
    • good
    • 0
この回答へのお礼

ありがとうございました。できました。今後ともよろしくお願いします。

お礼日時:2022/01/21 20:33

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