64 votes

Comment arrondir un nombre en VBA au 5 le plus proche? (ou 10 ou X)

Avec des nombres comme 499, 73433, 2348, quelle VBA puis-je utiliser pour arrondir à 5 ou 10 près? ou un nombre aléatoire?

Par 5:

  499 ->  500
2348 -> 2350
7343 -> 7345
 

Par 10:

  499 ->  500
2348 -> 2350
7343 -> 7340
 

etc.

95voto

Vilx- Points 37939

C'est des maths simples. Étant donné un nombre X et un facteur d'arrondissement N, la formule serait la suivante:

rond (X / N) * N

36voto

matt wilkie Points 1772

Réponse intégrée

 X = 1234 'number to round
N = 5    'rounding factor
round(X/N)*N   'result is 1235
 

Pour un nombre à virgule flottante compris entre 1234.564 et 1235 (ceci est spécifique à VB, la plupart des autres langues sont simplement tronquées):

 int(1234.564)   'result is 1235
 

Attention: VB utilise [banquier] [1], au nombre pair le plus proche, ce qui peut surprendre si vous ne le connaissez pas:

 msgbox round(1.5) 'result to 2
msgbox round(2.5) 'yes, result to 2 too
 

Merci tout le monde.

12voto

Alnitak Points 143355

Arrondir au X le plus proche (sans être spécifique à VBA)

N = X * int (N / X + 0,5)

Où int (...) renvoie le nombre entier immédiatement inférieur.

Si votre fonction d'arrondi disponible arrondit déjà au nombre entier le plus proche, omettez l'ajout de 0,5.

9voto

Bob Points 11

En VB, les maths.tour a des arguments supplémentaires pour spécifier le nombre de décimales et de la méthode d'arrondi. Les mathématiques.Round(10.65, 2, MidpointRounding.AwayFromZero) sera de retour 10.67 . Si le nombre est un nombre décimal ou un seul type de données, les maths.round retourne un type de données décimal. Si elle est double, il retourne le type de données double. Qui peut être important si option strict est sur.

Le résultat de (10.665).ToString("n2") des tours à l'écart de zéro à donner "10.67". sans autres arguments mathématiques.round retourne 10.66, ce qui pourrait conduire à des indésirables les écarts.

3voto

Joey Points 1

'Exemple: Arrondissez 499 au 5ème le plus proche. Vous utiliseriez la fonction ROUND ().

 a = inputbox("number to be rounded")
 b = inputbox("Round to nearest _______ ")


  strc = Round(A/B)
  strd = strc*B


 msgbox( a & ",  Rounded to the nearest " & b & ", is" & vbnewline & strd)
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X