
同一Book内で、シートのコピーをしようと考えて、幾つかのHPを参考に、以下のような
記述をしました。
その際に、以下の記述をした場合、本来はコピー先のシート名を変更したいにも関わらず、コピー
元のシート名が変わってしまいます。
追加したシートの名前を変更させるには、どのような書き方にすれば良いでしょうか?
自分で記述しておきながら、どのように対応したら良いかわからず。。。
また、以下のような記述をした場合、追加したセル側のシートを操作したいにも関わらず、
コピー元のシートを書き換えてしまいます。
追加したシートのセルを操作したい(値を入力)ような場合は、どのような記述を
すれば良いでしょうか。。。
ご教授頂ければと思います。
'既存のEXCELファイルを開く
Dim xlFilePath As String = "C:\test.xls"
'起動時の処理
Dim xlApp As New Excel.Application
Dim xlBooks As Excel.Workbooks = xlApp.Workbooks
Dim xlBook As Excel.Workbook = xlBooks.Open(xlFilePath)
'確認のためExcelのウィンドウを表示する
xlApp.Visible = True
Dim xlSheets As Excel.Sheets = xlBook.Worksheets
Dim xlSheet As Excel.Worksheet = CType(xlSheets.Item(1), Excel.Worksheet)
Dim xlSheet2 As Excel.Worksheet = xlBook.Worksheets(1)
'シートのコピー
xlSheet.Copy(After:=xlSheet2)
'シートに名前を付ける
xlSheet.Name = "TEST"
Dim xlRange As Excel.Range
'データの入力セル範囲
xlRange = xlSheet.Range("A1:A1")
'セルへデータの入力
xlRange.Value = “AABBCC”
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で削除されます。
コレクションからはインデックスか名前を指定すると
オブジェクトが得られます。上記もインデックスで
コレクションからオブジェクトを得ていますよね。
こういう関係を知らないと正確なプログラムは作れ
ません。
ご回答ありがとうございます。
細かな部分まで教えて頂き、考えていたような事ができるように
なりました。
私ももう少し知識を増やさないとダメですね。。。
ありがとうございました。
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ですね。
教えて頂き、本当にありがとうございます。
ようやく理解できてきました。
ただ、最後にもう1点だけ確認させて下さい。
何度も申し訳ありません。
教えて頂いた方法でシートを追加していく際に、あらかじめシートをどのくらい用意
するかがわかっていれば、そのシート分、教えて頂いた記述をすれば良いかと思われ
ますが、データの件数、分岐条件によってどのくらいシートを用意するかわからない場合、
その都度シートを追加していかなくてはならない場合は、どのような形で記述すれば
良いでしょうか。。。
数シートであれば、私が宣言したように、現シートや最後のシートを
xlSheet1,xlSheet2,xlSheet3・・・
と増やして宣言し、認識する事が可能ですが、何シートか不明の場合は、、、、
変数を動的に指定する事とかで対応するのでしょうか???
教えて下さい。
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になります。
早速のご回答ありがとうございます。
新しいシートの求め方、ようやく理解し、正しく変更する事ができました。
もう1点だけこれに関連して教えて下さい。
今、2シートできている状態ですが、もう1シート、末尾に追加したい場合はどのように
記述すれば良いでしょうか?
大変申し訳ありませんが、教えて頂ければ幸いです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Visual Basic(VBA) 貼り付けた値が消えていく 以下はソースファイルの2番目のシートのB6から最終行を取得 ターゲットファ 2 2023/07/27 12:23
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Visual Basic(VBA) 特定の文字を含むシートだけマクロ処理をしたい 1 2023/05/22 01:43
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2022/03/25 08:33
このQ&Aを見た人はこんなQ&Aも見ています
-
VBで既存エクセルシートを新規ブックにコピー
Visual Basic(VBA)
-
VB.net(2005)でエクセルの特定名称のシートを操作したい。
Visual Basic(VBA)
-
.NET上でエクセル上に罫線を引く
Visual Basic(VBA)
-
-
4
エクセルの列一括書き込み
Visual Basic(VBA)
-
5
vb.netからエクセル関数書き込み
Visual Basic(VBA)
-
6
VB.NETでフォーム上にExcelのような表を表示する方法
Visual Basic(VBA)
-
7
VBからEXCELのセルの値を取得する方法
Visual Basic(VBA)
-
8
ピクチャーボックスの大きさに合わせて画像を表示
Visual Basic(VBA)
-
9
DataGridViewの内容をDBに反映する時
Visual Basic(VBA)
-
10
2次元動的配列の第一引数のみを可変にする
Visual Basic(VBA)
-
11
オラクルではできるのにSQLSERVERではサブクエリーで複数キーを指定できない?
SQL Server
-
12
CloseとDisposeの違い
Visual Basic(VBA)
-
13
vb.netによるEXCEL値取得
Microsoft ASP
-
14
バックグラウンドのプロセスのエクセルを閉じる方法
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
excelのマクロで該当処理できな...
-
Excelマクロのエラーを解決した...
-
エクセルで通し番号を入れてチ...
-
VBA 存在しないシートを選...
-
Worksheet_Changeの内容を標準...
-
【ExcelVBA】全シートのセルの...
-
特定の文字を含むシートだけマ...
-
エクセルVBA Ifでシート名が合...
-
VBA 指定した回数分、別シート...
-
実行時エラー1004「Select メソ...
-
実行時エラー'1004': WorkSheet...
-
非表示シートのマクロ実行
-
別のシートから値を取得するとき
-
VBAマクロでシートコピーした新...
-
ユーザーフォームに入力したデ...
-
ExcelのVBAのマクロで他のシー...
-
VBAで同じシート名のコピー時は...
-
エクセルVBA 別シートからのコ...
-
セルの値によって、シート見出...
-
XL:BeforeDoubleClickが動かない
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
特定の文字を含むシートだけマ...
-
Excelマクロのエラーを解決した...
-
excelのマクロで該当処理できな...
-
ユーザーフォームに入力したデ...
-
実行時エラー'1004': WorkSheet...
-
XL:BeforeDoubleClickが動かない
-
エクセルVBA Ifでシート名が合...
-
実行時エラー1004「Select メソ...
-
エクセルのシート名変更で重複...
-
【ExcelVBA】全シートのセルの...
-
VBA 存在しないシートを選...
-
ブック名、シート名を他のモジ...
-
Excel チェックボックスにチェ...
-
VBA 検索して一致したセル...
-
エクセルで通し番号を入れてチ...
-
シートが保護されている状態で...
-
【VBA】特定の文字で改行(次の...
-
ExcelのVBAのマクロで他のシー...
-
Worksheet_Changeの内容を標準...
-
EXCELVBAを使ってシートを一定...
おすすめ情報