Hi, pedjvak!
Give a look at the uploaded file.
It uses many dynamic named ranges for easier referencing:
- In worksheet Result:
NameCell: =Result!$B$3, with data validation list =NameList
NameValueNonZeroList: =DESREF(Result!$C$1;;;1;COLUMNAS(NameValueList)) -----> =OFFSET(Result!$C$1,,,1,COLUMNS(NameValueList)), placed here but could be moved anywhere or hidden
- In worksheet Data:
DataTable: =DESREF(Data!$A$2;;;CONTARA(Data!$A:$A)-1;CONTARA(Data!$1:$1)) -----> in english: =OFFSET(Data!$A$2,,,COUNTA(Data!$A:$A)-1,COUNTA(Data!$1:$1))
NameList: =DESREF(DataTable;;0;;1) -----> in english: =OFFSET(DataTable,,0,,1)
ItemList: =DESREF(DataTable;-1;1;1;COLUMNAS(DataTable)-1) -----> in english: =OFFSET(DataTable,-1,1,1,COLUMNS(DataTable)-1)
NameValueList: =DESREF(ValueList;COINCIDIR(NameCell;NameList;0)-1;;1

-----> in english: =OFFSET(ValueList,MATCH(NameCell,NameList,0)-1,,1,)
ValueList: =DESREF(DataTable;;1;;COLUMNAS(DataTable)-1) -----> in english: =OFFSET(DataTable,,1,,COLUMNS(DataTable)-1)
Formulas only in worksheet Result:
C1: =SI(COLUMNA()-2<=COLUMNAS(NameValueList);CONTAR.SI(DESREF(NameValueList;;;;COLUMNA()-2);">0");"") -----> in english: =IF(COLUMN()-2<=COLUMNS(NameValueList),COUNTIF(OFFSET(NameValueList,,,,COLUMN()-2),">0"),"")
C2: =SI.ERROR(INDICE(ItemList;1;COINCIDIR(COLUMNA()-2;NameValueNonZeroList;0));"") -----> in english: =IFERROR(INDEX(ItemList,1,MATCH(COLUMN()-2,NameValueNonZeroList,0)),"")
C3: =SI.ERROR(INDICE(ValueList;1;COINCIDIR(COLUMNA()-2;NameValueNonZeroList;0));"") -----> in english: =IFERROR(INDEX(ValueList,1,MATCH(COLUMN()-2,NameValueNonZeroList,0)),"")
Copy C1 across as required (at least rows columns of DataTable.
Copy C2:C3 across as required (until the 1st blank is displayed)
Just advise if any issue.
Regards!