LoginSignup
3
2

More than 5 years have passed since last update.

【VBA】シート名の自動生成関数

Last updated at Posted at 2018-02-11

説明

  1. ブック名とシート名を引数に与える。
  2. 指定したブックに同じ名前のシートが存在した場合には,メッセージボックスで上書きするかを確認。
    • 「はい」の場合 → 同名のシートを消去してそのシート名を返す。
    • 「いいえ」の場合 → シート名の後ろに(1)からの引数を加え,名前被りがないかチェック。自動で名前被りのない引数に調整しそのシート名を返す。

ブック「book1.xlsx」にシート「sheet1」と「sheet1(1)」が存在するとき,引数にブック名「book1.xlsx」,シート名「sheet1」を渡した場合。

メッセージボックスの上書き確認
1. 「はい」を選択 → シート名「sheet1」が返される。
2. 「いいえ」を選択 → シート名「sheet1(2)」が返される。

コード

Function CheckName(BookName, SheetName) As String
    '宣言
    Dim ws As Worksheet
    Dim flag As Boolean: flag = False
    Dim flag2 As Boolean: flag2 = True
    Dim btn As Long
    Dim tmpName As String

    '同じ名前のシートがないかチェック
    For Each ws In Workbooks(BookName).Worksheets
        If ws.name = SheetName Then flag = True
    Next ws
    '同じ名前のシートが存在した場合
    If flag = True Then
        btn = MsgBox("既に出力シートが存在します。上書きしますか?" & vbCr & _
                        "(「いいえ」を選択した場合は別名のシートに出力します)", vbYesNo + vbQuestion)
        '「はい」を選択
        If btn = vbYes Then
            Application.DisplayAlerts = False
            Workbooks(BookName).Worksheets(SheetName).Delete
            Application.DisplayAlerts = True
        '「いいえ」を選択
        Else
            Dim i As Long: i = 1
            Do While flag2 = True
                flag2 = False
                tmpName = SheetName & "(" & i & ")"
                For Each ws In Worksheets
                    If ws.name = tmpName Then flag2 = True
                Next ws
                i = i + 1
            Loop
            SheetName = tmpName
        End If
    End If
    'シート名を返す
    CheckName = SheetName
End Function
3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2