【问题标题】:vba quarterly returnsvba季度回报
【发布时间】:2019-03-13 15:28:01
【问题描述】:

谁能告诉我一个 VBA 函数或按钮,它只会按季度计算季度回报(即第一季度回报基于 1 月至 3 月的回报),而不会出现重叠观察。

我现在使用的函数只是 AVERAGE,例如从 1 月到 3 月返回,但实际计算单元格是在 4 月。

我要问的一个例子是图片链接。我希望函数在我选择的时间段内运行。

非常感谢!

编辑:我正在寻求代码方面的帮助,因为我是 vba 新手,所以我还不能自己做。

edit2:我从类中改编的代码是这样的:

 Option Explicit

 Public Sub QuarterReturns()
    Dim rng As Range
    Set rng = Range("B2")
    Dim i As Long, n As Long

    n = rng.End(x2Down).Column - rng.Row + 1
    Set rng = rng.Resize(n, 1)

    Dim returns As Variant
    returns = rng.Value2

    Dim quarter As Variant

    ReDim quarter(1 To n - 1, 1 To 1)
    For i = 1 To n - 1
        ror(i, 1) = prices(i + 1, 1) / prices(i, 1) - 2#
    Next i
    rng.Offset(1, 2).Resize(n - 1, 2).Value2 = quarter
End Sub

【问题讨论】:

  • 您在找人为您编写 VBA 代码吗?或者您是在问是否有一个现有的功能可以满足您的需求?
  • 那是什么日期格式? YYDDMM?
  • @Kevin 如果我没有正确解释,我很抱歉。我正在寻求有关代码的帮助,因为我是 vba 新手,所以我还不能自己做。
  • @BruceWayne 它是 YYMM
  • 不要总是认为 VBA 就是答案。您可以使用数据透视表执行此操作,因为您可以按季度选择日期(您只需要将日期转换为实际日期

标签: excel vba finance


【解决方案1】:

好的,所以第一点:StackOverflow 不是代码编写服务。问我们,“嘿,有人可以给我写点 X 的东西吗?”可能会让你被嘲笑/责骂/等等。

也就是说,我将帮助您完成两个构建块,它们可能会帮助您自己到达终点线。

先决条件:VBA 在 Excel 中被过度使用。 Excel 在公式中具有惊人的强大功能。在这种情况下,您实际上可以使用零代码获得所需的内容,并且只需一个额外的(计算的)列。这可能是一个更好的解决方案的原因是因为带有 VBA 宏的 Excel 文档往往被禁用(出于非常充分的理由),并且很难看到幕后正在做什么。通过计算列,有兴趣挖掘数字背后的人可以轻松查看正在发生的事情,而无需深入研究代码。

构建基块 #1:年和月函数。

如果您有一个日期列(您现在没有 - 您需要将该列更改为实际代表日期对象的内容),您实际上可以通过组装以下内容来获得 Quarter:

=YEAR(A1)&"-Q"&((MONTH(A1)+2)/3)

基本上,YEAR() 函数获取年份,MONTH() 函数获取月份编号。从那里,我只使用一些基本的数学和字符串组合来获得如下结果:

2018 年第二季度

构建块 #2 - CountIf/SumIf/AverageIf

Excel 有一些非常棒的 xxxIf() 函数,可以获取某个范围的平均值/总和/计数/等,但仅限于满足特定条件的值。

因此,在您的情况下,如果您对所有 2018-Q2 记录求和,则只需使用 SUMIF() 函数将所有值相加,其中条目等于“2018-Q2”。

希望能帮助您完成任务。如果没有,我实际上鼓励您将问题分解为较小的子任务,用谷歌搜索这些子任务 - 如果您找不到特定任务的任何内容,请询问有关只是该部分的问题。问:“嘿,我如何在 VBA 中对三个单元格求和?”比“嘿,为我写这个函数”要好得多:-)

【讨论】:

  • 非常感谢您的回答,这确实很有帮助。唯一的问题是我在 vba 中确实需要它,那么您有什么方法可以帮助我编写代码吗?
  • 那么,最后一段就是你想要的。将任务分解为尽可能小的组件/任务/元素。如果您知道如何做其中之一,那就太好了!如果没有,请谷歌它。如果您以某种方式发现问题的一部分没有得到答案(老实说,这很值得怀疑),那么请继续在 Stackoverflow 上询问该特定问题。
  • 顺便说一句,这通常是您进行编程所需的方式。不要认为它是“我需要编写一个执行 XYZ 的程序”。相反,想一想,“要完成 XYZ,我需要先做 A,然后是 B 或 C,最后是 D 和 E。那么,我该怎么做 A?”您可以将任务分解得越小,您就会发现自己做得越好。
猜你喜欢
  • 2021-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-13
  • 1970-01-01
相关资源
最近更新 更多