Excel VBA 質問スレッド №2091 (解決済)

2回目の行削除時に不具合

投稿者 : チョッパー     投稿日時 : 2025/03/04(Tue) 12:37:44     OS : 未指定     EXCEL : 未指定
転記元からコピーし、転記先へ貼り付け、不要な行を削除するマクロを作成しました。(下記マクロが作成したものです。貼り付け1.2.3.4.5マクロは転記元、貼り付け先の行列番号が変わるだけで内容は同じです)
一回目のマクロ実行は思っている通りに処理されるのですが、転記元を修正し、修正した内容を再転記したい場合に、同じマクロを実行すると
シートの先頭行や他の必要な行も消えて2行だけ内容が残ったシートになってしまいます。
確認できたのは「貼り付け先シートのB列空白行削除」マクロ前までは正常に貼り付けられていました。
「貼り付け先シートのB列空白行削除」を連続マクロから外し、単独で「貼り付け先シートのB列空白行削除」を実行した場合は、正常なシートができあがります。
二回目以降の連続マクロの「貼り付け先シートのB列空白行削除」でなにか問題が起きているようなのですが、ご教授いただけないでしょうか。
お願い申し上げます。

Sub 連続macro()
    
    Application.ScreenUpdating = False
    
    Sheets("貼り付け先").Visible = xlSheetVisible     
    Sheets("貼り付け先").Range("A2:Z1000").ClearContents
    
    Call 貼り付け1
    Call 貼り付け2
    Call 貼り付け3
    Call 貼り付け4
    Call 貼り付け5
    Call 貼り付け先シートのB列空白行削除
        
    Application.CutCopyMode = False
    
    Application.ScreenUpdating = True
     
End Sub


Sub 貼り付け1()
    Dim ws1 As Worksheet
    Dim ws2 As Worksheet
    Dim lastRow As Long

    Set ws1 = ThisWorkbook.Sheets("転記元")
    Set ws2 = ThisWorkbook.Sheets("貼り付け先")
    
    lastRow = ws1.Cells(ws1.Rows.Count, "A").End(xlUp).row
    
    ws1.Range("A7:A" & lastRow).Copy
    
    ws2.Range("A2").PasteSpecial Paste:=xlPasteValues

    End Sub


Sub 貼り付け先シートのB列空白行削除()

    Dim ws As Worksheet
    Dim lastRow As Long
    Dim i As Long

    Set ws = ThisWorkbook.Sheets("貼り付け先")
    
    lastRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).row

    For i = lastRow To 2 Step -1
        If Cells(i, "B").Value = "" Then
            ws.Rows(i).Delete
        End If
    Next i
    
End Sub

スポンサーリンク
[返信 1] Re : 2回目の行削除時に不具合
投稿者 : さんこう     投稿日時 : 2025/03/04(Tue) 13:15:35
ここ↓で、シートが指定されていないのが怪しいように思いますが、2回目とか関係ないので外しているかもしれません。

>If Cells(i, "B").Value = "" Then

[返信 2] Re : 2回目の行削除時に不具合
投稿者 : ピロリ     投稿日時 : 2025/03/05(Wed) 06:11:37
[返信 1] さんこうさんの仰る通り、私も 50step目のシート指定していない影響かと思いますが・・・
1回目は「貼り付け先」シートを表示してたけど、2回目は「貼り付け先」以外のシートを表示してた(ActiveSheetが違う)とか。
外していたら、ご免なさい。

下は余計なお世話かもですが、少し気になりましたので・・・
① Sub 貼り付けxx() で lastRow を取得してますが、lastRow < 7 になるってことは無いですか?
 つまり、7行目以下が空っぽってこと。 上の方の変なデータをコピペしちゃいますけど。
② Sub 貼り付け先シートのB列空白行削除() の処理範囲は、B列の最終行で大丈夫ですか?
 例えば、A列の最終行が20行目で B列の最終行が19行目(20行目が空白)の場合に、20行目は削除不要かってこと。
問題無ければ読み捨てて下さい。

[返信 3] Re : 2回目の行削除時に不具合
投稿者 : さぁーささん     投稿日時 : 2025/03/07(Fri) 03:35:57
ws.Cells(i, "B").Value = ""

[返信 4] Re : 2回目の行削除時に不具合
投稿者 : ちょびひげ     投稿日時 : 2025/03/09(Sun) 23:54:59


[返信 5] Re : 2回目の行削除時に不具合
投稿者 : チョッパー     投稿日時 : 2025/03/12(Wed) 17:27:03
ご連絡遅くなりました。
>If Cells(i, "B").Value = "" Then
でシート指定することで解決しました。
みなさんありがとうございました。

当掲示板について
  • Excel VBA に関する掲示板です。Excel VBA に関する質問や疑問、それに対する解決方法など気軽に投稿してください。
  • 記事内ではHTMLのタグは使用できません。
  • 記事は一度投稿すると修正できません。内容を訂正したい場合は返信で対応してください。
  • Sub〜End Sub、Function〜End Function は自動的にプログラムコードとみなし、枠で囲って見やすくします。
  • Excel VBA とは関係ないことや、他人が不快に思うようなことなど、管理人が適当でないと判断した記事は削除する場合があります。
スポンサーリンク
返信入力フォーム
お 名 前  :
内  容   :

ステータス  :

認証コード  : キャプチャ画像 




( 処理日時 : 2025-07-05 18:40:53 )
タイトルとURLをコピーしました