J'essaie de créer une instruction IF imbriquée dans Excel 2016 pour lire une valeur de date et générer le mois financier correspondant. Étant donné qu'un mois financier est unique à l'entreprise pour laquelle je travaille, il n'y a pas d'autre alternative que de créer une fonction ou une déclaration personnalisée.
Jusqu'à présent, j'ai essayé:
Start date End date Month 12/30/2017 1/26/2018 Jan-18 1/27/2018 2/23/2018 Feb-18 2/24/2018 3/30/2018 Mar-18 3/31/2018 4/27/2018 Apr-18 4/28/2018 5/25/2018 May-18 5/26/2018 6/29/2018 Jun-18 6/30/2018 7/27/2018 Jul-18 7/28/2018 8/24/2018 Aug-18 8/25/2018 9/28/2018 Sep-18 9/29/2018 10/26/2018 Oct-18 10/27/2018 11/23/2018 Nov-18 11/24/2018 12/28/2018 Dec-18 12/29/2018 1/25/2019 Jan-19 1/26/2019 2/22/2019 Feb-19 2/23/2019 3/29/2019 Mar-19 3/30/2019 4/26/2019 Apr-19 4/27/2019 5/24/2019 May-19 5/25/2019 6/28/2019 Jun-19
Cela ne fonctionne pas - j'obtiens une sortie numérique au lieu d'une date.
Il doit y avoir un moyen meilleur / efficace de le faire.
Quelqu'un peut-il recommander une autre approche? Possible via UDF dans VBA?
Edit - publication d'un tableau des plages et de la sortie requise
=IF(D2 <= DATEVALUE("28/07/2017"),DATEVALUE("Jul-2017"), IF(D2 <= DATEVALUE("26/08/2017"),DATEVALUE("Aug-2017"), IF(D2 <= DATEVALUE("29/09/2017"), DATEVALUE("Sep-2017"), IF(D2 <= DATEVALUE("27/10/2017"), DATEVALUE("Oct-2017"), 0)))) + IF(D2 <= DATEVALUE("24/11/2017"), DATEVALUE("Nov-2017"), IF(D2 <= DATEVALUE("29/12/2017"), DATEVALUE("Dec-2017"), IF(D2 <= DATEVALUE("26/01/2018"), DATEVALUE("Jan-2018"), IF(D2 <= DATEVALUE("23/02/2018"), DATEVALUE("Feb-2018"), 0)))) + IF(D2 <= DATEVALUE("20/03/2018"), DATEVALUE("Mar-2018"), IF(D2 <= DATEVALUE("27/04/2018"), DATEVALUE("Apr-2018"), IF(D2 <= DATEVALUE("25/05/2018"), DATEVALUE("May-2018"), IF(D2 <= DATEVALUE("29/06/2018"), DATEVALUE("Jun-2018"), IF(D2 <= DATEVALUE("27/07/2018"), DATEVALUE("Jul-2018"), IF(D2 <= DATEVALUE("24/08/2018"), DATEVALUE("Aug-2018"), 0)))))) + IF(D2 <= DATEVALUE("28/09/2018"), DATEVALUE("Sep-2018"), IF(D2 <= DATEVALUE("26/10/2018"), DATEVALUE("Oct-2018"), IF(D2 <= DATEVALUE("23/11/2018"), DATEVALUE("Nov-2018"), IF(D2 <= DATEVALUE("28/12/2018"), DATEVALUE("Dec-2018"), IF(D2 <= DATEVALUE("25/01/2019"), DATEVALUE("Jan-2019"), IF(D2 <= DATEVALUE("22/02/2019"), DATEVALUE("Feb-2019"), IF(D2 <= DATEVALUE("29/03/2019"), DATEVALUE("Mar-2019"), 0))))))) + IF(D2 <= DATEVALUE("26/04/2019"), DATEVALUE("Apr-2019"), IF(D2 <= DATEVALUE("24/05/2019"), DATEVALUE("May-2019"), IF(D2 <= DATEVALUE("28/06/2019"), DATEVALUE("Jun-2019"), D2)))
3 Réponses :
Le modèle dans votre tableau est:
Cela prendra une entrée, vérifiera qu'il s'agit d'une date et verra si la date est antérieure, égale ou postérieure au dernier vendredi du mois d'entrée.
CSTMonth = Mois des entrées
CSTMonth = Mois des entrées
CSTMonth = Mois après les entrées Mois
Option Explicit Public Function CSTMonth(Target As Range) If IsDate(Target) Then Dim LastDay As Date: LastDay = WorksheetFunction.EoMonth(Target, 0) Dim LastFri As Date: LastFri = LastDay - (Weekday(LastDay + 1) Mod 7) If Target <= LastFri Then CSTMonth = Format(Target, "MMM-YY") Else CSTMonth = Format(LastDay + 1, "MMM-YY") End If End If End Function
L'avantage de trouver le modèle dans votre table est qu'il n'aura jamais besoin d'être mis à jour avec force brute code>
. Adopter votre approche signifierait coder en dur chaque mois les dates de début et de fin.
Mon utilisation de la syntaxe IF n'était pas dans le contexte d'un UDF mais plutôt d'une instruction IF en ligne dans Excel.
Bonjour, j'ai été informé que le modèle des mois financiers se terminant le dernier vendredi de chaque mois n'est malheureusement pas la façon dont nos mois sont définis, ils sont définis de manière ambiguë par notre société mère. Parfois, ils suivent un cycle de 4-4-5 semaines, parfois non. En conséquence, une méthode de code en dur est nécessaire. En supposant que j'ai un tableau de chaque date de fin de mois - comment puis-je coder en dur dans VBA? Merci.
Je ne suis pas sûr des complications auxquelles vous êtes confronté mais pour obtenir les résultats souhaités selon votre tableau, vous pouvez également utiliser une formule plus simple comme
= TEXTE (EOMONTH (A2,1), "AA-MMM")
OU
= EOMONTH (A2,1)
et formatez la cellule au format aa-mmm
.
où A2
contient la date de début.
Si vous utilisez un tableau avec les dates de début pour chaque période, essayez ce qui suit:
En supposant que le tableau avec les dates de début de période se trouve à B2: D25
et les dates sont localisées à F2: F25
et J2:J25
Entrez cette formule pour obtenir la Période Financière sous forme de numéro de date en G2
puis copiez-le dans G3: G25
et K2:K25
:
=TEXT(VLOOKUP(F3,$B$2:$D$25,3,1),"mmm-yyyy")
Entrez cette formule pour obtenir la période financière sous forme de texte dans H2
puis copiez-le dans H3: H25
et L2:L25
:
=VLOOKUP(F3,$B$2:$D$25,3,1)
Les regroupements sont juste là dans le code, mais en ce qui concerne une formule définie pour chaque mois - je ne sais pas, c'est pourquoi je le codifie en dur.
Il le fait cependant, le premier argument de chaque instruction IF est la plage de dates et le deuxième argument est la sortie souhaitée.
Pourquoi les chiffres continuent-ils de baisser d'une année sur l'autre? Cela continuera-t-il à se produire? C'EST À DIRE. le janvier 2020 sera-t-il le 28/12/2020 au 24/01/2020?
Je n'ai pas de formule mathématique prédéfinie pour le regroupement des dates en mois financiers et je dois donc la coder en dur. Autant que je sache, les groupements sont définis arbitrairement à la main.
Pouvez-vous s'il vous plaît fournir un exemple de syntaxe appropriée pour ce cas d'utilisation? Si c'est une question de syntaxe, je ne me soucie pas de trouver une solution plus élégante - je suis heureux de forcer celle-ci.
veuillez confirmer ce qui suit: la
formule
a unformat de date
différent de latable
, laquelle est la bonne ?, également la formule indique que ladate
dans la cellule 'D2' est untexte
et non unedate de série
, qui doit êtreformat date
utilisé ?, est-ce également leformat de date
par défaut de votre système?