同一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も見ています
-
新NISA制度は今までと何が変わる?非課税枠の拡大や投資対象の変更などを解説!
少額から投資を行う人のための非課税制度であるNISAが、2024年に改正される。おすすめの銘柄や投資額の目安について教えてもらった。
-
VBで既存エクセルシートを新規ブックにコピー
Visual Basic(VBA)
-
VBからEXCELのセルの値を取得する方法
Visual Basic(VBA)
-
VB2010でExcelの行をコピーして挿入する
Visual Basic(VBA)
-
-
4
vb.netからエクセル関数書き込み
Visual Basic(VBA)
-
5
【VB.NET】Excelの最終行までの取得方法
Microsoft ASP
-
6
【VB6】EXCELのシート名を変更したい
Visual Basic(VBA)
-
7
VB.NETによるEXCELの行挿入
Visual Basic(VBA)
-
8
文字列の後ろから必要分だけ削除したい。
Visual Basic(VBA)
-
9
配列の重複する値とその個数を取得したい
Visual Basic(VBA)
-
10
FORMが開いているかどうかの確認方法
Visual Basic(VBA)
-
11
.NET上でエクセル上に罫線を引く
Visual Basic(VBA)
-
12
VBAで行コピーして挿入
Visual Basic(VBA)
-
13
開始と終了を指定して、その間の日付を取得したい。
C言語・C++・C#
-
14
Excel:印刷できる幅の調整はできますか
Visual Basic(VBA)
-
15
「エクセルファイルが開いていたら開かない」としたい
Visual Basic(VBA)
-
16
vb.net EXCEL ウィンドウ枠の固定について
Excel(エクセル)
-
17
【VB.NET】App.configにファイルパスを設定して読み込みたい
Microsoft ASP
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
別のシートから値を取得するとき
-
VBAの天才来てください
-
【ExcelVBA】全シートのセルの...
-
ユーザーフォームに入力したデ...
-
VBA 存在しないシートを選...
-
エクセルのシート名変更で重複...
-
XL:BeforeDoubleClickが動かない
-
同じ作業を複数のシートに実行...
-
ExcelVBA シート名を複数セルか...
-
エクセルのマクロでアクティブ...
-
【VBA】指定した検索条件に一致...
-
excelのマクロで該当処理できな...
-
VBAでオブジェクト変数にsetし...
-
エクセル・マクロ シートの非...
-
ブック名、シート名を他のモジ...
-
Excelマクロのエラーを解決した...
-
VBA 検索して一致したセル...
-
Worksheet_Changeの内容を標準...
-
シートが保護されている状態で...
-
エクセルVBAでダブルクリックを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
別のシートから値を取得するとき
-
ユーザーフォームに入力したデ...
-
Excelマクロのエラーを解決した...
-
excelのマクロで該当処理できな...
-
同じ作業を複数のシートに実行...
-
ExcelVBA シート名を複数セルか...
-
【ExcelVBA】全シートのセルの...
-
Excel マクロについての相談
-
VBA 存在しないシートを選...
-
実行時エラー'1004': WorkSheet...
-
特定の文字を含むシートだけマ...
-
ExcelのVBAのマクロで他のシー...
-
ブック名、シート名を他のモジ...
-
XL:BeforeDoubleClickが動かない
-
VBA 複数の各シートに行を追加...
-
エクセルのシート名変更で重複...
-
【Excel VBA】Worksheets().Act...
-
シートが保護されている状態で...
-
Excel VBA 複数行を数の分だけ...
-
for 文の 繰り返し処理に使える...
おすすめ情報