What you are presenting are confusing.
I always looked at "requirement" sheet for the result, so I wrote like that.
Sub test()
Dim a, i As Long
With Sheets("sl")
If .[d3] = "" Then Exit Sub
If Not .Evaluate("isref('" & .[d3] & "'!a1)") Then MsgBox "No sheet named; " & .[d3]: Exit Sub
a = .[a9].CurrentRegion.Value
If (a(2, 1) = "") + (a(2, 1) = "TOTAL") Then Exit Sub
a = Application.Index(a, Evaluate("row(2:" & UBound(a, 1) & ")"), [{1,1,1,1,2,3,4,5}])
For i = 1 To UBound(a, 1)
If i < UBound(a, 1) Then
a(i, 1) = i: a(i, 2) = .[b3]: a(i, 3) = .[b5]: a(i, 4) = .[b7]
Else
a(i, 1) = "TOTAL": a(i, 2) = "": a(i, 3) = "": a(i, 4) = ""
End If
Next
With Sheets(.[d3].Value).Range("a" & Rows.Count).End(xlUp)(2)
.Resize(UBound(a, 1)).Columns(1).Font.Bold = True
.Resize(UBound(a, 1), UBound(a, 2)).Value = a
.Cells(UBound(a, 1), 1).Interior.Color = vbYellow
End With
On Error Resume Next
With .[a9].CurrentRegion
.Offset(1).Resize(.Rows.Count - 2).SpecialCells(2) = ""
End With
On Error GoTo 0
.[D3,b5,b7] = ""
End With
End Sub
Bookmarks