- ベストアンサー
VBでEXCELシートのコピーと名前変更方法、およびセルの操作方法
- VBでEXCELのシートを同一Book内でコピーする際に、コピー先のシート名を変更する方法と、追加したシートのセルを操作する方法について教えてください。
- コピー元のシート名が変わってしまう問題に対して、コピー先のシート名を変更する方法を教えてください。
- 追加したシートのセルに値を入力するためには、どのような記述をすれば良いでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
う~ん サンプルのステートメントをよく噛みしめていますか? 現在のシート数はどうやって求めましたか? Worksheets.Count ですよね。これが常に現在の シート数を持っているのです。コピーして、シートが 増えたらこのCountプロパティも増えます。 論理的には以下のようなコードになるでしょう。 Dim 現シート数 As Integer Dim 最終シート As Excel.Worksheet Dim 最新シート As Excel.Worksheet Do '末尾にシートをコピーする 現シート数 = xlBook.Worksheets.Count 最終シート = xlBook.Worksheets(現シート数) xlSheet.Copy(After:=最終シート) 最新シート = xlBook.Worksheets(現シート数 + 1) '***** 何らかの処理 ***** If 終了 Then Exit Do Loop 尚、最初からシート数が分かっているような実務は 殆どありませんよ。30年以上この商売してますが、 そんなのは1回あったかなかったくらいです。 ついでに言うと、複数形のものはコレクション、 単数形のものはオブジェクトと言います。 Workbooksはコレクションで、Workbookの集合です。 だから、Count(個数)があり、メンバを追加する意味で Add(新規ブック作成)やOpen(既存ブックを開く)という メソッドがあります。メンバを減らすのはCloseです。 同様にシートもWorksheetsとWorksheetがあります。 AddやCopyでメンバが増え、Deleteで削除されます。 コレクションからはインデックスか名前を指定すると オブジェクトが得られます。上記もインデックスで コレクションからオブジェクトを得ていますよね。 こういう関係を知らないと正確なプログラムは作れ ません。
その他の回答 (2)
- nda23
- ベストアンサー率54% (777/1415)
「末尾に新しく作る」ということは 「今あるシート数」の後に作るということです。 Dim 現シート数 As Integer = xlBook.Worksheets.Count Dim 最後のシート As Excel.Worksheet = xlBook.Worksheets(現シート数) xlSheet.Copy(After:=最後のシート) Dim 新シート As Excel.Worksheet = xlBook.Worksheets(現シート数 + 1) 当然ですがコピーでできたシートのインデックスは 現シート数+1ですね。
お礼
教えて頂き、本当にありがとうございます。 ようやく理解できてきました。 ただ、最後にもう1点だけ確認させて下さい。 何度も申し訳ありません。 教えて頂いた方法でシートを追加していく際に、あらかじめシートをどのくらい用意 するかがわかっていれば、そのシート分、教えて頂いた記述をすれば良いかと思われ ますが、データの件数、分岐条件によってどのくらいシートを用意するかわからない場合、 その都度シートを追加していかなくてはならない場合は、どのような形で記述すれば 良いでしょうか。。。 数シートであれば、私が宣言したように、現シートや最後のシートを xlSheet1,xlSheet2,xlSheet3・・・ と増やして宣言し、認識する事が可能ですが、何シートか不明の場合は、、、、 変数を動的に指定する事とかで対応するのでしょうか??? 教えて下さい。
- nda23
- ベストアンサー率54% (777/1415)
>元のシート名が変わってしまいます だって、そういうコーディングですよ。 >'シートのコピー >xlSheet.Copy(After:=xlSheet2) >'シートに名前を付ける >xlSheet.Name = "TEST" xlSheetは元のシートじゃないですか。 コピーされてできた新しいシートは 次のように求めます。 Dim 新シート As Excel.Worksheet = xlBook.Worksheets(xlSheet.Index + 1) 新シート.Name = "TEST" xlSheetの後ろに作ったのでIndexは xlSheetのIndex+1になります。
お礼
早速のご回答ありがとうございます。 新しいシートの求め方、ようやく理解し、正しく変更する事ができました。 もう1点だけこれに関連して教えて下さい。 今、2シートできている状態ですが、もう1シート、末尾に追加したい場合はどのように 記述すれば良いでしょうか? 大変申し訳ありませんが、教えて頂ければ幸いです。
お礼
ご回答ありがとうございます。 細かな部分まで教えて頂き、考えていたような事ができるように なりました。 私ももう少し知識を増やさないとダメですね。。。 ありがとうございました。