- ベストアンサー
【EXCEL2007】VBAで変数に代入したい
- 新しいシートを複数挿入して、指定のシート名に変数を使って一括で指定する方法について教えてください。
- シート名を一つずつ手動で指定するのではなく、変数を使って一括で指定する方法について教えてください。
- VBAを使用して、新しいシートを複数挿入する際に、変数を使ってシート名を一括で指定する方法を教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
同じく「配列関数(Array関数)」を使うやり方です。 まぁ、書き方色々と言うことで。 Sub Sample() Dim SHName As Variant SHName = Array("北海道", "青森") For i = LBound(SHName) To UBound(SHName) Sheets.Add(after:=Worksheets(Worksheets.Count)).Name = SHName(i) Next i End Sub UBound(配列)で要素の数を調べることができるので、それを利用しています。 要素数の開始は0なので、正確にはUBound(配列)+1が要素数ですね。 開始位置はLBound(配列)で確認します。通常は「0」です。 ちなみに、#2さんの書き方だと「シートを追加⇒名前を変更」と言う処理、 上記の書き方だと、「名前を指定してシートを追加」と言う処理。 この違いです。 この辺は「好み」ですので、「ご自身好み」の書き方を見つけてくださいませ。 私の好みをザックリ紹介させていただくと、 「シートを追加して終わる処理はあり得ない=追加したシートに何らかの操作をする」 と言う考え方の基に、追加するシートをそのまま変数に持ってしまう書き方。 Sub Sample2() Dim NewSH As Worksheet Dim SHName As Variant SHName = Array("北海道", "青森") For i = 0 To UBound(SHName) Set NewSH = Sheets.Add(after:=Worksheets(Worksheets.Count)) With NewSH .Name = SHName(i) .Range("A1") = SHName(i) ' その他の操作 End With Next i End Sub こんな感じです。 参考までにどうぞ。
その他の回答 (2)
- mu2011
- ベストアンサー率38% (1910/4994)
配列に一括設定しては如何でしょうか。 Dim 変数A, st 変数A = Array("北海道", "青森", "秋田", "沖縄") For Each st In 変数A Worksheets.Add after:=Worksheets(Worksheets.Count) ActiveSheet.Name = st Next
お礼
ご教授いただき、ありがとうございます! For EachがRangeに使えるのは知ってたんですが、 こういう使い方もできるんですね! 勉強になりました! ありがとうございました~!!
- MSZ006
- ベストアンサー率38% (390/1011)
配列変数を使います。 Sub tst() Dim a(47) a(1) = "北海道" a(2) = "青森" '....以下同様に a(47) = "沖縄" For i = 1 To 47 Worksheets.Add after:=Worksheets(Worksheets.Count) ActiveSheet.Name = a(i) Next i End Sub
お礼
ご教授いただき、ありがとうございます! 配列変数なるものは知らなかったので、 勉強になりました。 ただ、a(1)の部分も簡略化出来たら…と思います。 さすがに47シートはないですが、 結構なシート数があるもので… ありがとうございました!
お礼
仕事が忙しくなり、お礼が遅れてしまいました。 申し訳ありませんでした! とても詳しく書いていただき、ありがとうございます。 複数シートを選択するときに使ってたArrayが、 変数を指定するときにも使えるなんて! と、こんなレベルです^^; LBound・UBound関数も、はじめて知りました! なるほど、便利ですねー。 たくさん処理するときは非常に助かります♪ tsubuyuki様がいつも使われている方法も、 参考にさせていただきたいと思います。 大変勉強になりました、ありがとうございました!!!