【VBA】リストから新しいシートを作成する

エクセルに作成した「シート名リスト」を使って、新しく作成したシートの名前を変更するVBAです。

この記事では、シート名の変更とオートフィルタの設定を紹介します。

会社全体のデータを一つのシートにまとめてみたものの、それを営業所ごとに配布する時は、営業所のデータだけが欲しいって言われるんですよ。
他の営業所の数字はいらないって。

関係のないデータは不要ということですね。

データを作るたびに、オートフィルタで抽出して、新しいシートに貼り付けて、シート名を変更してって、面倒なんですよね。

それではまずはじめに、新しいシートを作成して、シート名を変更するVBAを紹介します。

目次

リストから新しいシートを作成するVBA

作成するシート名のリストを、Sheets「シート名」のA列に1行目から記載
シートは「シート名」のみとする

Sub シート作成()

Dim a, s, x, y As Long
Dim MemberN() As String

a = Sheets(“シート名”).Range(“A1”).End(xlDown).Row

ReDim MemberN(a – 1)

For s = 0 To a – 1
MemberN(s) = Sheets(“シート名”).Cells(s + 1, 1)
Next s

For x = 0 To a – 1
    Sheets.Add After:=Sheets(x + 1)
    Sheets(x + 2).Name = MemberN(x)
Next x

End Sub

新しいシートを作成するVBAの解説

作成するシート数をカウントする

MemberNにシート名のリストを格納する
※格納するボックスは0番目から始まるため「0→a-1」となる

格納されたリストの数だけ、新しいシートを右側に増やし、 シート名を変更する
(営業所ごとのシートを作成する)

次は、データシートをコピーして新しいシートを作成して、オートフィルタで抽出するVBAです。

新しいシートの作成とオートフィルタを同時に行うVBA

Sheets「データ」
1行目:タイトル
A列:営業所コード
その他の列に各種項目

Sheets「営業所」
1行目:タイトル
A列:営業所名
B列:営業所コード

Sub シート作成()

Dim a, b, s, x As Long
Dim MemberN() As String
Dim MemberE() As Long

a = Sheets(“営業所”).Range(“A1”).End(xlDown).Row
b = Sheets(“データ”).Range(“A1”).End(xlDown).Row

ReDim MemberN(a – 2)
ReDim MemberE(a – 2)

For s = 0 To a – 2
    MemberN(s) = Sheets(“営業所”).Cells(s + 2, 2)
    MemberE(s) = Sheets(“営業所”).Cells(s + 2, 1)
Next s

For x = 0 To a – 2
    Sheets(“データ”).Copy After:=Sheets(x + 2)
    With Sheets(x + 3)
        .Name = MemberN(x)
        .Rows(“1:1”).AutoFilter 1, MemberE(x)
    End With
Next x

End Sub

新しいシートの作成とオートフィルタを同時に行うVBAの解説

MemberNに営業所名を、MemberEに営業所コードをそれぞれ格納していく

Sheets「データ」を右側にコピーして増やし、 シート名を記入する
オートフィルタで営業所コードを抽出する

応用すれば営業所コードを範囲指定するなど可能です。

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!

この記事を書いた人

子育てに奮闘しながらも、再びガッツリ走り込める日を夢見るフルタイム会社員。

コメント

コメントする

CAPTCHA


目次
閉じる