You already had a template of the table format, so why not just copy and paste it into the relevant worksheets instead of recreating it with a messy vb script
Also don't put the macro in the worksheet itself, but instead in a module
Paste the below script into a new module, and hopefully it should do what you need it to
Sub MakeSheets()
Dim vList
Dim n As Long
Dim rgData As Range
Dim wsTemp As Worksheet
Dim LastRow As Long
Dim ActSht As String
Application.ScreenUpdating = False
ActSht = ActiveSheet.Name
Worksheets(ActSht).AutoFilterMode = False
Set rgData = Worksheets(ActSht).Range("C1:C" & Worksheets(ActSht).Cells(Worksheets(ActSht).Rows.Count, "C").End(xlUp).Row)
vList = GetUniqueList(rgData.Offset(1).Resize(rgData.Rows.Count - 1))
For n = LBound(vList) To UBound(vList)
Set wsTemp = Sheets.Add
wsTemp.Name = vList(n)
rgData.AutoFilter field:=1, Criteria1:=vList(n)
Worksheets(ActSht).UsedRange.Copy wsTemp.Cells(1)
wsTemp.Cells(Rows.Count, "H").End(xlUp).Offset(1).FormulaR1C1 = "=SUM(R2C:R[-1]C)"
LastRow = Worksheets(wsTemp.Name).Cells(Worksheets(wsTemp.Name).Rows.Count, "A").End(xlUp).Row
Worksheets("Table format").Range("B3:C26").Copy
Worksheets(wsTemp.Name).Range("E" & LastRow + 4).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Worksheets(wsTemp.Name).Range("E" & LastRow + 4).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
Worksheets(wsTemp.Name).Range("F" & LastRow + 4).Value = wsTemp.Name
Worksheets(wsTemp.Name).Range("F" & LastRow + 9).Value = Worksheets(wsTemp.Name).Range("H" & LastRow + 1).Value
Cells.Cells.EntireColumn.AutoFit
Next n
Worksheets(ActSht).AutoFilterMode = False
Application.ScreenUpdating = False
End Sub
Public Function GetUniqueList(rgData As Range) As Variant
Dim dic As Object
Dim x As Long
Dim y As Long
Dim data As Variant
If rgData.Count = 1 Then
GetUniqueList = Array(rgData.Value2)
Else
Set dic = CreateObject("Scripting.Dictionary")
data = rgData.Value2
For x = 1 To UBound(data, 1)
For y = 1 To UBound(data, 2)
dic(data(x, y)) = Empty
Next y
Next x
GetUniqueList = dic.keys
End If
End Function
btw your vba script was very messy, make sure you tab correctly
Bookmarks