2017-01-27 2 views
1

Ich versuche, das aktuelle FY Quartal (1. Oktober Start), basierend auf =TODAY() Datum und die nächsten x Anzahl der Quartale, wobei das Ergebnis zu berechnen:berechnen aktuelles und nachfolgendes FY Quartal basierend auf dem heutigen Datum

Q2 2017 
Q3 2017 
Q4 2017 
Q1 2018 
... 
Qx 20xx 

Mit dieser Formel:

="Q" & ROUNDDOWN(MOD((TODAY()-DATE(YEAR(TODAY()-365),10,1)+K6*(365/4))/(365/4),4)+1,0)&" "&YEAR(TODAY()+K6*(365/4)) 

Das Ergebnis ist:

K6=X Result 
0  Q2 2017 
1  Q3 2017 
2  Q4 2017 
3  Q1 2017 * should be 2018 
4  Q2 2018 
5  Q3 2018 
6  Q4 2018 
7  Q1 2018 * should be 2019 
8  Q2 2019 

Frage 1: Die Jahre ändern sich um ein Viertel, bevor sie sollten, und

Frage 2: Das ist ein schreckliches Durcheinander einer Formel - gibt es eine Möglichkeit, es einfacher zu machen?

Volle Offenlegung, ich beabsichtige, diese Formel in einem VBA FOR x = 0... Schleife zu implementieren, mit x = Viertel seit heute, und die Formel der Zelle entsprechend einzustellen.

BEARBEITEN: Wie könnte alternativ die gewünschte Ausgabe nur mit VBA generiert und in den gewünschten Zellen als Textzeichenfolge festgelegt werden? Eine Zeichenfolge, die das Geschäftsjahr darstellt, kann meine Anwendung stabiler machen.

+0

Wenn das Q1 startet (Oktober oder Januar - manchmal stimmt das Geschäftsjahr nicht mit dem Kalenderjahr überein). Wenn es das gleiche wie das Kalenderjahr ist, dann lösche einfach die "+1" in der Berechnung: '=" Q "& ROUNDDOWN (MOD ((HEUTE() - DATUM (JAHR (HEUTE() - 365), 10 , 1) + K6 * (365/4))/(365/4), 4), 0) & "" & JAHR (HEUTE (+ K6 * (365/4)) ' – Wujaszkun

Antwort

4

diese Funktion hinzufügen zu einem Modul-Blatt

Function NextQuarter(ByVal iCQ As Integer) As String 
    Dim qtrd As Date 
    Dim qtr As Integer 

    qtrd = DateAdd("m", 3 + (3 * iCQ), Now()) 

    qtr = (Month(qtrd) + 2) \ 3 

    NextQuarter = "Q" & qtr & " " & Year(qtrd) 

End Function 

Und in der Zelle Verwendung Formel "= NextQuarter (K6)"

+0

Genious! Elegant und wiederverwendbar - genau das brauche ich. Mein nicht funktionierender Versuch einer VBA-Funktionslösung ist nicht viel besser als die Formel, die den ursprünglichen Post hervorgebracht hat. Im Nachhinein, während ich das Problem erkunde, ist das Festlegen des Ergebnisses als "String" in der entsprechenden Zelle viel geeigneter für meine beabsichtigte Verwendung. Genial! –

1

Versuchen Sie, den VBA-Code (habe ich die Ergebnisse in Spalte A, von Zeile 2):

Option Explicit 

Sub FormatQandY() 

Dim x As Long 

For x = 0 To 10 '<-- loop from today 10 Q ahead 
    Cells(x + 2, 1) = "Q" & WorksheetFunction.RoundUp((Month(DateAdd("m", x * 3, Date)))/3, 0) & "-" & Year(DateAdd("m", x * 3, Date)) 
Next x 

End Sub 
Verwandte Themen