Puedes usar la siguiente función:
Cita: Private Function GetLastDayOfMonth(ByVal dtDate As DateTime) As DateTime
Dim dtTo As DateTime = dtDate
dtTo = dtTo.AddMonths(1)
dtTo = dtTo.AddDays(-(dtTo.Day))
Return dtTo
End Function
Te servirá para evaluar y devolver si la fecha que le pases como parámetro tiene 31 días y en base a ello realizas tus cálculos.