0
votes

Calculer la date de chevauchement en mois

Besoin d'une aide, si vous seriez si gentil.

Dans MS Excel, j'essaie de travailler au nombre de mois qu'un élève assiste à l'université basée à l'université.

Par exemple, un étudiant inscrit et termine l'université sur les dates suivantes:

  • 23/06/2018 - 23/06/2020

    Et il y a plusieurs années académiques que l'étudiant assiste:

    • 01/08/2017 - 31/07/2018

    • 01/08/2018 - 31/07/2019

    • 01/08/2018 - 31/07/2020

      Je veux calculer combien de mois l'étudiant assiste à chaque année académique:

      • 01/08/2017 - 31/07/2018 (1 mois)

      • 01/08/2018 - 31/07/2019 (12 mois)

      • 01/08/2018 - 31/07/2020 (11 mois)

        J'ai réussi à calculer les jours à l'aide de cette fonction: xxx

        mais j'ai besoin de mois, si possible.

        Appréciez l'aide à l'avance.

         Entrez la description de l'image ici


11 commentaires

Pouvez-vous nous montrer une présentation visuelle de la façon dont vos données ressemblent à vos données et comment / où sont les résultats attendus?


Bonjour, j'ai ajouté une critique à travers des modifications. J'ai également réussi à se rapprocher de la solution: ronding (max (0, (min (term_end_date, étudiant_end_date) - max (étudiant_start_date, term_start_date))) / (365/12), 0)


Jim n'a-t-il pas étudié en 16/17 pour 1 mois et 12 mois en 17/18?


@JVDV - Mise à jour de l'image - Mistinged 2017 au lieu de 2018.


Avez-vous plus d'exemples. Je pense avoir une réponse, mais j'aimerais tester un peu plus de choses sur vos données


Capture d'écran sûre, mise à jour maintenant.


Éponge Bob n'a-t-il pas eu 10 mois entiers assistés en 17/18? Ce serait ce que ma réponse revient. Sinon, il devient assez arbitraire. Et s'il s'est inscrit au 29/09/2017? De plus, avec votre logique, il aurait eu 1 mois de classe en 2021/2022, no 0.


Oui, 10.78 mois.


Il y a un calcul financier inclus (que j'ai exclu dans la capture d'écran) qui dépend de plusieurs mois.


Je comprends des mois entiers, mais logicly serait 10 mois pour l'éponge Bob en 17/18 (puisqu'il n'a passé que 10 mois entiers dans cette année d'étude). Sinon, avec votre logique actuelle, vous devez également ajouter un mois au 21/22 pour lui au lieu de 0.


Bonjour, j'ai mis à jour la capture d'écran. Essentiellement, je sais que chaque élève reçoit un financement à l'université pendant toute la durée du cours. J'essaie de faire correspondre le total des paiements par année scolaire et des totaux de chaque année scolaire pour égaler le financement total du cours. Les mois fractionnaires leur créent un problème. : /


3 Réponses :


0
votes

= DATDIF (A1, B1, "M") donnera le nombre de mois entiers entre 2 dates (c'est-à-dire excluant les mois de début et de fin) où des dates sont entrées dans A1 et B1. Le "M" signifie que vous souhaitez que les informations rapportées depuis des mois.

Pour un plus résultat précis, essayez: = (DATDIF (A1, B1, "D") / 365) * 12. Si les dates s'étendent plusieurs années - y compris les années de saut - essayez de diviser par 365,25 VS 365.


1 commentaires

Bonjour, j'ai examiné votre réponse et j'ai essayé précédemment - ce n'est pas en mesure de faire référence à la référence des années académiques / termes.



0
votes

Veuillez essayer ce UDF.

Function MonthsOverlap(Rng As Range, _
                       AccYear As Integer) As String
    ' 016

    Const Ststart As Long = 1               ' index of array 'Study'
    Const Stend As Long = 2                 ' index of array 'Study'

    Dim Fun As Integer                      ' Months of overlap
    Dim YearStart As Date, YearEnd As Date
    Dim Study As Variant

    YearStart = DateSerial(AccYear, 8, 1)   ' modify year and day as required
    YearEnd = DateAdd("yyyy", 1, YearStart)
    Study = Rng.Value                       ' Rng columns must be adjacent

    With Application.WorksheetFunction
        If Study(1, Ststart) <= YearStart Then
            Fun = DateDiff("m", .Max(Study(1, Ststart), YearStart), .Min(Study(1, Stend), YearEnd))
        ElseIf Study(1, Ststart) <= YearEnd Then
             Fun = DateDiff("m", .Max(Study(1, Ststart), YearStart), YearEnd)
        End If
        Fun = .Max(Fun, 0)
    End With

    MonthsOverlap = Fun & " month" & IIf(Fun = 1, "", "s")
End Function


4 commentaires

Désolé, ne suffit pas: / Merci de toute façon.


Désolé, ne suffit pas: si vous avez une solution, publiez-la ici comme votre propre réponse. Si vous n'en avez pas, travaillez avec moi sur l'arrondi. En 2017, l'étudiant a étudié pendant 1 mois et 7 jours. Vous voulez cela arrondi à 1 mois. Ma formule dit qu'il a étudié pendant deux mois. Ce résultat peut être arrondi mais vous auriez besoin de définir les règles par lesquelles l'arrondi est effectué. Ces informations sont manquantes dans votre question.


Salut Variatus - J'ai publié une solution ci-dessous :)


@MR Agent Smith Merci. Votre solution a l'air très agréable mais elle ne s'attaque pas à la tâche d'arrondir. Par conséquent, il est probable que tous les résultats ne produisent pas seront à votre goût. Les tests devraient inclure des dates laissant moins d'une demi-mois à tours, plus d'une demi-mois à tours, ne nécessitant aucun arrondi (assiduité et année académique alignée précisément) et exactement des demi-mois, ce qui signifie 14, 15 et 16 jours, selon le mois, en fonction du mois, aux deux extrémités. C'est pourquoi je ne voulais pas approfondir le sujet sans vous former de tête. Mais je vous recommande de tester soigneusement avant de vous réjouir. Bonne chance!



0
votes

J'ai trouvé une solution qui fonctionne un régal:

 Entrez la description de l'image ici

Merci pour toute votre aide tout le monde.


0 commentaires