• 締切済み

Excel VBA offset()関数で質問

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を選択します。 アドバイスよろしくお願い致します。

みんなの回答

  • wine_labo
  • ベストアンサー率86% (73/84)
回答No.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/contents201/contents20101.html

関連するQ&A