Sub M_snb()
sn = Sheets("Data").Cells(1).CurrentRegion
sp = Sheets("Mapping").UsedRange
For j = 2 To UBound(sn)
For jj = 2 To UBound(sp)
If sn(j, 3) = sp(jj, 1) Then
sn(j, 17) = sp(jj, 2)
sn(j, 18) = sp(jj, 4)
sn(j, 19) = sp(jj, 5)
Exit For
End If
Next
For jj = 2 To UBound(sp)
If sn(j, 3) = sp(jj, 16) Then
sn(j, 20) = sp(jj, 20)
sn(j, 21) = sp(jj, 21)
Exit For
End If
Next
w_00 = sn(j, 2) - Weekday(sn(j, 2))
For jj = 22 To 28
If jj < 27 Then sn(j, jj - 10) = Format(Choose(jj - 21, sn(j, 2), sn(j, 2), sn(j, 2), _
w_00 + 1, w_00 + 7), Choose(jj - 21, "dddd", "'mmm-yy", "\Wk ww", _
"\WB dd-mm-yyyy", "\WE dd-mm-yyyy"))
sn(j, jj) = Choose(jj - 21, sn(j, 4) * sn(j, 5), sn(j, 4) * sn(j, 6), sn(j, 4) _
* sn(j, 7), sn(j, 4) * sn(j, 8), sn(j, 9) / 600, sn(j, 10) / 60, sn(j, 11) / 60)
Next
Next
Sheets("Data").Cells(1).CurrentRegion.Offset(19) = sn
End Sub
Sheet "mapping" columns I:N are redundant.
You don't even need screenupdating =false.