Comment trouvez-vous Leapyear en VBA?
Ce qui est une bonne mise en œuvre d'un IsLeapYear fonction en VBA?
Edit: j'ai couru le si-alors et le DateSerial mise en œuvre avec des itérations enveloppé dans un timer, et la DateSerial a été plus rapide en moyenne de 1 à 2 ms (5 courses de 300 itérations, avec 1 moyenne des cellules de feuille de calcul formule de travail).
1-2 ms de combien de ms? c'est à dire quelle est la relative gain d'efficacité? Juste curieux!
bonne question, c'était quelques années en arrière. Je vais essayer de se rappeler quand je serai de retour au travail la semaine prochaine pour faire des tests un peu plus, ce serait surtout bon puisque plus de réponses depuis lors.
bonne question, c'était quelques années en arrière. Je vais essayer de se rappeler quand je serai de retour au travail la semaine prochaine pour faire des tests un peu plus, ce serait surtout bon puisque plus de réponses depuis lors.
OriginalL'auteur Lance Roberts | 2008-09-24
Vous devez vous connecter pour publier un commentaire.
J'ai d'abord eu cette fonction à partir de la Puce de Pearson Excel grande site.
Pearson site
performance maintenant à la question
Qui ne prend pas en compte l'ensemble de l'année bissextile règles.
En fait, si vous étudiez ce qu'ils font, il fonctionne toujours. Ils vérifient si le mois de février compte 29 jours, ce qui en fait l'un leapyear. Fondamentalement, les pions de la leapyear règles sur Microsoft. Puce a beaucoup de bonnes solutions.
OriginalL'auteur Lance Roberts
Wikipedia pour en savoir plus...
http://en.wikipedia.org/wiki/Leap_year
Je devrais avoir utilisé un elseif. Pour le rendre plus évident. En fait, je vais le faire...
la variable isLeap n'est pas utilisé
Donc il n'est pas. J'ai corrigé.
Être divisible par 4 n'est pas une année bissextile! 2100 n'est pas une année bissextile. La division par 400 le cadre de l'essai doit venir avant la division par 4.
OriginalL'auteur seanyboy
Si l'efficacité est la contrepartie, et les attendus de l'année est aléatoire, alors il pourrait être un peu mieux à faire, le cas le plus fréquent d'abord:
OriginalL'auteur Brent.Longborough
Comme une variation sur la Puce Pearson solution, vous pouvez également essayer de
Oups - merci - oui je l'ai fait. Trop hâtif dans ma couper et coller
ok, j'ai édité.
OriginalL'auteur RonnieDickson
J'ai trouvé ce drôle de un sur CodeToad :
Bien que je suis assez sûr que l'utilisation de IsDate dans une fonction est probablement plus lent qu'un couple de si, elseifs.
OriginalL'auteur Pascal Paradis
OriginalL'auteur Bob
OriginalL'auteur Dan
Je vois beaucoup de grands concepts qui indiquent supplémentaire de compréhension
et l'utilisation des fonctions de date qui sont formidable pour apprendre les...
En termes d'efficacité du code..
considérons le code machine nécessaire pour une fonction à exécuter
plutôt que complexes les fonctions de date
utilisez seulement assez rapide les fonctions entières
De BASE a été construite sur GOTO
Je soupçonne que quelque chose comme ci-dessous est plus rapide
NoLY:
OriginalL'auteur Harry S
En retard pour répondre à la question de la performance.
TL/DR: la Mathématiques versions sont sur le 5x plus rapide
Je vois deux groupes de réponses ici
J'ai couru des tests de temps sur toutes les réponses, un découvert la Mathématiques méthodes sont sur 5x plus rapide que la Date/Heure de méthodes.
J'ai ensuite fait un peu de l'optimisation des méthodes et est venu avec (croyez-le ou pas
Integer
est légèrement plus rapide queLong
dans ce cas, je ne sais pas pourquoi.)Pour la comparaison, je me suis (très peu de différence avec la version diffusée)
La Date/Heure de versions que de construire une date comme une chaîne de caractères ont été réduits comme ils sont beaucoup plus lents à nouveau.
Le test était d'obtenir
IsLeapYear
pour les années 100 à 9999, répété 1000 foisRésultats
Le code de test a été
OriginalL'auteur chris neilsen
Voici une autre option simple.
Si Leap_Day_Check = 28 alors il n'est pas une année bissextile, si elle est de 29 elle est.
VBA sait ce que la date avant le 1er Mars, c'est dans un an et sera mis à soit 28 ou 29 février de nous.
OriginalL'auteur AndrewJD