• 締切済み

『実行時エラー'1001': 'Range'メソッドは失敗しました:'

『実行時エラー'1001': 'Range'メソッドは失敗しました:'_Worksheet'オブジェクト』 先週から仕事に必要なためVBAの勉強を始めましたが、別シートへコピーする際などに上記のエラーが発生してしまい原因が分からず困っています。どこが間違っているのでしょうか?? 処理はデータが書かれているシートから作業用のシートにセル範囲を指定してコピーする、というものです。 なお、マクロ自体は別にマクロ用ファイルを作成し、そこのシートモジュールへ記述しています。 よろしくお願いします。 Sub test() '--------- 対象ファイルの呼び出し Dim MAIN As Workbook Dim ws As Worksheet Dim sh As String 'ファイルを呼び出す Call GetMAINFile Set MAIN = ActiveWorkbook Set ws = MAIN.Worksheets(1) sh = ws.Name '--------- 一時作業用TEMPシートの作成 Dim TEMP As Worksheet Worksheets.Add(after:=ws).Name = "TEMP" Set TEMP = Worksheets("TEMP") '--------- 対象シートから一時作業用TEMPシートへデータのコピー Dim x1, x2, y1, y2 As Integer x1 = 5 x2 = 10 y1 = 1 y2 = 4 ws.Range(Cells(x1, y1), Cells(x2, y2)).Copy _ Destination:=TEMP.Range(Cells.SpecialCells(xlLastCell).Row, 1) End Sub '--------- ファイル名を指定ダイアログの表示 Sub GetMAINFile() Dim NewBook As Workbook Dim OpenFileName As String OpenFileName = Application.GetOpenFilename() If OpenFileName <> "False" Then Workbooks.Open OpenFileName Else Exit Sub End If End Sub

みんなの回答

  • jcctaira
  • ベストアンサー率58% (119/204)
回答No.1

以下のように変更が必要です。 ws.Range(Cells(x1, y1), Cells(x2, y2)).Copy _   Destination:=TEMP.Range(Cells.SpecialCells(xlLastCell).Row, 1)         ↓ Range(ws.Cells(x1, y1), ws.Cells(x2, y2)).Copy _  Destination:=Cells(TEMP.Cells.SpecialCells(xlLastCell).Row, "A") 補足説明) ・Cells(x1, y1)  これを明示的にするとActiveSheet.Cells(x1, y1) になります。  よってws.Range(Cells(x1, y1), Cells(x2, y2))を明示的にすると   ws.Range(ActiveSheet.Cells(x1, y1), ActiveSheet.Cells(x2, y2)) または   ws.Range(TEMP.Cells(x1, y1), TEMP.Cells(x2, y2))  になります。  ws.RangeとTEMP.Cells(x1, y1)はシートが違うためにエラーとなっています。 ・TEMP.Range(Cells.SpecialCells(xlLastCell).Row, 1)  これを数字に直してみると   TEMP.Range(1, 1)  となってしまい明らかに間違っています。   TEMP.Cells(1, 1)またはTEMP.Cells(1, "A")にする必要があります。   ※列は"A"のように列名で指定した方が分かりやすいかと思います。 気になる点)  Worksheets("TEMP")は毎回作成しているので、空シートだと思います。  TEMP.Cells.SpecialCells(xlLastCell).Row と最後の行を取得しなくても  必ず「1」だと思いますが…   もし私の勘違いで間違った指摘かも知れませんが…     

marokiki_0608
質問者

お礼

的確なご指摘ですね!非常に勉強になりました。 ・Cells(x1, y1)  cellsプロパティの前に省略されたRangeオブジェクトがあるということですね。 ・TEMP.Range(Cells.SpecialCells(xlLastCell).Row, 1)  ご指摘の通り文法がおかしかったです。    Cells.SpecialCells(xlLastCell).Rowを使っているのは、  実は質問文に記載した処理以外で、FINDで検索した結果から繰り返して別シートへコピーさせたかったからです。 ありがとうございました。

関連するQ&A

専門家に質問してみよう