Hi, what I'd recommend:
1. You said there are many products. So it should be better to transpone the grid (frequency on x-axis)
2. Give a good explanation how to enter the data (not to get by one respondent"1 in "3x/day", 3 in "once a day", "21 in once a week" and "86 in once a month", what means the same.
3. You said "many languages", So I think there are different prices, maybe different currencies.
Create 2 (with currency 3) hidden questions of type "multiple numerical" (currency: "multiple short text") and enter as default answers the weights, the prices, the currency symbol for each language.
Now the formula is only: (with ww as code of weight question and pp as code of price question)
Code:
<tr>
<td>{pp_B.question}</td>
<td>B</td>
<td>{Q1_1_B}</td>
<td>{Q1_2_B}</td>
<td>{Q1_3_B}</td>
<td>{Q1_4_B}</td>
<td>{round(sum(ww_1*Q1_1_B, ww_2*Q1_2_B, ww_3*Q1_3_B, ww_4*Q1_4_B))}</td>
<td>{pp_B} €</td>
<td>{round(sum(ww_1*Q1_1_B, ww_2*Q1_2_B, ww_3*Q1_3_B, ww_4*Q1_4_B)*pp_B)}</td>
</tr>
<tr>
<td>{pp_O.question}</td>
<td>O</td>
<td>{Q1_1_O}</td>
<td>{Q1_2_O}</td>
<td>{Q1_3_O}</td>
<td>{Q1_4_O}</td>
<td>{round(sum(ww_1*Q1_1_O, ww_2*Q1_2_O, ww_3*Q1_3_O, ww_4*Q1_4_O))}</td>
<td>{pp_O} €</td>
<td>{round(sum(ww_1*Q1_1_O, ww_2*Q1_2_O, ww_3*Q1_3_O, ww_4*Q1_4_O)*pp_O)}</td>
</tr>
and at the end
With a total estimated budget of
{round(sum(sum(ww_1*Q1_1_B, ww_2*Q1_2_B, ww_3*Q1_3_B, ww_4*Q1_4_B)*pp_B, sum(ww_1*Q1_1_O, ww_2*Q1_2_O, ww_3*Q1_3_O, ww_4*Q1_4_O)*pp_O, sum(ww_1*Q1_1_P, ww_2*Q1_2_P, ww_3*Q1_3_P, ww_4*Q1_4_P)*pp_P, sum(ww_1*Q1_1_W, ww_2*Q1_2_W, ww_3*Q1_3_W, ww_4*Q1_4_W)*pp_W, sum(ww_1*Q1_1_M, ww_2*Q1_2_M, ww_3*Q1_3_M, ww_4*Q1_4_M)*pp_M))} $/year
So only the product code has to be adapted.
4. You may place your "result table" into the help text area. And if you use the bootstrap layout it's not so bad.
Joffm