◎一例として下図のようなダイアログを作成
スピンボタンを利用したダイアログ


Option Explicit
Option Base 1
Option Private Module


Option Explicit
Option Private Module

'汎用的に使える関数を記載する

Function ChkSheet(strSheet As String) As Boolean
' シート存在チェック関数
' 引数  strSheet :存在を確認するシート名
' 戻り値 Boolean  :True :存在した時
'                 :False:存在しない時

  Dim ws As Worksheet
    
  ChkSheet = False
  For Each ws In Worksheets
    If ws.Name = strSheet Then
      ChkSheet = True
      Exit For
    End If
  Next
End Function


Function JudgeSheetExist(ByVal TargetSheetName As String) As Boolean
'ターゲットシートの存在の有無を判定し、なかったらターゲット
'シートを作成する
'引数 TargetSheetName:シート名の文字列
'戻値 成功:True ,失敗:False
    Dim errFlag As Boolean
    Dim wksSheet As Worksheet
    Dim strTarget As String
    
    strTarget = TargetSheetName
    errFlag = False
    For Each wksSheet In Worksheets
        If wksSheet.Name = strTarget Then
            errFlag = True
            Exit For
        End If
    Next
    If errFlag <> True Then  'なかったら
                            'ターゲットシートを作成
        Set wksSheet = Sheets.Add(after:=Worksheets(Worksheets.Count))  '一番最後に追加
        wksSheet.Name = strTarget
        errFlag = True
    End If
    'オブジェクト解放
    Set wksSheet = Nothing
    
    JudgeSheetExist = errFlag
End Function

Function SpecialDataInsert(ByVal TargetSheetName As String, ByVal InsertRow As Long, _
                           ByVal DataMatrix As Variant) As Boolean
'指定されたシートに指定レコード(2次元配列x,y)を最終行に追加する
'
'引数1:TargetSheetName     シート名
'引数1:InsertRow           挿入開始行
'引数1:DataMatrix          レコードを定義した配列
'戻値: 成功:TRUE 失敗:FALSE
    Dim x, y As Long
    Dim xMax As Long
    Dim yMax As Long
    Dim wksTargetSheet As Worksheet
    
    On Error GoTo Hdl_SDI_ERROR         'エラー処理
    Set wksTargetSheet = ThisWorkbook.Worksheets(TargetSheetName)
      
    wksTargetSheet.Cells(1, 1).Select
    xMax = UBound(DataMatrix, 1)
    yMax = UBound(DataMatrix, 2)
    For y = 1 To yMax Step 1
        For x = 1 To xMax Step 1
            wksTargetSheet.Cells(y + InsertRow, x).Value = DataMatrix(x, y)
        Next
    Next
    SpecialDataInsert = True
    Exit Function
Hdl_SDI_ERROR:
    'オブジェクト解放
    Set wksTargetSheet = Nothing
    
    SpecialDataInsert = False
End Function

Function DeleteSheet(ByVal TargetSheetName As String, ByVal strActBookName As String) As Boolean
'指定したブックの指定シートの削除をする関数
'
    Dim objActiveBook As Object
    Dim objWorkSheet  As Object
    
    On Error GoTo Hdl_Del_ERROR
    Application.DisplayAlerts = False
    
    Set objActiveBook = Workbooks(strActBookName)
    Set objWorkSheet = objActiveBook.Sheets(TargetSheetName)
    objWorkSheet.Delete
    Application.DisplayAlerts = True
    DeleteSheet = True
    Exit Function
Hdl_Del_ERROR:
    Application.DisplayAlerts = True
    Set objWorkSheet = Nothing
    Set objActiveBook = Nothing
    DeleteSheet = False
End Function

Function DeleteSheetFromPartialSheetName(ByVal MatchingWord As String, _
                                         ByVal strActBookName As String) As Boolean
'指定ブックの部分一致文字列で指定したシートの削除をする関数
'
    Dim objActiveBook As Object
    Dim objWorkSheet  As Object
    Dim i As Integer                'カウンタ
    Dim ShtName As String           'シート名
        
    'エラー処理 & 警告無効
    On Error GoTo Hdl_Del_ERROR
    Application.DisplayAlerts = False
    
    'ブック名のセット
    Set objActiveBook = Workbooks(strActBookName)
    
    '存在するか判定し、あったら削除
    For Each objWorkSheet In objActiveBook.Worksheets
        ShtName = objWorkSheet.Name
        If ShtName Like "*" & MatchingWord & "*" Then
            objWorkSheet.Delete
            DeleteSheetFromPartialSheetName = True
        End If
    Next objWorkSheet
    
    '警告を有効に
    Application.DisplayAlerts = True

    Exit Function
