• ベストアンサー

エクセルVBAで

A.xlsを開き、B.xlsも追加で開いた状態で、ウインドウAをアクティブにした状態でマクロを実行します。ウインドウAのB1の値を、ウインドウBのA1に入れたいので、 Windows("B.xls").Range("A1") = Range("B1") と書きましたが、エラーになります。どのように表記するのが正しいのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.1

Workbooks("B").Worksheets("sheet1").Range("A1") = ActiveSheet.Range("B1") ではどうですか?

cmc32000
質問者

お礼

この書式でうまくいきました。 取り敢えずアクティブなシートは固定されているので、シート名を省略しましたが、これが失敗の元でした。

その他の回答 (2)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

Workbooks("B.xls").Worksheets("Sheet1").Range("A1") = Workbooks("A.xls").Worksheets("Sheet1").Range("B1")

cmc32000
質問者

お礼

省略しないで、ということですね。ありがとうございました。

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.2

エクセルでは、アクティブなウィンドウのセルなら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") だけの代入の場合、動作タイミングなどの動作状態によって毎回違ったシートから転記される事になり、望んだ動作をしない場合があります。

cmc32000
質問者

お礼

シートをアクティブにしたくなかったのですが、下手な省略はエラーの元ですね。ありがとうございました。

関連するQ&A