![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
『実行時エラー'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
A 回答 (1件)
- 最新から表示
- 回答順に表示
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」だと思いますが…
もし私の勘違いで間違った指摘かも知れませんが…
的確なご指摘ですね!非常に勉強になりました。
・Cells(x1, y1)
cellsプロパティの前に省略されたRangeオブジェクトがあるということですね。
・TEMP.Range(Cells.SpecialCells(xlLastCell).Row, 1)
ご指摘の通り文法がおかしかったです。
Cells.SpecialCells(xlLastCell).Rowを使っているのは、
実は質問文に記載した処理以外で、FINDで検索した結果から繰り返して別シートへコピーさせたかったからです。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA 検索して一致したセル...
-
Excel VBA リンク先をシート...
-
【ExcelVBA】全シートのセルの...
-
Vba UserformからExcelシートの...
-
ユーザーフォームに入力したデ...
-
特定の文字を含むシートだけマ...
-
Excel チェックボックスにチェ...
-
excelのマクロで該当処理できな...
-
エクセルで通し番号を入れてチ...
-
VBAで指定シート以外の選択
-
vbaでworksheetfunctionでの複...
-
XL:BeforeDoubleClickが動かない
-
ブック名、シート名を他のモジ...
-
『実行時エラー'1001': 'Range...
-
EXCEL(VBA)でシート保護がかか...
-
シート名一致すれば印刷、一致...
-
VBA 入力月で該当シートを選択...
-
別のシートから値を取得するとき
-
Pythonを勉強しています。
-
VBAでシート挿入を禁止したい。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
別のシートから値を取得するとき
-
excelのマクロで該当処理できな...
-
ユーザーフォームに入力したデ...
-
同じ作業を複数のシートに実行...
-
【ExcelVBA】全シートのセルの...
-
エクセルのシート名変更で重複...
-
特定の文字を含むシートだけマ...
-
ブック名、シート名を他のモジ...
-
実行時エラー'1004': WorkSheet...
-
XL:BeforeDoubleClickが動かない
-
VBA 存在しないシートを選...
-
ExcelのVBAのマクロで他のシー...
-
Excelマクロのエラーを解決した...
-
実行時エラー1004「Select メソ...
-
エクセルのマクロでアクティブ...
-
【Excel VBA】Worksheets().Act...
-
VBA 最終行まで数式をコピーする
-
シートが保護されている状態で...
-
VBAで同じシート名のコピー時は...
-
エクセル・マクロ シートの非...
おすすめ情報