Your code doesn't guarantee that timeA, timeB, distanceA or distanceB are even set!!
I'd suggest restructuring like this:
if (measure.RangeMilliMeter < 2000){
distanceA = measure.RangeMilliMeter;
timeA = millis();
delay (30);
if (measure.RangeMilliMeter < 2000){
distanceB = measure.RangeMilliMeter;
timeB = millis();
speed = (((distanceA-distanceB)/(timeB-timeA))); // only perform this if all 4 variables actually defined
return speed;
}
}
return INVALID_READING ;