
エクセルのマクロ初心者です。
いつもここで他の方のQ&Aを参考にしたり、自分で質問したりしてお世話になっています。
今回は、参照先のブックを開かずにその内容をコピーする方法についてお聞きしたいです。
現在、下記のようなマクロを組んでいます。
Workbooks.Open FileName:="BookA.xls"
Sheets("Sheet1").Activate
Range("B4:H4").Copy
Windows("BookB.xls").Activate
Sheets("Sheet2").Select
Range("B1").Select
Sheets("Sheet2").Paste
Workbooks("BookA").Close
Windows("BookB").Activate
つまり、BookAのセルの一部分をコピーしてBookBのセルに貼り付けるという内容なんですが、コピー参照先のBookAを一度開いてコピーしてからBookBに行って貼付け、さらにBookAを閉じた後でBookBに再び戻る、という動作になっているため、画面がパラパラと切り替わる時間があって少々うっとおしいのです。
BookAをいちいち開かずに内容をコピーする方法があると思うのですが、どのような構文を使えばいいでしょうか?
ご回答よろしくお願いします。

No.4
- 回答日時:
ANo.3です。
BookAは、開きます。
小生の環境では、スクリプトは問題なく働きます。
ステップ動作で、エラーになった場所、及び、エラーメッセージを
教えていただけませんか?
注:小生の示したスクリプトでは、"Sheet1"になっていました。
貴兄のサンプルでは、"Sheet2"でしたが・・・・・
この回答への補足
私がNo.3の意図を取り違えていたのですね…。
BookAもBookBも開いているというのが最初の設定でしたか。
ただ私は、BookB上で作業中にBookAを閉じたままその内容をコピーして来たかったんです。
説明不足ですみませんでした。
No.1の回答をくれた方の方法で、パーフェクトではないですが何とかなりそうなので応用してみます。
お手数おかけしました。ありがとうございました。

