
【質問】
以下のコードは、転記元ブックから転記先ブックへセルの値をコピー・貼付します
最初、Workbooks("転記元.xlsm").Activate の記述をしなかった場合エラーとなりました
追加後は動きました
ここで質問ですが
以下の記述の前にも Workbooks("転記先.xlsm").Activate を入れなくても
動くのでしょうか?(なぜ動くのでしょうか)
Workbooks("転記先.xlsm").Worksheets("Sheet1").Cells(1, 1).PasteSpecial xlPasteValues
という質問です
自分のイメージは以下のイメージなためです
●転記元ブック アクティブ
⇒転記元ブックのデータをコピー
●転記先ブック アクティブ・・・・・この記述がないと、マクロが転記先へ移動しないと思います
が実際は、移動して、貼付の実行をしてくれます
⇒転記先へデータを貼付
ご存じの方、ご指導お願いします
【コード動きます】
Sub 転記()
Dim lastrow As Long
lastrow = Workbooks("転記元.xlsm").Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row
Workbooks("転記元.xlsm").Activate
Workbooks("転記元.xlsm").Worksheets("Sheet1").Range(Cells(1, 1), Cells(lastrow, 3)).Copy
Workbooks("転記先.xlsm").Worksheets("Sheet1").Cells(1, 1).PasteSpecial xlPasteValues
End Sub
No.2ベストアンサー
- 回答日時:
こんばんは
エクセルの気持ち(?)になって考えてみましょう。
「A1セルの値を読んで」と言われても、シートが沢山あるとどのシートのA1セルのことなのかわかりません。
この場合は、エクセルはアクティブなシートのA1セルを読みに行きます。
同様に、複数のブックが開いているときに、
「シート1のA1セルを読んで」と言われても、どのブックかわからないので、アクティブなブックのシート1を読みに行きます。
一方で、
「ブックAのシート1のA1セルを読んで」と言われれば、曖昧なところはなくなるので、アクティブなブックやシートが何であっても、正しく「ブックAのシート1のA1セル」を読みに行きます。
それだけの話です。
No.3
- 回答日時:
>>Rangeの中でCellsを使う場合は、前もって.Activate記述が要ります。
vbaの仕様です。
Rangeの中でと言う事じゃ無いです。
この場合、たまたまそうなってるだけです。
RangeはWorkbooksとWorksheetsを明示して使ってるけど、Cellsは何も明示しないでイキナリCellsを使ってるからです。
No.1
- 回答日時:
Workbooks("転記元.xlsm").Worksheets("Sheet1").Range(Cells(1, 1), Cells(lastrow, 3)).Copy
この記述が問題なのです。
Rangeの中のCellsは、ブック・シートを省略するとアクティブブック・シートの事になります。
転送先のSheet1がアクティブになっていたり、転記元の別シートがアクティブになってたとしたら、変な事になります。
なので、Rangeの中でCellsを使う場合は、前もって.Activate記述が要ります。
vbaの仕様です。
Activate記述をしたく無いなら、以下の様にCellsにブック・シートを指定したフル記述します
Workbooks("転記元.xlsm").Worksheets("Sheet1").Range(Workbooks("転記元.xlsm").Worksheets("Sheet1").Cells(1, 1), Workbooks("転記元.xlsm").Worksheets("Sheet1").Cells(lastrow, 3)).Copy
以下、勉強になりました。ご指摘ありがとうございます。
Rangeの中でCellsを使う場合は、前もって.Activate記述が要ります。
vbaの仕様です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
別ブックをダイアログボックス...
-
オブジェクトは、このプロパテ...
-
VBAで別ブックのシートを指定し...
-
ADOで複数のBookから抽出
-
ワイルドカード「*」を使うとう...
-
VBA 別ブックからコピペしたい...
-
VBA シートをコピーする際に Co...
-
VBAで別のブックにシートをコピ...
-
コードを直していただきたいで...
-
VBA シート名が一致した場合の...
-
エクセルVBAが途中で止まります
-
Excelマクロ 該当する値の行番...
-
VBSでExcelのオープン確認
-
ExcelVBA:すでに開かれている...
-
拡張メタファイルにて貼り付け
-
エクセルVBAでテキストボックス...
-
VBA 特定のユーザーのみパス...
-
Book間の移動
-
Excel マクロ ファイルと同じシ...
-
VBの処理結果をEXCELシ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
複数のエクセルファイルとシー...
-
VBA シートをコピーする際に Co...
-
別ブックをダイアログボックス...
-
VBA 別ブックからコピペしたい...
-
エクセルVBAが途中で止まります
-
ワイルドカード「*」を使うとう...
-
VBAで別のブックにシートをコピ...
-
VBA コードを実行すると画面が...
-
VBAで別ブックのシートを指定し...
-
【ExcelVBA】zip圧縮されたCSV...
-
【Excel VBA】書き込み先ブック...
-
2つ目のコンボボックスが動作...
-
[Excel]ADODBでNull変換されて...
-
Excelマクロ 該当する値の行番...
-
VBA 実行時エラー 2147024893
-
Excelのマクロコードについて教...
-
Excel にて、 リストボックスの...
-
【ExcelVBA】インデックスが有...
-
VBA アプリケーション定義また...
-
【Excel VBA】表の列の値毎に分...
おすすめ情報