Question

J'avais une application pour renvoyer les correspondances les plus proches à certaines valeurs dans un grand cluster de valeurs (comme dans mon précédent question ) et j'ai choisi une solution VBA. Au cours de l'utilisation de ladite application, j'ai constaté que les résultats pour la valeur de 0,5 n'étaient pas corrects. J'avais utilisé la fonction VBA Round qui, comme je l'ai trouvé, renvoie 0 pour 0,5 arrondi à l'entier alors que la fonction round de la feuille de calcul renvoie 1. Étrangement, la fonction VBA round renvoie 2 pour 1,5. Je devais substituer la fonction de feuille de calcul à la place de celle de VBA.

Est-ce que je manque quelque chose?

Était-ce utile?

La solution

C'est un problème connu. La fonction VBA Round () utilise les arrondis de Banker, tandis que la fonction Cellule de la feuille de calcul utilise les arrondis arithmétiques. Vérifiez les détails ici:

PRB: la fonction du tour est différente dans VBA 6 et dans la feuille de calcul Excel

La solution proposée par Microsoft consiste à écrire une fonction personnalisée pour obtenir les résultats souhaités.

L’arrondissement de Banker arrondit toujours 0,5 au nombre même le plus proche et est standard en comptabilité, c’est pourquoi Excel fonctionne de cette manière. Arrondi arithmétique arrondit 0,5 au nombre suivant.

Autres conseils

La réponse à la question est complète ici et copiée ici (par permission de l'auteur:):

Attention, la fonction Arrondi VBA utilise l'arrondi de Banker, où il arrondit .5 à un nombre pair, comme suit:

Round (12.55, 1) would return 12.6 (rounds up) 
Round (12.65, 1) would return 12.6 (rounds down) 
Round (12.75, 1) would return 12.8 (rounds up)   

Alors que la fonction Excel Worksheet Round arrondit toujours 0,5 ".

J'ai fait quelques tests et cela ressemble à un arrondi supérieur à 5 (arrondi symétrique) est également utilisé pour le formatage des cellules, ainsi que pour l'arrondi en largeur de colonne (avec le format Général). Le drapeau "Précision telle qu’affichée" ne semble pas arrondir lui-même, il utilise simplement le résultat arrondi du format de cellule.

J'ai essayé d'implémenter la fonction SymArith de Microsoft dans VBA pour mon arrondi, mais j'ai constaté que Fix comportait une erreur lorsque vous essayez de lui attribuer un numéro tel que 58,55; la fonction donnant un résultat de 58,5 au lieu de 58,6. J'ai ensuite découvert que vous pouvez utiliser la fonction Excel Worksheet Round, comme suit:

  

Application.Round (58.55, 1)

Cela vous permettra d’arrondir normalement dans VBA, bien que cela puisse ne pas être aussi rapide que certaines fonctions personnalisées. Je me rends compte que la question est bouclée, mais je voulais l’inclure par souci de complétude.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top