Noch ein Vorschlag ohne Schleife.
Delphi-Quellcode:
Function LastDow (const DateToMatch : TDateTime; const DowToMatch : Byte) : TDateTime;
begin
result := DateToMatch - ((7 - DowToMatch + DayOfTheWeek(DateToMatch)) mod 7);
if result = DateToMatch then
result := result - 7;
end;
LastDow(Date, DayFriday) sollte dann den 18.7. ergeben.