- ベストアンサー
VBAでシートのコピーに関する問題とエラーメッセージの解決方法
- VBAを使用してシートを別のワークブックにコピーする方法について質問します。マクロを実行すると、指定されたシート名のシートが作成されます。その後、コピーするシート名を配列に格納し、それを使用してシートをコピーしようとしています。しかし、実行時エラーが発生し、「インデックスが有効範囲にありません」というエラーメッセージが表示されます。
- エラーメッセージによれば、配列参照のインデックスが有効範囲外であるということです。しかし、配列を直接指定する方法では正常に動作します。この問題の解決策は何でしょうか?初心者にとっては基本的な問題かもしれませんが、どなたか教えていただけますか?
- VBAを使用してシートを別のワークブックにコピーしようとしていますが、配列を使用してオブジェクトを指定する場合にエラーが発生します。配列を直接指定する方法では正常に動作しますが、配列に格納してから指定する場合にエラーが発生します。このエラーの原因と解決方法をご教示ください。お願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
質問のコードを使用するなら Sub test() Dim i Dim CopySheet Dim strA(2) strA(0) = "sheet1" strA(1) = "sheet2" strA(2) = "sheet3" 'シートのコピー For i = 0 To UBound(strA) If i = 0 Then CopySheet = strA(i) ElseIf i > 0 Then CopySheet = CopySheet & "," & strA(i) End If Next i MsgBox CopySheet Sheets(Split(CopySheet, ",")).Copy End Sub こんな感じにしないとね 上のコードを要約すると Sub test() Dim i Dim strA(2) strA(0) = "sheet1" strA(1) = "sheet2" strA(2) = "sheet3" 'シートのコピー Sheets(Split(Join(strA()))).Copy End Sub こんな感じです 参考まで
その他の回答 (2)
- myRange
- ベストアンサー率71% (339/472)
回答1、myRangeです。 >ご回答どおりにやってみましたが、NGでした。 配列に入っているシートがないのでは? ま、それは置いといて、 新しいブックで下記を試してみてください。 質問者のExcelも新しいブックではシートが3枚開くという前提。 違ったら適宜変更のこと。 Sub test() Dim strA() As String ReDim strA(1) strA(0) = "Sheet2" strA(1) = "Sheet3" Sheets(strA()).Copy End Sub 以上です。
- myRange
- ベストアンサー率71% (339/472)
あっさりと Sheets(strA()).Copy ではどうでしょうか。 以上です。
補足
ご回答どおりにやってみましたが、NGでした。 エラーメッセージは同じです。
お礼
Sheets(Split(CopySheet, ",")).Copy ↑ Splitを使ってやれば、簡単に出来るのですね。 文字列(CopySheet)を作るのに、必死になっていました・・・ 大変有難うございました。