読者です 読者をやめる 読者になる 読者になる

役に立つか?VBAメモ

仕事で使ったVBAをメモっとく

自動で名前の付いたシートを作成する

VBA Excel

先日、新規ブックを作成するにあたり、シートを16コ作らねばなりませんでした。
Sheet1の横にある【+】をポチポチクリックすればシート”だけ”は出来ますよ。
sheet2、sheet3、sheet4・・・・・sheet16ってね。
これをまた一つ一つシート名を変えていくのは面倒、と言うより辛い。
でも変えないと後々もっと面倒なことになることは分かってます。

そこでググってみよう!先駆者の知見を掠め取って、学んで見よう!

 

 

その1
VBAでシートを追加して、ついでに名前もリストから付けていってしまおうヽ(=´▽`=)ノ

①ブック作成
②sheet1の名前は取り敢えず【list】と名付けよう
③セルA1から順にA5までシートにつける名前を1セルにつき1つ記入しよう
④VBEで下記マクロ作成

Sub シート作成()
Dim SheetName As Range
For Each SheetName In Selection
Sheets.Add After:=Sheets("list")
ActiveSheet.Name = SheetName.Value
Next SheetName
End Sub

⑤マクロ実行

 

f:id:jus7733:20170112101538j:plain

このような感じでできあがりました。

でもなんか逆順(降順)じゃない?

これでも構わないのですが、ちょっと気持ち悪い。

 

 

その2
その1ではリストに対してシートが左から製品(n>4>3>2>1)ってなっててちょっとやだ(´・ω・`)
それなので単純に逆順でやればいい。

①ブック作成
②sheet1の名前は取り敢えず【list】と名付けよう
③セルA1から順にA5までシートにつける名前を1セルにつき1つ記入しよう
④VBEで下記マクロ作成

Sub シート作成2()
Dim SheetName As Range
Dim n As Long
n = 5
For Each SheetName In Sheets("list").Range("A1:A5")
Sheets.Add After:=Sheets("list")
ActiveSheet.Name = Sheets("list").Range("A" & n).Value
n = n - 1
Next SheetName
End Sub

⑤マクロ実行

 

f:id:jus7733:20170112101757j:plain

セルA1からの順送りではなくA5から遡っているだけ。
ただそれだけ。

左から昇順なので気分いい?

 

 

折角なので・・・


リストからシートを作成したので次はシート名を取得してリスト化するやつ。

①シート名を取得したいブックを開く
②シート【list】を追加作成
③下記マクロ作成

Sub シート名取得()
Dim SheetName As Object
Dim n As Long
n = 1
For Each SheetName In Sheets
Sheets("list").Range("A" & n).Value = SheetName.Name
n = n + 1
Next
End Sub

④マクロ実行
⑤シート【list】A1~にシート名一覧ができている、でしょ?

 

f:id:jus7733:20170112102006j:plain

 

単純なマクロですが、作業効率的には面倒さ加減が大分減るので良い!と思います。

大したことないと云えば、大したことないですがね。