• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBでEXCELのシートのコピーに関して)

VBでEXCELシートのコピーと名前変更方法、およびセルの操作方法

このQ&Aのポイント
  • VBでEXCELのシートを同一Book内でコピーする際に、コピー先のシート名を変更する方法と、追加したシートのセルを操作する方法について教えてください。
  • コピー元のシート名が変わってしまう問題に対して、コピー先のシート名を変更する方法を教えてください。
  • 追加したシートのセルに値を入力するためには、どのような記述をすれば良いでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.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で削除されます。 コレクションからはインデックスか名前を指定すると オブジェクトが得られます。上記もインデックスで コレクションからオブジェクトを得ていますよね。 こういう関係を知らないと正確なプログラムは作れ ません。

asamix_000
質問者

お礼

ご回答ありがとうございます。 細かな部分まで教えて頂き、考えていたような事ができるように なりました。 私ももう少し知識を増やさないとダメですね。。。 ありがとうございました。

その他の回答 (2)

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

「末尾に新しく作る」ということは 「今あるシート数」の後に作るということです。 Dim 現シート数 As Integer = xlBook.Worksheets.Count Dim 最後のシート As Excel.Worksheet = xlBook.Worksheets(現シート数) xlSheet.Copy(After:=最後のシート) Dim 新シート As Excel.Worksheet = xlBook.Worksheets(現シート数 + 1) 当然ですがコピーでできたシートのインデックスは 現シート数+1ですね。

asamix_000
質問者

お礼

教えて頂き、本当にありがとうございます。 ようやく理解できてきました。 ただ、最後にもう1点だけ確認させて下さい。 何度も申し訳ありません。 教えて頂いた方法でシートを追加していく際に、あらかじめシートをどのくらい用意 するかがわかっていれば、そのシート分、教えて頂いた記述をすれば良いかと思われ ますが、データの件数、分岐条件によってどのくらいシートを用意するかわからない場合、 その都度シートを追加していかなくてはならない場合は、どのような形で記述すれば 良いでしょうか。。。 数シートであれば、私が宣言したように、現シートや最後のシートを xlSheet1,xlSheet2,xlSheet3・・・ と増やして宣言し、認識する事が可能ですが、何シートか不明の場合は、、、、 変数を動的に指定する事とかで対応するのでしょうか??? 教えて下さい。

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

>元のシート名が変わってしまいます だって、そういうコーディングですよ。 >'シートのコピー >xlSheet.Copy(After:=xlSheet2) >'シートに名前を付ける >xlSheet.Name = "TEST" xlSheetは元のシートじゃないですか。 コピーされてできた新しいシートは 次のように求めます。 Dim 新シート As Excel.Worksheet = xlBook.Worksheets(xlSheet.Index + 1) 新シート.Name = "TEST" xlSheetの後ろに作ったのでIndexは xlSheetのIndex+1になります。

asamix_000
質問者

お礼

早速のご回答ありがとうございます。 新しいシートの求め方、ようやく理解し、正しく変更する事ができました。 もう1点だけこれに関連して教えて下さい。 今、2シートできている状態ですが、もう1シート、末尾に追加したい場合はどのように 記述すれば良いでしょうか? 大変申し訳ありませんが、教えて頂ければ幸いです。

関連するQ&A

専門家に質問してみよう