No.3
- 回答日時:
下記のスクリプトを見ていただけますか。
2つのファイルは開いているのですが、表に出ているファイルは、BookBのままです。
裏に存在するBookAから、そっとコピーしてきて、表に見えているBooKAに貼り付けてくれます。
Sub test()
mydirectory = ThisWorkbook.Path
Workbooks.Open Filename:=mydirectory & "\" & "BookA.xls"
Workbooks.Open Filename:=mydirectory & "\" & "BookB.xls"
Workbooks("BookA.xls").Worksheets("Sheet1").Range("B4:H4").Copy Workbooks("BookB.xls").Worksheets("Sheet1").Range("B1")
Workbooks("BOOKA.XLS").Close SaveChanges:=False
End Sub
小生も、その昔は、すべてActive或いは、selectしてやっていました。
でも、上に示すような方法で、今では、activate、selectは、ほとんど使っていません。
ソートなんかも、下記のように書けば、裏でやってくれます。
Workbooks("BookA.xls").Worksheets("Sheet1").Range("A1:C20").Sort _
Key1:=Workbooks("BookA.xls").Worksheets("Sheet1").Columns("A"), _
Key2:=Workbooks("BookA.xls").Worksheets("Sheet1").Columns("B"), _
header:=xlYes
bookや、sheetを明示的に、示すことで、いちいち、selectすることは必要ないのです。
ここで、いちいち、Workbooks("BookA.xls").Worksheets("Sheet1").と書くのは
面倒だと言うことになります。そのためには、 withを使います。
With Workbooks("BookA.xls").Worksheets("Sheet1")
.Range("A1:C20").Sort _
Key1:=.Columns("A"), _
Key2:=.Columns("B"), _
header:=xlYes
end with
貴兄の目標に対し、上記は、きっと役に立つのではないかと考えました。
参考にしていただければ、幸いです。
ご丁寧な説明をありがとうございました。
ソートのやり方も、今後の参考になると思います。プラス@のご提案までありがとうございます。
ただ、教えていただいたものを応用してみてもエラーが出てうまく作動はしてくれませんでした…。
BookAもしっかり開いてしまいました…。
No.2
- 回答日時:
将来も使える保証はありませんが
>参照先のブックを開かずに
が重要なら、MACRO4.0機能を用いてBookA.XLSを開かずにセルの値を取得することは可能です。
Sub Macro()
Dim i as Integer
For i = 2 To 8 'B列からH列まで繰り返し
WorkSheets("Sheet2").Cells(2 , i).Value = ExecuteExcel4Macro ( _
"'d:\Temp\[BookA.xls]Sheet1'! R4" & "C" & i )
Next i
End Sub
ExecuteExcel4Macro内のセルはR1C1形式で指定する必要があります。
過去の質問や、Googleで検索すると色々なサンプルが見つかります。
MACRO4.0機能というのがよくわからず、今回この方法を採用するのは見送らせてもらいましたが、こういうやり方もあるというので参考になりました。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
WorkBooksをオープンさせずにシートにコピーしたい【EXCEL VBA】
Excel(エクセル)
-
VBA 別ブックからコピペしたいのですが、軽くしたいです
Visual Basic(VBA)
-
保存ブックを開かずコピーペーストするマクロ作成について
Excel(エクセル)
-
-
4
VBAで複数のブックを開かずに処理する方法
Visual Basic(VBA)
-
5
ファイルを閉じたままの外部参照で最終行の行数取得
Visual Basic(VBA)
-
6
別ブックをダイアログボックスで指定してそこにあるシートをコピーしたい
Excel(エクセル)
-
7
Excel VBA別ブックのシートをコピーするには
Visual Basic(VBA)
-
8
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
9
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
10
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
11
VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。
Visual Basic(VBA)
-
12
VBA シートのボタン名を変更したい
Visual Basic(VBA)
-
13
エクセルVBAで、条件に一致するセルへ移動
Excel(エクセル)
-
14
EXCEL VBA セルに既に入力されている文字に文字を追加する
Excel(エクセル)
-
15
エクセルVBAでセルに入力したパスでブックを開く
Excel(エクセル)
-
16
excelのマクロで該当処理できなければ飛ばして進むにはどうすればよいのでしょうか
Visual Basic(VBA)
-
17
【VBA】コピー&複数個所のペースト繰り返し
Excel(エクセル)
-
18
Excel VBA、 別ブックの最終行セルへのコピー&値ペースト
Visual Basic(VBA)
-
19
エクセルのVBAでクリップボードにコピーした画像をpng(or jpg or bmp)保存したい
Visual Basic(VBA)
-
20
特定のPCだけ動作しないVBAマクロがあります。その理由は?
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルのアポストロフィを一...
-
エクセル:マクロ「Application...
-
エクセルで勝手に「折り返して...
-
エクセルで隣接していない複数...
-
メールソフト「サンダーバード...
-
エクセルの2ページ目の作り方
-
Excel 行の連続データを列に参...
-
EXCEL数値が存在する列の項目名...
-
エクセル コピーしたデータを1...
-
「選択範囲を解除してアクティ...
-
エクセル 別シートへのコピー...
-
エクセルで「コピーしたセルの...
-
エクセルで、選択範囲の数値全...
-
Excelに、ダブルクォーテーショ...
-
エクセルで値だけコピーして背...
-
Excelで値をコピーするとセルの...
-
EXCELのオートフィルの設定を変...
-
Excel 他のファイルからシート...
-
【Excel】複数セルにまたがる文...
-
結合したセルを1つのセルにコピ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセル:マクロ「Application...
-
エクセルのアポストロフィを一...
-
エクセルで勝手に「折り返して...
-
エクセルで隣接していない複数...
-
Excel 行の連続データを列に参...
-
エクセルの2ページ目の作り方
-
メールソフト「サンダーバード...
-
Excelに、ダブルクォーテーショ...
-
エクセルで、選択範囲の数値全...
-
「選択範囲を解除してアクティ...
-
エクセルで「コピーしたセルの...
-
エクセル 別シートへのコピー...
-
エクセルで値だけコピーして背...
-
エクセルのコピペでクリップボ...
-
エクセルでの行数・列数を指定...
-
EXCEL数値が存在する列の項目名...
-
EXCELのオートフィルの設定を変...
-
行数の違う表に複数行をコピーする
-
Excelでコピーした行の挿入を繰...
-
エクセル コピーしたデータを1...
おすすめ情報