Hdl_Del_ERROR:
    Application.DisplayAlerts = True
    Set objWorkSheet = Nothing
    Set objActiveBook = Nothing
    DeleteSheetFromPartialSheetName = False
End Function

Function ConcatenateRangeText(ByRef objCells As Range) As String
'指定したセル範囲の文字列を連結するユーザー定義関数
'上記のコードをVBE(Visual Basic Editor)を起動して標準モジュールに
'貼り付ければ、普通のワークシート関数と同様に使えます。
'
'A1セルからA3セルにデータが入力されているときに、A4セルに
'「=ConcatenateRangeText(A1:A3)」と入力してやれば、
'A4セルにA1セルからA3セルのデータが連結される
'http://www.relief.jp/itnote/archives/001342.php 丸パクリ
'※スペースは除去するように変更

    Dim objCell As Range
    Dim strRet As String
    strRet = ""
    For Each objCell In objCells
        strRet = strRet & objCell.Text
    Next
    strRet = Replace(strRet, " ", "")
    ConcatenateRangeText = strRet

End Function

Public Sub ToggleSheetProtect()
'選択されているシートの保護を切り替える
'保護・保護解除がトグルで動作
    Dim sh As Object
   
    '選択したシートを列挙する
    For Each sh In ActiveWindow.SelectedSheets
        sh.Select   'そのシートを選択する
        If sh.ProtectContents = True Then   'シートが保護の時
            sh.Unprotect
        Else                                'シートが保護されてない時
            sh.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
        End If
    Next
End Sub

Function DeleteRecords(ByVal TargetBookPath As String, ByVal TargetCode As String, _
                        Optional ByVal TargetColumn As Long = 1) As Long
'指定ブックの指定列のセルに指定文字列があるレコードを削除する
'引数1:開くブック名(フルパス)
'引数2:指定する文字列(省略時1)
'引数3:削除対象のある列
'戻値:削除したレコード数(-1はエラー)
    
    Dim i As Long
    Dim strFlg As String
    Dim lngRowNum As Long
    Dim lngRowMax As Long
    Dim lngCount As Long
    Dim wksSheet As Worksheet
    Dim strBookName As String
    
    strBookName = Dir(TargetBookPath)
    
    On Error GoTo Hdl_FileERROR
    Workbooks.Open FileName:=(TargetBookPath)
    Set wksSheet = Workbooks(strBookName).Worksheets(1)
     
    On Error GoTo Hdl_DelERROR
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    wksSheet.Select
    lngRowMax = wksSheet.UsedRange.Rows.Count
    
    '行の削除を実施
    lngRowNum = 1
    lngCount = 0
    Do
        strFlg = CStr(wksSheet.Cells(lngRowNum, TargetColumn).Value)
        If strFlg = CStr(TargetCode) Then   '該当したら削除
            wksSheet.Rows(lngRowNum).EntireRow.Delete
            lngRowMax = lngRowMax - 1
            lngCount = lngCount + 1         '削除した行をカウント
        Else
            lngRowNum = lngRowNum + 1       '該当しなければ次の行へ
        End If
    Loop Until lngRowNum = lngRowMax + 2
    
    '閉じて保存して後始末
    Application.DisplayAlerts = False
    Workbooks(strBookName).Save
    Workbooks(strBookName).Close
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
    DeleteRecords = lngCount
    Exit Function
        
Hdl_DelERROR:
    Set wksSheet = Nothing
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True
    MsgBox lngRowNum & "行目の削除時にエラーが発生しました", vbCritical + vbOKOnly
    DeleteRecords = -1
    Exit Function
Hdl_FileERROR:
    MsgBox "ファイルを開けませんでした", vbCritical + vbOKOnly
    DeleteRecords = 0
End Function

Function DateCheck(ByVal mystr As String) As Boolean
'YYYYMMDD形式の文字列を判定する関数
'
    DateCheck = False
    '半角チェック
    If mystr <> StrConv(mystr, vbNarrow) Then Exit Function
    '文字長チェック
    If Len(mystr) <> 8 Then Exit Function
    '日付チェック
    If IsDate(Left(mystr, 4) & "/" & Mid(mystr, 5, 2) & "/" & Right(mystr, 2)) Then
        DateCheck = True
    End If
End Function