Beim Eintippen wird der vorhandene Wert gelöscht und durch den getippten Wert ersetzt. Nach dem Löschen (und vor dem Ersetzen) steht kurzfristig ein Leerstring drin. Dieser erzeugt den Fehler beim Versuch, das in eine Zahl umzuwandeln.
Also:
Delphi-Quellcode:
if ('' = StringGrid1.Cells[1,b]) then
begin
... := 0;
end
else
begin
... := StrToFloat(StringGrid1.Cells[1,b]);
end;