cuando no sabes cuantas iteraciones vas a usar, no se utiliza un For, se utiliza un While... el FOR es solo cuando sabes exactamente cuantas veces tienes que pasar por un lado.
En tu caso, tendrías que hacer un while y buscar el final del dataset.
Ahora, un DBGrid es solo una representación gráfica de un dataset, por lo que si quieres algún dato, no lo saques del dbgrid, obtenlo del dataset asociado.
Entonces, supongo que tienes tu DBGrid asociado a un Query, por lo que la sentencia:
Código Delphi
[-]
with TuQuery do begin
First;
While Not EOF do begin
UnValor := FieldByName('UnaColumna').AsString; ..... Next;
end; end;
debería funcionarte de manera correcta.