Если вы хотите избежать VBA и если полей не более 50 Wxx, UNION может переставить поля.Должно быть поле уникального идентификатора - будет использоваться автономный номер.Так как я подозреваю, что есть 52 поля Wxx и вам не нужны поля W01_2018 и W02_2018, исключите эти 2.
SELECT ID, W03_2018 AS Data, "W03_2028" AS WkYr FROM tablename
UNION SELECT ID, W04_2018, "W04_2018" FROM tablename
. . .
UNION SELECT ID, W52_2018, "W52_2018" FROM tablename;
Затем используйте этот запрос в совокупном запросе:
SELECT ID, Sum(Data) AS Planificato FROM UnionQuery GROUP BY ID;
Проблема возникает, когда вы хотите выполнить вычисления для другого набора недель и / или года - нужно изменить UNION.
Подход VBA может быть более желательным, например:
Sub CalcPlanificato()
Dim rs As DAO.Recordset
Dim lngP As Long, x As Integer
Set rs = CurrentDb.OpenRecordset("SELECT * FROM Table1;")
While Not rs.EOF
For x = 3 To 52
lngP = lngP + rs.Fields(x)
Next
rs.Edit
rs!Planificato = lngP
rs.Update
rs.MoveNext
lngP = 0
Wend
End Sub
Код предполагает, что поля в таблице расположены в порядке, как показано в примере.Предполагается, что Planificato является первым полем.Предполагается, что есть 52 поля Wxx.На поля Wxx ссылается индекс, а W03_2018 находится в столбце 4, который является индексом 3.