VBAなんだかんだ その1 シートを別ブックにコピー
やりたいこと
ここに2つのExcelブックがあります。
ファイルの名前 | シート | ||
---|---|---|---|
コピー元.xlsx | コピー元1 | コピー元2 | コピー元3 |
Book2.xlsx | Sheet1 | Sheet2 | Sheet3 |
[コピー元.xlsx]の[コピー元1]シートを[Book2.xlsx]にコピーしたい。
(ちなみに「Book2」は「Workbooks.Add」で追加された状態です)
調べる
とりあえず「vba シート コピー」とでも検索しましょう。
次の書き方でシートをコピーできるという情報をゲット。
Worksheets("[シート名]").Copy After:=Worksheets("[シート名]")
試す
実際に書いて実行してみます。
Sub bbb() Worksheets("コピー元1").Copy After:=Worksheets("Sheet1") End Sub
怒られる
インデックスが有効範囲にありません。
意味がわからない。
「vba シート コピー インデックスが有効範囲にありません」で検索します。
・・・・・・・・
なんとなく、シートの指定がおかしいのかな?
シートの指定方法
「vba シート指定」で、シート名ではなくシートのインデックスで指定できるという耳寄りな情報をゲット。
Sub bbb() Worksheets("コピー元1").Copy After:=Worksheets(1) End Sub
お、実行されましたよ
ファイルの名前 | シート | |||
---|---|---|---|---|
コピー元.xlsx | コピー元1 | コピー元1(2) | コピー元2 | コピー元3 |
Book2.xlsx | Sheet1 | Sheet2 | Sheet3 |
ヤッタネ!!
・・・いや、そうじゃないんだよ。
他のブックにコピーしたいんだよー
「vba 他のブックにシートをコピー」で仕切り直しです。
Sub bbb() Worksheets("コピー元1").Copy After:=Workbooks("Book2").Worksheets(1) End Sub
どうかな?
ファイルの名前 | シート | |||
---|---|---|---|---|
コピー元.xlsx | コピー元1 | コピー元2 | コピー元3 | |
Book2.xlsx | Sheet1 | コピー元1 | Sheet2 | Sheet3 |
いやー、できたできた。
余韻に浸る
よーし。もう1回やってみようかな。
ファイルの名前 | シート | ||
---|---|---|---|
コピー元.xlsx | コピー元1 | コピー元2 | コピー元3 |
Book2.xlsx | Sheet1 | Sheet2 | Sheet3 |
コピーしたシートを消して...
Sub bbb() Worksheets("コピー元1").Copy After:=Workbooks("Book2").Worksheets(1) End Sub
を実行、と。
怒られる
インデックスが有効範囲にありません。
どゆこと?
さっきはできたじゃん! 俺たちうまくいってたじゃん!
「vba さっきはできたのにできない」で検索します。
・・・・・・・・
いやあ、サスガに出てこないですね。
でもちょい待ち。
このエラー、さっきも出ましたな。
Sub bbb() Worksheets(1).Copy After:=Workbooks("Book2").Worksheets(1) End Sub
こういうこと?
ファイルの名前 | シート | |||
---|---|---|---|---|
コピー元.xlsx | コピー元1 | コピー元2 | コピー元3 | |
Book2.xlsx | Sheet1 | Sheet1(2) | Sheet2 | Sheet3 |
ムッ?
Book2のシートがコピーされてる...
じゃあ、
Sub bbb() Workbooks("コピー元").Worksheets(1).Copy After:=Workbooks("Book2").Worksheets(1) End Sub
こういうこと?
怒られる
インデックスが有効範囲にありません。
ハイハイ。
「vba ブックの指定」でちゃんと調べましょう。
・・・・・・・・
ふーん、そうかあ、なるほどねえ。
Windowsのフォルダ設定で「拡張子を表示する」になっている場合は、「Workbooks("コピー元")」じゃなくて「Workbooks("コピー元.xlsx")」じゃないとダメなのか。
え? でも「Workbooks("Book2")」は怒られなかったのに。
・・・・・・・・
はあ。保存してないブックは逆に拡張子をつけちゃいけないのね。
Book2は「Workbooks.Add」したてだもんね。
じゃあ、
Sub bbb() Workbooks("コピー元.xlsx").Worksheets(1).Copy After:=Workbooks("Book2").Worksheets(1) End Sub
こういうことでしょうか。
ファイルの名前 | シート | |||
---|---|---|---|---|
コピー元.xlsx | コピー元1 | コピー元2 | コピー元3 | |
Book2 | Sheet1 | コピー元1 | Sheet2 | Sheet3 |
できた...のか?
まとめ
とても疲れました(書くのが)