今回、Excel VBAで紹介するのは、「シートがなければ追加」する方法を解説します。
業務をやっていると、従業員全員分の雇用契約書を作ったり顧客への請求書を人数分作ったりと数が多ければ多いほど手作業では大変な作業がたくさんあります。
そんなとき、今回紹介する方法を使えば簡単に全員分のシートを作成できるのでぜひやってみてください。
それでは行ってみましょう。
シートがなければ追加する方法
イメージは下記みたいな感じ。
マスタがあって人数分のシートを作成したい場合、シート作成ボタンを押すと、
ほら、全員分のシートが一発で完成。すごく便利。
これが100人とか1000人とか手作業でやっていたら数時間かかってしまう作業も、ボタン一つでしかも一瞬で作成することができます。
そしてソースコードは下記の通り。
Sub シートがなければ追加()
Dim ws As Worksheet, mstSht As Worksheet
Dim i As Long
Dim flg As Boolean
Set mstSht = ThisWorkbook.Worksheets("マスタ")
flg = False
For i = 2 To mstSht.Range("A10000").End(xlUp).Row
For Each ws In ThisWorkbook.Worksheets
If mstSht.Range("A" & i).Value = ws.Name Then
flg = True
MsgBox mstSht.Range("A" & i).Value & "のシートはすでに存在しています"
Exit For
End If
Next ws
If flg = False Then
With Worksheets.Add(after:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count))
.Name = mstSht.Range("A" & i).Value
End With
End If
Next i
mstSht.Select
MsgBox "処理が完了しました"
End Sub
For文、For Each文、If分の組み合わせでできちゃいます。
それでは解説していきます。
まずは、変数の定義から。
Dim ws As Worksheet, mstSht As Worksheet
Dim i As Long
Dim flg As Boolean
Set mstSht = ThisWorkbook.Worksheets("マスタ")
flg = False
ws = For Each文でワークシートを格納するため
mstSht = オブジェクト変数で「マスタシート」の定義
i = カウンター変数(人数)
flg = 真偽
上記のような感じで、変数を定義しておきましょう。
flgは「False」にしておいてください。
For文で人数分繰り返し
For文で2行目から、名前の最後まで繰り返すために下記のFor文を書きましょう。
For i = 2 To mstSht.Range("A10000").End(xlUp).Row
Next i
これでOK。この中に、さらにコードを書いていきます。
For Each文でシートの数分だけループ処理 & If分で条件分岐
定義した変数「ws」に、「ThisWorkbook.Worksheets」で全シートを取得して、一個一個代入していきます。
そして、マスタシートのRange(“A” & i).Value と一個目のwsの名前が一致していたら、もうシートがあるので、処理を中断して次のシートに行く処理を書きます。それがIf~End Ifの部分です。
「マスタシートのRange(“A2”)の値」と 「最初のワークシートの名前」が同じだったら、flgをTrueにして(シートが存在する)、シートがあるよ!って教えてあげて、For文を抜ける(Exit For)。
そして同じ名前のシートがなかったら、flgはFalseのままの場合は、新規でシートを作成して、名前を変えるようにします。
For Each ws In ThisWorkbook.Worksheets
If mstSht.Range("A" & i).Value = ws.Name Then
flg = True
MsgBox mstSht.Range("A" & i).Value & "のシートはすでに存在しています"
Exit For
End If
Next ws
If flg = False Then
With Worksheets.Add(after:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count))
.Name = mstSht.Range("A" & i).Value
End With
End If
こんな感じでOK。全員分のシートが作成できますね。
そして最後は、マスタシートを選ぶようにして、Msgboxで処理完了みたいに書けばすっきりOK。
mstSht.Select
MsgBox "処理が完了しました"
まとめ:応用すると、いろんなことができるよ
今回は、「シートがなければ追加」する方法をご紹介しました。
簡単で基礎的な処理だったので、今回の基礎を学習して応用すればもっと実務で活用できると思います。例えば、シートをコピーして人数分作るとか、所属によってコピーするシートを条件分岐して全員分のシートを作成するとか。
僕が紹介した方法よりももっと簡単にできたりわかりやすい方法があるかもしれないので調べてみるといいかもですね。
ということで、「シートがなければ追加」する方法でした。
Sub シートがなければ追加()
Dim ws As Worksheet, mstSht As Worksheet
Dim i As Long
Dim flg As Boolean
Set mstSht = ThisWorkbook.Worksheets("マスタ")
flg = False
For i = 2 To mstSht.Range("A10000").End(xlUp).Row
For Each ws In ThisWorkbook.Worksheets
If mstSht.Range("A" & i).Value = ws.Name Then
flg = True
MsgBox mstSht.Range("A" & i).Value & "のシートはすでに存在しています"
Exit For
End If
Next ws
If flg = False Then
With Worksheets.Add(after:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count))
.Name = mstSht.Range("A" & i).Value
End With
End If
Next i
mstSht.Select
MsgBox "処理が完了しました"
End Sub