A cherché pour cela, pas de chance. Est-ce que quelqu'un peut me dire comment créer une fonction de plafond dans l'accès MS qui se comporte comme celle d'Excel?Fonction de plafond dans Access
Répondre
Vous pouvez ajouter une référence à la bibliothèque d'objets Microsoft Excel et utiliser Excel.WorksheetFunction.Ceiling
Cette réponse utilise VBA pour Access et est dérivé de http://www.tek-tips.com/faqs.cfm?fid=5031:
Public Function Ceiling(ByVal X As Double, Optional ByVal Factor As Double = 1) As Double
' X is the value you want to round
' Factor is the optional multiple to which you want to round, defaulting to 1
Ceiling = (Int(X/Factor) - (X/Factor - Int(X/Factor) > 0)) * Factor
End Function
Notez que cette réponse est mathématiquement correct pour X. négatif Voir http://en.wikipedia.org/wiki/Floor_and_ceiling_functions#Spreadsheet_software pour le fond.
Je recommande fortement briser ce bas en plusieurs étapes, mémoriser le résultat de chaque sous -calcul dans une variable avec une précision connue afin de minimiser les effets de l'imprécision en virgule flottante. –
Merci, Marg, pour la réponse. Pour référence ultérieure, voici la fonction VBA que j'ai écrit après avoir importé la bibliothèque d'objets Microsoft Excel:
Public Function Ceiling(Value As Double, Significance As Double) As Double
Ceiling = Excel.WorksheetFunction.Ceiling(Value, Significance)
End Function
Puis, dans ma requête, je tentais de calculer les heures facturables de temps de travail effectif, arrondi au prochain trimestre heure:
SELECT Ceiling(([WorkTimes]![EndTime]-[WorkTimes]![BeginTime])*24,0.25) AS BillableTime
FROM WorkTimes;
Bien que cette question posée spécifiquement pour l'accès est ici la réponse pour VB.NET
Public Function Ceiling(ByVal value As Double, ByVal factor As Double) As Double
Return Math.Ceiling(value/factor) * factor
End Function
Et la réponse en C#Je publie ici parce que j'avais besoin d'une telle fonction google m'a envoyé à cette question mais je ne pouvais pas trouver une réponse pour. Net. J'ai finalement compris pour moi-même.
Depuis Int() semble fonctionner comme Floor(), vous pouvez obtenir Ceiling comme ceci: -Int (-x)
C'est une solution tellement belle et simple. Je pense que je créerais une fonction comme Arthur, donc il est clair dans le code ce qui se passe. –
Dois-je créer une fonction VBA qui enveloppe l'appel à Excel.WorksheetFunction.Ceiling() ou puis-je l'utiliser dans une expression? –
Vous pouvez l'utiliser directement dans VBA mais devez créer un wrapper pour utiliser la fonction dans un formulaire d'accès. – marg