Hola, repasando lo indicado:
"Entiendo que la linea Do While Peso(i) >= 0 debería de hacer que automáticamente no se calculase los datos de Peso(-99) correspondiente al señalero de la serie de datos."
La idea es correcta, de hecho esa condición del bucle impide que se trate el dato Peso(12) que es el que contiene el valor -99.
No obstante si ese valor está apareciendo es porque de alguna manera existen instrucciones en el código que hacen que aparezca ¿dónde?
Supongamos que llegamos con i=11, se comprueba Do While Peso(i) >= 0 y se entra en el bucle:
Suma = Suma + Peso(11)
i = i + 1 es decir i = 11 +1 = 12
If Peso( i ) > PesoMax Then ... no se cumple que peso(12) sea mayor que el máximo
PesoMax = Peso(i)
End If
If Peso( i ) < PesoMin Then ... sí se cumple que peso(12) sea mayor que el mínimo, ahí tienes el problema
PesoMin = Peso(i)
End If
Solución: tienes que considerar dónde incrementas el valor de la variable de control. No puede ser en cualquier punto del bucle, en este caso (que es lo más habitual) tiene que ser al final del bucle para que no afecte a las comprobaciones o procesos intermedios. Es decir:
Do While Peso(i) >= 0
Suma = Suma + Peso(i)
If Peso(i) > PesoMax Then
PesoMax = Peso(i)
End If
If Peso(i) < PesoMin Then
PesoMin = Peso(i)
End If
i = i + 1
Loop
Fíjate que simplemente ha cambiado la situación de la línea i = i + 1
Además tienes que tener en cuenta que para que se asigne un valor a PesoMin, deberás inicializarlo con un valor muy grande, ya que en caso contrario el valor de PesoMin es cero y será 0 lo que te aparezca como PesoMin.
Por tanto al principio del código añade algo así como PesoMin = 10000
Esto significa que "das un valor aleatorio muy grande a PesoMin". Cuando se realice la comparación If Peso (i ) < PesoMin será verdadero y se asignará a PesoMin un valor.
Si no haces esto al ser PesoMin 0 la comparación If peso( i) < PesoMin no será cierta y te aparecerá erróneamente que PesoMin es 0.
Saludos