- ベストアンサー
エクセルVBAで
A.xlsを開き、B.xlsも追加で開いた状態で、ウインドウAをアクティブにした状態でマクロを実行します。ウインドウAのB1の値を、ウインドウBのA1に入れたいので、 Windows("B.xls").Range("A1") = Range("B1") と書きましたが、エラーになります。どのように表記するのが正しいのでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
Workbooks("B").Worksheets("sheet1").Range("A1") = ActiveSheet.Range("B1") ではどうですか?
その他の回答 (2)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
Workbooks("B.xls").Worksheets("Sheet1").Range("A1") = Workbooks("A.xls").Worksheets("Sheet1").Range("B1")
お礼
省略しないで、ということですね。ありがとうございました。
- hana-hana3
- ベストアンサー率31% (4940/15541)
エクセルでは、アクティブなウィンドウのセルならRange("B1")と指定しても間違いにはなりませんが、指定すべき物はきちんと指定した方が良いでしょう。 >Windows("B.xls").Range("A1") = Range("B1") という表記には間違いがあります。 理由は、ブック名のオブジェクトにセルを指定しているからです。 ブック名.シート名.セル の順番で指定しないと正しく動作しません。 Windows("B.xls").Sheets("シート名").Range("A1") = Windows("A.xls").Sheets("シート名").Range("B1") 若しくは、 Windows("A.xls").Activate Sheets("シート名").Activate Windows("B.xls").Sheets("シート名").Range("A1") = Range("B1") のように、アクティブなシートやブックを指定しておかないと、= Range("B1") だけの代入の場合、動作タイミングなどの動作状態によって毎回違ったシートから転記される事になり、望んだ動作をしない場合があります。
お礼
シートをアクティブにしたくなかったのですが、下手な省略はエラーの元ですね。ありがとうございました。
お礼
この書式でうまくいきました。 取り敢えずアクティブなシートは固定されているので、シート名を省略しましたが、これが失敗の元でした。