プロが教える店舗&オフィスのセキュリティ対策術

Excel VBA offset()関数で質問です。
現在集計のマクロを作成しております。
■処理内容
各sheetの特定の範囲を"copy" して集計sheetに順に貼り付け… といった処理をさせようと作成中です。

以下がソースになります。
Sub 集計()
Dim ws As Worksheet
i = 1
For Each ws In ActiveWorkbook.Sheets
If ws.Name = "集計" Then
Else
Range("E1").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
★Worksheets("集計").Range("A1").Offset(, i).Select
ActiveSheet.Paste
i = i + 1
On Error Resume Next
ActiveSheet.Next.Select
End If
Next
End Sub

★マークのところで現在エラーになっています。

実行時エラー '1004':
RangeクラスのSelectメソッドが失敗しました。

と表示されます。

offset関数の使用方法の確認ですが… (とあるWebから抜粋したのですが… (^^; )
例>
Range("C3").Offset(,1).Selectとすれば、
行はそのままで、列が1列右に移動し、D3を選択します。

アドバイスよろしくお願い致します。

A 回答 (1件)

これでいかがでしょうか?



Sub 集計()
Dim ws As Worksheet
i = 1
For Each ws In ActiveWorkbook.Sheets
If ws.Name = "集計" Then
Else
ws.Activate
ws.Range("E1").Select
ws.Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Worksheets("集計").Activate
Worksheets("集計").Range("A1").Offset(, i).Select
ActiveSheet.Paste
i = i + 1
On Error Resume Next
ActiveSheet.Next.Select
End If
Next
End Sub

※ .Activate は .Select でもいいです

複数シートを扱う場合は特に、シートの指定は省略しないで対象シートをアクティブにしないとエラーとなるようです。
シート指定は面倒がらず、省略せず指定するよう心がけるほうがいいと思います。
そのほうが後で見直すときにも対象がどこなのか分かりやすくていいと思います。
省略してしまうと自分で期待している動作をしているものと決め付けてしまい
ハマってしまうこともありますので・・・・・

コーディング上省略できる場合でも、省略しないほうが分かりやすい場合もありますので
時と場合に応じて理解しやすいコーディングとなるようにすると後で見直すときにも分かりやすいと思います。

参考URL:http://www6.plala.or.jp/MilkHouse/begin/contents …
    • good
    • 0

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