エクセルVBAでシート3のRangeの値をからシート2のRangeへデータをコピーしようとしているのですが
Sheets(3).Range("B3:B100").Copy _
Sheets(2).Range(Cells(3, col2 - 1), Cells(100, col2 - 1))
がうまくいって、
Sheets(3).Range(Cells(2, col1), Cells(100, col1)).Copy _
sheets(2).Range(Cells(2, col2), Cells(100, col2))
が何故、オブジェクト定義エラーになってしまうのがわかりません。
col1、col2は列の変数です。
よろしくお願いします。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
実証してませんが
Sheets(3).Range(Cells(2, col1), Cells(100, col1)).Copy _
sheets(2).Range(Cells(2, col2), Cells(100, col2))
この中のCellsがどのシートのCellsか指定していないからではないでしょうか?
Sheets(3).Range(Sheets(3).Cells(2, col1), Sheets(3).Cells(100, col1)).Copy _
sheets(2).Range(sheets(2).Cells(2, col2), sheets(2).Cells(100, col2))
で、どうでしょうか?
この回答への補足
ありがとうございます。うまくいきました。
エクセルVBAでいつもこのような定義のところで詰まってしまいます。
追加で質問させて頂きたいのですが、質問文の上の式 Sheets(2).Range(Cells(3, col2 - 1), Cells(100, col2 - 1))では何故どのシートか指定しなくて通ったのでしょうか?
よろしくお願いします。
No.2
- 回答日時:
>Sheets(3).Range("B3:B100").Copy _
>Sheets(2).Range(Cells(3, col2 - 1), Cells(100, col2 - 1))
を実行している時シート(2)がアクティブなっているでしょう。
もしシート(2)以外をアクティブな状態にして実行すれば、同様のエラーが発生します。
即ち、
Cells(3, col2 - 1)
などが常にアクティブなシートに対して有効な状態ですから、
>Sheets(3).Range(Cells(2, col1), Cells(100, col1)).Copy _
がさすのは、シート(3)のRangeに対してアクティブなシート(たぶんシート2)
のCellsになるからでは?
Sheets(3).Cells(2, col1).Resize(99).Copy _
Sheets(2).Cells(2, col2)
行数が決まっているのなら上記でもいいかも?
この回答への補足
回答ありがとうございます。
Sheets(2).Range(Cells(3, col2 - 1), Cells(100, col2 - 1))
を実行しているときはSheets(3)をアクティブにしています。
また、Copyの引数部分はシートを指定しなくても通りました。
ですので、どういうときはシートの指定が必要というのがわからなくなってしまいました。(Rangeで変数を使用する場合?でも引数内ではい必要ない?)
度々すいませんが教えて頂ければと思います。
一応、全ての処理分を下に乗せました。
col1 = 3
col2 = 2
For col1 = 3 To 14
Sheets(3).Activate
Sheets(3).Range("A2:X100").Sort Key1:=Sheets(3).Cells(2, col1),Order1:=xlDescending, Header:=xlYes, OrderCustom:=1,MatchCase:=False, Orientation:=xlTopToBottom, SortMethod:=xlPinYin,DataOption1:=xlSortNormal
Sheets(3).Range("B3:B100").Copy Sheets(2).Range(Cells(3, col2 - 1), Cells(100, col2 - 1))
Sheets(3).Range(Sheets(2).Cells(2, col1), Sheets(2).Cells(100, col1)).Copy Sheets(2).Range(Sheets(2).Cells(2, col2), Sheets(2).Cells(100, col2))
col2 = col2 + 2
Next col1
No.3
- 回答日時:
Sheets(3).Range("B3:B100").Copy _
Sheets(2).Range(Cells(3, col2 - 1), Cells(100, col2 - 1))
これは、まず
Sheets(3).Range("B3:B100").Copy
はOKですね。直接指定なので。
Sheets(2).Range(Cells(3, col2 - 1), Cells(100, col2 - 1))
これがOKなのは多分偶然です。
多分たまたまSheet(2)を開いてVBAを実行してませんか?
Cellsと指定せずに書くと、今アクティブなシートのCellsを使います。
なので、逆に言うとSheet(3)を開いた状態で実行するとエラーになりますよ。
更に補足すれば
下の文では
Sheets(3).Range(Cells(2, col1), Cells(100, col1)).Copy
ですが、Sheet(2)を開いた状態で実行すると
Sheets(3).Range(Sheets(2).Cells(2, col1), Sheets(2).Cells(100, col1)).Copy
という意味になっちゃうので、
"シート3"の中の、"シート2"の2,col1から100,col1まで
っていう矛盾した文になるのでエラーになるんです。
こういうエラーが起きにくくするために、多少複雑なVBAの時のCellsやRangeなどは全てシートを指定してあげた方が問題が起きなくて良いですよ。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 形式を選択して貼り付け 以下のコードで「元」シートと「先」シートのA列に同じ値があったら指定範囲をコ 5 2022/11/11 07:30
- Visual Basic(VBA) ExcelVBAでDo Until loopのネスト、IF文を使って一致する物と一致しない物としたい 11 2022/12/24 17:46
- Visual Basic(VBA) VBA 請求書自動作成 3 2022/04/24 01:58
- Excel(エクセル) エクセル VBAの構文について 2 2023/02/10 18:26
- Excel(エクセル) VBAのoffsetの動き方について教えてください 3 2022/11/25 23:36
- Excel(エクセル) マクロで最終行から上に検索を逆にしたい 1 2022/05/17 18:27
- Visual Basic(VBA) 4月~3月まで12カ月横に並んだ表へ指定範囲を貼り付けたい。 Sheet2の指定範囲、Range(" 2 2022/11/30 16:37
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
別のシートから値を取得するとき
-
Excel マクロについての相談
-
別のシートを参照して計算する方法
-
エクセルのマクロについて教え...
-
ブック名、シート名を他のモジ...
-
VBA 最終行まで数式をコピーする
-
【ExcelVBA】全シートのセルの...
-
特定の文字を含むシートだけマ...
-
エクセルのマクロについて教え...
-
VBA 入力月で該当シートを選択...
-
一括印刷マクロ シート名を数字...
-
【ExcelVBA】動的にボタン、ボ...
-
VBA 存在しないシートを選...
-
同じ作業を複数のシートに実行...
-
ListViewの画面の更新
-
実行時エラー1004「Select メソ...
-
シートが保護されている状態で...
-
エクセルで通し番号を入れてチ...
-
【VBA】指定した検索条件に一致...
-
ユーザーフォームに入力したデ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
別のシートから値を取得するとき
-
ユーザーフォームに入力したデ...
-
【ExcelVBA】全シートのセルの...
-
同じ作業を複数のシートに実行...
-
Excelマクロのエラーを解決した...
-
excelのマクロで該当処理できな...
-
XL:BeforeDoubleClickが動かない
-
ExcelVBA シート名を複数セルか...
-
実行時エラー'1004': WorkSheet...
-
VBA 存在しないシートを選...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
ブック名、シート名を他のモジ...
-
【Excel VBA】Worksheets().Act...
-
ExcelのVBAのマクロで他のシー...
-
エクセルのシート名変更で重複...
-
特定の文字を含むシートだけマ...
-
シートが保護されている状態で...
-
Excel マクロについての相談
-
VBA 検索して一致したセル...
おすすめ情報