【问题标题】:How to select the last day of selected months in daily data in EXCEL如何在EXCEL中的每日数据中选择选定月份的最后一天
【发布时间】:2018-07-20 10:27:28
【问题描述】:

我有从 2005 年 1 月 1 日到 2017 年 12 月 29 日的每日数据。我希望每年选择 3 月、6 月、9 月和 12 月的最后一天,以及它们各自的数据。部分数据:

   Date    Variable
30-Mar-2005 1.2943
31-Mar-2005 1.2964
1-Apr-2005  1.2959
4-Apr-2005  1.2883
5-Apr-2005  1.281

IE:对于 2005 年,我想要 2005 年 3 月 31 日、2005 年 6 月 30 日、2005 年 9 月 30 日和 2005 年 12 月 30 日的日期。期望的输出:

Date        Variable
31-Mar-2005 1.2964
30-Jun-2005 1.9859
30-Sep-2005 1.2233
30-Dec-2005 1.2814

我目前有内置的 excel 公式(我还没有安装任何其他插件等)。

更具体地说:左侧是数据,右侧是所需的输出。

【问题讨论】:

  • 您可以发布数据示例和所需输出吗?请不要张贴图片。
  • 对于一个输入,您想要四个输出?请超级清楚输入单元格中的数据和输出单元格中的数据。
  • 现在你让它变得更加混乱了。请非常清楚输入单元格中有什么数据,输出单元格中有什么数据。举几个这样的例子。
  • 您是否总是有该月实际最后日期的数据点?如果是这样,制作每个月的最后一天的一系列内容,然后做一个简单的vlookup
  • @Enigmativity 我不明白你的意思。我有从 2005 年 1 月 1 日到 2017 年 12 月 27 日的每日数据。这就像我拥有的​​ 3300 个观察结果。但相反,我每年寻找 4 个日期。那是 4 个月的最后一天。

标签: excel select dayofmonth


【解决方案1】:

不确定这是否对你有用,但无论如何。

您似乎总是查看特定年份(例如 2005 年)的 3 月、6 月、9 月和 12 月的最后一天。

但您不是在寻找每个月的最后一个自然日。您希望每个月的最后一天出现在您的数据中(例如,这解释了为什么您使用 2005 年 12 月 30 日而不是 31,因为没有 31)。

在 Excel 中,日期是数字。未来你走得越多,相关的数字就越大。知道了这一点,您可以仅查看日期范围内的 MAX 值来获取每个月的日期。

但首先,您需要定义日期范围,使用 2 个条件:

  1. 日期的月份必须是三月、六月、九月和十二月
  2. 您需要特定年份的日期(例如 2005 年)。

要得到这个,你需要一个数组公式。我的公式得到特定月份和年份的最大天数。为了测试它,我在我的 Excel 中做了一个日期系列,从 2005 年 1 月 1 日开始,到 2017 年 12 月 31 日完成。我手动删除了 2005 年 12 月 31 日,因为该日期没有数据。

在单元格 I4 中,只需输入您要检查的年份。该公式将获取当年 3 月、6 月、9 月和 12 月的最后一天。

我的数组公式是:

=MAX(IF(MONTH(IF(YEAR($A$4:$A$4750)=$I$4;$A$4:$A$4750))=3;$A$4:$A$4750))

重要提示!因为它是一个数组公式,所以您需要输入它 像往常一样,然后按 Enter 而不是按 CTRL+SHIFT+ENTER

你需要这个公式的 4 倍。只需将 3(三月)更改为您需要的月份数(6,9 和 12)。

现在您有了日期,您只需要VlookUp 即可获得您想要的值。

=VLOOKUP(G5;$A$4:$B$4750;2;false)

如果我更改年份值,我会得到这些新值:

如果你想检查文件。我上传了一个例子到Gdrive,你可以下载。Download

无论如何,请尝试根据您的需要调整此公式。

【讨论】:

  • 我正在使用 =ARRAY_CONSTRAIN(ARRAYFORMULA(MAX(IF(MONTH(IF(YEAR($A$4:$A$3303)=$I$4,$A$4:$A$3303))=3,$A$4:$A$3303))), 1, 1) ,如您的示例所示,我的 excel 给出:#NAME? !但是当我在 google excel 上尝试它时,它就可以工作了......!
  • 我明白,但一直在检查一遍又一遍。相同的语法对 google excel 非常有效。
  • 你尝试下载我上传的文件了吗?
  • 我试试看!
【解决方案2】:

我将欧元转换列表转换为表格并使用结构化参考。但如果您愿意,可以使用正常范围引用。

在其他表格中,输入以下公式,其中 $A$45 是指数据表格中的第一季度结束日期。

F2: =IF(EOMONTH($A$45,(ROWS($1:1)-1)*3)>MAX(Table1[Date]),"",LOOKUP(2,1/(EOMONTH($A$45,(ROWS($1:1)-1)*3)>=Table1[Date]),Table1[Date]))

在相邻列中,输入公式:

G2: =IFERROR(VLOOKUP(F3,Table1,2,FALSE),"")

然后填写直到出现空白。

(在我的示例表中,最后一个日期是 2006 年 1 月 27 日,因此最后包含的“结束日期”是 2005 年 12 月 30 日,没有 2005 年 12 月 31 日的数据)

【讨论】:

    【解决方案3】:

    所以,有两种情况

    1. 当您知道该月的最后几天时。 (它更简单)。
      我有一个两周一次的数据。我采用了这种简单而创新的方法。从所有日期中,我首先使用Day() 函数提取了日期。例如,Day(A1)。 (请记住,在执行此操作时,请勿删除您的原始日期列。在单独的列中执行此操作,因为这有助于您以后匹配日期)。
      然后我使用之前构建的 Day 列按降序对数据进行排序。这将首先放置所有结束日期。然后删除了底部的开始日期。所以,现在我只剩下结束日期了,但显然月份不合适。
      因此,使用=MONTH(A1) & "/" & YEAR(A1) 创建另一个列,仅从原始日期列中提取月份和年份。使用此列对数据进行排序。而且,你很高兴!

    2. 当您没有确切的最后几天,但有如上图所示的最大日期时。
      在这种情况下,在删除初始日期时,您必须注意以后需要删除的日期。
      例如,我删除了 31 天(包括第 17 天)月份的第 17 天和 30 天(如果存在)的月份的第 16 天,因为如果有这个日期,假设 2018 年 4 月 18 日,那么这个将是本月的最后一天,因为我有每两周一次的数据。

    【讨论】:

      猜你喜欢
      • 2012-08-22
      • 2018-09-21
      • 1970-01-01
      • 1970-01-01
      • 2019-01-20
      • 1970-01-01
      • 2017-05-03
      • 2022-01-25
      • 2019-07-26
      相关资源
      最近更新 更多