Excel VBA 新しくシートを作ったときに処理をする-NewSheet

Excel VBAでシートを新しく作ったときに、自動で処理を実行する記録です。

シートが作成されたときに処理を実行するには「NewSheet」イベントを使います。

下図はExcel2016です。

< スポンサーリンク >





「NewSheet」イベント構文

Workbookオブジェクト.NewSheet(Sh)

新しいシートをブックに作成したときに発生します。

Sh=必須。新しいシートが渡されます。ワークシートまたはChartオブジェクトを指定できます。

 

サンプル1:シート作成時にメッセージを表示

シートを作成したときに「シートを挿入しました」とメッセージを表示してみます。

VBEを開き、「TshiWorkbook」をダブルクリックします。

ExcelVBA新シート

 

左側のオブジェクトボックスで「Workbook」を選択し、右側のプロシージャボックスで「NewSheet」を選択します。

ExcelVBA新シート

 

「Private Sub Workbook_Open()」の部分は不要なので消します。

ExcelVBA新シート

 

Private Sub Workbook_NewSheet(ByVal Sh As Object)
    MsgBox “シートを挿入しました”
End Sub

ExcelVBA新シート

 

「新しいシート」をクリックしてみます。

ExcelVBA新シート

 

「シートを挿入しました」というメッセージが表示されました。

ExcelVBA新シート

 

サンプル2:シート作成時にシート名を変更

シートを作成したときに、新シートのシート名を今日の日付(yyyymmdd)にしてみます。
※既に今日の日付のシートがある場合は、「日付-2」「日付-3」と数字を追加するようにします。

Private Sub Workbook_NewSheet(ByVal Sh As Object)
    ‘ワークシート用変数
    Dim ws As Worksheet
    ‘シート名用変数
    Dim str As String
    ‘今日の日付と同じシートが何件あるか数えるための変数
    Dim i As Integer

    ‘今日の日付をyyyymmddの形にしstrに代入
    str = Format(Date, “yyyymmdd”)

    ‘何件あるか用の変数に0を代入
    i = 0

    ‘シートがある限り続けるループ
    For Each ws In Worksheets
        ‘今日の日付から始まるシート名だった場合、i変数に1を足す
        If ws.Name Like str & “*” Then
            i = i + 1
        End If
    Next ws

    ‘今日の日付から始まるシート名が1件以上だったら、シート名を「-件数+1」の形にする
    If i >= 1 Then
        i = i + 1
        str = str & “-” & i
    End If

    ‘追加したシート名を変更する
    Sh.Name = str
End Sub

ExcelVBA新シート

ExcelVBA新シート

ExcelVBA新シート

 

< スポンサーリンク >※広告先のお問い合わせは広告主様にお願いします