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

このQ&Aに関連する最新のQ&A

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で質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aと関連する良く見られている質問

QExcelの列'A' 'B' 'C'...や、行'1' '2' '3'...の文字の大きさや種類

Excel2002を使っていますが、Excelの上にある列'A' 'B' 'C'...や、左にある行'1' '2' '3'...の文字の大きさや種類は変えることはできるのでしょうか?もし、変えれるのでしたらどうやって変えるのですか?

Aベストアンサー

「書式」「スタイル」「標準」の状態で「変更」を押して「フォント」の内容を変更してください。
列と行の文字フォントとサイズが変更されます。

QExcel VBAでsub,dimは何の略?

Excel VBAで
sub,dimはそれぞれ何の略ですか?

Aベストアンサー

sub subroutine(サブルーチン)
dim dimension(次元)

です。
元々はFORTRAN言語で、手続きの開始を宣言するSUBROUTINEと、配列を宣言するDIMENSIONでした。
FORTRANのDIMENSIONやN-BASIC等でのDimは、配列変数を宣言するものだったのですが、
VBになって、配列じゃない変数もDimで宣言するようになりました。

Qエクセルのマクロ Range("A1").End(xlDown).rowで列を削除

A列の一番下のデータの次の行から
F列の一番下のデータの行まで削除したいのですが
Rows(" & Range("A1").End(xlDown).row+1 & ":" & Range("F1").End(xlDown).Row & ").Delete Shift:=xlUp
でうまくいきません
どうすればいいのですか?

Aベストアンサー

Rows(Range("A1").End(xlDown).Row + 1 & ":" & Range("F1").End(xlDown).Row).Delete Shift:=xlUp
でどうでしょうか。
Rows()内の最初と最後の("&~&")が不用かと…。

ちなみにxlDownだと途中に空欄があった場合、最下行は取得できません。
xlUpを使ったほうがより確実だと思いますよ。

Aend = Cells(Rows.Count, 1).End(xlUp).Row + 1
Fend = Cells(Rows.Count, 6).End(xlUp).Row
If Aend <= Fend Then Rows(Aend & ":" & Fend).Delete Shift:=xlUp

QVBA for i=1 to lastrow

データ最終行を取得し、for nextループで回すことは多いですが、書き方として以下の2通り考えられます。
For i=1 to cell(cells.count, 1).end(xlup).row

Lastrow=cell(cells.count, 1).end(xlup).row
For i=1 to Lastrow

最初の方法はiがカウントされる度に最終行を計算すると思いますが
、そうなのでしょうか?その場合、計算時間は問題にならないのでしょうか?

Aベストアンサー

こんにちは。

>For i = 1 to Cell(Cells.Count, 1).End(xlUp).Row '←オーバーフローします。
正しくは、
For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row

実際には試さずに、頭の中だけで考えた質問でしょうけれども、こういう問題は、実際にVBEditorに書いて試してからにしてください。

以下が、ループのカウンタがインクリースする都度、Endプロパティを取っていたら、無限ループになるはずです。


'//
Sub Test1()
 Dim i As Long
 Dim j As Long
 For i = 1 To 10
  Cells(i, 1).Value = i
 Next i
 Stop '一旦止めました
 For j = 1 To Cells(Rows.Count, 1).End(xlUp).Row
  Cells(j + 10, 1).Value = j
 Next j
End Sub

'//

Q「Debug.Print i = i + 1」がFalseになる。

Sub test()
Dim i As Long
i = 0
Debug.Print i = i + 1
End Sub
を実行すると
False
がイミディエイトウインドウに表示されます。
理由が知りたいです。
よろしくお願いします。

Aベストアンサー

Printステートメントの outputlist並びの=が、代入式ではなく比較式と評価、実行されるためでしょうね。
演算子は式のリストに含められ、算術演算子、比較演算子、論理演算子等色々ありますが、代入記号はリスト項目にはありませんので、エラーとならないのは演算子とみなしているからですね。

Print i = i + 1 の結果は、0と1の比較なのでFalse
Print i = i とすると、0と0の比較なのでTrue
Print i, i + 1の場合は、変数と数式なので 0と1
という結果になるはずです。
 


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報