『ブックのセルの一部をコピーしたい』(素浪人)
ブックのコピーをしたい
処理の流れは
1.ブックAを開く
2.ブックBを開く
3.ブックAのシートの一部をブックBにコピーする
4.ブックAを閉じる
5.ブックBを保存
6.ブックBを閉じる
この時ブックAとブックBが同じファイル名の時以下の
wbd.close でエラーが発生します。
Dim file As String, wbs As Workbook, wbd As Workbook
file = "C:\旧\データ.xlsm"
Set wbs = Application.Workbooks.Open(file)
file = "C:\新\データ.xlsm"
Set wbd = Application.Workbooks.Open(file)
' ここに wbs のシートの一部を wbd のシートにコピーする処理を入れる予定。
wbs.Close
wbd.Close
こういう場合にどうするのがいいのでしょうか?
以下のようにいくつか考えたのですが
いずれも処理時間が増えそうなのと、
いろいろな場合に対するエラー対処など面倒そうで
簡単な方法はないのでしょうか?
・コピー元のファイルを別名でコピーしてから開く
・コピー元を開いて、ブックを追加して
コピー元から、追加したブックにシートをコピーしてから
コピー元を閉じて、追加したブックのシートのデータを
コピー先にコピーする。
・コピー元を開いて、処理しているブックでシートを作成し、
コピーしてコピー元を閉じて、コピー先を開いて
処理ブックのシートからコピー先にコピーする。
< 使用 Excel:Excel2016、使用 OS:Windows11 >
1. データ元ブックを開いて全(必要な)シートを新規ブックにコピーする 2. データ元ブックを閉じる 3. 書込み先のブックを開いて、1で作成したブックからコピーする 4. ↑を上書き保存して閉じる 5. 1で作成したブックを保存せず閉じる
のような処理にすればよいと思います。
ただ、処理順をみればわかるように、データ元と書き込み先のブックとは別にマクロブックを用意することが前提になります。
(もこな2 ) 2025/07/03(木) 12:32:35
Sub さんぷる() Dim dstWB As Workbook
Stop 'ブレークポイントの代わり With Workbooks.Open("C:\旧\データ.xlsm") .Worksheets.Copy .Close End With
Stop 'ブレークポイントの代わり With Workbooks(Workbooks.Count) Set dstWB = Workbooks.Open("C:\新\データ.xlsm")
.Worksheets("hoge").Range("A1:D5").Copy dstWB.Worksheets("hoge").Range("A1") dstWB.Save dstWB.Close .Close False End With
End Sub
(もこな2 ) 2025/07/03(木) 12:52:42
他の案としては、コピー元のデータ構成がきちんと読み取りできる形であることを前提で
コピー先ブックを開いて、コピー元ブックからADO接続でデータをインポートするという手方も有ります。 この方法であればコピー元ブックを開かずに処理できます。 (jindon) 2025/07/03(木) 13:00:20
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.