Please try this code. Comments in the code will help you make the required adjustments, in particular the name of the worksheet which has your data and the first column to transpose.
Option Explicit
Sub Unpivot()
    ' 18 Feb 2018
    Const WsOutName As String = "Output"        ' name the result sheet
    Const CaptionRow As Long = 1                ' specifies the row with the captions
                                                ' the next row is presumed data
    Dim WsIn As Worksheet, WsOut As Worksheet
    Dim Rng As Range
    Dim Arr() As Variant
    Dim Cap As Variant
    Dim C As Long, Cl As Long                   ' column, Last column
    Dim R As Long, Rl As Long                   ' row, Last row
    Application.ScreenUpdating = False
    On Error Resume Next
    Set WsOut = Worksheets(WsOutName)
    If Err Then
        Set WsOut = Worksheets.Add(Before:=Worksheets(1))
        WsOut.Name = WsOutName
    Else
        WsOut.Cells.ClearContents               ' delete all existing content
    End If
    On Error GoTo 0
    Set WsIn = Worksheets("Unpivot")            ' change to match
    With WsIn
        Cl = .Cells(CaptionRow, .Columns.Count).End(xlToLeft).Column
        ' (2 = B) specifies first column to look at
        For C = 2 To Cl
            ' columns can be of different lengths
            Rl = .Cells(.Rows.Count, C).End(xlUp).Row
            If Rl > CaptionRow Then
                Cap = .Cells(CaptionRow, C).Value
                Set Rng = Range(.Cells(CaptionRow + 1, C), .Cells(Rl, C))
                Arr = Rng.Value
            End If
            With WsOut
                Rl = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
                .Cells(Rl, 1).Resize(UBound(Arr), 1).Value = Cap
                .Cells(Rl, 2).Resize(UBound(Arr), 1).Value = Arr
            End With
        Next C
    End With
    Application.ScreenUpdating = True
End Sub