Scusami... ero sul treno e nello scrivere mi sono confuso... tutto quello che ti ho scritto è vero, solo che la tabella dai 31 records non ti serve (sarebbe servita se le ascisse e le ordinate erano invertite)
detto questo procedi in questo modo:
crea una query dove passerai Id_utente, Data, e Presenza
SELECT [NomeTabella].id_utente, Month([Data]) AS Mese, Year([Data]) AS Anno, Max(IIf(Day([Data])=1,[Presenza],0)) AS 1, Max(IIf(Day([Data])=2,[Presenza],0)) AS 2, Max(IIf(Day([Data])=3,[Presenza],0)) AS 3, Max(IIf(Day([Data])=4,[Presenza],0)) AS 4, Max(IIf(Day([Data])=5,[Presenza],0)) AS 5
FROM [Copia di tbl_TurniSettimanali]
GROUP BY Month([Data]), Year([Data]);
provvedi tu a cambiare i nomi nella query (mi riferisco soprattutto a [NomeTabella] e ad arrivare fino a 31 (in modalità struttura vai meglio...