Sub MyCopyData()
Dim srcSht As Worksheet
Dim dstSht As Worksheet
Dim c1 As Long
Dim c2 As Long
Dim c3 As Long
Dim c4 As Long
Dim lr As Long
Dim c As Long
Dim nr As Long
Dim nc As Long
Dim hdr As String
' Specify source sheet and destination sheet
Set srcSht = Sheets("Sheet1")
Set dstSht = Sheets("Sheet2")
' Specify the starting and ending column for the descriptions
c1 = 1 'first descriptive column in column A (1st column)
c2 = 3 'last descriptive column in column C (3rd column)
Application.ScreenUpdating = False
' Populate title row on source sheet
dstSht.Range("A1") = "Animal"
srcSht.Range(srcSht.Cells(1, c1), srcSht.Cells(1, c2)).Copy dstSht.Range("B1")
nc = dstSht.Cells(1, dstSht.Columns.Count).End(xlToLeft).Column + 1 'determine new column on destination sheet for totals
dstSht.Cells(1, nc) = "Total"
' Find last row with data on source sheet
lr = srcSht.Cells(Rows.Count, c1).End(xlUp).Row
' Calculate data columns to loop through
c3 = c2 + 1
c4 = srcSht.Cells(1, Columns.Count).End(xlToLeft).Column
' Verify there are columns to data to go through
If c3 > c4 Then
MsgBox "Please fix data or VBA code", vbOKOnly, "There does not seem to be any data columns to go through!"
Exit Sub
End If
' Loop through data columns
For c = c3 To c4
' Grab column header
hdr = srcSht.Cells(1, c)
' Determine next available row on Source sheet
nr = dstSht.Cells(dstSht.Rows.Count, "A").End(xlUp).Row + 1
' Populate the new data
dstSht.Range(dstSht.Cells(nr, "A"), dstSht.Cells(nr + lr - 2, "A")) = hdr 'populate header value in first column
srcSht.Range(srcSht.Cells(2, c1), srcSht.Cells(lr, c2)).Copy dstSht.Cells(nr, 2) 'copy over descriptive data to next columns
srcSht.Range(srcSht.Cells(2, c), srcSht.Cells(lr, c)).Copy dstSht.Cells(nr, nc) 'copy over totals column
Next c
Application.ScreenUpdating = True
End Sub