Prueba con esta macro, este es el resultado
Sub TRANSPONER_DATOS()
Set DATOS = Range("A1").CurrentRegion
TITULOS = Array("CODIGO", "FAMILIA", "NOMBRE", "REGION", "PERIODO", "SI/NO")
With DATOS
F = .Rows.Count: C = .Columns.Count
.Columns(5).Resize(F, C - 4).Select
.Replace What:="x", Replacement:="si"
.Replace What:="", Replacement:="no"
.Rows(F + 4).CurrentRegion.Clear
Set RESULTADOS = .Rows(F + 4).Resize(1, 6)
End With
With RESULTADOS
.Value = TITULOS
.EntireColumn.AutoFit
.Font.Bold = True
.Select
End With
With DATOS
Set DATOS = .Rows(2).Resize(F - 1, C)
For I = 1 To F - 1
If I = 1 Then Set RESULTADOS = RESULTADOS.Rows(2).Resize(C - 4, 6)
If I > 1 Then Set RESULTADOS = RESULTADOS.Rows(C - 3).Resize(C - 4, 6)
RESULTADOS.Columns(1).Value = .Cells(I, 1)
RESULTADOS.Columns(2).Value = .Cells(I, 2)
RESULTADOS.Columns(3).Value = .Cells(I, 3)
RESULTADOS.Columns(4).Value = .Cells(I, 4)
RESULTADOS.Columns(5) = WorksheetFunction.Transpose(.Cells(0, 5).Resize(1, C - 4))
RESULTADOS.Columns(6) = WorksheetFunction.Transpose(.Cells(I, 5).Resize(1, C - 4))
Next I
RESULTADOS.EntireColumn.AutoFit
With DATOS
.Columns(5).Resize(F, C - 4).Select
.Replace What:="SI", Replacement:="X"
.Replace What:="NO", Replacement:=""
End With
End With
End Sub