Difficult to test without a workbook, but try:
Sub test()
Dim ws As Worksheet, SceRow As Long, j As Long, lr As Long, Destn As Range
Set ws = ActiveSheet
lr = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
With Worksheets.Add
.Name = "Forms_filled"
.Range("A1:D1").Value = Array("unit ID", "unit Name", "type", "Yes/No")
Set Destn = .Range("A2")
For SceRow = 2 To lr
If ws.Cells(SceRow, 1).Value <> "" Then 'you may not need this and the line with a similar comment below.
For j = 3 To 18 '(columns C to R)
Destn.Resize(, 4).Value = Array(ws.Cells(SceRow, 1).Value, ws.Cells(SceRow, 2).Value, ws.Cells(1, j).Value, ws.Cells(SceRow, j).Value)
' unit ID, unit Name, type, Yes/No
Set Destn = Destn.Offset(1)
Next j
End If 'you may not need this and the line with a similar comment above.
Next SceRow
.Cells.RemoveDuplicates Columns:=Array(1, 2, 3, 4), Header:=xlYes
End With
End Sub