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

Excel2013 でマクロを作成しました。
シートインデックス3以降の複数のシートで処理を行うマクロを書いたのですが、
呼び出し先のマクロのみを実行するとエラーが出ないのに、
呼び出し元のマクロから実行するとエラーが出て先へ進めません。

◆エラー箇所は
「Range("1:" & d).Delete」
◆エラー内容は
「実行時エラー '1004':
'Range' メソッドは失敗しました: '_Global' オブジェクト」
◆やりたいこと
 ※1~2行目:項目行
 3行目以降へ、上から1行ずつデータを上書きコピーして
 最終行より上の行(1行目から最終行 -1行)を削除
 以上をシート3以降の最終シートまで繰り返す

 最終的には、残った1行をすべて「集計」シートに集約する予定です。
 ご教示いただけますでしょうか。

’----------------------------
’呼び出し元マクロ
’----------------------------
Sub Aggregation()
Application.ScreenUpdating = False
Dim i As Long
For i = 3 To Worksheets.Count
Call Test
Next i
Application.ScreenUpdating = True
End Sub

’----------------------------
’呼び出し先マクロ
’----------------------------
Sub Test()
Dim LastROW As Long
Dim l As Long
Dim d As Long

LastROW = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row

For l = 3 To LastROW - 1
Rows(l).Copy
Rows(l).Offset(1).PasteSpecial Paste:=xlPasteValues, SkipBlanks:=True
Application.CutCopyMode = False
Next l

With ActiveSheet
d = .Cells(Rows.Count, 1).End(xlUp).Row - 1
Range("1:" & d).Delete
Rows(1).Select
End With
End Sub

A 回答 (2件)

Sub Test()で作用するシートは、アクティブシートに対してだけです。


呼び出し元マクロで
For i = 3 To Worksheets.Count
Call Test
Next i
を行った時、同じシートがずっとアクティブの状態です。
その為、同じシートに対して、2回目のSub Test()を呼び出したとき、No1の方が指摘された状態になり、そこで
エラーが発生します。

これを避けるためには、①を追加してください。
該当シートをActivateにして呼び出します。

For i = 3 To Worksheets.Count
Worksheets(i).Activate '①・・・これを追加
Call Test
Next i
    • good
    • 0
この回答へのお礼

素敵です!出来ました!
該当シートをアクティブにしないから同じシートで再度行を消そうとしていたんですね…。
納得です。何故気づかなかったのか。
ありがとうございました!

お礼日時:2017/04/18 09:36

正しいけど、対象シートが空の場合


d = .Cells(Rows.Count, 1).End(xlUp).Row - 1
Range("1:" & d).Delete

のdがマイナスになってしまうからエラーとなる。
dの値が1以上で有る事をチェックする。
    • good
    • 0
この回答へのお礼

対象シートで消したい行が存在しなかったのでエラーになったのですね。
お二方の回答で無事に処理が出来ました。
ありがとうございました!

お礼日時:2017/04/18 09:41

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